1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【mt4/mql4】スプレッド拡大時には処理しない/する

Posted at

はじめに

システムトレードプログラマのmt4/mql4のメモノートです。
初心者向けの簡単なトピックから公開していきます。
.noteでEAそのものも公開していますので良ければそちらも見てください。

目次

  1. 処理内容
  2. mql4ソースコード

処理内容

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

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

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

mql4ソースコード

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

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

//+------------------------------------------------------------------+
//| 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の条件式を反対の”>”に変更してください。

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

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

}
  }

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

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?