takahのEA開発ブログ

MetaTrader4(MT4)上で動く自動売買ソフト(EA)の開発をしています。 自作EAの紹介や無料EAの配布など、EAに関することを思うままに書いております。

私はEAは「買い方」と「賭け方」の組み合わせから成り立っていると考えています。

「買い方」とはどのタイミングでエントリーや決済を入れるかで、EAのロジック的な部分のことを指します。
「賭け方」とはどのような金額を入れるかで、ベッティング(Betting)のことを指します。

ベッティングにはナンピン、マーチンなど高い効果を生む可能性がある一方、扱いがとても難しいため、個人的に使っているEA以外にはリスク軽減の意味からベッティングルールがない単一ロットで動くEAにさせてもらっていました。

ただ、賭け方が仕込まれているEAはリスクが高くなる半面、爆発力も秘めています。
そこで、先日完成したSoRA2にベッティングルールを仕込んだらどうなるのか?と興味が湧き、ちょっと作ってみることにしました。

私がベッティング系EAを作る場合、ナンピンマーチンではなくピラミディングをカスタマイズして作ることが多いので、今回もそれで作ってみました。(個人的にナンピンマーチンが苦手っていうのもありますが…)

んで、できたEAがこちらです。
sora2pe
qa_sora2pe
数値的にはこんな感じになりました。
sora2比較
あくまでバックテスト上の結果ではありますが、LE(ベッティングルールなし)よりPE(ベッティングルールあり)の方が取引件数や最大DDが約2倍になっているにも関わらず、利益がそれ以上の約2.6倍になっている所は興味深いですね。
つまり、LEでロットを2倍にするより、PEの方が利益が高くなるという結果になっています。
また、平均勝ちトレード、負けトレード、勝率の誤差がほとんどないにも関わらず、期待利得が高くなっているのも目が行きますね。この辺はピラミッディングのベッティング効果が出ているのかもしれません。

ちなみにSoRA2は多通貨ペアでの適性がありましたが、PEはユロ円ほど大きな効果が見られなかったので、PEはユロ円専用で考えた方が良いかと思っています。

このPEは個人用として作ったのでリリースさせていただくかどうかは白紙ですが、もしリリースさせていただく場合は完全版の特典にでもしようかなと思っています。。。
RSS このエントリーをはてなブックマークに追加


久しぶりの投稿です。
私の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 LEをお持ちの方は差額でアップデートさせていただきます。

②SoRA2 LE(Limited Edition)
元々想定していたSoRA2で、EURJPY専用EAです。
ロジック解説なし、パラメータの設定は必要最小限になっています。
SoRA開発者エディション、プレゼントエディションをお持ちの方は無償で配布いたします。

③SoRA2 for FEAT
FEATにリリースしたSoRA2です。EURJPY、USDJPY、GBPJPY、AUDJPY、GBPUSDの5通貨ペア版があります。

現状、この3形態でリリースさせていただこうと思っておりますが、まだお話をいただいているところもありますので、今後増える可能性もあります。。。
また、①と②の価格については少し抑えて提供させていただくことを考えており、来年1~2月のリリースに向けて準備しております。

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


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

次にHANAの近況も書かせていただきます。
hana_all
ここの所、すっかり右肩下がりになってしまっていますね。。。
これも結果なので受け入れざるを得ませんが、もう少し詳しく見てみます。
hana_honke
まずは本家、タイプT組。
どちらもロジックは同じですが、本家はトレイルなし、タイプTはトレイルありです。
これはHANA全体に言えることなのですが、今回のマイナス基調ではトレイルがないことでマイナスが大きくなっていました。。。
トレイルがあることで大きく利益は積み上げられませんが、マイナスへの振れ幅が小さいのでリスクを考慮して動かすという考え方はあるかしれませんね。
hana_usdjpy
こちらはドル円組。
hana_eurusd
こちらはユロル組。
hana_usdcad
これはGypsoドルカナ版。

ドル円、ユロルのどちらも同じような傾向が見られますが、ドル円の方が比較的損益曲線がなだらかになっており、ユロル組の方が荒れてます。

ここから、ドル円組の方が相場の傾向に対して素直に反応しているように見えます。勿論、マイナス側に反応しているのでよろしくはないのですが、相場の傾向が変わればプラス基調に変わってくるのではないかと想定しています。

ユロル組については損益の振れ幅が大きく安定していないイメージがあります。
こういった損益グラフは爆益を生む可能性がある分、DDが大きくなる傾向もあるので、動きを注視していく必要があると思っています。

そして、ドルカナについてもマイナス基調になっています。
動きとしては利確時の利益を伸ばし切れていないこと、勝率が若干低いことがが要因のように見えますので、この辺の動きが改善するまで静観になるかと思っております。

今回、久しぶりにHANAの状況を報告させていただいたのですが、ここからはHANAに対する私の考えを書かせていただきます。
まず、HANAの調子が振るわないことに対しては大変不甲斐なく感じております。

ただ、私自身HANAを動かし続けており、HANAの販売を停止するつもりは今の所ありません。
利益が出ていないEAを販売するのか?という声もあろうかと思いますが、利益が出なくなった途端にEAを販売しなくなるというのも違うような気がしているからです。

そもそも論として、利益が出ていないEAなのでそれを購入される方はおられないと思いますが、それ以上にこの現状でも稼働されている方はおられます。そういった方が1人でもおられる以上、販売停止するのは私の考えに反します。

また、自分が自信をもってリリースしたEAを停止することはそのEAを見捨てることにもなりますし、そういったことは最後までやりたくないと思っています。
自分のEAがマイナスになるということは私の力が不足していたということです。それを包み隠さず表すこともEA作者の責任だと私は考えます。私はそういうEA作者でありたいと考えています。

そして、HANA2についてですが、現在はEA-1でテスト運用していますが、もう一度見直しをしたいと思っています。
その理由はSoRA2でもお話ししましたが、開発手法の見直しをHANAにも適用させたいと思っているからです。ただ、そのためにはHANAのロジックは複雑すぎるのでもう少しロジックを簡略化させる所から見直し、相場に適用する形を模索してみようと思います。

恐らくまたもや相当時間がかかると思いますが、形になるまで何とか頑張っていきたいと思います。。。
RSS このエントリーをはてなブックマークに追加

↑このページのトップヘ