通貨ペア名補正関数 modifySymbol

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);
}
TwitterでシェアFacebookでシェアGoogle+でシェアはてなブックマークに追加

TOPへ