見出し画像

MT4/MQLソースサンプル:スプレッド拡大時に特定の処理を実施しない/する

処理内容

特定の時間帯や、急なイベント・ニュースの時には、スプレッドが急拡大するケースがあります。つまりエントリーor決済するのに、とっても不利な状況になるわけです。

この不利な状況の時にはエントリーしたくない。とか そもそも異常事態なのでポジション決済して撤退したいなど、したい/したくない というようなケースがあるかと思います。

この時に使えるコードを紹介します。

mql4ソースコード

関数部分です。まずは個別に通貨別のpip値を取得する関数と、スプレッドがいくつ以上離れたら本コードを実行させたいかをpipsで設定します。

//スプレッドが何pips以上になったら特別動作
double MaxSpread=10;//例 10pips

//+------------------------------------------------------------------+
//| pip単位を取得する                                                                 |
//+------------------------------------------------------------------+
double AdjustPoint(string Currency)
 {
  int Symbol_Digits=(int)MarketInfo(Currency,MODE_DIGITS);
  double Calculated_Point=0;
  if(Symbol_Digits==2 || Symbol_Digits==3)
    {
     Calculated_Point=0.01;
    }
  else
     if(Symbol_Digits==4 || Symbol_Digits==5)
       {
        Calculated_Point=0.0001;
       }
     else
        if(Symbol_Digits==1)
          {
           Calculated_Point=0.1;
          }
        else
           if(Symbol_Digits==0)
             {
              Calculated_Point=1;
             }
  return(Calculated_Point);
 }

処理実行メイン部分です。実際にはOnTimer()とかOnTickとかのループ関数内に記述します。

以下の例はスプレッドが大きくない時だけやりたい処理の書き方です。もし大きいときだけやりたい処理を記述したい場合は IFの条件式を反対の”>”に変更してください。

SymbolInfoTick(Symbol(), tick);
if((tick.ask - tick.bid)/AdjustPoint(Symbol()) < MaxSpread )
{

///ここにスプレッドが設定したpips以下でやりたい処理を記述

}

皆様の手助けになりますように。
間違いなどあればご指摘いただけると助かります。
以上です



この記事が気に入ったらサポートをしてみませんか?