#Требуется помощь!!!#

 

extern int StopPercent=10; // Процент убытка
extern double AStopLoss = 13; // Стоп в пунктах
int S;
int a;
int b;


a=AccountFreeMargin()/100;
b=a*StopPercent;
S=(Bid-GetStopLossSell())/Point;
Lot=b/S/10;
return(Lot);

double GetStopLossSell()
{
return (High[1]+(AStopLoss*Point));
}


Почему возвращает 4051 ошибку?(невозвращает правильный лот)


Lot=NormalizeDouble(b/S/10);
Почему пишет неправильный параметр и ссылается на последнюю скобку?

 
cmex:

extern int StopPercent=10; // Процент убытка
extern double AStopLoss = 13; // Стоп в пунктах
int S;
int a;
int b;


a=AccountFreeMargin()/100;
b=a*StopPercent;
S=(Bid-GetStopLossSell())/Point;
Lot=b/S/10;
return(Lot);

double GetStopLossSell()
{
return (High[1]+(AStopLoss*Point));
}


Почему возвращает 4051 ошибку?(невозвращает правильный лот)


Lot=NormalizeDouble(b/S/10);
Почему пишет неправильный параметр и ссылается на последнюю скобку?

double NormalizeDouble( double value, int digits) 
параметры у нормализедубль не правильные. Вернее нет параметра digits
 

Потому, что в этой каше вообще трудно что-то распознать. Где функция инициализации, деинициализации, где старт, где принты на сомнительные параметры?

Где в функции NormalizeDouble() указано до какой степени точности нужна нормализация? 

 

А еще, если b/S<10, то Lot=0
 
drknn:

Потому, что в этой каше вообще трудно что-то распознать. Где функция инициализации, деинициализации, где старт, где принты на сомнительные параметры?

Где в функции NormalizeDouble() указано до какой степени точности нужна нормализация?


Функция инициализации, деинициализации, где старт, где принты на сомнительные параметры-ЭТО есть.....Я сюда скопировал что к этому решению относится и как строчки эти написанны и в них ошибка!
 
tara:
А еще, если b/S<10, то Lot=0

Непонял тебя
 

S=(Bid-GetStopLossSell())/Point; //в этой строчке ошибка 4051 и придирается к GetStopLossSell() здесь же

 
cmex:

Непонял тебя

Если все переменные целочисленные, то a=b/c при b=2, c=3 приводит к a=0.

По замыслу, если a - двойной точности, то правая часть должна преобразовываться к типу левой. Реально этот механизм не работает, поэтому double Lot=b/S/10 = 0 при b<10*S.

Лечится разными способами. Проще всего - сделать кого-нибудь из правой части double (можно - константу).

 
Вам уже двое указали, что нормализация так не делается, у Вас по умолчанию стоит ноль, значит до целого значения нормализует
 
tara:

Если все переменные целочисленные, то a=b/c при b=2, c=3 приводит к a=0.

По замыслу, если a - двойной точности, то правая часть должна преобразовываться к типу левой. Реально этот механизм не работает, поэтому double Lot=b/S/10 = 0 при b<10*S.

Как это не работает? Все работает правильно!

Сначала вычисляется b/S/10 - с целочисленными операциями, согласно типам переменных b, S. Результат получится тоже целочисленным. А потом он преобразуется к типу переменной Lot, объявленной слева.

 
Mathemat:

Как это не работает? Все работает правильно!

Сначала вычисляется b/S/10 - с целочисленными операциями, согласно типам переменных b, S. Результат получится тоже целочисленным. А потом он преобразуется к типу переменной Lot, объявленной слева.

В том-то и дело, что потом. 0 превращается в 0.0

После чего неправильная нормализация... ну как бы лучше сказать...

Причина обращения: