スプレッド検査関数 checkSpread

MetaTrader 4
GogoJungle
2019/08/02 21:58
76

スプレッドが規定値以下であるかを確認する関数です。
発注前に実行することでスプレッドが拡大した状態でのエントリーを避けることができます。

bool checkSpread(
   double max_spread_pips,
   string symbol=NULL
);

パラメータ
max_spread_pips
許容する最大スプレッド値。
単位はpips単位で指定。

symbol
スプレッドを判定する通貨ペア名を指定。
このパラメータは省略可能です。
省略された場合にはプログラムが適用されているチャートの通貨ペアにて計算が行われます。

戻り値
現在のスプレッドが規定値以下であればtrue, 規定値を超えていればfalse

ソースコード

bool checkSpread(double max_spread_pips, string symbol=NULL){
   // 通貨ペアの指定が無かった場合はチャートの通貨ペアで計算
   if(symbol == NULL){
      symbol = Symbol();
   }
   
   // スプレッドを取得
   double spread = MarketInfo(symbol, MODE_SPREAD);
   
   // 単位を揃える
   if(Digits == 3 || Digits == 5){
      max_spread_pips *= 10;
   }
   
   // スプレッド判定
   if(spread > max_spread_pips){
      return(false);
   }
   
   return(true);
}

サンプル1

#property copyright "Copyright 2016, gogojungle"
#property link      "http://labo.fx-on.com"
#property version   "1.00"
#property strict

extern int MaxSpread = 5; //最大スプレッド(pips単位)

void OnTick(){
   /* ---------------
      各種処理
   --------------- */

   if(checkSpread(MaxSpread) == true){
      // 発注処理
   }
}

bool checkSpread(double max_spread_pips, string symbol=NULL){
   // 通貨ペアの指定が無かった場合はチャートの通貨ペアで計算
   if(symbol == NULL){
      symbol = Symbol();
   }
   
   // スプレッドを取得
   double spread = MarketInfo(symbol, MODE_SPREAD);
   
   // 単位を揃える
   if(Digits == 3 || Digits == 5){
      max_spread_pips *= 10;
   }
   
   // スプレッド判定
   if(spread > max_spread_pips){
      return(false);
   }
   
   return(true);
}

サンプル2
複数通貨で取引する場合など、特定の通貨ペアでスプレッドの確認を行うには第2引数に通貨ペア名を指定する。

#property copyright "Copyright 2016, gogojungle"
#property link      "http://labo.fx-on.com"
#property version   "1.00"
#property strict

extern int MaxSpread = 5; //最大スプレッド(pips単位)

void OnTick(){
   /* ---------------
      各種処理
   --------------- */

   if(checkSpread(MaxSpread, "EURUSD") == true){ // 注釈1
      // 発注処理
   }
}

bool checkSpread(double max_spread_pips, string symbol=NULL){
   // 通貨ペアの指定が無かった場合はチャートの通貨ペアで計算
   if(symbol == NULL){
      symbol = Symbol();
   }
   
   // スプレッドを取得
   double spread = MarketInfo(symbol, MODE_SPREAD);
   
   // 単位を揃える
   if(Digits == 3 || Digits == 5){
      max_spread_pips *= 10;
   }
   
   // スプレッド判定
   if(spread > max_spread_pips){
      return(false);
   }
   
   return(true);
}

注釈1 この行は全ブローカー対応に相応しくない書き方で書かれています。
参考:modifySymbol

CheckSpread.zip

コメント

関連項目

検索結果がありません。