EA開発のコツ

  • 2022.10.04
  • MT5
EA開発のコツ
EA開発のコツ

EAとはExpert Adviser(エキスパート・アドバイザー)の略で、Meta Trader4(MT4)やMeta Trader5(MT5)上で稼働させる自動売買の名称です。

筆者はこのEAを何個も作り、効果的なEAを開発するコツをやっとの思いで掴みました。

まだまだ勉強中ですが、開発の進め方や考え方などをご紹介出来ればなと思います。

自動売買のプログラムを書く前に良い(勝てる)ロジックを考える事が普通だと思っている方は多いと思いますが、その方法ではうまくいきません。

まずはシンプルなロジックで作り、バックテストや最適化でEAを育てていくやり方が確実に有効なEAを開発出来ます。

この方法は普通ではないかもしれませんが、この方法でBTC_Scalping、MT5_Arbitrage、BTC_Swingを開発しました。

私自身EAをどのように開発しているのかや、気付いた点などをご紹介していきます。

トレードに聖杯はあるのか

誰でもどんな相場でも利益を上げ続ける手法「聖杯」は誰でも探したくなる魅力があります。

私も聖杯を探し求め、ネットの情報商材などでシステムトレードや手法といったものを勉強し、色々なロジックをEA化しました。

聖杯探しをする中でEAをロジックの検証に使えるようになっていきました。

聖杯探しは多くのトレーダーが失敗しており、1つのロジックでは勝ち続けれない事は定説になっていますが、EAを通してそれを体感する事が出来ました。

テクニカル分析

テクニカル分析とは値動きをグラフ化したチャートを色々な計算方法で分析する事です。

トレードするときチャートを見て裁量でトレードを行う方は多いと思いますが、自動売買も売買条件であるロジックにテクニカル分析を用いる事が多くあります。

余談ですがトラップリピートイフダン系のEAはテクニカル分析は不要で、価格変動のみで売買していく仕様です。

インジケータを色々と変えてチャートに表示させていくと、何か秘密の法則を見つけれる気がしてきます。

チャートを少し遡って目視で検証していくと「ここで必ず反転している」と思えてきます。

しかし、同じような相場がずっと続く事はなく、一見すると法則通りの値動きになっているように見えても長期的にテストするとマイナスになります。

コンピュータは条件に当てはまる全ての場面でエントリーしますので、目視ではエントリーしていない箇所でもエントリーして負けている事がよくあります。

テクニカル分析を使ったロジックの組み立てはまず骨子となるシンプルなロジックを作成し、バックテストや最適化を繰り返してEAを育てるように開発を進めていくと徐々に質が上がってきます。

当サイトで販売させて頂いている「BTC_Scalping」はこの方法で大事に育てたEAです^^

BTC_Scalping

順張りか逆張り

骨子となるシンプルなロジックを作成する事から始めるのですが、その最初のロジックは逆張りにするのか順張りにするのかだけは決めなければいけません。

順張りとは値動きのトレンドに沿った方向へエントリーする手法です。例えば上昇トレンド中に買いエントリーを行う事を順張りと言います。

逆張りは順張りと逆でトレンドに反した方向エントリーする手法です。例えば下降トレンド中に売りエントリーを逆張りと言います。

順張りは「まだまだトレンドが続く」と予測してエントリーする手法で、逆張りは「もうトレンドは終わって反転する」と予測するものです。

骨子となるロジックは順張りか逆張りを決め、王道と言われるようなお決まりのロジックをまずは作成します。

順張りは「移動平均線のパーフェクトオーダー」や「ADX上昇時」などがあります。

逆張りは「ボリンジャーバンドにタッチ」「MACDクロス」「移動平均線クロス」などでしょうか。

バックテストとフィルター追加

(↑バックテスト画面)

骨子となるロジックのEAが出来たらバックテストをします。当然最初のテストではマイナス結果となり、プロフィットファクターは1以下になります。

この時点でEAに可能性がないと判断して他のロジックを試したくなる事は、EAを開発した事があれば共感して頂けると思います。

ですが、この時点で収益が出せるEAはなかなか出来ません。

ここからロジックを組み立てていきます。まずはフィルター機能の追加です。

フィルターとはエントリー回避機能の事です。機能と言いましたが、要はエントリー条件にエントリーしない条件を追加する事です。

