通貨ペア名補正関数 modifySymbol

MetaTrader 4
GogoJungle
2019/08/02 21:56
66

MQL4において、プログラム内に特定の通貨ペア名をそのまま書くのは望ましくありません。
例えばユーロドルの場合、ブローカーによって「EURUSD」,「EURUSDpro」,「EURUSD-a08」など異なる表記となっているためです。

modifySymbolはブローカー毎の通貨ペア名の違いに対応するための関数です。

string modifySymbol(
   string symbol
);

パラメータ
symbol
通貨ペア名を入力
例:「EURUSD」

戻り値
ブローカー毎の通貨ペア名の違いに合わせて修正された通貨ペア名
例えば通貨ペア名の後ろに「pro」が付くブローカーの場合、パラメータに「EURUSD」を指定すると「EURUSDpro」が戻り値となる。

ソースコード

string modifySymbol(string symbol){
   int length = StringLen(Symbol());
   string includedCharacter = "";
   
   if(length > 6){
      includedCharacter = StringSubstr(Symbol(), 6, length - 6);

      return(symbol + includedCharacter);
   }

   return(symbol);
}

サンプル
「EURUSD」,「USDJPY」,「GBPJPY」の3通貨ペア名を修正して表示する例。
通貨ペア名の異なる複数のブローカーでご確認下さい。

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

void OnTick(){
   Comment(modifySymbol("EURUSD") + "¥n" + modifySymbol("USDJPY") + "¥n" + modifySymbol("GBPJPY"));
}

string modifySymbol(string symbol){
   int length = StringLen(Symbol());
   string includedCharacter = "";
   
   if(length > 6){
      includedCharacter = StringSubstr(Symbol(), 6, length - 6);

      return(symbol + includedCharacter);
   }

   return(symbol);
}

サンプル
現在の通貨ペア、マジックナンバー0のポジションの平均約定価格を計算して表示するサンプルです。

#property copyright "Copyright 2016, gogojungle"
#property link      "http://labo.fx-on.com"
#property version   "1.00"
#property strict
  
void OnTick(){   
   Comment(getAverageOpenPrice(0, Symbol()));
}

double getAverageOpenPrice(int magic, string symbol){
   double total = 0;
   double lots = 0;
   for(int i = OrdersTotal() - 1; i >= 0; i--){
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) return(-1);
      if(OrderMagicNumber() != magic) continue;
      if(OrderSymbol() != symbol) continue;
      if(OrderType() == OP_BUY || OrderType() == OP_SELL){
         total += OrderOpenPrice() * OrderLots();
         lots  += OrderLots();
      }
   }
   if(total <= 0){
      return(0);
   }
   return(total / lots);
}
ModifySymobl.zip

コメント

テストマン
2019/10/08 17:49

関連項目

検索結果がありません。