Проверка функции |
double LotsOptimized(string symbol)
{
//--- Инициализация переменых ----------------------------------------
double volume = (double) Lots;
double lot = Lots; //Значение первоначального лота
double exponent = LotExponent; //Коэффицент умножения первоначального лота
double count = CountOpenOrders(symbol); //Количество открытых ордеров
int digits = (int)2; //Количество символов лота после запятой
//--------------------------------------------------------------------
if (count > 0) volume = NormalizeDouble(lot * MathPow(exponent, count),digits);
//--------------------------------------------------------------------
return(volume);
}
bool CheckVolumeValue(double volume)
{
string description;
double min_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN); //Минимально допустимый объем для торговых операций
if(volume<min_volume)
{
description=StringFormat("Объем меньше минимально допустимого SYMBOL_VOLUME_MIN=%.2f",min_volume);
return(FALSE);
}
double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX); //Максимально допустимый объем для торговых операций
if(volume>max_volume)
{
description=StringFormat("Объем больше максимально допустимого SYMBOL_VOLUME_MAX=%.2f",max_volume);
return(FALSE);
}
double volume_step=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP); //Получим минимальную градацию объема
int ratio=(int)MathRound(volume/volume_step);
if(MathAbs(ratio*volume_step-volume)>0.0000001)
{
description=StringFormat("Объем не является кратным минимальной градации SYMBOL_VOLUME_STEP=%.2f, ближайший корректный объем %.2f",
volume_step,ratio*volume_step);
return(FALSE);
}
description="Корректное значение объема";
return(TRUE);
}
...
iLots = LotsOptimized(symbol);
if (Signal(symbol) < 0 && CheckVolumeValue(iLots)==TRUE) ticket = OrderSend(symbol,OP_SELL,iLots,bid,3,0,0,"",MAGIC,0,Red);
...
double LotsOptimized(string symbol)
{
//--------------------------------------------------------------------
//string symbol = Symbol();
double volume = (double) Lots;
double lot = Lots; //Значение первоначального лота
double exponent = LotExponent; //Коэффицент умножения первоначального лота
double count = CountOpenOrders(); //Количество открытых ордеров
int digits = (int)2; //Количество символов лота после запятой
//--------------------------------------------------------------------
string description;
double min_volume=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MIN); //Минимально допустимый объем для торговых операций
double max_volume=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MAX); //Максимально допустимый объем для торговых операций
double volume_step=SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP); //Получим минимальную градацию объема
int ratio=(int)MathRound(volume/volume_step);
double correct_volume;
//--------------------------------------------------------------------
if (count > 0) volume = NormalizeDouble(lot * MathPow(exponent, count),digits);
//--------------------------------------------------------------------
if(volume<min_volume)
{
description=StringFormat("Объем меньше минимально допустимого SYMBOL_VOLUME_MIN=%.2f",min_volume);
return(min_volume);
}
//--------------------------------------------------------------------
if(volume>max_volume)
{
description=StringFormat("Объем больше максимально допустимого SYMBOL_VOLUME_MAX=%.2f",max_volume);
return(max_volume);
}
//--------------------------------------------------------------------
if(MathAbs(ratio*volume_step-volume)>0.0000001)
{
description=StringFormat("Объем не является кратным минимальной градации SYMBOL_VOLUME_STEP=%.2f, ближайший корректный объем %.2f",
volume_step,ratio*volume_step);
correct_volume = NormalizeDouble(ratio*volume_step,digits);
return(correct_volume);
}
//--------------------------------------------------------------------
description="Корректное значение объема";
return(volume);
}
02 декабря 2016
|
03 декабря 2016
|
Комментарии (3)
Редактирован: 4 декабря 2016, 11:18
34 AM2 Сообщений: 15882 - Андрей
8 Kudryashov Автор Сообщений: 129
Ларчик оказывается просто открывался
8 Kudryashov Автор Сообщений: 129
Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий