MQL言語入門|自作EAに簡単に実装できるATRストップ

 

この記事では、MQL言語入門として、MT4のサンプルEA「MACD Sample.mq4」のソースコードの一部を書き換えて「ATRストップ」を実装します。

仕組みさえわかれば、あなたの自作EAにも簡単に実装できます。

ぜひあなたの勝てるEA作りに役立ててください。

 

ATRストップとは

ATRとは、平均的な1日の値幅のことです。

自分が取引する通貨ペアの変動率(ボラティリティ)を知ってれば、トレードをする上でさまざまな判断に役立ちます。

システムトレーダーのバイブル『魔術師たちの心理学―トレードで生計を立てる秘訣と心構え』でも、ATRを使ったストップロスの設定が推奨されています。

ATRストップとは、トレーリングストップのトレール幅をATRで算出する投資手法です。

 

MetaEditor の起動

サンプルコード「MACD Sample.mq4」に実装されているトレーリングストップの一部を書き換えて、ATRストップのソースコードを作ります。

MT4の「メタクォーツ言語エディタ」をクリックします。

 

 

MeTaEditorが立ち上がったら、画面左側の「Navigater」内のツリーから「Experts」をダブルクリックします。

「Experts」のツリーから「MACD Sample.mq4」をダブルクリックすると、ソースコードが開きます。

 

ATRストップの自作

それでは、いよいよソースコードを書き換えていきます。

 

外部パラメーターの変更

カーソルを11行目に移動します。
ここでは、ユーザーが変更可能なパラメーターを設定しています。

【変更前】

input double TakeProfit    =50;
input double Lots          =0.1;
input double TrailingStop  =30;
input double MACDOpenLevel =3;
input double MACDCloseLevel=2;
input int    MATrendPeriod =26;

【変更後】

input double TakeProfit    =50;
input double Lots          =0.1;
input double MACDOpenLevel =3;
input double MACDCloseLevel=2;
input int    MATrendPeriod =26;
input int    ATRperiod = 14;
input double ATRtimes = 3;

サンプルコードのトレーリングストップでは、パラメーター「TrailingStop」を設定し、トレール幅を固定していました。

ATRストップでは、トレール幅が1日の平均値幅であるため、変動していきます。

そのため、値幅の平均をとる期間(ATRperiod)とATRを何倍にするか(ATRtimes)を、パラメーターとして設定し、トレール幅は内部関数で計算します。

 

テクニカルインジケーター変数の宣言の追加

カーソルを下に移動させます。
ここでは、テクニカルインジケーター変数の宣言を記述しています。

double MacdCurrent,MacdPrevious;
double SignalCurrent,SignalPrevious;
double MaCurrent,MaPrevious;
int cnt,ticket,total;
double TrailingStop;

ATRの計算結果を入れる変数として「TrailingStop」を宣言しました。

 

テクニカルインジケーター関数の追加

//--- to simplify the coding and speed up access data are put into internal variables
MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0);
MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1);
TrailingStop = NormalizeDouble(iATR(NULL,0,ATRperiod,1)*ATRtimes,Digits);

ATRインジケーターの式を追記し、トレール幅を算出しました。

ここでのiATR関数のカッコ内の数字や記号の意味は以下のとおりです。

iATR(通貨ペアは無指定,現在の時間軸,平均期間は「14」,1本前のバーの値を取得);

NormalizeDouble関数は、指定された精度で丸められた浮動小数点数を返します。ここでは、Digits()を用いて正規化された桁数を取得しました。

 

買いポジションのトレーリングストップ発動条件

カーソルを下に移動させます。
ここでは、買いポジションのトレーリングストップの発動条件が記述されています。

//--- check for trailing stop
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<Bid-Point*TrailingStop)
{

不要な「Point*」を削除しました。

 

ストップロスオーダーの表記の変更

カーソルを下に移動させます。
ここでは、買いポジションのオーダー変更の命令が記述されています。

//--- modify order and exit
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green))
Print("OrderModify error ",GetLastError());
return;

不要な「Point*」を削除しました。

 

売りポジションのトレーリングストップ発動条件

カーソルを下に移動させます。
ここでは、売りポジションのトレーリングストップの発動条件が記述されています。

//--- check for trailing stop
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
{

不要な「Point*」を削除しました。

 

ストップロスオーダーの変更

カーソルを下に移動させます。
ここでは、売りポジションのオーダー変更の命令が記述されています。

//--- modify order and exit
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red))
Print("OrderModify error ",GetLastError());
return;

不要な「Point*」を削除しました。

 

ソースコードの書き換えは以上です。

 

まとめ

MQL言語入門として、MT4のサンプルEA「MACD Sample.mq4」のソースコードの一部を書き換えて「ATRストップ」を実装しました。

仕組みさえわかれば、あなたの自作EAに簡単に実装できます。

ぜひあなたの勝てるEA作りに役立ててください。

 

☆MQL言語入門まとめ☆

【保存版】MQL言語入門まとめ~EA自作への道~
せっかくMT4を使うなら、オリジナルのEAやインジケーターを自作してみませんか。「プログラミングなんて自分にはとても無理だ」と思うかもしれませんが、そんなことありません。最低限知っておくべきことさえ押さえておけば、簡単にできますから。

 

もし、あなたが本格的にMQL言語を使いこなしたいと考えているなら、以下の書籍がおすすめです。

FXメタトレーダー実践プログラミング (現代の錬金術師シリーズ)

もしあなたが、MT4をリアル口座で稼働しようと考えているなら、XMTradingがおすすめです。
XMは、海外FX業者の中で、日本人による口座開設数No.1、豊富な入出金方法、24時間対応の日本語サポートなどにより、日本人でも安心して利用できます。

XMの口座開設はこちらから

MT4でシストレ

●免責及び注意事項●
当サイトの全てのコンテンツは管理人自身による情報の提供を目的としており、決して投資行動を勧誘・助言するものではありません。
投資商品、売買価格決定等の投資行動につきましては、ご自身の判断と責任に基づいて行われるようお願いいたします。
また、個々の取引において生じたいかなる損失についても、本ブログサイトおよびその管理者は一切の責任を負いかねます。

Startup!

コメント