↓そもそも「MT4って何?」という方はこちら。
メタトレーダー(MT4)の使い方!入手方法も解説
↓サンプルEAの動かし方や評価、改編方法は以下
MT4で自作するFX自動売買システム(EA)とは?作り方を徹底解説!
1.【質問】1ウィンドウで複数通貨や時間足を管理したい
複数のウィンドウでユロドルとユロ円に同じEAを使用しています。
先日同時に売買条件が成立した様で片方の注文がキャンセルされました。
解決方法を調べていますがあまり良い回答が得られていません。
1つのEA内で取引条件をチェックするような方法はないでしょうか。
2.【回答】条件分岐で実現可能です
関数のパラメータに通貨ペアや時間足の指定があるかと思います。
そこでチャートと異なる条件を指定することは可能です。
EA内で希望の通貨ペアや時間足を順にチェックすればOKです。
今回ご紹介する内容
①1つのEA内で複数の通貨ペアの取引条件を確認する方法
②1つのEA内で複数の時間足の取引条件を確認する方法
取引量の多い通貨ペア5つ
実際に使うかは別として知識として抑えておきましょう。
主要5通貨
1位 EUR/USD (ユーロ/米ドル)
2位 USD/JPY (米ドル/日本円)
3位 GBP/USD (英ポンド/米ドル)
4位 AUD/USD (豪ドル/米ドル)
5位 USD/CAD (米ドル/カナダドル)
複数のケースが存在する分岐はswitch()で定義
switch(i){
case 1:(条件1)
break;
case 2:(条件2)
break;
default:(条件3)
break;
}
変数iが1の場合は条件1、2の場合は条件2を読み込みます。
それ以外の場合は条件3を読み込みますが、必須ではありません。
ForRoopとSwitch関数の組み合わせで実現
複数の通貨ペア、複数の時間足の順でサンプルコードを紹介します。
①1つのEA内で複数の通貨ペアの取引条件を確認する方法
こちらで公開しているコードの該当部分を以下に差し替えてください。
マーカの部分が主な変更点です。
command //------------------------------------------------------------------------------------ // 0. main : メインロジック //------------------------------------------------------------------------------------ input int Ma1 = 1; // MA1(now) input int Ma2 = 7; // MA2(short) input int Ma3 = 25; // MA3(mid) input int time = 15; // time double M0[5],M1[5],U1[5],L1[5],M2[5],M3[5]; int result; bool goflg; string rcur="USDJPY"; void main(){ #ifndef DEBUG for (int i=1;i<=6;i++){ currency(i);// 通貨選択 getprm(); // パラメータ取得 check(); // エントリー条件確認 position(); // 発注用関数 } #endif #ifdef DEBUG getprm(); // パラメータ取得 check(); // エントリー条件確認 position(); // 発注用関数 #endif return; } void currency(int i){ switch(i){ //Main Currency case 1: rcur = "EURGBP"; break; case 2: rcur = "EURUSD"; break; case 3: rcur = "GBPUSD"; break; case 4: rcur = "GBPJPY"; break; case 5: rcur = "EURJPY"; break; case 6: rcur = "USDJPY"; break; } }
(注意)リアル口座専用になります。
変数rcurで取引する時間足を順番に設定し条件が成立しているか調べます。
通貨ペアごとに条件を変えたい場合は check() 関数内で別途定義して下さい。
②1つのEA内で複数の時間足の取引条件を確認する方法
こちらで公開しているコードの該当部分を以下に差し替えてください。
マーカの部分が主な変更点です。
command //------------------------------------------------------------------------------------ // 0. main : メインロジック //------------------------------------------------------------------------------------ input int Ma1 = 1; // MA1(now) input int Ma2 = 7; // MA2(short) input int Ma3 = 25; // MA3(mid) input string rcur = "USDJPY"; double M0[5],M1[5],U1[5],L1[5],M2[5],M3[5]; int result; bool goflg; int time =15; // time void main(){ #ifndef DEBUG for (int i=1;i<=4;i++){ Selecttime(i);// 時間選択 getprm(); // パラメータ取得 check(); // エントリー条件確認 position(); // 発注用関数 } #endif #ifdef DEBUG getprm(); // パラメータ取得 check(); // エントリー条件確認 position(); // 発注用関数 #endif return; } void Selecttime(int i){ switch(i){ case 1: time = 1; break; case 2: time = 5; break; case 3: time = 15; break; case 4: time = 60; break; } }
(注意)リアル口座でのみ使用可能です。
変数timeで取引する時間足を順番に設定し条件が成立しているか調べます。
時間足ごとに条件を変えたい場合は check() 関数内で別途定義して下さい。
補足1 イレギュラーな手段なので注意が必要です。
チャート外のデータはバックテストできないためチェックが非常に困難です。
各通貨ペア、時間足で利益が出ることを確認した上で組み合わせる必要があります。
思い付きのロジックをリアル口座で試すことはしないようにして下さい。
補足2 通貨ペアリストにない通貨は指定できません。
各証券会社が扱っていない通貨ペアはもちろん
MT4上でデータを取得していないペアも使用できません。
必ず気配値表示を確認するようにして下さい。
3.EA開発に詰まったら
EA開発に限らず、物事に詰まったら外部の知識を頼るのが賢い選択です。
以下ではトレードとプログラミングに役立つ参考書籍やサービスを紹介します。
①書籍でトレードの勉強
基本ブログ内で完結するよう心がけていますが、以下の本があると理解が深まります。
シリーズものですがとりあえず1冊読んでみると良いかと思います。
②無料のプログラミングスクールを活用
ソースコードの理解に苦しむようであれば初級レベルのプログラミングを学びましょう。
最初の基礎ベースを身に着けるならTechAcademyがおすすめです。
TechAcademyは1週間の無料体験があるので、それで十分学べるかと思います。
4.まとめ
本記事では1つのEA内で複数の通貨ペアや時間足を条件化する方法を紹介しました。
4時間足でトレンドを把握、5分足でエントリーなど工夫次第で応用が効きます。
色々試してみて下さい。
その他のロジックについて知りたい方は以下の記事を参照下さい。
>>参考:『FX自動売買システム(EA)の自作に困った際のヒント集』
以上、参考になれば幸いです。