Лучше всего сравнивать дельту после вычитания или делать сравнение
на допустимую дельту. У нас в стандартной поставке в stdlib.mq4 есть
специальная функция:
//+------------------------------------------------------------------+ //| right comparison of 2 doubles | //+------------------------------------------------------------------+ bool CompareDoubles(double number1,double number2) { if(NormalizeDouble(number1-number2,8)==0) return(true); else return(false); }
Всё предельно ясно!
Спасибо!
Спасибо!
Renat писал (а) >>
Лучше всего сравнивать дельту после вычитания или делать сравнение на допустимую дельту. У нас в стандартной поставке в stdlib.mq4 есть специальная функция:
Лучше всего сравнивать дельту после вычитания или делать сравнение на допустимую дельту. У нас в стандартной поставке в stdlib.mq4 есть специальная функция:
Значит ли это, что вместо цифры 8 в NormalizeDouble можно указать встроенную переменную Digits, привязав тем самым точность вычисления к используемой валютной паре?
Например так:
bool Equal(double FirstValue, double SecondValue) { if (NormalizeDouble(FirstValue - SecondValue, Digits) == 0) { return(true); } else { return(false); } }
Смогу ли я с помощью этой функции сравнивать к примеру StopLoss разных ордеров, и при этом забыв о разрядности различных валютных пар?
Я тут немного развил тему... пригодно ли это для использования?
bool Equal(double FirstValue, double SecondValue) { if (NormalizeDouble(FirstValue - SecondValue, Digits) == 0) { return(true); } else { return(false); } } bool LessOrEqual(double FirstValue, double SecondValue) { if ((FirstValue < SecondValue) || Equal(FirstValue, SecondValue)) { return(true); } else { return(false); } } bool GreaterOrEqual(double FirstValue, double SecondValue) { if ((FirstValue > SecondValue) || Equal(FirstValue, SecondValue)) { return(true); } else { return(false); } } bool Less(double FirstValue, double SecondValue) { if ((FirstValue < SecondValue) && !Equal(FirstValue, SecondValue)) { return(true); } else { return(false); } } bool Greater(double FirstValue, double SecondValue) { if ((FirstValue > SecondValue) && !Equal(FirstValue, SecondValue)) { return(true); } else { return(false); } }

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Ответьте, пожалуйста, на такой вопрос. Корректно ли проверять равенство двух чисел типа double после их нормализации функцией NormalizeDouble до одинакового количества знаков после запятой?
Дело в том, что функция, приводящая оба числа к целому виду перед сравнением, которая используется у меня в эксперте, занимает довольно много процессорного времени. Хотелось бы сделать максимально быстро, но правильно. Что посоветуете?
Конечно, при каждом тике в реал-тайме это малозаметно. Но тестер начинает довольно долго рассчитывать при моделировании. Хочется писать как можно более грамотнее. Так мне приятнее как программисту.
Очень надеюсь на ответ!