久しぶりの投稿です。
私のEAは年末年始(12/24~1/4)はエントリーしない仕様になっておりますので、年内の取引は終了しています。
そんな中、Twitterでは少しずつ情報発信させてもらっていますが、SoRA2が完成し、FEATにリリースさせていただきました。いきなりGBPUSD版が収益額1位、GBPJPY版が5位をいただいたりなどさせてもらっております。
feat_ranking
そういえば、SoRA2のことをちゃんと紹介させていただいていなかったかと思い、ここで紹介させていただこうと思います。


開発のきっかけ
SoRA2の開発を始めたのは、SoRAがリリースされて数カ月経ってからだったと思います。
それまでもずっと頭の片隅に残っていたことがあり、それがだんだんと私の中で大きくなってきました。

それは「なぜフォワードで通用するEAが少ないのか?」でした。

何を今更、と言われる方がおられるかもしれません。
EAのことを多少なりともご存じであれば、バックテストの通りにフォワードが推移するEAが極端に少ないのは周知の事実です。
そこに対して、私なりの見解も持っています。私の考えはこうです。
EAの開発は、ある特定期間のバックテスト(ヒストリカルデータ)の情報を使い、その期間内で利益が出る(=収益曲線が右肩上がりになる)EAを開発します。
そのため、過去のバックテスト期間が未来において再現される場合、その未来においても利益を出すことができると考えられます。
しかしながら、相場は人間の予測の外にあり、それは誰にも予測できません。故に、再現性がなくなってしまった場合、そのEAが有効に働かなくなってしまいます。
この考えは今でも正しいと思っています。
こうした前提条件がある中でEA開発をしなければならないと考えた場合、いくつかの方法論が浮かび上がります。
  1. バックテストの期間を最長(15~20年程度)にして期間の汎用性を持たせる
  2. バックテストの期間を数年(3年未満)にして、その時々の相場に合わせたチューニングを都度行う
  3. ロジックを簡略化し、どの相場においても適用できるようにする
ここではどの考え方が正しく、どの考え方が間違っているという議論は避けますが、相場の不確実性を考えるとどの考え方も正しいような気がします。そのため、SoRAはこの3.のロジックを簡略化し、どの相場においても適応できるようにすることを狙って作りました。

その結果として、SoRAは2020年の1年間で約2,200pipsほど稼いでくれていますので、今の時点ではこの考え方は適応されているような気がします。(直近は落ち込んでいますが…)
SoRA_2020

とは言え、それでもSoRAの開発スタイルはある特定期間のバックテストデータを元にパラメータチューニングを行い、各通貨ペア、時間足に最適な数字を割り出し、それをステータスとして持つという旧来のやり方を踏襲していました。

ということは、このままいけばいずれ相場の適応性が薄れてしまった場合にロジックが通用しなくなる可能性を秘めたEAであるということが否めないのではないか、と思うようになりました。

そのことを強く思うようになったのは、HANAの不調もあります。
HANAは今年一年、本当に落ち込みました。。。
私自身HANAを動かしていますが、ここまで落ち込んだのを見たのは初めてでした。
hana_honke
私はHANA本家を3年ほど動かしていますが、今年の8月からの損失はかなり響きました。。。
それでも年末には何とか踏みと留まってくれたような動きをしているので、私はこのまま来年も動かそうと思っています。

話が逸れましたが、このHANAの損失を見て、尚のこと相場への適応性ということを考えるようになりました。


開発方法の見直し
そんな訳で相場への適応性を高めるEAの開発をやろうと思ったのですが、ここで2つの仮説を立てました。
  1. 既存EAにロジックなどを追加し、適応性を高めたEA(足し算の考え方)
  2. 既存EAからロジックを更に減らし、適応性を高めたEA(引き算の考え方)
勘の良い方ならお分かりかもしれませんが、1.の仮説で作ったのがHANA2、2.の仮説で作ったのがSoRA2だったんです。

HANAには明らかな弱点がありました。それはトレンドの転換を見分けるポイントが弱い点です。特にトレンドの転換点にエントリーしてしまうと逆行のまま進んでしまい損失を出してしまうのです。これが唯一にして最大の弱点でした。
そのため、色々試行錯誤しながらトレンド転換のロジックを考え、それを搭載してできたのが第2回EA-1でリリースしたHANA2でした。
結果は以下のように完敗でした。。。
hana2
コロナ禍、アメリカ大統領選挙ということも考慮しても、この結果は言い訳のしようがありません。
正に完敗でした。。。
こういったこともあり、ロジックの更なる簡略化を目指し適応性を高める引き算のやり方でSoRA2を開発するようになりました。

そして、SoRA2の開発を進めるにあたり、一度これまでの開発スタイルを全部捨て、ゼロベースで考え直すことにしました。

そもそもEAを開発するスタートになったのは自分が持っている裁量ロジックの自動売買化にあります。そこに立ち返ろうと思ったのです。
また、バックテスト期間でパラメータの値を探す最適化機能を行うことが結果的にEAの寿命を縮めているのではないかという仮説から、最適化機能を使わずに開発することにしました。

また、SoRAの長時間足組の調子が良かったことからSoRA2はEURJPYの4時間足をベースに決めました。
そうして、この段階ではSoRA2というEAを以下のように想定しました。
  • EURJPYの4時間足専用EA
  • 勝率50%の利大損小型
  • ロジックはSoRA以上に減らし、極限まで簡素化させたロジックにする
このことからわかるように、当初SoRA2はEURJPY専用EAとして作ろうと思っていました。
その理由は利益が出る通貨ペアが1つあれば、複数の通貨ペアまで手を広げる必要性はないのではないかと思ったからです。

そんな訳でSoRA2の開発をスタートさせました。
実際にはビジュアルモードでチャートを見ながらインジケーターを置き、エントリーと決済の動きを1件ずつ確認していきます。
その中で違和感のあるポイントなどをExcelに書き留めておき、再度ビジュアルモードで確認をする。この間、一回も最適化機能は使わないので、成績が出ているのかどうかが分かりません。
あくまでチャートに出ている情報だけを信じてロジックの作りこみを行いました。

やってみてから気づいたのですが、この作業がとても大変で、やり始めてから相当後悔しました(汗
そもそも何が正解がわからないですし、1件1件エントリー、決済ポイントをのスクショを取り、それを画像データとしてExcelに張り付け少しずつ動きを変えて変化を見る…こんな途方もないことをずっとやっていたので、相当シンドイ想いをしました。。。

ただ、これが結果的にロジックをそぎ落とすことにも繋がりました。
何せ、複雑なロジックだと検証がとても面倒臭いのです。もはやチャートを見る気すら起きません。
そして、ロジックを少しずつ分解し外していく過程で、パラメータの値も汎用的によく使われる値にロックして、その値だけを使うようになりました。ホント、そうしないと検証なんてやってられなかったですw

しかし、そんなことをやりながら少しずつデータが貯まっていく中で、私の中での傾向性とある程度の確証が見えてきました。
そうして、自分の納得のいく動きをするようになった段階で、最後にバックテストで数字情報を確認するようにしました。
それが、以下のような結果です。
sora2_eurjpy
元々、チャート情報はEURJPYの直近3年程度を使って行いましたが、あくまでチャート情報は個々のエントリー、決済ポイントを見ていただけに過ぎないので、この3年間でどういう損益グラフになるのかはわかりませんでした。

初めてこの結果を見た時、これはアウトオブサンプルテストの結果として使えると思いました。
つまり、疑似的にフォワードを回した結果として評価できるのではないかと考えました。

ロジックをSoRA以上にそぎ落として簡略化し、バックテストでもこれだけの数字が出せるのであれば他の通貨ペアでも通用するのではないか?と思い、試しに他の通貨ペアでもやってみることにしました。

と、ここでどの通貨ペアを使うか考えました。
ここまでの検証でEURJPYは売りと買いで傾向が違いがあることが分かっています。そのため、パラメータは売りと買いで分けているのですが、通貨ペアの組み合わせによってはこのパラメータが適応できない可能性があると考えました。そこで一貫性を持たせるため、クロス円で通用するかどうかを調べることにしました。
その結果、USDJPYGBPJPYは適応できそうな結果が出てきました。
sora2_usdjpy
sora2_gbpjpy
これら3通貨ペア(EURJPY、USDJPY、GBPJPY)は完全同一パラメータで動いています。
しかも、これらの通貨ペアでバックテストを行ったことすらないので、これもアウトオブサンプルテストの結果として捉えられるのではないかと思いました。

更に、ロジックの有効性をもう少し検証したいと思い、買いのパラメータ、売りのパラメータを選択できるようにしておいた上で通貨ペアの適性を調べてみると、CHFJPYAUDJPYGBPUSDの通貨ペアでも使えそうな損益曲線になりました。
sora2_chfjpy
sora2_audjpy
sora2_gbpusd2
勿論、それぞれの通貨ペアで最適化機能を使えばもっと良い損益曲線は導き出せるかもしれません。しかし、それをすると当初の思想から外れてしまいます。
また、この結果はEURJPYの汎用性を裏付けるために試したことだったので、これだけの結果が出れば十分だと考えるようになりました。


SoRA2の完成
ここまできてSoRA2の形はでき上がりました。
後は実際のフォワードに回して検証してその有効性が確認できればOKです。
この時、EURJPYだけを動かそうと思ったのですが、一応検証という意味で先に挙げた5通貨ペアも一緒に動かすことにしました。

現時点までのSoRA2のフォワード結果は以下のようになっています。
sora2_real
sora2_fw
SoRA2はReal Tradeでもフォワードを動かしていますので、そっちも載せています。
1件ずつの動きはMyfxbookの方を見ればわかるのですが、想定した動きをしてくれており、ここまでは順調に推移しています。
これを見ると、EURJPY自体一番利益が出ている通貨ペアではありますが、それ以外の通貨ペアとのポートフォリオも成立するような動きをしてくれていました。
(GBPUSDはフォワード開始後350pipsほど取っていたことが分かったのですが、私のミスで動いていませんでした。。。以下はFEATのフォワードです)
sora2_gbpusd

SoRA2のEAとしての特徴をまとめてみます。
  • 4時間足専用EA
  • ロジックが相当簡略化されており、インジケーターのパラメーターは一般的に使用される数字のみを採用
  • 複数通貨ペアでの適性あり(全通貨ペア同一ロジック、同一パラメータを採用)
  • 勝率50%前後で利大損小型
  • チャートのみで作成し最適化機能を使っていないため、バックテストの結果はアウトオブサンプルテストの結果として評価できる
少し補足させていただくと、4時間足を採用したことでコロナ禍の相場やアメリカ大統領選挙などの地政学的リスクを吸収しやすくなっているように感じました。
また、利大損小のスイング型なので、スキャルピング型などと違い環境差も少ないように思います。

ただ、ロジックの関係上、負ける時は一気にSLまで行くことも多いです。
この動きについては一考したのですが、裁量を考えた場合、勝ち負けのルールを明確にしておくことが利益を出す事の第一歩だと私は考えています。そこに準えると、損失を抑えるロジックを入れることでルールを複雑にしてしまうことが、結果的にEAの寿命を短くしている可能性があるように感じました。(損失ロジックが嵌らない相場になると、結果として想定していた以上に損失が大きくなってしまうためです)

そのため、このSoRA2は勝ち負けを分かりやすくしておくことで利益を積み上げられるようなEAにしたいと結論付け、この形を採用しました。(ただし、この辺は利用する人の考え方もあるので、EA上は柔軟に対応できるようにしたいと思っています)


SoRA2のリリースについて
このような経緯ででき上がったSoRA2ですが、リリース方法は以下のようにさせていただいております。

①SoRA2
ロジック解説あり、全パラメータ解放、インジケーター付きの開発者エディションに位置付けている版で、すべての通貨ペアが利用でき、ご自身でSoRA2をチューニングすることもできます。

②SoRA2 for FEAT
FEATにリリースしたSoRA2です。USDJPY、GBPJPYの2通貨ペア版があります。

昨今はスキャルピング型のEAを利用されている方が多いと思いますので、よろしければスイング型のEAとしてポートフォリオにご検討くださいませ。。。


最後に。
HANA2についてですが、今回のSoRA2を踏まえ、SoRA2の開発手法で作り直しをしております。少しずつ形になってきておりますので、こちらもご紹介ができるようになりましたら、改めてお伝えさせていただきます。