目前低層級代理已經訓練完了,但是高層級代理還在訓練當中,由於先前提到MacroHFT的程式碼可能存在一些問題,雖然目前路徑相關的問題應該都已經處理好了,不過還是要等整個訓練完成後,看看是否真的有不錯的效果;在現在訓練尚未完成的時間裡,我正在嘗試把EarnHFT跑起來。
在最初調研的時候,我在EarnHFT跟MacroHFT中做選擇,因為MacroHFT較新所以選擇了它。這幾天在跑MacroHFT時我大致了解了MacroHFT是在EarnHFT之後針對RL在高頻數據上容易過擬和的問題上提出解決方法;所以在目前MacroHFT可能有問題的情況下,我已經開始嘗試跑看看EarnHFT,發現該專案有把Issue的問題都解掉,程式碼看起來也相對完整,所以在嘗試完MacroHFT之後若是結果不如預期,打算接著去試EarnHFT。
目前EarnHFT的程式碼需要從tardis抓數據,它提供了抓程式的腳本但沒有提供抓好的資料;由於tardis真的是挺貴的,所以還是打算先跑完MacroHFT,確定有需要才繼續去嘗試EarnHFT;在等待訓練結果的同時,我也正在想辦法弄學校的信箱來用,因為tardis用學術信箱註冊付費可以便宜個幾千塊,不然以只是想先嘗試跑代碼的情況下,這個付費真的是貴到哭爸。
由於目前在等待MacroHFT的訓練結果,所以今天更細的了解了一下MacroHFT的訓練內容包括預設好的這些訓練參數有什麼意義,這邊也做一下筆記。
解析低層級代理的訓練參數
低層級代理的基礎是選用DDQN,以DDQN為基底做出調整。
KL Divergence Loss
在訓練低階代理(low-level agent)的過程中,MacroHFT引入了KL Divergence Loss,其主要目的是幫助學習一個更好的政策(policy),具體而言是透過將代理的Q值分佈與最佳Q值分佈之間的差異進行衡量:
1. KL Divergence的作用
-
指導學習:KL Divergence作為一種損失函數,量化了當前策略的行為與理想策略(最佳Q值)之間的差異。通過最小化這個差異,代理能夠學習到更接近理想策略的行為,進而提高其在特定市場情況下的表現。
-
防止過擬合:透過引入KL Divergence,訓練過程中對當前策略的調整不僅依賴於當前的獎勵信號,也考慮了與理想策略的對比,這有助於防止代理對訓練數據的過擬合。
2. 訓練過程中的影響
-
調整策略的靈活性:KL Divergence的引入使得代理能夠根據當前的市場狀況及其持倉進行適當的調整。這意味著在市場波動較大時,代理能夠迅速適應新的市場條件,調整其交易策略以減少損失或獲取利潤。
-
強化學習的適應性:透過結合上下文特徵(如市場趨勢和波動性)及當前持倉,KL Divergence促進了低階代理的學習,使其能夠在不同的市場條件下生成更具適應性的交易策略。
3. 輸出結果
-
學習到的策略:最終,透過這種訓練過程,低階代理將學會在不同市場條件下採取合適的行動,這些行動能夠最大化其獲得的獎勵,同時也能夠有效管理風險。
4. 影響的具體例子
-
如果alpha=0:KL Divergence的影響被完全忽略,代理的學習將完全依賴於直接的獎勵信號,這可能導致其無法適應快速變化的市場條件。
-
如果alpha增大:KL Divergence的權重增加,則對學習過程的影響增強,代理更可能學習到一個穩健的策略,這種策略能夠充分利用市場的變化,以獲得更高的獲利潛力。
KL Divergence Loss在低階代理的訓練中扮演著關鍵角色,通過引導學習過程和調整策略,使得代理能夠更有效地適應市場變化,學習到有利的交易策略。這種方法特別適合於高頻交易中需要快速適應市場動態的情境。
引入KL Divergence Loss來增強學習結果的穩健性是此論文的主要貢獻之一,因此alpha=0的Low Level Agent基本上就是等於直接使用DDQN來學習的結果,較容易有論文提到的過擬合問題,得到的agent也較為不穩定。
此論文的另一個重點就是使用層級架構(HFT)來降低過擬合,低層級會訓練6個不同參數的低層級代理;所有低層級代理在訓練好後會被高層級代理使用。
Low Level Agent
使用low_level.bat訓練完成後,我們得到了6個低層級代理(Low Level Agent),我們可以將這六個低層級代理進行以下分類與解釋:
1. 參數解析
-
alpha: 此參數用於調整訓練中的 KL 散度損失的權重。不同的
alpha 值會影響代理在訓練過程中對演示行為的遵循程度。更高的 alpha 值意味著更強的限制,代理將更傾向於遵循演示行為。
程式碼中loss = td_error + alpha * KL_loss,所以當alpha=0時,訓練過程會完全忽略KL Divergence的效果。;相反的如果alpha值越大,則會放大KL Divergence的效果。
-
clf: 此參數用於指定使用的特徵分類器。可以是“slope”或“vol”:
-
slope: 代表使用價格趨勢的斜率作為特徵來進行分類。
-
vol: 代表使用價格波動性作為特徵來進行分類。
-
dataset: 在此範例中,所有代理使用的數據集均為 "ETHUSDT"。
2. 六個低層級代理的比較
以下是這六個低層級代理的具體差異:
| 代理編號 |
alpha |
clf |
label |
| 1 |
1 |
slope |
label_1 |
| 2 |
4 |
slope |
label_2 |
| 3 |
0 |
slope |
label_3 |
| 4 |
1 |
vol |
label_1 |
| 5 |
4 |
vol |
label_2 |
| 6 |
0 |
vol |
label_3 |
具體差異介紹:
-
以趨勢為分類(slope)
-
代理 1 (alpha=1, clf=slope): 這個代理將使用趨勢斜率作為特徵,並且在訓練中對演示行為有適度的強調(alpha=1),意味著它會對演示行為進行一定的限制。
-
代理 2 (alpha=4, clf=slope): 這個代理對演示行為的強調更高(alpha=4),因此將更強烈地遵循訓練過程中的演示行為,可能使其學習到更穩定的策略,但也可能導致其靈活性降低。
-
代理 3 (alpha=0, clf=slope): 這個代理將不會對演示行為施加任何限制(alpha=0),它的學習過程將更加自主,能夠自由探索自己的策略。
-
以波動性為分類(vol)
-
代理 4 (alpha=1, clf=vol): 這個代理將使用價格波動性作為特徵,並且對演示行為的限制為中等(alpha=1)。
-
代理 5 (alpha=4, clf=vol): 這個代理在使用價格波動性作為特徵的同時,強調對演示行為的遵循程度更高(alpha=4),學習策略的靈活性可能會受到限制。
-
代理 6 (alpha=0, clf=vol): 這個代理在使用價格波動性作為特徵的同時,對演示行為不施加任何限制(alpha=0),它的學習過程將更自主且探索性更強。
3. 影響
-
學習策略的靈活性: 當 alpha 值較高時,代理在學習過程中會受到演示行為的約束,這可能有助於在不確定的市場環境中穩定學習,但也可能降低探索新策略的能力。相反,較低的 alpha 值則允許代理進行更多探索,但可能會導致更高的學習不穩定性。
-
特徵分類的影響: 使用不同的特徵(斜率 vs. 波動性)會影響代理的決策過程。斜率可能更適合捕捉趨勢,而波動性則能反映市場的不確定性,這使得這六個代理能夠在不同的市場環境下提供互補的策略。