『新メタトレ入門本』EAの自動売買のためのプログラミング
『新MT4対応 FXメタトレーダープログラミング入門』(新メタトレ入門本)連動企画です。
今回は、本書の第4章「エキスパートアドバイザー(EA)のプログラミング」の最後のセクション「4-7 EAの自動売買のためのプログラミング」についてです。
【目次】
第1章 メタトレーダーの紹介
第2章 スクリプトのプログラミング
第3章 カスタム指標のプログラミング
第4章 エキスパートアドバイザー(EA)のプログラミング
4-1 新規ファイルの作成
4-2 EAの基本プログラム
4-3 ストラテジーテスターによるEAの動作確認
4-4 EAのサンプルプログラム
4-5 EAのデバッグ
4-6 ストラテジーテスターによるEAの最適化
4-7 EAの自動売買のためのプログラミング
本書アップデート情報
このセクションでは、本書内容のアップデートはありません。
関連するMT5情報
MT5でEAを実際にチャートで動かす際の手順やMQL5でのプログラミングについて、MT4、MQL4との違いを説明します。
EAの実行
EAの実行の仕方はMT4と同じです。実行させたいEAをチャートにドラッグ&ドロップします。
そのときに確認の画面が出ますが、これはMT4よりシンプルです。
「アルゴリズム取引を許可」にチェックが入っているか確認するだけです。
スリッページの調整
MQL5のOrderSend()関数で、スリッページの設定を行うには、「request.deviation」にスリッページを設定した上でOrderSend()を実行します。
例えば、スリッページが「Slippage」という変数に入力されている場合、
request.deviation = Slippage;
と記述します。
EA再実行時のチケット番号の取得
MQL5のOrderSend()関数で、マジックナンバーの設定を行うには、「request.magic」にマジックナンバーを設定した上でOrderSend()を実行します。
例えば、マジックナンバーが「Magic」という変数に入力されている場合、
request.magic = Magic;
と記述します。そして、このマジックナンバーの付加されたポジションのチケット番号をEAの実行時に取得するには、以下のようなコードを初期化関数OnInit()に追加します。
//チケット番号の取得
for(int i=0; i<PositionsTotal(); i++)
{
if(PositionGetSymbol(i) == _Symbol && PositionGetInteger(POSITION_MAGIC) == Magic)
{
Ticket = PositionGetInteger(POSITION_TICKET);
break;
}
}
ポジション選択の考え方は基本的にはMQL4と同じですが、呼び出す関数が異なっています。
PositionsTotal()は、MQL4のOrdersTotal()に対応する関数です。オープンポジションの個数を返します。
「PositionGetSymbol(i)」は、i番目のポジションを選択して、選択が成功すれば、シンボル名を返します。
それが「_Symbol」と一致するという条件は、MQL4の「OrderSelect(i, SELECT_BY_POS) && OrderSymbol() == _Symbol」と同等の条件となります。
あとは、PositionGetInteger(POSITION_MAGIC)が、MQL4のOrderMagicNumber()と同じ、PositionGetInteger(POSITION_TICKET)が、MQL4のOrderTicket()と同じと考えればOKです。
売買位置の表示
MQL5のOrderSend()関数では、売買位置を表示するためのカラーの設定項目はありません。
MT5では、売買位置の表示は個別にプログラムから制御することはできず、MT5の設定で一括して管理されています。
以下のように、チャートメニューか、チャートプロパティに「取引履歴」という項目があります。
これを有効にすると、チャート上に売買位置が表示されます。
取引を通知する
通知に関するAlert()、SendMail()、SendNotification()の各関数は、MQL5でも同様に利用することができます。
サンプルプログラムex10_ea.mq4をMQL5用に修正したコードは以下のようになります。