iT邦幫忙

2024 iThome 鐵人賽

DAY 21
0
AI/ ML & Data

自動交易程式探索系列 第 21

Day 21 - MacroHFT Low Level Agent訓練Debug中

  • 分享至 

  • xImage
  •  

訓練完後發現有訓練成功但程式碼有問題,在save時竟然失敗:

Traceback (most recent call last):
  File "E:\proj\MacroHFT\MacroHFT\RL\agent\low_level.py", line 442, in <module>
    agent.train()
  File "E:\proj\MacroHFT\MacroHFT\RL\agent\low_level.py", line 368, in train
    best_model_path = os.path.join("./result/low_level", 
  File "C:\Users\j3020\anaconda3\envs\macrohft\lib\ntpath.py", line 143, in join
    genericpath._check_arg_types('join', path, *paths)
  File "C:\Users\j3020\anaconda3\envs\macrohft\lib\genericpath.py", line 152, in _check_arg_types
    raise TypeError(f'{funcname}() argument must be str, bytes, or '
TypeError: join() argument must be str, bytes, or os.PathLike object, not 'int'

檢查了以後發現原來是low_level.py: 369行的地方有問題,作者存模型的命名有些問題,這邊把原本的self.label改成str(int(args.alpha));並且由於後面的high_level訓練需要使用到low_level的結果,因此等等high_level.py也必須要修改程式碼。

...
best_model_path = os.path.join("./result/low_level", 
                                        '{}'.format(self.dataset), '{}'.format(self.clf), str(int(args.alpha)), 'best_model.pkl')
...

然後依據low-level policy optimization setup #6的作者回復來看,原本low_level.sh的內容有錯誤,我的low_level.bat應該要修改。
依據討論串的內容,被tune過的最佳alpha參數應該是{0,1,4},按照slope的參數順序是slope_1: alpha=1slope_2: alpha=4slope_3: alpha=0;那這樣vol應該也要遵循同樣的邏輯才對:
修改後的low_level.bat如下

@echo off
mkdir .\logs\low_level\ETHUSDT 2>nul

python -u ./MacroHFT/RL/agent/low_level.py --alpha 1 --clf slope --dataset ETHUSDT --device cuda:0 --label label_1 > .\logs\low_level\ETHUSDT\slope_1.log 2>&1

python -u ./MacroHFT/RL/agent/low_level.py --alpha 4 --clf slope --dataset ETHUSDT --device cuda:0 --label label_2 > .\logs\low_level\ETHUSDT\slope_2.log 2>&1

python -u ./MacroHFT/RL/agent/low_level.py --alpha 0 --clf slope --dataset ETHUSDT --device cuda:0 --label label_3 > .\logs\low_level\ETHUSDT\slope_3.log 2>&1

python -u ./MacroHFT/RL/agent/low_level.py --alpha 1 --clf vol --dataset ETHUSDT --device cuda:0 --label label_1 > .\logs\low_level\ETHUSDT\vol_1.log 2>&1

python -u ./MacroHFT/RL/agent/low_level.py --alpha 4 --clf vol --dataset ETHUSDT --device cuda:0 --label label_2 > .\logs\low_level\ETHUSDT\vol_2.log 2>&1

python -u ./MacroHFT/RL/agent/low_level.py --alpha 0 --clf vol --dataset ETHUSDT --device cuda:0 --label label_3 > .\logs\low_level\ETHUSDT\vol_3.log 2>&1

之後high_level.py的內容需要讀取訓練好的low_level Agent參數;由於讀取的路徑是寫死的,並且是錯誤的,因此也必須要修改:
high_level.py: 129~138修改後如下

model_list_slope = [
    "./result/low_level/ETHUSDT/slope/1/best_model.pkl", 
    "./result/low_level/ETHUSDT/slope/4/best_model.pkl",
    "./result/low_level/ETHUSDT/slope/0/best_model.pkl"
]
model_list_vol = [
    "./result/low_level/ETHUSDT/vol/1/best_model.pkl",
    "./result/low_level/ETHUSDT/vol/4/best_model.pkl",
    "./result/low_level/ETHUSDT/vol/0/best_model.pkl"
]

目前依據以上的修改結果重新開始了訓練,目前還在訓練中,可能還有一些問題需要偵錯。

測試到這邊再加上讀完該Github Repo的Issue我感覺涼涼,作者的程式碼問題頗多,不過既然都花時間嘗試了,我還是打算有始有終,所以我會先把這些小bug都處理掉,完整的跑完訓練並驗證一下結果是否跟論文內容相符合,畢竟這篇Paper很新又與很接近我的需求;只能祈禱算法的程式沒有問題,只有這些路徑跟可調參數有些小bug。


上一篇
Day 20 - 嘗試MacroHFT
下一篇
Day 22 - MacroHFT & EarnHFT
系列文
自動交易程式探索30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言