# 策略組 * 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以上 ##### 股價穿越後是否維持在月線以上或以下 * 股價穿越月線後是否