edo1z blog

プログラミングなどに関するブログです

BTCFXの約定データで強化学習してみる (5)

強化学習全然うまくいかなくて凹んでたんですが、下記のグラフはなんかちょっと学習してる感あるなあと思いました。2月13日のデータを相変わらず学習に使っていますが、20万エポックやると最初とは明らかにrewardの大きさが変わったので、これはまさか学習できてるのではないかと思ったわけです。20万トレーニング後のテストでも全部プラスで最初の学習時よりも全然大きいrewardだったんです。

ギザギザバージョン f:id:edo1z:20190311181348p:plain

スムースバージョン f:id:edo1z:20190311181358p:plain

今3月11日なのですが、2月13日データで学習した上記モデルで実践投入してみようと思ってやってみました。結論的にはまじで最悪でした。非常に残念です。まずやはり、成り行きでポジ解除する際のダメージが大きすぎるのと、それを過小評価しすぎた環境でトレーニングしたものですから、簡単に成り行き損切が実行されることになり、一瞬のうちに成り行き損切による大損が発生いたしました。売買ポイントとしては、上がったら売って、下がったら買ってる感はありました。それだけに、落ちるナイフを掴みまくって死亡していました。

f:id:edo1z:20190311192032p:plain

次にやりたいのは、下記でしょうか。

  • 2月13日以外のデータでバックテストしてみる
  • 成り行き損切のダメージをもうちょっと大きくして学習してみる
  • 3月11日のデータでも学習してみる
  • 成り行き損切をしないトレード方法(両方に指しちゃって損切しないとか、片方ずつだけど損切はしないとか)に変えてみる

ちなみに、30秒に1回トレードする(何もしないこともある)ことになってまして、1エポックあたり200ステップでやっております。で、上のグラフは20万エポック後に平均で800円になってるんですけど、っていうことは、1.2万円幅/日くらいになるのかなあと思いまして、もしサイズを0.2で売買すると、2400円くらいの粗利的なイメージになるのかなあと考えると、非常に残念なチャレンジだなあと思ってしまいます。平均800円というのは、1ステップ4円ということです。非常に少ないですね。でもトレードしないときもあるので、5割トレードしたとすると、8円くらいです。少ないですけど、負けることもあるわけです。勝率6割だとすると、適当な計算で40円とかかなあと思いました。まあ何と言うか結構そこそこな金額な気はします。

つまり、仮にかっこいいグラフがつくれたとしても、そもそも、上記のモデルじゃだめで、やっぱり5秒に1回にするとか、損切細かくしながら利益を伸ばすとかしないとだめなのかなーと思いました。5秒に1回だと余計に1ステップあたりの値幅は減るでしょうから、微妙かな。

とはいえ、これはまさしく素人の適当な計算です。バックテストすらまともにしたことがありません。次はやっぱりそもそも論としてバックテスト環境を整備してみようと思います。たぶん。

現状のモデルでテスト

改めて2月13日データで学習したモデルで、テストしてみました。

f:id:edo1z:20190311202639p:plain

f:id:edo1z:20190311202650p:plain

やっぱ結構いいかんじ。

成り行き損切の損失拡大率を上げる

今0.1とかになってました。損失が10%増えるとういことですが、50円で損切してるのに150円幅になってることがざらにある感じでした。3倍。。。ということで1に変更してみます。損失が100%増えることになります。

f:id:edo1z:20190311204230p:plain

なんか意外と成績がいい。2にしてみよう。

f:id:edo1z:20190311204542p:plain

むしろ最初の−2300円が続いてほしいんだけど。なんかそこまで成績が悪くない。

では、次に別の日のデータでテストしてみたいと思います。

3月9日の、損失拡大率0.1バージョン

f:id:edo1z:20190311204911p:plain

3月9日の、損失拡大率2バージョン

f:id:edo1z:20190311205141p:plain

いやーおかしいだろー。もっと成績悪いだろー。まあ確かに俺は今日2時間もやってない。別の2時間は成績いい可能性はちょっとだけある。でも多分ないだろうなー成り行き損切はまじで最悪。

ちなみに、学習したモデルを使わない場合も一応みてみよう。。。

f:id:edo1z:20190311210445p:plain

f:id:edo1z:20190311210456p:plain

上の2つ未学習状態のやつで、3月9日の損失2。成績に圧倒的差がでる。 まあこれをみると、やっぱ多少は学習してる感はあるんじゃないでしょうか?さすがにこんなに何千円マイナスが連続するっていうのはないっぽい。ないがどうか、10回くらいやってみるか。。

f:id:edo1z:20190311211238p:plain

f:id:edo1z:20190311211248p:plain

まあ2回にしておいてやろう。今思ったけど、rewardは200円以上は200になる設定だった。。。つまり、いくら成り行き倍率あげても、200以上は無意味だった。。。次の実験はこれをでっかくしてみようかな。一気に損だらけになる予感がする。。。まあそっちのがむしろすっきりするわ。

次やること

  • rewardの範囲を500まで上げる
  • あと200万回くらい学習させてみる
  • 成り行き損切しないトレード方法を考えて1つ決める