---
# System prepended metadata

title: Labooo110 - 小鹿

---

# 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 => 發現可以找到近似組合，但偶爾會突然差很多
選擇其他ＱＴＳ改善跳脫機制？ 



#### 實驗方法修改
1. Test - 接著時間交易次數達１次停止

### 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. 第一次實驗１萬代都相同，但５０次實驗後的最佳解卻不同



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

[用Ｃ＋＋ 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輸出那個是５０次實驗後 其中的最佳解

### 11/25

- [x] 買5+20 賣5+60 ~2021/06/30 對答案
- [x] MA+QTS
- [x] MA+QTS print excel
- [ ] MA+GNQTS

### 11/23

- [x] 移除等於
- 我們認為當長短線ＭＡ數值相等，不應該當作交叉，因此決定移除等於
- 移除等於後產生不同的交易時機點，確實獲利更高
![](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)