MQL4言語入門|お手軽リファレンス

この記事は約17分で読めます。

MQL4言語入門|お手軽リファレンス

せっかくMT4(MetaTrader4)を使うなら、あなたオリジナルのEA(Expert Advisor)やインジケーターを自作してみませんか!?

初心者向けに、MQL4言語を使ったプログラミングについて解説しています。

 

今回は、よく使う用語だけを集めたお手軽リファレンスを作りました。

EA(Expert Advisor)やインジケーターを自作するときに、きっと役立つと思います。

 

スポンサーリンク

コメントの記述方法

コメントとは、プログラムに関係しないメモです。
長いソースを書いた場合など、コメントを入れておくと後で編集するときに役に立ちます。
コメントの記述方法は、次の2通りあります。

 

//

単一コメント。
スラッシュ2本で始まり、改行で終わります。

 

/* */

複数行のコメント。
/* で始まり */ で終わります。

 

スポンサーリンク

データ型(変数・配列の宣言)

データ型とは、コンピュータにおけるデータ(値)の種類に関する分類です。
変数や配列は、データ型を事前に宣言しておく必要があります。
宣言では、型と名前を指定します。

 

int

整数を扱うデータ型です。

 

bool

真(=true)か偽(=false)の2値をとるデータ型です。値はtrueかfalse、または1か0です。

 

double

小数を扱うデータ型です。整数と小数点と少数で構成されています。

 

datetime

日付時刻を扱うデータ型です。

 

void

戻り値を返さない場合に使います。

 

スポンサーリンク

定義済み変数・配列

MQL4言語に最初から定義されている変数と配列です。
宣言は不要です。

 

Ask

現在の買値です。

 

Bars

バーの本数です。

 

Bid

現在の売値です。

 

Close[]

各バーの終値が格納された配列です。
配列の最後である現在のバーは0として格納されます。

 

Digits

現通貨ペアの価格の小数点以下の桁数です。

 

High[]

各バーの高値が格納された配列です。
配列の最後である現在のバーは0として格納されます。

 

Low[]

各バーの安値が格納された配列です。
配列の最後である現在のバーは0として格納されます。

 

Open[]

各バーの始値が格納された配列です。
配列の最後である現在のバーは0として格納されます。

 

Point

現通貨ペアのMT4での取引最小単位です。

※PointはFX業者によって異なる
「小数点以下:2桁/4桁」のFX業者なら、1Pointは、USDJPYなら0.01円、EURUSDなら$0.0001です。
「小数点以下:3桁/5桁」のFX業者なら、1Pointは、USDJPYなら0.001円、EURUSDなら$0.00001です。
※Pointとpipsの違い
pipsは「小数点以下:2桁/4桁」のFX業者を基準とした最小取引単位です。1pipsは、USDJPYなら0.01円、EURUSDなら$0.0001です。

Time[]

各バーの開始時間が記録された配列です。
1970.1.1AM0:00:00から経過した時間(秒)を datetime 型で表したデータです。
配列の最後である現在のバーは0として格納されます。

 

Volume[]

各バーの出来高が記録された配列です。
MT4では、出来高はティックが動いた回数をあらわします。
配列の最後である現在のバーは0として格納されます。

 

スポンサーリンク

口座情報関数

口座情報は、アカウントのパラメータを返す関数です。

 

AccountFreeMargin()

アカウントの余剰証拠金を返します。

 

AccountBalance()

アカウントの口座残高を返します。

 

スポンサーリンク

取引関数

取引関数は、取引注文や取引管理を行うための関数です。

 

OrderClose()

保有中の注文を決済します。
正常に終了した場合はtrue、失敗した場合はfalseを返します。

bool OrderClose(int ticket,double lots,double price,int slippage,int color color=CLR_NONE)

パラメータ
ticket:チケット番号。
lots:ロット数。
price:決済価格。
slippage:最大スリッページ幅。
color:チャート上の決済矢印の色。

MQL4言語入門|OrderSend()とOrderClose()を使いこなそう!
EA自作を目指すMQL4言語入門です。OrderSend()は新規注文を行う関数です。OrderClose()は保有ポジションの決済注文を行う関数です。どちらもEA作りでは必ず使う関数です。思いどおりに自作するために、ぜひ使いこなせるようになりましょう。

OrderMagicNumber()

選択した注文のマジックナンバー(識別番号)を返します。
OrderSelect()関数で事前に選択している必要があります。

 

OrderModify()

保有中や待機中の注文を修正します。
正常に終了した場合はtrue、失敗した場合はfalseを返します。

bool OrderModify(int ticket,double price,double stoploss,double takeprofit,datetime datetime expiration,color arrow_color=CLR_NONE)

パラメータ
ticket:チケット番号。
price:新しい注文価格。
stoploss:新しい損切り価格。
takeprofit:新しい利食い価格。
expiration:新しい有効期限。
arrow_color:チャート上の新しい損切りと利食いの矢印の色。

【例】OrderModify()を使ってトレーリングストップ機能を実装してみよう

MQL4言語入門|自作EAに簡単に実装できるトレーリングストップ
MT4のサンプルEA「MACD Sample.mq4」を使ってトレーリングストップのソースコードを解説します。EA作りは難しくありません。仕組みさえわかれば、自作EAに簡単に実装できるようになります。ぜひあなたの勝てるEA作りに役立ててください。

OrderOpenPrice()

選択した注文の約定価格を返します。
OrderSelect()関数で事前に選択している必要があります。

 

OrderSelect()

注文データを選択します。
正常に終了した場合はtrue、失敗した場合はfalseを返します。

bool OrderSelect(int index,int select,int pool=MODE_TRADES)

パラメータ
index:注文チケットインデックス。
select:選択タイプ。「SELECT_BY_POS」か「SELECT_BY_TICKET」のいずれか。
pool:注文プール。「MODE_TRADES」(規定値)か「MODE_HISTORY」のいずれか。

 

OrderSend()

新規注文を行います。

int OrderSend(string symbol,int cmd,double volume,double price,int slippage,double stoploss,double takeprofit,string comment=NULL,int magic=0,datetime expiration=0,color arrow_color=clrNONE);

パラメータ
symbol:通貨ペア。
cmd:注文タイプ。
volume:ロット数。
price:注文価格。
slippage:最大スリッページ幅。
stoploss:損切り価格。
takeprofit:利食い価格。
comment:注文コメント。
magic:マジックナンバー。
expiration:注文の有効期限(指値注文のみ)。
arrow_color:チャート上の約定矢印の色。

MQL4言語入門|OrderSend()とOrderClose()を使いこなそう!
EA自作を目指すMQL4言語入門です。OrderSend()は新規注文を行う関数です。OrderClose()は保有ポジションの決済注文を行う関数です。どちらもEA作りでは必ず使う関数です。思いどおりに自作するために、ぜひ使いこなせるようになりましょう。

OrderStopLoss()

選択した注文の損切り価格を返します。
OrderSelect()関数で事前に選択している必要があります。

 

OrdersTotal()

保有中と待機中の注文の総数を返します。

 

OrderSymbol()

選択した注文の通貨ペア名を返します。
OrderSelect()関数で事前に選択している必要があります。

 

OrderTakeProfit()

選択した注文の利食い価格を返します。
OrderSelect()関数で事前に選択している必要があります。

 

OrderTicket()

選択した注文のチケット番号を返します。
OrderSelect()関数で事前に選択している必要があります。

 

OrderType()

選択した注文の注文タイプを返します。
OrderSelect()関数で事前に選択している必要があります。
値は次のいずれかになります。
・OP_BUY:買いポジション
・OP_SELL:売りポジション
・OP_BUYLIMIT:買い指値ポジション
・OP_BUYSTOP:買い逆指値ポジション
・OP_SELLLIMIT:売り指値ポジション
・OP_SELLSTOP:売り逆指値ポジション

 

スポンサーリンク

テクニカル指標

テクニカル指標は、標準インジケータやカスタムインジケータの計算を行う関数です。

 

iATR()

ATRを計算して、その値を返します。
ATR(Average True Range)とは、1日の平均的な値幅のことです。

double iATR(string symbol,int timeframe,int period,int shift)

パラメータ:
symbol:通貨ペア。NULLは現在の通貨ペアです。
timeframe:時間枠。0は現在のチャートの時間枠です。
period:計算する平均期間。
shift:インジケーターバッファから取得するインデックス値(現在のバーを基準に指定したバーの本数だけ過去にシフトする)。

【例】double val = iATR(NULL,0,12,0);

【例】ATRを使ったトレーリングストップ機能を実装してみよう

MQL4言語入門|自作EAに簡単に実装できるATRストップ
MT4のサンプルEA「MACD Sample.mq4」のソースコードの一部を書き換えて、人気の「ATRストップ」を自作します。仕組みさえわかれば、自作EAに簡単に実装できます。ぜひあなたの勝てるEA作りに役立ててください。

iBands()

ボリンジャーバンドを計算して、その値を返します。
ボリンジャーバンドとは、株価の勢いの変化や反転の目安、方向を見る指標です。

doubel iBands(string symbol,int timeframe,int period,int deviation,int bands_shift,int applied_price,int mode,int shift)

パラメータ:
symbol:通貨ペア。NULLは現在の通貨ペアです。
timeframe:時間枠。0は現在のチャートの時間枠です。
period:計算する平均期間。
deviation:メインラインからの標準偏差。
bands_shift:バンドシフト。
applied_price:適用価格。
mode:インジケーターライン。インジケーターラインID(0-MODE_MAIN、1-MODE_UPPER、2-MODE_LOWER )のいずれか。
shift:インジケーターバッファから取得するインデックス値(現在のバーを基準に指定されたバーの本数だけ過去にシフトする)。

【例】double val = iBands(NULL,0,20,2,0,PRICE_LOW,MODE_LOWER,0);

 

iCustom()

指定したカスタムインジケーターを計算し、その値を返します。

double iCustom(string symbol,int timeframe,string name,...,int mode,int shift)

パラメータ:
symbol:通貨ペア。NULLは現在の通貨ペアです。
timeframe:時間枠。0は現在のチャートの時間枠です。
name:カスタムインジケーターのプログラム名。
…:カスタムインジケータの外部パラメータ。
mode:ラインインデックス。
shift:インジケーターバッファから取得するインデックス値(現在のバーを基準に指定されたバーの本数だけ過去にシフトする)。

【例】double val = iCustom(NULL,0,”SampleInd”,13,1,0);

【例】iCustom()を使ってEAを自作してみよう

MQL4言語入門|カスタムインジケーターをEA化する超簡単な方法|ブレイクアウトEAを作ろう
カスタムインジケーター「HiLoBand.mq4」を使って、ブレイクアウト戦略をEA化する方法を解説します。完成品のダウンロードもできます。いつもどおりの超簡単な自作方法です。この記事を通じてカスタムインジケーターをEA化する方法を理解してください。

iMA()

移動平均線(Moving Average)を計算して、その値を返します。

double iMA(string symbol,int timeframe,int period,int ma_shift,int ma_method,int applied_price,int shift)

パラメータ:
symbol:通貨ペア。NULLは現在の通貨ペアです。
timeframe:時間枠。0は現在のチャートの時間枠です。
period:計算する平均期間。
ma_shift:移動平均のシフト。
ma_method:移動平均の方式。移動平均方式(0-MODE_SMA[単純平均]、1-MODE_EMA[指数平均]、2-MODE_SMMA[平滑平均]、3-MODE_LWMA[線形加重平均])のいずれか。
applied_price:適用価格。
shift:インジケーターバッファから取得するインデックス値(現在のバーを基準に指定されたバーの本数だけ過去にシフトする)。

【例】double val = iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,1);

 

iMACD()

MACDを計算して、その値を返します。
MACDとは、2本の移動平均線を使用して、相場の周期とタイミングを捉える指標です。

double iMACD(string symbol,int timeframe,int fast_ema_period,int slow_ema_period,int signal_period,int applied_price,int mode,int shift)

パラメータ:
symbol:通貨ペア。NULLは現在の通貨ペアです。
timeframe:時間枠。0は現在のチャートの時間枠です。
fast_ema_period:ファーストEAMの期間。
slow_ema_period:スローEMAの期間。
signal_period:シグナルラインの期間。
applied_price:適用価格。
mode:インジケーターライン。インジケーターラインID(0-MODE_MAIN、1- MODE_SIGNAL)のいずれか。
shift:インジケーターバッファから取得するインデックス値(現在のバーを基準に指定されたバーの本数だけ過去にシフトする)。

【例】double val = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);

 

iRSI()

RSIを計算して、その値を返します。
RSI(相対力指数)とは、一定期間において、上昇と下落のどちらの勢いが強いのかを計測する指標です。

double iRSI(string symbol,int timeframe,int period,int applied_price,int shift)

パラメータ:
symbol:通貨ペア。NULLは現在の通貨ペアです。
timeframe:時間枠。0は現在のチャートの時間枠です。
period:計算する平均期間。
applied_price:適用価格。
shift:インジケーターバッファから取得するインデックス値(現在のバーを基準に指定されたバーの本数だけ過去にシフトする)。

【例】double val = iRSI(NULL,0,14,PRICE_CLOSE,0);

 

iStochastic()

ストキャスティックスを計算して、その値を返します。
ストキャスティクスとは、一定期間において、価格レンジの中で今の価格が相対的にどのレベルに位置するかを示す指標です。

double iStochastic(string symbol,int timeframe,int %Kperiod,int %Dperiod,int slowing,int method,int price_field,int mode,int shift)

パラメータ:
symbol:通貨ペア。NULLは現在の通貨ペアです。
timeframe:時間枠。0は現在のチャートの時間枠です。
%Kperiod:%Kラインの期間。
%Dperiod:%Dラインの期間。
slowing:スロー値。
method:移動平均の方式。
price_field:価格フィールドのパラメータ。
mode:インジケーターライン。インジケーターラインID(0-MODE_MAIN、1-MODE_SIGNAL )のいずれか。
shift:インジケーターバッファから取得するインデックス値(現在のバーを基準に指定されたバーの本数だけ過去にシフトする)。

【例】double val = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,0);

 

スポンサーリンク

カスタム指標

カスタム指標は、カスタムインジケータを作成するときに使用する関数です。

 

IndicatorBuffers()

カスタムインジケーターの計算に使用するバッファのメモリを割り当てます。

void IndicatorBuffers(int count)

パラメータ
count:割り当てるバッファの量。

 

IndicatorShortName()

データウィンドウとチャートのサブウィンドウに表示されるカスタムインジケーターのショートネームを設定します。

void IndicatorShortName(string name)

パラメータ
name:新しいショートネーム。

 

SetIndexBuffer()

カスタムインジケーターの定義済みバッファを、グローバルレベルで宣言した配列変数に結合します。

bool SetIndexBuffer(int index,double array[])

パラメータ
index:ラインインデックス。
array[]:インジケーターの値を格納しておく配列。

 

SetIndexDrawBegin()

インジケーターラインの描画を開始するバーの番号を設定します。

void SetIndexDrawBegin(int index,int begin)

パラメータ
index:ラインインデックス。
begin:最初に描き始めるバーの位置の番号。

 

SetIndexLabel()

データウインドウとツールヒントに表示さる説明を設定します。

void SetIndexLabel(int index,string text)

パラメータ
index:ラインインデックス。
text:ラベルテキスト。

 

SetIndexStyle()

インジケーターラインの型、スタイル、幅、色を設定します。

void SetIndexStyle(int index,int type,int style=EMPTY,int width=EMPTY,color clr=CLR_NONE)

パラメータ
index:ラインインデックス
type:形状タイプ。
style:描画スタイル。
width:ライン幅。
clr:ライン色。

 

スポンサーリンク

日付と時刻の関数

datetime型のデータを扱う関数です。

 

Day()

最後に受信したサーバー時間、つまり現在時間の日を返します。

 

Hour()

最後に受信したサーバー時間、つまり現在時間の時(0~23)を返します。

【例】Hour()を使って取引時間を制限する機能を実装してみよう

MQL4言語入門|自作EAに簡単に実装できる新規注文の時間制限機能
例えば、雇用統計発表時は取引しない、アジア時間は値動きが小さいので取引しない、ある曜日だけ取引したいなど。時間や曜日を指定し、そのときだけ新規注文しない、または新規注文する、そんな時間制限機能をプログラムし、EAに実装する方法を解説します。

Minute()

最後に受信したサーバー時間、つまり現在時間の分(0~59)を返します。

 

スポンサーリンク

変換関数

変換関数は、他フォーマットデータを変換する関数です。

 

NormalizeDouble()

浮動小数点を指定した精度で丸めます。
求めたい精度に少数桁数を調整できて便利です。

double NormalizeDouble(double value,int digits);

パラメータ
value:浮動小数点数。
digits:丸める小数点以下の桁数。Digits()を使えば正規化した桁数を取得できます。

 

StringToTime()

“yyyy.mm.dd hh:mi”形式の日付や時間を含む文字列を、datetime型データに変換します。

datetime StringToTime(string value);

パラメータ
value:”yyyy.mm.dd hh:mi”形式の日付や時間を含む文字列。

 

TimeToString()

datetimeデータを”yyyy.mm.dd hh:mi”フォーマットの文字列に変換します。

string TimeToString(datetime value,int mode = TIME_DATE|TIME_MINUTES);

パラメータ
value:datetimeデータ。1970.1.1AM0:00:00からの経過秒数。
mode:出力フォーマット。省略した場合は”yyyy.mm.dd hh:mi”フォーマットで出力します。

 

スポンサーリンク

その他の関数

Sendmail()

Eメールを送信します。
事前に、MT4のツール→オプション→E-メールから、メール送信を有効にしてメールアドレスを登録しておく必要があります。

bool SendMail(string subject,string some_text);

パラメータ:
subject:メールの件名です。
some_text:メールの本文です。

タイトルとURLをコピーしました