MT4でプラグインを探しても今一つなので自分で作ってしまおうという記事です。
多少プログラムを知っていればそれほど難しくないという噂なので。もっとも自動売買は絶対バグは無いようにしないと怖いですが…
MQL4言語
MT4のインジケータ等をつくるには、MQL4言語を使い専用の開発ツールであるMetaEditorを使います。これはMT4に同梱されていますので他から持ってくる必要はありません。
既にMT4を色々使っている方は分かると思いますがプログラムには大まかに2種類あります。
- エキスパートアドバイザ
- 主に自動売買するためのものでEAと呼ばれています
- インジケータ
- チャートに平均線を引いたりする表示系
MetaEditor
MT4のメニューの中にあるこのアイコンをクリックします・
これでMetaEditorが起動します。
「View」「languages」「Japanese」で日本語化できますが、全て日本語になるわけでもありません。個人的には英語のままにしています。後々トラブった時に検索を世界中から探せるのでメリットがあるので。
これでプログラムできる状態になりました。
エキスパートアドバイザ
プログラムで定番のHello Worldを表示させる簡単なエキスパートアドバイザを作ってみます。
「File」「New」をクリック
Expert Advisor を選択して「次へ」
Nameの欄にあるExperts\ の後に適当な名前のプロジェクトを作成して「次へ」
例:Experts\TestHelloWorld
Event Handlerは今は使いませんので「次へ」
こちらも今回使いませんので「完了」です
MetaEditorに TestHelloWorld.mq4 が表示されコーディングできるようになりました。
コーディングと実行
とりあえずint OnInit(){} の中に以下のように記述します。
1 2 |
ObjectCreate("ObjName", OBJ_LABEL, 0, 0, 0); ObjectSetText("ObjName","Hello World",32, "Verdana", Yellow); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
//+------------------------------------------------------------------+ //| TestHelloWorld.mq4 | //| Copyright 2017, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2017, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- ObjectCreate("ObjName", OBJ_LABEL, 0, 0, 0); ObjectSetText("ObjName","Hello World",32, "Verdana", Yellow); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- } //+------------------------------------------------------------------+ |
これを記述して、Compileします。
以下のようにエラーが出ているなければコンパイル成功です。エラーの場合はその理由を調べます。この程度でのエラーは記述間違いが多いでしょう
次は実際にMT4上で実行させます。
MT4のナビゲーターを見るとエキスパートアドバイザに先ほどから作成したTestHelloWorldができています。これをチャート上にドラッグ&ドロップします。
設定画面です。このまま「OK」をクリック
するとチャート上に「Hello World」が表示されました。
ところで、EAの用途は自動売買なのであまりこういった表示ものには適していません。EAを終了させないと文字表示が続きます。
停止させるにはチャート上で右クリック
「エキスパートアドバイザ」「削除」を行うと
チャート右上に表示されていたTestHelloWorldが消えます。ただしこのチャートから表示がきえないので、ウィンドウを一旦消して新しいウィンドウをだしてください。
インジケータ
作成方法は同様です。最初の「Expert Advisor」の選択を
「Custom Indicator」にするだけです。また、Hello Worldを表示させるコードはそのままです。
今度はインジケータに「TestHelloWorld」ができています。
これをチャートにドラッグ&ドロップすると同様に「Hello World」が表示されています。
停止方法は、チャート上で右クリック「表示ちゅうのインディケータ」から該当するものを削除すれば停止します。ただこのプログラムは初期化で設定しているので、このウィンドウは消さないと文字は消えません。