ロット数検査関数 checkLotSize

ロット数が適切な数値であるか確認します。
不適切なロット数の場合には適切なロット数に修正します。
発注処理の直前などに実行することで、不正な取引によるエラーの発生を防ぎます。

double checkLotSize(
double lots,
string symbol=NULL
);



lots
   検査を行うロット数。

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


 適切な数値に修正されたロット数。



double checkLotSize(double lots, string symbol=NULL){
// 通貨ペアの指定が無かった場合はチャートの通貨ペアで計算
if(symbol == NULL){
symbol = Symbol();
}

// ロット数が最大発注数量より大きければ最大発注数量へ
if(lots > SymbolInfoDouble(symbol, SYMBOL_VOLUME_MAX)){
lots = SymbolInfoDouble(symbol, SYMBOL_VOLUME_MAX);
}

// ロット数が最小発注数量より大きければ最小発注数量へ
if(lots < SymbolInfoDouble(symbol, SYMBOL_VOLUME_MIN)){
lots = SymbolInfoDouble(symbol, SYMBOL_VOLUME_MIN);
}

// ロット数の桁数を修正
if(SymbolInfoDouble(symbol, SYMBOL_VOLUME_STEP) == 0.1){
lots = NormalizeDouble(lots, 1);
}
else{
lots = NormalizeDouble(lots, 2);
}

return(lots);
}




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

extern double Lots = 0.1; //取引数量

void OnTick(){
double lots = checkLotSize(Lots);
// 発注処理
}

double checkLotSize(double lots, string symbol=NULL){
// 通貨ペアの指定が無かった場合はチャートの通貨ペアで計算
if(symbol == NULL){
symbol = Symbol();
}

// ロット数が最大発注数量より大きければ最大発注数量へ
if(lots > SymbolInfoDouble(symbol, SYMBOL_VOLUME_MAX)){
lots = SymbolInfoDouble(symbol, SYMBOL_VOLUME_MAX);
}

// ロット数が最小発注数量より大きければ最小発注数量へ
if(lots < SymbolInfoDouble(symbol, SYMBOL_VOLUME_MIN)){
lots = SymbolInfoDouble(symbol, SYMBOL_VOLUME_MIN);
}

// ロット数の桁数を修正
if(SymbolInfoDouble(symbol, SYMBOL_VOLUME_STEP) == 0.1){
lots = NormalizeDouble(lots, 1);
}
else{
lots = NormalizeDouble(lots, 2);
}

return(lots);
}



複数通貨で取引する場合などには、第2引数に通貨ペア名を指定する。

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

extern double Lots = 0.1; //取引数量

void OnTick(){
double lots = checkLotSize(Lots, "EURUSD"); // 注釈1
// 発注処理
}

double checkLotSize(double lots, string symbol=NULL){
// 通貨ペアの指定が無かった場合はチャートの通貨ペアで計算
if(symbol == NULL){
symbol = Symbol();
}

// ロット数が最大発注数量より大きければ最大発注数量へ
if(lots > SymbolInfoDouble(symbol, SYMBOL_VOLUME_MAX)){
lots = SymbolInfoDouble(symbol, SYMBOL_VOLUME_MAX);
}

// ロット数が最小発注数量より大きければ最小発注数量へ
if(lots < SymbolInfoDouble(symbol, SYMBOL_VOLUME_MIN)){
lots = SymbolInfoDouble(symbol, SYMBOL_VOLUME_MIN);
}

// ロット数の桁数を修正
if(SymbolInfoDouble(symbol, SYMBOL_VOLUME_STEP) == 0.1){
lots = NormalizeDouble(lots, 1);
}
else{
lots = NormalizeDouble(lots, 2);
}

return(lots);
}


参考:modifySymbol
TwitterでシェアFacebookでシェアGoogle+でシェアはてなブックマークに追加

TOPへ