初心者向けに、MQL4言語を使ったプログラミングについて解説しています。
今回は、MT4のサンプルEA「MACD Sample.mq4」のソースコードの一部を書き換えて、新規オーダーの時間制限機能を実装します。
あくまでMQL言語の入門用の記事なので、本当に簡単な書き換えだけです。
仕組みさえわかれば、あなたの自作EAにも簡単に実装できます。
ぜひあなたの勝てるEA作りに役立ててください。
時間制限機能とは
EA作りをしていると、「この時間帯のトレードは避けたい」と考えることもあると思います。
例えば、
- 米国の雇用統計発表時は価格が大きく乱高下するので、その時間帯は取引しない。
- 欧州・米国時間に比べて、アジア時間はボラティリティが低いので取引しない、またはその逆。
- ある特定の曜日だけ取引したい、またはその逆。
そこで、任意に時間や曜日を指定し、そのときだけ新規注文しない、または新規注文する機能をプログラムし、EAに実装する方法を解説します。
MetaEditor の起動
サンプルコード「MACD Sample.mq4」の一部を書き換えて、取引時間の制限機能のソースコードを作ります。
MT4の「メタクォーツ言語エディタ」をクリックします。
MeTaEditorが立ち上がったら、画面左側の「Navigater」内のツリーから「Experts」をダブルクリックします。
「Experts」のツリーから「MACD Sample.mq4」をダブルクリックすると、ソースコードが開きます。
取引時間の制限機能の自作
それでは、いよいよソースコードを書き換えていきます。
外部パラメーターの追加
カーソルを11行目に移動します。
ここでは、ユーザーが変更可能なパラメーターを設定しています。
input double TakeProfit =50;
input double Lots =0.1;
input double MACDOpenLevel =3;
input double MACDCloseLevel=2;
input int MATrendPeriod =26;
input int StartTime=0;
input int StopTime=8;
double TrailingStop;
新たなパラメーター「StartTime」と「StopTime」を追加します。
今回は、「StartTime」時から「StopTime」時の間だけ新規オーダーできる制限をかけます。
時間制限にはいろんな方法が考えられるので、後で他の方法についても説明します。
変数の宣言の追加
カーソルを下に移動させます。
ここでは、変数の宣言をしています。
void OnTick(void)
{
double MacdCurrent,MacdPrevious;
double SignalCurrent,SignalPrevious;
double MaCurrent,MaPrevious;
int cnt,ticket,total;
bool TradeTime;
新たにbool型の変数「TradeTime」を追加します。
bool型は、真(=true)か偽(=false)の2値をとるデータ型です。
取引時間の制限機能を追加
カーソルを下に移動させます。
ここでは、エントリー条件として保有ポジションの有無をチェックしています。
このサンプルEAは、無限にポジションを持ってしまわないよう、保有ポジションがあれば新規オーダーできないようになっています。
【変更前】
total=OrdersTotal(); if(total<1) {
【変更後】
total=OrdersTotal(); if(StartTime<StopTime && Hour()<=StartTime && Hour()<=StopTime) TradeTime=true; if(StartTime>StopTime && (Hour()>=StartTime || Hour()<=StopTime)) TradeTime=true; if(total<1 && TradeTime==true) {
Hour()は、最後に受信したサーバー時間、つまり現在のMT4時間(単位:時、0~23の範囲)を返す変数です。
ここで注意すべきは、StartTimeがStopTimeより小さいのか大きいのかによって、式が違ってくることです。
もし取引時間を8時から20時までにしたいなら、StartTime<StopTimeなので、「現在時刻が8時以降、かつ、現在時刻が20時以前」という式になります。
もし取引時間を20時から翌日の8時までにしたいなら、StartTime>StopTimeなので、「現在時刻が20時以降、または、現在時刻が8時以前」という式になります。
ソースコードの書き換えは以上です。
時間制限機能の応用
取引時間制限を「時」単位ではなく「分」単位でする場合は、Hour()ではなくMinute()を使います。日単位ならDay()です。
「曜日」で制限をかけることもできます。
DayOfWeek()は、最後に受信したサーバー時間の曜日、つまり現在のMT4時間の曜日(()内の数値は0~6までで、日曜なら「0」、土曜なら「6」)を返す変数です。
例えば、週明けの月曜日だけトレードしたいなら、
if(DayOfWeek()==1)
という式にすればいいです。
まとめ
今回は、MT4のサンプルEA「MACD Sample.mq4」のソースコードの一部を書き換えて、新規オーダーの時間制限機能を実装しました。
MQL4言語の入門記事であり、仕組みさえわかれば、自作EAに簡単に実装できます。
ぜひあなたの勝てるEA作りに役立ててください。