バックテストアプリにおける遺伝的アルゴリズムの適用理由について徹底解説

2021/02/03

先行研究
ga_for_bt_eye

どうしてFXに遺伝的アルゴリズム?

なぜFXに遺伝的アルゴリズムを活用しようと考えたのか。それは良いFXの戦略を見つけ出すためです。具体的な実装方法も考えました。

まずはQ/A方式で端的に説明します。

  • Q.遺伝的アルゴリズムができることは何か?(使用目的)
  • A.良い解を見つけること(近似解の探索)
  • Q.どんな仕組みか?(アルゴリズムの中身)
  • A.複数の個体の性能を比較し・混ぜ・たまに突然変異させ、より優秀な個体を選別する。そのため、総当たりよりも早く良い結果に辿り着きやすい。
  • Q.遺伝的アルゴリズムの特徴は?
  • A.どのような問いに対しても有効である。(より踏み込んで言えば、評価関数が未知であったり、数学的に解けない場合でも適用可能)

つまり遺伝的アルゴリズムを一言でまとめると、

難しい問題に対し、良い答えを探し出すアルゴリズム

そして、

  • Q.どうしてバックテストに遺伝的アルゴリズム?
  • A.良い戦略を探すという難しい(数学的には解けない)問題であるバックテストに対し、良い戦略を探し出すために使いたい。

つまりシンプルに、良い戦略を見つけ出したいから、使う。

具体的な適用方法

遺伝子

遺伝的アルゴリズムで一番重要なのは『遺伝子』です、なぜなら、

『遺伝子』を比較し・混ぜ・たまに突然変異させるから。

じゃあ具体的に『遺伝子』とは何か。

遺伝子

遺伝子の中身は0,1にしています。
(実数とすることもできますが、整数を扱うこともあり、0,1の2進数の方が今回は都合が良いため)

0,1で表現できることとしたら、2進数ですね。

なので上の図のように、ここからここまでは移動平均を表す2進数部分、ここはボリンジャーバンドのシグマを2進数で表す部分、みたいになります。

比較し・混ぜ・たまに突然変異

比較(し選択すること)・混ぜる(厳密には交叉)・突然変異させる方法は一般的な方法を用いています。
この際重要なのが、

  • 混ぜる確率(混ぜ方)
  • 突然変異する確率

のパラメータです。これは正解はなく、試行錯誤する部分です。

このパラメータの調整がうまく進化するかどうかを左右する重要な調整です。

こういったところに人間が試行錯誤するパラメータがあるので、完全自動のAIにはなれません。

ただ、パラメータフリー遺伝的アルゴリズムという応用版も研究されています。

現状は試行錯誤でなんとかなっているのですが、将来的にはこちらを実装するのも良いかもしれません。

(具体的な比較し・混ぜ・突然変異させる方法についてはここではまとめません)

得られた結果

では、実際に遺伝的アルゴリズムを用いてどのような結果が得られたのか。

まずはどのような探索でどの変数を最適化かを記述する

  • 条件
    • エントリーイグジットともボリンジャーバンド
    • 60分足 Long
    • USDJPY/EURJPY/GBPJPYの3通貨の利益の平均で遺伝子を評価
    • 世代数は40世代まで進化
  • 最適化変数
    • エントリーボリンジャーバンドの移動平均
    • エントリーボリンジャーバンドのシグマ
    • イグジットボリンジャーバンドの移動平均
    • エントリーボリンジャーバンドのシグマ

このようなルールで遺伝的アルゴリズムを使用してみた。

異伝的アルゴリズム進化図

多少のガタつきと20世代で既にある程度の探索が終了した感はあるが、世代が進むほどに利益をあげる優秀な戦略が残っている。

遺伝的アルゴリズムによる最適ボリンジャーバンド
遺伝的アルゴリズムによる最適ボリンジャーバンドの結果

今後の展望

今後は遺伝的アルゴリズムによる結果を

『今週の遺伝的アルゴリズムによる戦略』

というような形で公開して行き、サービス化していこうと思います。

今回は3通貨の利益だけを評価し進化させましたが、現在実装中の『スコア』を使い、総合力(ドローダウンや勝率などトータルの戦略の評価)を使い、進化させることも考えています。

むしろ、遺伝的アルゴリズムでの評価もスコア実装の1つの理由でした。

お楽しみに。

strのプロフィール画像

str