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() указано до какой степени точности нужна нормализация?
Потому, что в этой каше вообще трудно что-то распознать. Где функция инициализации, деинициализации, где старт, где принты на сомнительные параметры?
Где в функции NormalizeDouble() указано до какой степени точности нужна нормализация?
Функция инициализации, деинициализации, где старт, где принты на сомнительные параметры-ЭТО есть.....Я сюда скопировал что к этому решению относится и как строчки эти написанны и в них ошибка!
А еще, если b/S<10, то Lot=0
Непонял тебя
S=(Bid-GetStopLossSell())/Point; //в этой строчке ошибка 4051 и придирается к GetStopLossSell() здесь же
Непонял тебя
Если все переменные целочисленные, то a=b/c при b=2, c=3 приводит к a=0.
По замыслу, если a - двойной точности, то правая часть должна преобразовываться к типу левой. Реально этот механизм не работает, поэтому double Lot=b/S/10 = 0 при b<10*S.
Лечится разными способами. Проще всего - сделать кого-нибудь из правой части double (можно - константу).
Если все переменные целочисленные, то 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, объявленной слева.
Как это не работает? Все работает правильно!
Сначала вычисляется b/S/10 - с целочисленными операциями, согласно типам переменных b, S. Результат получится тоже целочисленным. А потом он преобразуется к типу переменной Lot, объявленной слева.
В том-то и дело, что потом. 0 превращается в 0.0
После чего неправильная нормализация... ну как бы лучше сказать...
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
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);
Почему пишет неправильный параметр и ссылается на последнюю скобку?