В итоге ордера вообще не открывает, советник не видит пересечений линий. Или данное условие не применимо?
Интересно получается, если ставлю Print на вывод, т.е. Print(UTPOW_0), в журнале странные цифры 0,-1,4,7 и пр... Но за текущий день таких параметров не было вообще, откуда они? :) Но вот если все перенести в скрипт и вывести в Alert, цифры адекватные: 20.000, 24.000 и пр. В чем проблемка?
Сравнивать действительные значения. Так они никогда не совпадут. Пересечение проверяется по другому совсем.
А по поводу значений. Надо еще и индикатор смотреть. А то может некорректное обращение к нему идет.
В итоге ордера вообще не открывает, советник не видит пересечений линий. Или данное условие не применимо?
Интересно получается, если ставлю Print на вывод, т.е. Print(UTPOW_0), в журнале странные цифры 0,-1,4,7 и пр... Но за текущий день таких параметров не было вообще, откуда они? :) Но вот если все перенести в скрипт и вывести в Alert, цифры адекватные: 20.000, 24.000 и пр. В чем проблемка?
if (UTPOW_0 >= UTPOW_1 && UTPOW_0_old <= UTPOW_1_old){Sell} if (UTPOW_0 <= UTPOW_1 && UTPOW_0_old >= UTPOW_1_old){Buy}
Обычно, если есть две линии х0-х1 и у0-у1, точка пересечения определяется как
if(x0<y0&&x1>y1) или наоборот if(x0>y0&&x1<y1) в зависимости в какую сторону пересечение.
Сравнивать действительные значения. Так они никогда не совпадут. Пересечение проверяется по другому совсем.
А по поводу значений. Надо еще и индикатор смотреть. А то может некорректное обращение к нему идет.
Как это можно проверить?
Как это можно проверить?
Варианты проверки пересечения выше были предложены.
Если там все в порядке, прогони маленький скрипт
int start() { //---- for(int i=30;i>=0;i--) { double mk=iCustom(NULL, 0, "UTPOW", 699999996, 1.0, 1000, 3, 12, 30, 0, i); Print(" i - ",i," ind - ",DoubleToStr(mk,8)); } //---- return(0);
и посмотри в журнале значения.
if (UTPOW_0 >= UTPOW_1 && UTPOW_0_old <= UTPOW_1_old){Sell} if (UTPOW_0 <= UTPOW_1 && UTPOW_0_old >= UTPOW_1_old){Buy}Проблемка. Такой вариант не всегда срабатывает при пересечениях. В чем может быть дело?
Например:
по GBRUSD 18.08.10 сработало только на sell в 21:00
а 19.08.10 вообще при пересечении не открыл ордера, хотя по графику оно явное.
При получении значения из индикатора сделай нормализацию точности
UTPOW??? = NormalizeDouble(iCustom (...), Digits);
Должно помочь при сравнении даблов.
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
В итоге ордера вообще не открывает, советник не видит пересечений линий. Или данное условие не применимо?
if (UTPOW_0 == UTPOW_1)
Интересно получается, если ставлю Print на вывод, т.е. Print(UTPOW_0), в журнале странные цифры 0,-1,4,7 и пр... Но за текущий день таких параметров не было вообще, откуда они? :) Но вот если все перенести в скрипт и вывести в Alert, цифры адекватные: 20.000, 24.000 и пр. В чем проблемка?