# Labooo110 - 小鹿 # 2022/12 [12/08 進度更新](https://drive.google.com/file/d/1TuV9h3PpZjlivuanm28vlkBtV0pYEIYL/view?usp=share_link) # 2022/11 [11/17 進度更新](https://drive.google.com/file/d/1F3lwaZQxPIno8-IxpUqe59qLt03oGGX5/view?usp=share_link) 1. 為什麼會減少無交易的之後會變差 2. 賣點沒有訓練到(訓練期也加入確認期) 3. Sma sets 不同的問題->同時發生買的訊號,先固定賣點 窮舉前面 4. 思考看看要怎麼訓練出來的SMA set 用在測試期 5. 多使用不同的策略組合 * 要檢查實驗調整1的延後天數是不是真的200多天 * 實驗調整1、2的賣出時間點再調整 * 確認是否有訓練到好的賣點 (確認期能不能用在訓練期裡面) * 檢查看看為何實驗調整1、2的效果反而比原本實驗差(應該至少一樣) * 可能是截斷導致(原本可能就沒訓練到賣點,所以延後可能不會比較好,可以再確認一下) * 同時出現訊號的可能有很多組,不過QTS只會選了一組,可以想這幾組解怎麼用到測試期會比較好 * 窮舉時賣可以先鎖某一點,前面的256、256、256試試看,解空間比較不會那麼大 # 2022/10 ## Sliding window https://ieeexplore.ieee.org/document/8263105 **Stock Price Prediction** https://ieeexplore.ieee.org/document/9373168 **foreign exchange trading** EMA RSI sliding window https://ieeexplore.ieee.org/document/6889874 ## Trailing Stop **Stochastic approximation algorithms, Monte Carlo methods.** [https://ieeexplore.ieee.org/document/4738639](https://ieeexplore.ieee.org/document/4738639) ## Transaction timing **Bollinger Bands and Parabolic SAR** [https://ieeexplore.ieee.org/document/8257672](https://ieeexplore.ieee.org/document/8257672) **Stock Market Trend Prediction and Investment Strategy by Deep Neural Networks** [https://ieeexplore.ieee.org/document/9319488/](https://ieeexplore.ieee.org/document/9319488/) **Prediction of golden cross and dead cross** [https://ieeexplore.ieee.org/document/4694284](https://ieeexplore.ieee.org/document/4694284) #### 問題一 #### 擇時測試期失真問題 - 在選股訓練 股票具有揮發性,所以利用滑動視窗動態調整訓練期及測試期的時間點 訓練期上漲,則預測接下來的測試期也上漲 => 預測這是一隻正在上漲的股票,以推薦要買或不買 - 在擇時訓練 當擇時訓練限制時間區間時,訓練期經過買且賣得到的最佳組合,即使這組合確實是最好的,也未必在測試其區間就剛好也遇到買賣點 因此買賣時機若限制時間長度,結果將失真 在培昕實驗中的確看到最佳結果是10D 2 10D **其意義為** 十天內存在交易的策略 將在接下來十天內也發生交易並獲利最高 並非單純獲利最高 #### 問題二 C&C# random => 發現可以找到近似組合,但偶爾會突然差很多 選擇其他QTS改善跳脫機制? #### 實驗方法修改 1. Test - 接著時間交易次數達1次停止 ### TODO: - [x] 如何選/算出推薦組合 - [x] 重跑Crandom - [x] C+Crandom 資料整理 ----- - [x] 調整code to new research method - [x] (C#)rerun all period for all SMA sets - [x] 整理數據 - [x] 整理ppt(後面想+停損比例賣出) - [x] 把論文reference加進ppt - [x] train Profit method - [x] 看其他QTS? [培昕學長交接文件](https://drive.google.com/drive/folders/10pongigIIM3XzKauh0qwgGqgUfxi-f8W) #### TODO: - [x] 找5-6篇相關論文 看如何往下走 - [x] C# Crandom差異 - [ ] 加入RSI - [x] 修改model儲存方式 - [x] 計算RSI改成公式 - [x] output service update for strategy - [ ] 測試傳統RSI - [ ] GNQTS(8,7,7) - [ ] RSI實驗次數變3 - [x] 加入停損停利 ## 2022/9 #### TODO: - [x] minikube - [x] PPT - [x] Test - [x] 重跑所有傳統訓練期,確認重構後程式沒有問題 - [x] 再對一次傳統SMA - [x] 修正buy&hold算法 ## 2022/8 已對齊 M2M 訓練期年化報酬率 Refactor all code to version 2: https://github.com/shu-yin-li/ResearchV2 > Summary - 主要是讓架構能更容易加入越來越多策略,以及讓每個滑動視窗可以同步下去跑 > > 新架構 - ![](https://i.imgur.com/rBP3ndW.png) > - 加入RSI時發現架構越來越難維護 > - 最小能同步跑的單位為每個滑動視窗,因為每次重取random的時間點是在換下一個滑動視窗時 > - 利用web api送出不同的requests,之後我就可以在不同電腦上跑實驗,加速取得結果 > - 將結果存在DB中,方便之後整理或排序資料 > > ![](https://i.imgur.com/aPbg4gm.png) #### TODO: - [ ] 重跑所有傳統訓練期,確認重構後程式沒有問題 - [ ] 加入RSI - [ ] 加入停損停利 ## 2022/7 to_timestamp("Date") as Date_string, ## 2022/6 #### 效能調整 測試M2M每次實驗可在0.6~1秒內完成且結果數值正確,加上讀取Crandom的時間,預計可在兩小時內完成 - [x] 跑完所有傳統滑動視窗 - [x] 加入年化報酬率 - [ ] 加入RSI #### 指數 | 代號 | 名字 | 加權 | 個股數量 | 比重 | 其他特性 | | ----- | -------------- | ---- | --- | --------- | -------- | | ^DJI | 道瓊30 | 股價 | 30 | 科技(21%) | 代表美國藍籌股,不能代表美股整體市場 | | ^INX | 標普500 | 市值 | 500 | 科技(27%) | 用以衡量美國大型股的指標 | | ^IXIC | 納茲達克 | 市值 | 3000 | 科技(51%) | 以科技股為主 美股僅佔32% 不包含金融股 | | ^NYA | 紐約證券交易所 | 市值 | 2800 | | | ## 2022/4 ### 4/14 調整效能中,目前Y2Q跑了一整天,目標調整到全部的視窗一天跑完。 ### 4/10 [Y2Q](https://drive.google.com/drive/folders/1ooWhlchdeAedAd8DCHF0FAHhTtuXJTy3) 已對齊 ### 4/2 [M2M](https://drive.google.com/drive/folders/1f5wtN9urOMy894-G-sBL97MJbCPYUeFz) 測試期已對齊。 [M2M](https://drive.google.com/drive/folders/1Z40YvFV74UXte7ynrY3Ze89ShCmdxLBb) 訓練期已對齊 * 修正為訓練期第一天取前一日MA時的錯誤 * ~~**2013/7**~~ * **~~2017/5~~** * ~~**2018/1**~~ * ~~**2018/4**~~ * ~~**2018/10**~~ * ~~**2019/4**~~ * 將初始資金塞入gbest fitness初始值,使當獲利為負,不更新gbest * ~~**2012/9**~~ * **~~2012/10~~** * 2013/7 * ~~**2014/9**~~ * ~~**2014/12**~~ * ~~**2015/12**~~ * 2017/5 * ~~**2017/11**~~ * 2018/1 * 2018/4 * 2018/10 * 2019/4 * ~~**2019/5**~~ * ~~**2020/1**~~ * ~~**2020/2**~~ * ~~**2020/10**~~ * 更新beta值時小數點位數修正: * **~~2012/3~~** * 2012/9 * 2012/10 * 2013/7 * **~~2013/12~~** * 2014/9 * 2014/12 * **~~2015/10~~** * 2015/12 * 2017/5 * 2017/11 * 2018/1 * 2018/4 * 2018/10 * **~~2019/1~~** * 2019/4 * 2019/5 * **~~2019/6~~** * **~~2019/7~~** * **~~2019/8~~** * 2020/1 * 2020/2 * 2020/10 * **~~2020/11~~** ### 3/24 檢查beta值 2012/9 中 fitness在第6,34,40,43次實驗都是相同的 6與34的MA數值只差1 或許在計算beta值某種情境有些微差異 2018/1 跑培昕找出來的最佳解ma可算出相同數值,但我的GNQTS跑了一萬代都沒有使用這組ma,顯示beta更新方式在某種情境有些微差異 ### 3/21 108個 [M2M](https://drive.google.com/drive/folders/1pF1kidy06o9P7W31sjzadJu6QQyahx8r) 訓練結果, 已做了些許修正,以下還有錯: best count only * 2012/9 * 2013/12 * 2014/9 * 2017/11 * 2018/10 other * 2012/3 * 2012/10 * 2013/7 * 2014/12 * 2015/10 * 2015/12 * 2019/4-8 相同結果我在不同的代數找到 * 2017/5 * 2019/1 * 2020/1 * 2020/2 * 2020/10 * 2020/11 * 2018/1 => 從這開始偵錯 * 2018/4 ### 3/10 108個 [M2M](https://drive.google.com/drive/folders/1pF1kidy06o9P7W31sjzadJu6QQyahx8r) 訓練結果, 已做了些許修正,以下還有錯: * 2012/1 * 2012/9 * 2012/10 * 2013/12 * 2014/3 * 2014/9 * 2014/11 比較後發現 1. 計算best count時會有誤差,還在找問題 2. 計算MA有問題 ### 3/3 對齊資料 M2M帶入股價跑實驗: [AAPL_M2M_2011_Dec](https://drive.google.com/file/d/184PJU4R0dSPlPntoZLUpDl_PMdDDX7ST/view?usp=sharing) => 以下欄位不同: * best count * 報酬率一樣就算(show in excel) * bit number完全一樣才算一樣 * experient number * generation number * MA 可否每次更換訓練期都重新取random值,這樣我才有辦法對答案。 ## 2022/2 ### 2/24 完成10種傳統區間計算,剩下Q* H* Y* ![](https://i.imgur.com/MgO2RCA.png) ### 2/21 ![](https://i.imgur.com/A2l3IhR.png) ### 2/17 Finish: 2020-April to 2020 July - HM,MM,QM,YM 2012-Jan to 2012 Dec - MM ![Finish](https://i.imgur.com/452vLNq.png) ## 2022/1 ### 1/26 複製滑動視窗取資料: M2M ![M2M](https://i.imgur.com/HsbhbNJ.png) ### 1/22 [學期進度報告](https://docs.google.com/presentation/d/1U7gBRiZCAz0JHRDtwxZuGaiJ_m93OR3ur5_KlqXJ7GM/edit?usp=sharing) ### 1/18 GNQTS: 跟培昕要新資料後即對齊 [G best transaction - C random - 2020-1-2 ~ 2021-6-30.csv](https://drive.google.com/file/d/1nMw3Yj7_Rf_fu11IAM3zFnUiG5iL6yhR/view?usp=sharing) [debug G best transaction exp: 0 - C random.csv](https://drive.google.com/file/d/1nZs98pUrJNWECMk3smXkmiRwbCnvuNYT/view?usp=sharing) [debug G best transaction exp: 9 - C random.csv](https://drive.google.com/file/d/1gMaWrEJI_cyzhLuTFkvpDheKo2G9Mvnb/view?usp=sharing) 整理之前的研究資料 ### 1/2 QTS 已對齊:https://github.com/AliceLakereflect/StockAnalysisNCHU/tree/v1.0.0 #### 對齊GNQTS: 1. 須先決定是否反向,再轉動beta角度 2. 第一次實驗1萬代都相同,但50次實驗後的最佳解卻不同 ## 2021/12 ### 12/30 #### 對齊修正QTS: 1. 交易時機改回來,發現造成交易時機差異的原因並不在此: 黃金交叉 - 前一天ma1 <= 前一天ma2 且 當天ma1 ==>== 當天ma2 死亡交叉 - 前一天ma1 >= 前一天ma2 且 當天ma1 ==<== 當天ma2 2. 造成交易時機差異的原因是ma小數點問題 培昕:![培昕](https://i.imgur.com/Qjqh8S5.jpg) Mine:![Mine](https://i.imgur.com/duNRtUw.png) 3. 大家統一新增輸出規範(更正) 任何輸出的==檔案及數值,包含在計算過程中的,凡是有小數點的==,都要setpresicion(10),以確保程式輸出的位數不會因為IDE或compiler不同造成誤差,所以以前輸出過的SMA也都要重新輸出 4. 列印最佳解結果時的matrix計算修正 代表位元反向 => matrix[0] 代表2^7^,matrix[7]代表2^0^ ### 12/28 #### 大家統一新增輸出規範 任何輸出的檔案(有小數點的)都要setpresicion(10),以確保程式輸出的位數不會因為IDE或compiler不同造成誤差,所以以前輸出過的SMA也都要重新輸出 #### 對齊修正QTS: 重新定義了實驗環境並要了大量的亂數表重新跑過一次之後, 發現錯誤並做了以下調整: 1. MA小數點取至4位,並在資料不同處,一一比對MA數值是否相同,若MA數直接與培昕的相同,則檢查交易是否合理 2. Beta值取至小數點3位 3. 交易時機補上等於: 黃金交叉 - 前一天ma1 >= 前一天ma2 且 當天ma1 >===== 當天ma2 死亡交叉 - 前一天ma1 <= 前一天ma2 且 當天ma1 <===== 當天ma2 5. 移除所有其他取小數點的動作 6. 請培昕重跑一次最新資料(debug file),因為發現google drive上的檔案非最新: > **[buy ma1, buy ma2, sell ma1, sell ma2] = [142, 149, 46, 136]** > > **google drive:** 1146.83% > **Mine:** 1123.6% > ![](https://i.imgur.com/npFJgJz.png) > **培昕:** 1123.6% > ![](https://i.imgur.com/w6riiYI.jpg) 目前結果: [debug excel](https://drive.google.com/file/d/1JmCXCFmK-B6icnaP_hvfYsFKfp0IMZOb/view?usp=sharing) [G best in 50 experiment]() ### 12/21 GNQTS: follow 可濃的ptt 健恆: * (D)PF: daily PF 每單位賠錢分之賺錢 * MDD: 評估風險的指標,Max drawdown 指帳戶淨值從最高點的滑落程度,意義在於,從任一時間點進場可能遇到的最糟狀況。 * QD Trend二次趨勢線 * emotion index: 最後資金水位與最初資金水位的連線。 對其修正QTS: * 我的四捨五入結果與培昕未四捨五入結果相同??? => 重新定義了實驗環境並要了大量的亂數表重新跑過一次。 * 培昕最佳解為 exp:42 fitness值相同,但我的exp:40有更高的fitness值 ### 12/13 對齊修正QTS: * 訓練期為2020/1/2~2021/6/30,要讓每一天都有交易機會,因此在判斷2021/1/2是否有黃金交叉時,應使用2019/12/31 * 8 digit to ma number 1. 0~255 全部+1 => 1~256 2. matrix 代表位元反向 => matrix[0] 代表2^7^,matrix[7]代表2^0^ * 不管訓練期/測試期為何,將所有ma計算出來,使資料齊全 ### 12/12 [用C++ random跑出來的第一次最佳解](https://drive.google.com/file/d/1xMlOU8iV6DRjW-bTcvUcPcy3WZizNHdu/view?usp=sharing) [debug excel]( https://drive.google.com/file/d/1I-97VcbVQbc7uzaIPxgPt6MMmkSNorJR/view?usp=sharing) ### 12/9 - [x] 對答案=>跟學長要第一次實驗的gbest - [x] 改善效能:將MA寫檔 使用時讀取並轉成dictionary ### 12/8 - [x] MA+QTS 使用C++ random - [x] 當local best fitness == 0時,不更新Beta ### 12/6 Finish MA+QTS: https://drive.google.com/file/d/1NrKZ9mk1l6xb79PvZNVzJcaYz_jU0vF4/view?usp=sharing Q: 50次實驗之間的差異是什麼?Random嗎?=> Yes ### 12/2 GNQTS => global notgate QTS notgate trigger time: when random < 0.5 && beta < 0.5 && gbest=1 && gworst=0 ## 2021/11 ### 11/29 問問題 - [x] 當代最差最佳是Gbest & GWorst? No, localBest Worst - [x] 對資料的訓練區間要哪一年、幾號到幾號 2020/1/2~2021/6/30 - [x] excel輸出那個是50次實驗後 其中的最佳解 ### 11/25 - [x] 買5+20 賣5+60 ~2021/06/30 對答案 - [x] MA+QTS - [x] MA+QTS print excel - [ ] MA+GNQTS ### 11/23 - [x] 移除等於 - 我們認為當長短線MA數值相等,不應該當作交叉,因此決定移除等於 - 移除等於後產生不同的交易時機點,確實獲利更高 ![](https://i.imgur.com/ZIVtqxd.png) - [x] 印出交易時,新增欄位長短線 當天及前一天 交易時的值 https://drive.google.com/drive/folders/1uL6JLEjEUqif2L0ei8UXNOTzJivX6a1W - [x] 確認兩MA確實交叉並重跑2603 對答案 - [x] 讀陳嶢給的QTS及GNQTS文件 - RSI(暫緩,先對MA) ### 11/02 研究方向:股票,擇時 ### 10/28 #### Todo - [x] 0.1 in float and double in C# [Meeting 10/28](https://hackmd.io/21Oebc_jRay8QjyHmnI2dQ) ## PSO [Discussion with teams](https://hackmd.io/7qMH4YPoSreXF0EfqjghmA)