ロット数が適切な数値であるか確認します。
不適切なロット数の場合には適切なロット数に修正します。
発注処理の直前などに実行することで、不正な取引によるエラーの発生を防ぎます。
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);
}
サンプル1
#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
複数通貨で取引する場合などには、第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);
}
注釈1 この行は全ブローカー対応に相応しくない書き方で書かれています。
参考:modifySymbol
検索結果がありません。 |
検索結果がありません。 |