遺伝的アルゴリズムを用いてリピート系注文の最適パラメタを算出してみた
どうも
愚者の戦略です
今回は遺伝的アルゴリズムを用いて、仮想通貨リピート系注文の最適パラメタを算出した結果を共有します。
結果としては以下のパラメータ設定時に損益(含み損含む)が最大になることが分かりました。
購入間隔:8万円おき
利確幅:6%
トレード間隔:1分おき
評価対象
対象通貨:BTC
評価対象期間:2021年2月中旬~2021年9月上旬の1分足データ
1月~2月上旬は一方的な上昇相場なので省きました
■固定したパラメタ
レンジ:350万〜700万
利用するJPY:150万円(疑似レバレッジは無しです)
■遺伝的アルゴリズムで最適解を求めたパラメタ
購入間隔[10000,20000,40000,50000,60000,70000,80000,90000,100000]
利確幅 [1.01,1.02,1.03,1.04,1.05,1.06,1.07,1.08,1.09,1.1,1.15,1.2,1.25,1.3]
トレード間隔[1,5,10,15,20,30,45,60,90,120,180,240,360]
[ ]の値からそれぞれランダムに個体を作り、最適解を求めた形になります。
もちろん全パターン試せば最適解が求まるのですが、パラメタが多いと全部網羅するのに莫大が時間を要します。
ちなみに今回のパターンで全項目バックテストすると、購入間隔、利確幅、トレード感覚がそれぞれ9,13,12通りあるため9*13*12=1,404通りのパターンを試す必要があります。この程度であれば、全パターン試せますが、レンジや疑似レバレッジなども可変のパラメータとすると、優に10万通り以上となってしまうため、バックテストするにも現実的な数字ではありません。
遺伝的アルゴリズムはmagitoさんの記事をほぼ丸パクリして作りました。
結果
結果はこんな感じです
Start of evolution
Evaluated 30 individuals
-- Generation 0 --
Evaluated 15 individuals
Min 183356.5807581811
Max 277508.8341168398
Avg 236321.66706103596
Std 26341.769070139686
-- Generation 1 --
Evaluated 19 individuals
Min 213522.40885904155
Max 299298.5415992199
Avg 265163.245982962
Std 20299.04500688464
-- Generation 2 --
Evaluated 16 individuals
Min 251732.97444863967
Max 310447.2509299394
Avg 278127.8927109705
Std 14079.409493484676
-- Generation 3 --
Evaluated 15 individuals
Min 266177.1577985999
Max 324407.3423587202
Avg 291979.8053233131
Std 15198.812582041473
-- Generation 4 --
Evaluated 14 individuals
Min 274575.11602715997
Max 324407.3423587202
Avg 302128.5138539338
Std 12365.445556302357
-- Generation 5 --
Evaluated 20 individuals
Min 244649.54788745998
Max 324407.3423587202
Avg 306000.419381813
Std 15800.433106792141
-- End of (successful) evolution --
Best parameter is [80000, 1.06, 1], (324407.3423587202,)
初めにランダムに30個体作成し、そのなかで最も損益が高かった個体を親として次の世代を作り、さらにその次の世代で最も損益が高いものを親として・・・・という流れです。
世代を経るごとにstd(標準偏差)が小さくなっていくことがわかりますね。これは個体間のばらつきが少なくなり、値が収束してきていることを表しています。
またavg(平均)が大きくなってきていることから、世代を経るごとに集団としてより高い損益を叩き出せるようになってきていることが分かります。
最終行は、最後の世代において一番成績が良かったパラメタを表しています。
Best parameter is [80000, 1.06, 1], (324407.3423587202,)
左から80000が購入間隔、1.06が利幅、1がトレード時間間隔です。
(324407.3423587202,)は含み損を考慮した損益が32万4407円という意味です。
あくまでも過去のデータで一番当てはまりが良かったと(思われる)だけなので、今後も最適解かといわれると?ですが、1つの目安にはなるかなと思います。
チップありがとうございます!超嬉しいです。