こんにちは、Trading Studioです。本組織では、仮想通貨の取引データの解析や変動パターンの抽出、およびハイパフォーマンス投資アルゴリズムの研究開発を行なっています。
前回の記事では、単一のテクニカル指標に基づくシステムトレードでも十分な収益を上げることができる可能性を示しました。しかし、
こんにちは、Trading Studioです。本組織では、仮想通貨の取引データの解析や変動パターンの抽出、およびハイパフォーマンス投資アルゴリズムの研究開発を行なっています。 前回の記事では、単一のテクニカル指標に基づくシステムトレードでも十分な収益を上げることができる可能性を示しました。しかし、記事を投稿した6月下旬以降、価格が大きく変動し、明らかに5月とは異なる動きとなりました。果たして前回実験した戦略は、6月以降でも収益を上げることができたのでしょうか?
確認のために、2017年2月1日から2017年7月31日までの半年間で再度検証してみました。バックテスト条件は前回と同じく、USDT/BTCペアを対象に取るポジションはロングのみとし、収益評価は月単位、つまり月の終わりで強制決済するものとして実施しました(条件の詳細は前回の記事参照)。
表1. テクニカル戦略のバックテスト結果
表1では、バックテストにおいて、それぞれの戦略で期間を通して最も収益率の良かった算出間隔とパラメータでの月ごとの収益率を掲載しています。 簡単に結果を考察すると、月によって収益率に差はあるものの、どの戦略でもほぼ全ての月で収益率がプラスであることが分かります。テクニカル指標、特にトレンドフォロー系は強いですね。ハードフォークやICO、ETF上場など価格に強い影響を与える要因はいくつもありますが、そうした情報を与えず、機械的にシンプルにトレードを行うというのも1つの方法かもしれません。
ただし、例えば3月は、SMA戦略は損失を出してしまっていますが、4月では最も収益が良いという結果になっています。基本的にはどの月でもSAR戦略とMACD戦略が上位であるものの、タイミングによってはSMA戦略の方がフィットする状況も存在するということです。週単位や日単位でみるとこうした状況はもっと発生しているでしょう。このような状況が発生するということはつまり、SAR戦略が最善とは限らず、より良い戦略が存在することを示唆しています。「もうこの戦略で十分じゃないか」といった声もあるかと思います。しかし、我々は決して現状に満足せず、さらなる高みを目指します。
以下では、よりハイパフォーマンスなトレードアルゴリズム構築のアプローチについて議論していきます。
良いトレードアルゴリズムとは
今回は、価格操作的行為は対象とせず、そして自分の取引行動が価格に大きな影響を及ぼさないことを前提とします。前回も述べましたが、仮想通貨はボラティリティが非常に大きく、トレンドの変化も激しいです。したがって、特に仮想通貨取引におけるトレードアルゴリズムは、取り巻く環境の変化に対して、素早く柔軟に行動を変化させることができる仕組みを備えていることが望ましいのではないかと考えます。
例えば、ある局面にて、何らかのロジックにより価格が下がる可能性が高いと判定されたとします。このとき我々が取るべきであった売買行動は、4月の状態では気にせずロングすることが結果として正解であり、6月の状態だとショートが正解のケースが多かったと思います。この例は具体的な検証は行なっておらず、単なるイメージで話していますが、ここで伝えたいことは、このように同じ下げ局面であったとしても、その時の相場の状態を考慮し、選択する行動を変化させるようなアルゴリズムが構築できれば、さらにパフォーマンスを改善できそうです。
この要望に応えることができそうなアプローチとしては、機械学習(教師あり学習)や強化学習を取り入れることが思いつきます。これらの分野の中でも金融トレードと相性の良さそうな汎用アルゴリズムのうち、今回我々は、AlphaGoの一部で利用されていたことでも有名な深層強化学習を取り入れてみようと思います。
最初に深層強化学習を選択すべき明確な理由は特にありません。単に一度実装してみたかったことと、強化学習によって自ら学習した機械が最終的にどのようなトレードを行うのかに興味があったためです。たまに発生する長いヒゲを狙ったり、一般的には悪手とされるナンピンを繰り返したり、はたまた全くトレードしなくなったり...といった行動がみられたら面白いですね。
ただ、強化学習は内部がブラックボックスであり、私自身の深層強化学習の経験も乏しかったため、いきなりシステムトレードに適用しても、正しく学習したかどうかを判断するのは困難です。そこで、まずは強化学プログラムが正しく動くかどうかの確認のために、OpenAI Gymと呼ばれる、Atariゲームなどでモデルをテスト・評価できるプラットフォームを利用させていただきました(正直なところGymもこの機会に触ってみたかったのです)。
本記事のゴールは、Atariゲームを題材に強化学習モデルが成長していく過程を観察し、そこから得られた知見をもとに、強化学習をシステムトレードに応用するにあたって考慮したい点について議論することです。本記事は強化学習トレーディングの一歩手前、準備編にあたります。次節では、強化学習とは何かについて簡単に説明していきます。
強化学習の概要
強化学習とは、答えや情報が事前に与えられていない状況下で、行動する主体(エージェントと呼ぶ)が自ら環境に働きかけ、得られた結果から行動の良し悪しを学習していき、最適な行動指針を獲得しようとする手法の総称です。具体的なイメージを得るために、最適なトレードを学習することを想定した例を挙げて説明します。 図1は、エージェントが学習していく様子を簡単に表現しています。まず、エージェントが環境に対して行動を起こします。トレードの例だと、行動の種類は一般的に「売り」か「買い」か「何もしない」かの3択となります。
図1. エージェントの学習フロー
たとえばポジションを持って決済するまでを1つの区切りとすると、その結果としてエージェントはいくら稼いだか(または損したか)という結果を得ます。その結果をもとに先ほどの行動の価値を見直します。良い結果が出ていれば、行動の価値も上げ、逆に結果が悪ければ行動価値を下げていきます。学習が終われば、新たな行動を開始し、十分な学習が行われるまでこのプロセスを続けます。
非常に簡単に説明すると、大枠はこんなイメージです。深層強化学習も強化学習アルゴリズムの1つであり、動機や学習フローは同じです。より詳細な学習方法や行動選択方法は、この記事だけでは書ききれないので割愛します。つまり強化学習とは、教師あり学習のように事前に用意された答えに従い学習するのではなく、自ら行動を起こし、データを集め、学習していく仕組みです。
「ある状況における最適な売買行動を決める」という目的を教師あり学習で達成する場合、最も直接的な解決手順としては、ユーザID付きの膨大な“良い取引履歴データ”と“良くない取引履歴データ”を入力とすることかと思いますが、あらゆる状況を網羅した膨大な生データは取引所でもない限り取得は難しいため、今回の目的に対しては強化学習の方が直接的な手段になるのではないかと思います。
(補足:機械学習では達成できないわけではありません。また、どんな問題に対しても強化学習の方が機械学習より優れているというわけではなく、何を達成したいかによって適した手法は異なります。そしてどの手法が最も優れているかは、実際に試してみないと分からないケースも多いです。)
AtariのPongゲームに対する実験
実際に深層強化学習の挙動を確認していきます。今回は、AtariのPongゲームを題材にしました。2人のプレーヤーが球を交互に打ち合い、返せなかったら負けというシンプルなゲームです。
図2. 学習初期の挙動
図2は、学習初期の、未熟な状態の対戦動画です。右側の激しく動いている方が我々のプログラムです。まだ1本目も返すことが難しそうですね。ただ、マグレかもしれませんが、たまに鋭いリターンを決めるケースがみられます。強化学習ではこのような、結果として良かったパターンを強化していくので、もうしばらく学習させると、このたまたま良かったパターンを意図的に狙い始めるはずです。
図3. 学習中期の挙動
もうしばらく学習させた後の対戦動画が図3です。だいぶ勝てるようになってきましたね。パドルの端で捉え、角度をつけて打ち返し、相手の隅を狙う勝ちパターンを確立し始めているようです。ただし、まだ何の変哲もない返球を返せなかったりと、成長途中である様も見受けられます。
図4. 学習後期の挙動
さらに学習を進めると、もはや失点する方が珍しくなってきました。リターンエースもバシバシ決まり、たとえラリーになったとしても得意パターンに誘い込み、図3で垣間見えた必殺技で得点していきます。
以上の実験を通して、まずは正しく動作する強化学習プログラムを実装できていることが確認できました。勝敗だけでなく、実際に成長していく様子を動画で確認できるのは楽しいですね。OpenAIのおかげでこのような楽しい環境を簡単に構築でき、ChainerやTensorFlowなどの深層学習ライブラリのおかげで実装も楽になって、今はとても恵まれているなと実感しました。
システムトレードへの適用可能性
では実験の振り返りを行なっていきます。まず、この実験は手元のMacでCPUリソースを利用して行なったこともあり、学習には数日かかってしまいました。教師がいない分、教師あり学習に比べてモデル構築に要する時間的コストはやはり大きくなるなと感じました。
ハイスペックサーバでGPUを利用して学習するなら、おそらく劇的に時間的コストは減ると思いますが、その代わり金銭的コストがかかってしまうため、それが割にあうかどうかを判断する必要があります。具体的には、計算コストを差し引いた収益率で考えることはもちろん、他のシンプルな戦略と比較する際にも、この計算コストを考慮する必要があります。SAR戦略よりも1万円多く収益を得たとしても、サーバ費用に2万円かかっているなら、SAR戦略の方を選択するべきでしょう。
ところで、教師あり学習より時間的コストがかかってしまうのは、強化学習は試行錯誤をしているので当然なのですが、それにしてももう少し学習過程を改善することができそうな気がしています。たとえばポンゲームの場合だと、ボールをパドルにどう当てるのかが重要であることは人間であればすぐに気づきます。つまり学習の仕方を学習するような、いわゆるメタ学習的な仕組みを導入することで、どのようにモデルが変化するのか気になりました。またはナルトの多重影分身を使った修行のように、複数のコンピュータで学習し、定期的に知識を共有する並列化の導入あたりが正当進化でしょうか。それとも全く違うアプローチで発展していくのか。世界中の研究者たちが日々様々なアプローチを模索していると思うので、今後の発展が楽しみであるとともに、私も自分の専門知識を活かして試してみたいアイデアが生まれました。
本題に戻して別の観点で振り返っていきます。今回のポンゲームの相手プレーヤーは苦手な部分が明確であったため、当然それに合わせたプレーヤーに成長しました。しかし、学習後期になって相手の苦手ポイントが変わった場合、つまりこれまでに得た知識が突然役に立たなくなった場合、私が試したプログラムでは修正が効かなくなります。
仮想通貨を対象にした場合、これと似たような状況は往々にしてあると思うので、その課題への対処も必要であると考えています。勝てなくなったと判断したら、知識利用ではなく探索を多めに取るなど、行動計画を柔軟に設計するとか、定期的に新たなモデルに入れ替えるといった工夫になるのでしょうか。この辺りももう少し考えたいと思います。
あとは、仮想通貨トレードにおいて、比較的高額な取引を行う場合は、自らの取引が価格に影響を及ぼしてしまいます。その結果、他プレーヤーの行動が変化してくる可能性が高いです。どのくらいの額を取引した時にどのように状態が変化するのかは、実際に取引を行わなければ学習できません。しかし、学習途中の未熟な強化学習モデルを本番投入することは、下手をすると取り返しのつかない損失につながってしまう可能性が高いです。過去のデータでモデル構築をしても、あらゆるパターンを経験するはずなので、大した問題ではないかもしれませんが、モデル構築を行なった環境と本番環境が異なることは念頭においた方が良いかと思います。
まとめ
今回は、強化学習をベースとしたトレードアルゴリズムを構築する準備段階として、ポンゲームを題材に深層強化学習の挙動を確認しました。そこから得られた気づきをもとに、トレードアルゴリズムを構築する上で考慮したいポイントについて議論しました。
大きなポイントは、
・強化学習にかける金銭的コストが割に合うか ・急激な市場の変化にいかに対応するか ・自らの取引が他プレーヤーに及ぼす影響をどのように学習させるか の3つです。これらのポイントは、実際に動かしながら検証していきたいと思います。次回以降で、実践編も記事にできるように頑張ります。
※本記事で行なった検証はあくまでバックテストであり、収益を保証するものではありません。投資・投機は自己責任でお願いします。 ※本記事は、仮想通貨トレードを勧めるものではございません。
おわりに
「Trading Studio(トレーディングスタジオ)」では、仮想通貨の日々の膨大な取引データを解析して変動パターンを抽出、パフォーマンスが最大になる投資アルゴリズムを構築し、実際の運用テストを通して精度を高めていきます。 ご興味のある方はお気軽にお問い合わせください。