メタエディタを使って自作EA作成の始めかた(MQL4)


ではMT4のインストールとダウンロードのやり方でMXのMT4をダウンロードしたと思いますので、デスクトップ上に上記の画像のようにMetaEditor 4のアイコンをダブルクリックしてメタエディタを立ち上げて下さい。


メタエディタを立ち上げると上記のような画面になります。青枠で囲っている新規作成をクリック。
Expertsの前にある+マークをクリックするとMetaQuotes社のサンプルがあらかじめ入っています。(青枠下)


新規作成をクリックすると上記の画面が立ち上がります。”エキスパートアドバイザー(テンプレート)”が選択された状態で次へを押して下さい。


赤線の上にSampleEAってありますが、私が入力したものです。好きな名前をつけて次へをクリックして下さい。


何もせず”次へ”


何もせず”完了”をクリック


はい。SampleEAが作成されました(赤枠)
で初期の状態のコードが下記です。

//+------------------------------------------------------------------+
//|                                                     SampleEA.mq4 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
//---

//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---

}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
//---

}
//+------------------------------------------------------------------+

ではここからは前回の続きを書いていきたいと思います。
前回の記事は下記からどうぞ
自作EAを作るためのEA設計図のつくりかた

外部変数の変数名を決めよう

前回の記事でも書きましたが今回の外部変数の定義一覧は下記です。

  • ロット数(input)
  • 損切りpips(extern)
  • 利食いpips(extern)
  • スリッページpips(extern)
  • マジックナンバー(EA識別番号)(input)

変数の名前は非常に大事です。なぜなら、その変数に何が入っているのかわからなくなっては可読性がなくなってしまって後日編集するのが大変だからです。
なので変数名にaとかbとかをつけるのはその場は良くても後々困ったことになりますのでやめましょう。

input double a; //ロットサイズ
input double LotSize; //ロットサイズ

さぁどっちが良いかって話です(笑)

今回は下記のような変数名にします。
※項目()内が変数名となります

  • ロット数(LotSize)
  • 損切りpips(StopLoss)
  • 利食いpips(TakeProfit)
  • スリッページpips(Slippage)
  • マジックナンバー(MagicNumber)

これは別にローマ字で変数名にしても良いのですが、
例えば
ロット数⇒rottosaizu
みたいに(笑)
プログラムをチームで作成しているのではなく、個人の趣味程度であればローマ字でも良いとは思いますが、、、
英語を変数名にするようにしたほうが良いと思います。(ローマ字変数がクセになる。。。)

変数の型を決めよう

変数の宣言には必ず”型”の宣言が必要です。
簡単に言うとその変数には数字を入れるのか?文字を入れるのか?真偽値を入れるのか?日付を入れるのか?
を明示的にします。
代表的?よく使われる”型”は

  • int(整数)
  • double(少数点)
  • string(文字列)
  • boolean(真偽値)
  • datetime(日付)

今回は下記のような変数の型にします。
※項目()内が変数の型となります

  • ロット数(double)
  • 損切りpips(double)
  • 利食いpips(double)
  • スリッページpips(int)
  • マジックナンバー(int)(input)

どうやって決めているのかというと
これらの変数は全てOrderSend()関数の引数に入れる奴です。
EAで注文を送信するOrderSend()関数の使い方(MQL4)

引数に定義されている型を変数の型に宣言しています。

int OrderSend(
	string symbol, //通貨ペア
	int cmd,       //注文方法
	double volume, //ロットサイズ
	double price,  //注文価格
	int slippage,  //許容スリッページ
	double stoploss,   //損切り価格
	double takeprofit, //利益確定価格
	string comment,    //コメント
	int magic,         //EAの識別番号
	datetime expiration, //有効期限
	color arrow_color    //チャート上のオブジェクトの色
);

例えば
ロットサイズであれば

double volume;

となっているので、例に習って

input double LotSize;

としているわけです。

まとめ

ではあとは同じようにグローバル変数の名前と型を決めていきましょう。

  • 注文ロット数
  • 注文スリッページ
  • レート損切り
  • レート利食い
  • 買いチケット
  • 売りチケット
  • 買い追尾の判定
  • 売り追尾の判定

今回やったことをコードにすると

input double LotSize = 0.01; 	 //ロット数
double OrderLotSize;  	         //実際に注文に入れるロット数

extern int Slippage = 3;         //スリッページpips
int OrderSlippage;

input int MagicNumber = 12345;   //マジックナンバー

extern double StopLoss = 0;      //損切りpips
double rateStopLoss;             //エントリー価格から差し引く前の状態
extern double TakeProfit = 50;   //利食いpips
double rateTakeProfit;           //エントリー価格から差し引く前の状態

int BuyTicket;                   //買いチケット
int SellTicket;                  //売りチケット

bool isBuyTracking;              //買い追尾エントリーの判定
bool isSellTracking;             //売り追尾エントリーの判定

となります。
OnInit()関数の前にこの上記のコードを記述します。

#property strict
//---
ここに変数を宣言(グローバル変数と外部変数)
//---
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+

今回は以上となります。
お読み頂きありがとうございました。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする