自動売買を始めようと思ったら、まず、売買ロジックを考えなければならない。
例えば、
- 2本の移動平均線のゴールデンクロス(GC)で買い、デッドクロス(DC)で売る
といった具合。
そして、売買ロジックを考えたら、次にするのがパラメータ(変数)の値を選定すること。
先の例では、2本の移動平均線の組み合わせが色々ある中で、最適なものを見つけること。
いわゆる、組み合わせ最適化問題。
全ての組み合わせをテストすれば最適解が見つかるが、
組み合わせ数(探索空間)が膨大なとき、時間がかかりすぎ、
現実的な方法ではない。
そこで、探索アルゴリズムの出番となる。
探索アルゴリズムはいろいろあるが、全件探索以外求まるのは準最適解。
私が使っているアルゴリズムは、
- パラメータフリー遺伝的アルゴリズム(PfGA)
ただし、このアルゴリズムに独自に手を加えたものを使っている。
遺伝的アルゴリズム(GA)は、生物の進化を模倣したアルゴリズム。
生物が世代を経る中で、親から子へ遺伝子が受け継がれていく。
この過程において、遺伝子の交叉や突然変異が発生し、
環境に適合しない個体は淘汰され、適合する個体が生き残っていく。
これが、生物の進化。
GAは、このプロセスを模倣したもの。
売買ロジックの各パラメータを遺伝子に見立て、
親世代同士でパラメータの値を交換(交叉)することにより子を生み出し、
時には突然変異を発生させる。
そして、優秀な子を選抜し、次の世代の親とする。
こうして、世代交代を繰り返し、生き残ったものが最適解(準最適解)。
PfGAは、GAにおけるメンドクサイ設定(突然変異の発生確率など)が不要になるように考案されたアルゴリズム。
詳細は割愛するが、アルゴリズムがシンプルでプログラムが簡単だ。
ここで、PfGAに限らず、組み合わせ最適化問題を解くにあたって、厄介な問題がある。
目的関数をどうするか?
つまり、何をもって優秀とするのか?
トレードシステムのパラメータ決定における組み合わせ最適化問題では、
探索アルゴリズムを何にするか?
よりも
目的関数をどうするか?
の方が重要だと思う。
(PfGA以外のアルゴリズムを試したことは無いが)
目的関数、色々試してみた結果、年率RAR(リスク調整済みリターン)を採用している。
これに加え、評価に値するかどうかの判定も入れている。
例えば、平均ドローダウンがxx以上は評価対象外、といった具合。
年率RARの他では、ExOも良いと思う。年率RARと同じような傾向だ。
勝率や損益累計はしっくりこない。
なお、これらの項目については、
『バックテストでの確認項目は何か?そして、重視している項目は何か?』を参考に。
目的関数を何にするか、結局は、バックテスト結果で何を重視するかになるのではないだろうか?