# 策略組
* https://meet.google.com/umu-wigo-euf
* https://meet92.webex.com/meet/pr1822251240
* 線上程式碼: https://github.com/kurtliao/TW_STOCKS_INDUSTRY/tree/feature/ewma
## 待辦
* 只要存統計量即可,減掉平均除以標準差
* 再去看一下策略的參數
## 問題
1. 漲跌幅應該要有 "負值"
## 預測目標:Y 怎麼定義
* 股價成長 ? 倍
* 未來多久?A: 5 天
* 成長幾倍?A: > 10 %
* 幾倍是跟誰比?A: 以 stand_time 當下的股價,就是比較基準
* Y 的定義:標的於未來 5 天的價格 (收盤價) 會比現在 (right now?) 還要多 10 %
* 好像有些日期的開盤價會是 0 ,所以我應該會用非 0 的天數做平均
* 模型預測:標的未來 5 天會 Y = 1 的機率
## input / output
```python
# df: 爬下來的資料表
output = get_strategy(df)
output = {
'sell': {
'ranking': ['2330', '2884', '1654'],
'suggestion': {
'2330': 1, # 建議交易單位,目前都是 1
...
},
'ranking_return_rate': {
'2330': 1.3,
'2884': 1.2,
...
}
}
'buy':{
'ranking': ['1234', '5678', '4321'],
'suggestion': {
'1234': 1, # 建議交易單位,目前都是 1
...
},
'ranking_return_rate': {
'1234': 0.8,
'5678': 0.82,
...
}
},
'ranking_description': '漲幅排序'
}
```
## 預測目標
* 未來 n 個交易日的平均漲幅
* n = 5
## 參考
* https://kernc.github.io/backtesting.py
## 待討論議題
* 檢查欄位有無不合理的值,以至於無法轉為 float。再進一步看什麼樣的母體條件會造成不合理的值
* 子權:'漲跌價差', '本益比', '外陸資買賣超股數(不含外資自營商)'
* 昱睿:'外資自營商買賣超股數', '投信買賣超股數', '自營商買賣超股數(自行買賣)', '自營商買賣超股數(避險)'
## 0. 母體
* 以 twse 裡出現的 "證券代號" 為母體
## 1. 如何使用?
### 1.1. input
|Argument 名稱|中文名稱|python 格式||解釋|舉例|
|-|-|-|-|-|-|
|ewma_columns| EWMA 欄位 |`List[str]`|要計算 ewma 變數的欄位名稱,以 list of string 表示。會去檢查內容物是否符合可計算的列表內|`['成交股數', '成交金額']`|
|one_periods_days|單位時間的天數|`int`|對 EWMA 管制圖的一個時間區間。前處理時,會將同一時間區間的數值加總。<br>例如,如果是 5 天,則程式碼會以 5 天為一單位收集資料,並計算這 5 天的 `'交易量'` (舉例) 加總,加總後的數字作為後續分析的數值|5|
|observation_periods|觀測時間單位數|`int`|觀測|20|
|lambda|參考歷史比率|`float`|每期計算數值時,參考歷史數值的比重。<br>算式為:$V_t = \lambda x_{t-1} + (1 - \lambda)x_t$|0.2|
|stand_time|觀測時間|`str`|主程式希望站在什麼時間點看標的物的特徵|`'20220215'`|
### 1.2. output
* 欄位
* 證券代碼
* stand_time
* ewma_feature1
* ewma_feature2
* ...
* 資料格式
* dataframe
* list of dictionary
### 1.3. 使用
1. 將 class 實體化 ewma_generator
2. df = ewma_generator.run()
## columns
要計算的欄位
```python=
ewma_col = [
'成交股數', '成交金額', '開盤價', '最高價', '最低價', '收盤價',
'漲跌價差', '本益比','外陸資買賣超股數(不含外資自營商)', '外資自營商買賣超股數',
'投信買賣超股數','自營商買賣超股數(自行買賣)', '自營商買賣超股數(避險)'
]
```
* 從母體篩選
1. 成交股數 >= threshold: 有出現 '--' 的,最多是 1441
## 關鍵現象
* 價格:從 l2 衝到 u2,換句話說,從低於月線 2 個標準差直接衝到高於月線 2 個標準差。可以再更廣,l3 -> u1, ... 各種
* 穿越平均數,也就是穿越月線
## EWMA 變數
* [X] 穿越平均數:從低於平均到高於平均,不限差距與跳動的數值
* [ ] **[昱睿]** 數值報衝:一次成長多個標準差。例如:平均數是 100, 標準差是 10,標的行為從 50 -> 90,成長了 4 個標準差。雖然沒有穿過平均,但也是大幅成長的行為。
* **[子權]** 數值暴衝且穿越平均數:可以定義 l3 -> u1, l2 -> u2, l1 -> u3, ...,由下往上穿越不同標準差區間,但一定要越過平均數
* **[昱睿]** "數值報衝且穿越平均數" 的發生時間也要記錄。例如,現在是 time = 6,發生 "數值報衝且穿越平均數" 在 time = 1 與 time = 5 是有不同的意義。
* **[子權]** 發生 "數值報衝且穿越平均數" 之後,是否能維持 (平均, u1, u2, u3) 之上,還是跌回 (平均, l1, l2, l3) 之下?
### 變數-昱睿
* 相較於前期,上升 1, 2, 3, 4, 5, 6, 6 up 個標準差
* 相較於前期,下降 1, 2, 3, 4, 5, 6, 6 up 個標準差
* 相較於前期,上升 1, 2, 3, 4, 5, 6, 6 up 個標準差且目前數值大於歷史平均
* 相較於前期,下降 1, 2, 3, 4, 5, 6, 6 up 個標準差且目前數值小於歷史平均
* 觀察期間內,有幾次 u1, l1, u2, l2, ... (加總)
* 觀察期間內,最長連續 u1, l1, u2, l2, ... 的期數
#### 問題
1. 如果標準差 = 0 或者是空值該怎麼辦?
### 變數-子權
##### 穿越月線變數
* 股價由l1向上穿越至u1 & 20ma slope >= 0
* 股價由l1向上穿越至u2 & 20ma slope >= 0
* 股價由l1向上穿越至u2以上 & 20ma slope >= 0
* 股價由l2向上穿越至u1 & 20ma slope >= 0
* 股價由l2向上穿越至u2 & 20ma slope >= 0
* 股價由l2向上穿越至u2以上 & 20ma slope >= 0
* 股價由l2以下向上穿越至u1 & 20ma slope >= 0
* 股價由l2以下向上穿越至u2 & 20ma slope >= 0
* 股價由l2以下向上穿越至u2以上 & 20ma slope >= 0
Note: ma斜率可以使用tan反函數計算斜率,atan()
##### 穿越布林通到上緣
* 股價由u1向上穿越至u2以上
* 股價由u2向上穿越至u2以上
* 股價由l1向上穿越至u2以上
* 股價由l2向上穿越至u2以上
##### 股價穿越後是否維持在月線以上或以下
* 股價穿越月線後是否