Agent Inspired Trading Using Recurrent Reinforcement Learning and LSTM Neural Networks論文解析

爲什麼要翻譯這篇文章

    本人利用DNN和RNN做了深度強化學習的策略,本質上是一個基於策略梯度的強化學習,翻看這個作者的論文發現,核心思路是一模一樣的,差別在於細節的處理,先說說和作者的相似之處:

  • 用神經網絡來表示一個確定性策略;狀態空間是一個連續的,從神經網絡的角度來講,就是所謂的特徵。這樣做必須要解決的問題就是把狀態到動作的映射變成一個連續可導的函數,由於在交易中,我們有最小交易單位,比如一手,你總不能交易1.5手把,所以,我們的動作往往是離散的,需要用技術手段,將其連續化,這就是與作者第二個相同點,即:
  • 由於我也用1表示持有多頭,0表示無持倉,-1表示持有空倉,所以,我選擇了tanh來表示持倉狀態,也就是Agent的action,這樣動作即使一個連續可導的了,作者也是這麼做的。在實際中,我發現由於tanh會在非中心區域梯度衰減爲0,導致梯度下降法迭代不下去了,這裏可以選擇做一次標準化操作,而我借鑑了小波分析的方法,引入了尺度因子和平移因子,用一系列的tanh組合來表示信號,使得梯度在較大區域內不爲0,這樣就解決了梯度消失問題,其實這個部分可以抽象出來,就是怎麼用一組性質較好的基函數來表示我們的策略,想過用傅里葉變換,傅里葉變換的好處是由一系列cos,sin的組合來表示動作,求導時,不用擔心導數到急速衰減爲0.
  • 目標函數有相似之處,但是又不一樣,作者用的是一條路徑的Shape比率作爲訓練目標,我當初也考慮過Shape,但是考慮到夏普是有分母的,如果沒有信號,意味着波動率爲0,這個時候分母就爲0了,爲此,我還考慮過將夏普轉換爲減法的形式,後來爲了快速驗證,就只有了一條路徑的累計收益和做優化目標,相當於只取了Shape的分子。
  • 作者採用了dropout防止過擬合,我採用了L1正則化作爲約束條件,希望減少過擬合發生的概率。

不同之處在於:

  • 作者用的是LSTM,我用的是RNN和DNN,主要爲了簡單快速驗證結果。
  • 狀態空間(特徵)不同,作者用的是過去N期的每日漲跌值作爲特徵,我的特徵更多,我對行情數據提取了一部分統計特徵。
  • 狀態到動作的映射方式不同,雖然我們都是採用的神經網絡,作者直接簡單暴力將特徵映射爲交易行爲,這是我和作者最大區別的地方,我在這裏考慮的傳統量化交易策略的抽象形式,在這裏做了更細緻的處理,使得整個策略表達不僅僅是一個黑箱,而且還具有一定的可解釋性,這個部分就是策略的核心。
  • 交易成本方面,作者只給了一個參數c,也沒明確說c是多少,我這邊就很透明,我的c表示交易手續費和滑點成本,滑點設置的是進出各一跳。
  • 信號過濾的方式不同,作者直接在tanh中引入一個偏置和上一期的持倉量,來達到過濾交易信號,防止頻發交易的目的,這一塊我花的精力比較大,目前我用技術手段實現了前一刻有持倉,這一刻如果有同向信號則忽略這種想法,這種處理一定要小心,一不小心就把梯度變成0了。
  • 作者驗證了兩種目標函數,一種是夏普,另一種是用半方差計算的夏普,原因很簡單,就是風險的定義到底是什麼這個最根本的問題,有人說波動大就是風險,有人說朝我不利的方向波動纔是風險,前者用方差,後者用半方差,這裏不再累述。

總結一下我認爲我們這種做法存在的致命性的問題就是:
    用一個連續函數來表示動作,輸出的動作是在[-1,1]之間的一個數,這麼做的問題就是優化出來的持倉是一個帶小數的值,如果我們取整或者給一個閾值來調整,發現和原來的收益差異很大,這個部分我目前正在用隨機策略來解決,即保持動作是離散的不變,引入期望,解決網絡可導問題。

論文簡讀

一、目標函數:夏普比率

    給出一條資金曲線(假設時長爲TT),由於是時間序列,預測可以計算每一期的盈利率,盈利率的均值除以其波動率就是夏普:
ST=Average(Rt)StandardDeviation(Rt)=E[Rt]E[Rt2](E[Rt])2(1)S_T=\frac{Average(R_t)}{StandardDeviation(R_t)}=\frac{E[R_t]}{\sqrt{E[R_t^2]-(E[R_t])^2}} \tag{1}

二、信號的表示

    信號用FtF_t表示,Ft{1,0,1}F_t \in \{ -1,0,1\},-1表示持有空單1單位,0表示空倉,1表示持有多單1單位。爲了後面的優化方便,將FtF_t轉換爲一個連續空間,即Ft[1,1]F_t \in [-1,1],由於tanhtanh函數的值域與此匹配,於是就選擇tanhtanh來表示策略:
Ft=tanh(ωxt)(2)F_t=tanh(\omega'x_t) \tag{2}
其中ww'可以理解爲是神經網絡的抽象,xtx_t就是神經網絡的輸入特徵,在強化學習中,就是表示狀態空間。

三、信號過濾

    爲了防止頻繁交易,在當期信號函數中引入一個偏置變量bb,和上一期的持倉量Ft1F_{t-1},得到修正後的策略函數:
Ft=tanh(ωxt+b+uFt1)(3)F_t=tanh(\omega'x_t+b+uF_{t-1}) \tag{3}

四、當期回報函數(reward):

=+當期回報=上一期的持倉到當期的盈虧額+本期的交易量所產生的交易成本
    由於在交易中,我們是以一手爲單位,一手代表的證券數量用小ss表示,在給定邊際交易成本c的情況下,於是就得到了當期的回報函數:
Rt=s(Ft1rtcabs(FtFt1))(4)R_t=s(F_{t-1}·r_t-c·abs(F_t-F_{t-1})) \tag{4}

    梯度那一塊就不說了,太複雜,用不上你自己推導,只要理解就行了。總結一下:

maxST=E[Rt]E[Rt2](E[Rt])2=1Ti=1TRij=1T(Rj21Ti=1TRi)2{Rt=s(Ft1rtcabs(FtFt1))Ft=tanh(ωxt+b+uFt1)\begin{aligned} maxS_T=\frac{E[R_t]}{\sqrt{E[R_t^2]-(E[R_t])^2}}&=\frac{\frac{1}{T}\sum_{i=1}^{T}R_i}{\sum_{j=1}^T{(R_j^2-\frac{1}{T}\sum_{i=1}^{T}R_i})^2}\\ 其中\begin{cases} R_t&=s(F_{t-1}·r_t-c·abs(F_t-F_{t-1})) \\ F_t&=tanh(\omega'x_t+b+uF_{t-1}) \end{cases} \end{aligned}
其中ωbu\omega、b、u就是LSTM的參數,根據樣本訓練得到。由於網絡結構我的設計和作者的一樣,這裏就把我的網絡結構貼出來:

在這裏插入圖片描述
    後面的內容就不翻譯了,除了用半方差更改了下Shape的計算公式外,其他內容都是調參煉丹之術,這裏貼一下我在IF上的結果,注意,非聖盃再現,而是樣本內:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章