# 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)