А при данной стади развития: параметры, вызов функции и сама функция должно показывать ошибки при компиляции или нет. Если да то почему? У меня ошибки показывает
Да, действительно, почему-то ошибки хотя их не должно быть. Прошу разработчиков обратить на это внимание, переделал вот так, ошибок нет, но при использовании переключателя switch все равно выдает ошибку.
//+------------------------------------------------------------------+#property copyright "2010, MetaQuotes Software Corp."#property link "http://www.mql5.com"#property version "1.00"//--- input parametersinputdouble Lots=0.1;
inputbool MM = true;
inputdouble Risk = 10.0;
double lots;
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
return(0);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
if(MM) lots = LotSon(); //вызов функции LotSon else lots = Lots;
}
//+------------------------------------------------------------------+double LotSon()
{
double LotMin = SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);
double LotMax = SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX);
double LotStep = SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP);
double Lot = AccountInfoDouble(ACCOUNT_FREEMARGIN)/100000.0 * Risk;
Lot = MathMin(LotMax,MathMax(LotMin,Lot));
if (Lot < LotMin) Lot = LotMin;
if (Lot > LotMax) Lot = LotMax;
// Вариант первый/*
switch(LotStep)
{
case 0.01: Lot=NormalizeDouble(Lot,2);break;
case 0.1 : Lot=NormalizeDouble(Lot,1);break;
case 1.0 : Lot=NormalizeDouble(Lot,0);break;
}
*/// Вариант второйif (LotStep == 0.01)Lot=NormalizeDouble(Lot,2);
if (LotStep == 0.1) Lot=NormalizeDouble(Lot,1);
if (LotStep == 1.0) Lot=NormalizeDouble(Lot,0);
// Вариант третий// if (LotStep == 0.01) Lot=NormalizeDouble(Lot,2);// else if (LotStep == 0.1) Lot=NormalizeDouble(Lot,1);// else if (LotStep == 1.0) Lot=NormalizeDouble(Lot,0);return(Lot);
}
Да, действительно, почему-то ошибки хотя их не должно быть. Прошу разработчиков обратить на это внимание, переделал вот так, ошибок нет, но при использовании переключателя switch все равно выдает ошибку.
остается вопрос почему нельзя использовать такую конструкцию
if (LotStep == 0.01)return(NormalizeDouble(Lot,2));
if (LotStep == 0.1) return(NormalizeDouble(Lot,1));
if (LotStep == 1.0) return(NormalizeDouble(Lot,0));
А можно увидеть код если вам не трудно? А то пробую всяко разно не чего не получается.
Или есть какой то другой вариант по проще добовление в советник риск в прцентах от депо. Спасибо!
Смотря что нужно получить в конечном итоге, вот тут я к примеру приводил ряд интересных функций на счет рисков
А чтобы этот код заработал, нужно всего-то умножить лот на 100000 и подать его для входа в switch(StepSize) как параметр (переменная типа int).
PS
И вообще, если честно я не совсем понимаю назначение всех этих вариантов? Я про то, что в контексте данной функции вполе хватит и одного из последних....
А при данной стади развития: параметры, вызов функции и сама функция должно показывать ошибки при компиляции или нет. Если да то почему? У меня ошибки показывает
Да, действительно, почему-то ошибки хотя их не должно быть. Прошу разработчиков обратить на это внимание, переделал вот так, ошибок нет, но при использовании переключателя switch все равно выдает ошибку.
Да, действительно, почему-то ошибки хотя их не должно быть. Прошу разработчиков обратить на это внимание, переделал вот так, ошибок нет, но при использовании переключателя switch все равно выдает ошибку.
Сюда нужно посылать лоты в виде int, т.е. 0.01 = 1000, а 0.10 = 10000...
Сюда нужно посылать лоты в виде int, т.е. 0.01 = 1000, а 0.10 = 10000...
возвращает значение 1000 вместо 0.01
По вашему получается что функция
возвращает значение 1000 вместо 0.01
Нет, я говорил про, то что ошибка уйдет если код будет выглядеть вот так:
switchнельзя использовать числа двойной точности, тогда этот вариант нельзя использовать в этом случае.Только сейчас заметил что в
нельзя использовать числа двойной точности, тогда этот вариант нельзя использовать в этом случае.
Можно, если предварительно преобразовать лоты в int. О чем я сказал выше...
А можно увидеть код если вам не трудно? А то пробую всяко разно не чего не получается.
Или есть какой то другой вариант по проще добовление в советник риск в прцентах от депо. Спасибо!
А можно увидеть код если вам не трудно? А то пробую всяко разно не чего не получается.
Или есть какой то другой вариант по проще добовление в советник риск в прцентах от депо. Спасибо!
Смотря что нужно получить в конечном итоге, вот тут я к примеру приводил ряд интересных функций на счет рисков
А чтобы этот код заработал, нужно всего-то умножить лот на 100000 и подать его для входа в switch(StepSize) как параметр (переменная типа int).
PS
И вообще, если честно я не совсем понимаю назначение всех этих вариантов? Я про то, что в контексте данной функции вполе хватит и одного из последних....
Смотря что нужно получить в конечном итоге, вот тут я к примеру приводил ряд интересных функций на счет рисков
А чтобы этот код заработал, нужно всего-то умножить лот на 100000 и подать его для входа в switch(StepSize) как параметр (переменная типа int).