強化学習+為替トレード戦略(その2)

概要

・強化学習シリーズその2
・Epsilon-greedyのEpsilonに対する感度分析
→ とりあえずEpsilon=0.1でやろうと思うがQ値が収束していなさそう。。より早く収束させる方法が求められる
・学習させたQ値に対して汎化能力をテストできるようコードを追加
→ 学習期間と同じ期間に対してテストするも微妙な結果に

Epsilonに対する感度分析

相変わらずこのシミュレーション方法で合っているのかすら謎シリーズとも言いますが^^

・Epsilon = 0.5
Q値
赤マスはロングポジションが最適な状態、グレーはフラットポジション、青色はショートポジション。以下同様。
q_ep0.5

各エピソードの累積リターンのエルゴード平均(expanding window)
c_ep0.5

・Epsilon = 0.1
Q値
q_ep0.1

各エピソードの累積リターンのエルゴード平均(expanding window)
c_ep0.1

・Epsilon = 0.05
Q値
q_ep0.05

各エピソードの累積リターンのエルゴード平均(expanding window)
c_ep0.05

・Epsilon = 0.01
Q値
q_ep0.01

各エピソードの累積リターンのエルゴード平均(expanding window)
c_ep0.01

まあどれも累積リターンはなんとなく収束しているようなイメージですが、Q値がシミュレーションを回す度に変わるので、Q値がまだ収束していなさそうな雰囲気。ここは工夫が必要なんですかな。状態数が増えるとなおさらですし。

で、それぞれを比較してみると以下
ep_ret

ep_std

ep_ratio

上から、累積リターンの平均、標準偏差、平均/標準偏差を表しています。
リターンに関しては、探索の頻度(=Epsilon)を上げるほどある程度早く収束しているような気がしなくもない結果に。
ただし収束のレベルはEpsilonによってまちまちという感じ。
平均/標準偏差の比率でみると、0.1がもっとも高くなっておりまして、収束レベルが大きくかつそのばらつきもそれなりに小さい感じなんですかね。Epsilon=0.5とかにすると平均リターンも大きくなりますが、それのばらつきも大きくなってしまうということで比率に直すとそこまで良いというわけでもなく、ここはバランスなんですかな。

ということでEpsilon-Greedy以外のやり方もあるかとは思いますが、とりあえずEpsilon=0.1で今後は進めていこうと思います。

汎化能力のテスト

汎化能力と言いつつ、とりあえず学習期間と同様の期間にテストしてみます。
具体的にはモンテカルロを1000回まわしたあとに得られたQ値を元に、グリーティー方策で同じ期間を運用した場合の結果。

・2011年
testRet: 当該期間に買い持ちだった場合の結果
testMomentum: 当該期間に学習されたQ値を用いたグリーディー方策による結果
test2011

・2012年
test2012

・2013年
test2013

微妙ですな。

コード

loadData関数はFREDから対象ティッカー対象期間のデータを抽出するオレオレ関数です。
今回のシミュレーション対象もドル円(dexjpus)
複利型強化学習(参考文献2)なんてのもあるらしく、複利型でもシミュレーションできるようにしてますがまだうまく考察できてないのでペンディング。
self.isCompoundをTrueにすれば複利型になります。

メモ

やはりシミュレーションの度にQ値が変わるというのがやっかいでして、モンテカルロの回数を上げるというレベルを上げて物理で殴るという方法も考えられますが、もう少し見なおした方が良さそうですね。

また、状態に関してもとりあえず自分自身の長期と短期のシャープレシオを見ていますが、その背景の考えとしては、「今までワークしていた方法が今後もワークする」というまさに順張りのそれがありまして果たしてそれで十分かって話ですね。

今は20営業日と60営業日を見ていますが他のウィンドウで見ても良いですし、他の通貨ペアのパフォーマンスを見ても良いわけですしね。

参考文献

Amazon.co.jp: 強化学習: Richard S.Sutton, Andrew G.Barto, 三上 貞芳, 皆川 雅章: 本
http://www.amazon.co.jp/dp/4627826613

松井 藤五郎:複利型強化学習, 人工知能学会論文誌,
26(2):330–334 (2011)
https://www.jstage.jst.go.jp/article/tjsai/26/2/26_2_330/_pdf