isseium's blog

田舎に住むWebエンジニアのブログ

MetaTrader4 日記2〜初めてのMQL4プログラミング〜

MQL4の基礎

メタトレーダー4でのプログラミングに関連する情報は次のようになっております。

プログラミング言語 MQL4
エディタ MetaEditor
コンパイラ MetaLang
ソースファイル拡張子 mq4
ヘッダファイル拡張子 mqh
実行ファイル拡張子 ex4

C言語を触ったことのある人であれば、取っつきやすいかもしれません。

作成できるプログラム

カスタム指標プログラム

オリジナルのテクニカル指標を作成し、チャートに挿入して表示できます。

エキスパートプログラム(EA: Expert Advisor)

自動売買プログラム。
過去の市場に対してアルゴリズムを適用して、その妥当性を測るバックテストも可能。

スクリプトプログラム

複数処理をまとめて行うプログラム。
トレード関数を利用することで、実際にトレードも可能。
EAとの違いは、手動で実行したときに一連処理を行うだけで、常にチャート上で実行し続けることはない。

ライブラリプログラム

ライブラリを作成し、他のプログラムで利用します。

Hello, MQL4!

と、いってもMQLにはC言語でいうprintf()関数はないので、「Hello, world!」に近い簡単なことを行ってみましょう。
MetaTraderに興味のある人は、自動売買に興味があると思います。
まずは簡単なEAを作ってみたいと思います。

MetaEditor の起動

MetaTrader のメニュー真ん中あたりにある警告マークをクリックします。

ファイルの新規作成

File -> New... -> 「Expert Advisor」 -> 次の表のような感じで入力

Name hellomql4
Author Isseium
Link http://twitter.com/isseium
parameters なにもなし

完了をクリックすると、スケルトンが挿入されたファイルができあがります。

プログラムを書く

プログラム要件(永遠に買い続けるプログラムなので間違っても本番で使わないように!)

  1. データが更新されるたびに起動
  2. 1ロット成行注文 → (3秒後) → 1ロット成行注文
  3. スリッページ 3pips


int start()関数を次のようにします。

int start()
  {
   // 注文送信
   // 表示している通過ペアを、成り行き買いで、1ロット、現在値、スリッページ3、損きり値なし、利食い値なし
   OrderSend(Symbol(), OP_BUY, 1, Ask, 3, 0, 0); 

   Sleep(3000); // 3000ミリ秒待つ

   // 注文送信(上と同じ)
   OrderSend(Symbol(), OP_BUY, 1, Ask, 3, 0, 0);

   // プログラム(関数)終了
   return(0);
  }
コンパイル

キーボードのF5を押して、コンパイルします。
エラーがでなければ、コンパイル成功です。

EAを実行する
  1. 「ナビゲーター」ウィンドウの「Expert Advisors」に先ほどコンパイルしたプログラムをダブルクリック
  2. 「Live Trading」のチェックボックスをオンにし、「OK」を選択
  3. メニュー下のツールバーの「Expert Advisors」をクリックして再生マークに変更

以上で、自動売買が開始されます。下の「ターミナル」ウィンドウの「Experts」や「取引」タブを見ると取引の様子がわかります。

EAを停止
  1. メニュー下のツールバーの「Expert Advisors」をクリックして停止マークにします


雑多な記事になってしまいましたが、こんな感じです。