# April Concall ### P28 首先,先來介紹Reinforcement learning的主要概念。在Reinforcement learning中,會細分成agent以及Environment。 agent在與Environment的互動過程中,agent會在Environment中採取acion,而Environment會回傳一個reward給agent學習,除此之外,agent也會重新觀察Environment是否有發生變化。Reinforcement learning的目標是希望讓agent能夠學習到,在不同的環境下,採取不同的行動,以取得最大化的利益。 ### P29 那為什麼要在配對交易中使用RL呢?根據Rad在2016年的研究中發現,在空頭市場時,因為波動變大,因此有利於配對交易的進行。 而根據昭憲學長在2019年的研究指出,0050與0051ETF成本股配對交易的報酬與加權指樹報酬呈現負相關。 因此我們希望說,我們先將盤勢進行分類,然後藉由RL的幫助,希望能夠學習到,在不同的狀態下,選用不同的開倉停損門檻,能夠提升配對交易的績效。 ### P30 因此要進行RL的訓練前,我們要先將盤勢進行分類。而我們分類的依據主要是根據昭憲學長的研究成果。 這張表格主要是在描述,在選定不同自變數x下,和應變數y的線性回歸。而我們的應變數y為"配對交易報酬"。我們可以看到回歸式三中,自變數定義為TWReturn,也就是加權指數近60天的報酬。可以看到TWReturn與配對交易報酬是有顯著負相關的。因此我們的分類就採用回歸式三。 ### P31 在分類過程中,使用的是加權指數10分鐘K棒的收盤價,接著定義X為近1620根加權指數的報酬率,定義Y為預測配對交易報酬可以由回歸式三得到Y = -0.0003+ -0.0013X。為甚麼事1620跟呢?是因為一天交易時間為270分鐘,所以一天會有27跟10分鐘K棒,而前面的回歸式三中使用到的是60天的加權指數報酬,所以是27*60=1620。 若Y>=0,即表示預測配對交易的報酬是正的,我們令他狀態=0 若Y<0,即表示預測配對交易的報酬是副的,我們令他狀態=-1 ### P32 緊接著我們要定義我們的action,也就是開倉停損門檻。開倉門檻的設定從0.65-0.9,停損門檻的設定從1.25~2.5,此外增加一組不開倉的action,開倉門檻設定為20,停損門檻設定為30。因此總共會有6*6+1=37組action ### P33 而我們RL使用的演算法為Q-learning,Q-learning的主要作法是會儲存一個Q-table,而Q(s, a)的意義就是在s狀態下,採取a動作的q-value值為多少。當訓練完成後,以後只要遇到s狀態,就可以直接查我們的Q-table這個表,找出在s狀態下誰的Q-value最大,擁有最大Q-value的即為此狀態下最佳的action。 而q-learning演算法的流程為,假設在玩一場遊戲,一開始先初始化Q-table,遊戲開始後初始化目前的狀態,接著開始在這個環境中執行action,執行action完可以得到reward以及s',得到reward後我們就能根據這條式子更新我們的Q-table,在此式中,alpha表示learning rate,gamma表示discount factor,r為我們的新reward。這個式子我們稍微整理一下後,可以得到此式子,而maxa'Q(s', a')為未來可能可以獲得的最大reward,我們將它乘上gamma,此gamma可以看做是折現,接著再加上我們獲得的reward,再乘上aplha。最後再和原始的Q-value值乘上(1-aplha)相加來更新我們的Q-value值。接著跟新我們的狀態,然後一值重複這個流程,直到這場遊戲結束,在開始下場遊戲。 ### P34 接下來,我們設定配對交易為日內交易,捨棄掉前面16分鐘,將Formation period設定為150分鐘,Trading period設定為100分鐘。 ### P35 而我們取2018年前面70%的資料當作我們的traing,後面30%當作testing。而因為我們目前的state以及action個數並不多,因此我們使用brute force的方式,也就是每天都將所有的action跑過一次。因此在training時,我們只需要在traing這個時間段跑一次。 ### P36 因此整個trainging流程,可以簡化成此張流程圖,一開始Agent會依據policy選擇一個action,而在trainging時,我們的policy為brute force,接著進入到Formation period中,找尋兩檔股票是否擁有共整合關係,如果有,即進入Trading period,觀察序列是否有達到我們的開倉門檻,如果有的話,即會回傳reward以及state給我們的agent,而agent會使用q-learning的演算法,更新我們的policy。 ### P37 在testing時,唯一的差別是在Agent的policy,在testing的policy中為根據之前訓練好的Q-table,根據目前的state選擇最好的action。 ### P38 接下來是result的部分,首先先來解釋一下整個表格的意義,"RL"這排表示使用剛剛前面提到的方法,可以看到訓練出來的結果為,當預測配對交易為賠錢時,會直接使用不開倉的這個action,而當預測配對交易為賺錢時,開倉門檻為0.85倍標準差,停損門檻為2.5倍標準差。而"-1"這排表示使用預測配對交易為賠錢的action。"0"這排表示使用預測配對交易為賺錢的action。"RL(single state)"這排表示同樣使用RL訓練,但是不細分state,也就是所有的訓練資料都視為同一個state。可以看到在交易成本門檻為0.35%,手續費為0的設定下,RL的績效是可以打敗其他三種。因此可以知道使用RL,在不同的狀態下使用不同的開平倉門檻,績效是比使用固定的開平倉門檻還要好。 ### P39 接著將交易成本門檻拉高到0.4%時,可以發現到說RL訓練出來的結果為完全不開倉。接著因為我們使用RL是希望能夠學習到,在不同的狀態下,能夠學習到不同的開倉停損門檻,因此我們將偵測結構性斷裂關閉,看RL是否能夠學習的比較好。 ### P40 可以看到在交易成本門檻為0.35%,手續費為0,關閉偵測結構性斷裂的設定下,RL的績效為負的,輸給完全不開倉的。而若將交易成本門檻提高到0.4%,RL的績效同樣不理想,因此可以推論,結構性斷裂能夠有善的改善績效。