上記の例ですと、「ボリンジャーバンドの-α(下部の線)にタッチしていて、尚且つ移動平均線より上にある場合に買いエントリー」といった仕様に追加します。

移動平均線と現在価格の比較を追加する事で移動平均線より価格が上にあるような上昇トレンド時のみ買いエントリーを行う仕様になります。

このフィルター機能もON/OFFの設定が出来るようにしておくと後で最適化の際に役立ちます。

もう一点気を付けたい点があります。フィルター機能を追加する際、厳しすぎるフィルター条件ではうまくいきません。エントリー回数が減りすぎる為です。

EAを育てるという事はエントリーを減らして精度を上げるという事です。

ですので厳しすぎるフィルター条件で一気にエントリー回数が減ると育てようがなくなります。

最適化

最適化とはEA稼働時に設定するパラメータの組み合わせの中で、最も利益が出る数値を計測する事です。

EAで使用するインジケータにはそれぞれ設定項目があり、その数値を細かく(細かさは設定可能)変更してバックテストを繰り返し、最適な設定値を導きます。

先ほどの例えでご説明します。

「ボリンジャーバンドタッチで尚且つ移動平均線より高い価格(安い価格)の場合にエントリー」というロジックの場合、ボリンジャーバンドは①期間と②標準偏差(α)の値、の項目があります。
移動平均線は③期間と④種類があります。さらに⑤フィルター機能のON/OFFの設定もあります。

この5つの組み合わせだけでも無数にあります。その中から最も利益が出る組み合わせを探します。

その際にカーブフィッティングや過剰最適化と言われる失敗に気を付ける必要があります。

カーブフィッティングとはテストする期間だけにパラメータ設定を合わせた状態です。極端な例でしたらシンプルなロジックでも偶然設定したその日は全勝する日だった場合、その日に合わせて最適化すれば当然全勝で、最適化が成功したように見えます。

ですが当然、最適化した日だけに合わせた設定値なので、他の日も同じように利益が出る事はありません。

長期間総合的に勝てるような設定値を見つける必要があります。

そのためには最適化した期間とは別の期間でもテストしてみる必要があります。

また、最適化してもまだ改善の余地がある場合、つまり省けるエントリーが多くある場合は再度フィルター条件を追加する場合もあります。

最適化と条件追加を繰り返してEAを育て、磨き上げていきます。

特に仮想通貨の自動売買は為替と違い過去のデータが少なく、相場の流れもコロコロと変わるので常時最適化出来る自動最適化はとても有効なのです。

最適値を異なる期間でテスト

なぜ最適化した設定値を異なる期間でもテストする必要があるのでしょうか。

これはカーブフィッティングになっていないか確認する為です。

カーブフィッティングになっていると最適化した期間では利益が出てていても、異なる期間でテストすると利益が全く出ない、という状況になります。

例えば2010年~2022年までの価格データがある場合、2016年~2022年の期間で最適化して最適値を求めた後、2010年~2016年でも同じ設定値でテストし、利益が出るか検証します。

売買回数が極端に少なくなる設定値も避ける

複数のブローカーで稼働

最適化とフィルター条件の追加である程度EAの仕様が出来上がったらデモ口座で稼働させ検証していきます。

その際一つのブローカーだけで検証するのではなく、複数のブローカーで検証します。

どのブローカーで運用すれば最も利益を最大化出来るかを検証します。最初はデモ口座で行いますが、最終的にはリアル口座で検証します。

今はあまり聞きませんが、一昔前はストップ狩りや約定拒否、ノミ行為などをする悪質な海外ブローカーがありました。

1つのロジックでは安定しない

最適化やフィルター追加を繰り返し、効果的なEAに仕上がっても、長期的・安定的に利益を上げ続けるには1つのロジックでは難しいです。

最適化で総合的に相場に合うように仕上げても、やはり相場に合わない稼働になってしまう場面が出てきます。

そこで「自動最適化」です。

常に相場に最適な状態で稼働・運用が出来る高精度の機能です。

詳しくは下記のページをご拝見下さい。

最適化は「自動最適化」に任せる

自動最適化はAIのようにEA自身が相場に合わせてロジックを組み立て、最適な設定値を計測し、常にベストのロジックを選択して運用する機能です。

MT5にある機能の中でも自動最適化は代表的な機能です。

MT5カテゴリの最新記事