iPerevalov Опубликовано 3 сентября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 сентября, 2016 Здравствуйте! Выполняя задание по 5 уроку MQL4, столкнулся в с проблемой. Задание: написать трейлинг-стоп по Parabolic SAR. Пятый день не могу понять свою ошибку. В журнале пишет: OrderModify error 1 (то есть "Нет ошибки, но результат неизвестен").Мог бы кто-нибудь помочь разобраться с заданием? Добрый день! Принтуйте SAR и OrderStopLoss(), посмотрите у них разное количество знаков после запятой, поэтому проверка SAR > OrderStopLoss() дает true и осуществляется модификация ордера по той же цене.Лекарство: SAR = NormalizeDouble(iSAR(Symbol(), 0, 0.02, 0.2, 1), _Digits);Удачи! Спасибо, SilverKZ. Уже который раз помогаете. Что касается данного замечания, то, мне кажется, количество ошибок происходит не из-за этого. В код добавил: double SL = NormalizeDouble(SAR, Digits); но все-равно выводит море ошибок. Все дело вот, как я думаю, в таких ордерах (в прикрепленном файле есть пример). Что можно сделать в таком случае? Как вы думаете? 2016-09-03_20-04-47.png Изменено 3 сентября, 2016 пользователем iPerevalov Ссылка на сообщение Поделиться на другие сайты More sharing options...
SilverKZ Опубликовано 3 сентября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 сентября, 2016 iPerevalov, 1) мое лекарство относилось к OrderModify error 1, нормализация цен избавляет от данной ошибки. Это проблема решена?2) Ошибку 130 (неправильные цены) я видел, но не стал обращать внимания, т.к. думал что написание кода продолжится и эта ошибка будет исключена.В данном случае ошибка в логике, а именно в этой строке: if((Bid > SAR && SAR > OrderStopLoss()) || OrderStopLoss() == 0). Идем по шагам: 1) открылся бай, 2) SAR выше Bid, 3) Условие в первых скобках (Bid > SAR && SAR > OrderStopLoss()) -> false, 4) второе условие (OrderStopLoss() == 0) -> true, 5) выполняется if(!OrderModify(OrderTicket(), OrderOpenPrice(), SAR, 0, 0)), где SAR - неверная цена для стоплосса.Что сделать? 1) Проверить чтобы Bid > SAR, если меньше, то не модифицировать ордер; 2) или в таких случаях выставлять фиксированный стоплосс. Изменено 3 сентября, 2016 пользователем SilverKZ 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
iPerevalov Опубликовано 3 сентября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 сентября, 2016 iPerevalov, 1) мое лекарство относилось к OrderModify error 1, нормализация цен избавляет от данной ошибки. Это проблема решена?2) Ошибку 130 (неправильные цены) я видел, но не стал обращать внимания, т.к. думал что написание кода продолжится и эта ошибка будет исключена.В данном случае ошибка в логике, а именно в этой строке: if((Bid > SAR && SAR > OrderStopLoss()) || OrderStopLoss() == 0). Идем по шагам: 1) открылся бай, 2) SAR выше Bid, 3) Условие в первых скобках (Bid > SAR && SAR > OrderStopLoss()) -> false, 4) второе условие (OrderStopLoss() == 0) -> true, 5) выполняется if(!OrderModify(OrderTicket(), OrderOpenPrice(), SAR, 0, 0)), где SAR - неверная цена для стоплосса. [list type=decimal] К сожалению, проблема с 1-ошибкой не решена. Код на модификацию ордера преобразовал в следующий: if((Bid > SAR && SAR > OrderStopLoss()) || OrderStopLoss() == 0) {double SL = NormalizeDouble(SAR, Digits); if(!OrderModify(OrderTicket(), OrderOpenPrice(), SL, 0, 0)) Print("Ошибка модификации ордера на покупку"); } По поводу ошибки 130 я вас понял. Логика сломана. Изменил условия на открытие ордера следующим образом: if(Ask > SAR && CountBuy() == 0 && iHigh(Symbol(),0,1) > SAR)Что тоже не помогло ( Я не знаю, в чем дело. Ваше решение с нормализацией должно помогать, я знаю это. Но в журнале ошибка в модификации ордера происходит очень странно: в 10:59, 21:59 и т.д. А как наступает 11:00 или 22:00, то ордер модифицируется без проблем...P.S. если прогнать советник по ценам открытия, то советник не выдает ни одной ошибки. Раньше тестировал по всем тикам. Изменено 3 сентября, 2016 пользователем iPerevalov Ссылка на сообщение Поделиться на другие сайты More sharing options...
SilverKZ Опубликовано 3 сентября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 сентября, 2016 [list type=decimal] К сожалению, проблема с 1-ошибкой не решена. Код на модификацию ордера преобразовал в следующий: if((Bid > SAR && SAR > OrderStopLoss()) || OrderStopLoss() == 0) {double SL = NormalizeDouble(SAR, Digits); if(!OrderModify(OrderTicket(), OrderOpenPrice(), SL, 0, 0)) Print("Ошибка модификации ордера на покупку"); } Нормализовать SAR надо перед данным блоком, как я ранее написал, т.е должно бытьSAR = NormalizeDouble(iSAR(Symbol(), 0, 0.02, 0.2, 1), _Digits);...... if((Bid > SAR && SAR > OrderStopLoss()) || OrderStopLoss() == 0) { double SL = NormalizeDouble(SAR, Digits); if(!OrderModify(OrderTicket(), OrderOpenPrice(), SL, 0, 0)) Print("Ошибка модификации ордера на покупку"); }Это решит проблему ошибки 1. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
iPerevalov Опубликовано 3 сентября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 сентября, 2016 Спасибо, помогло. Не совсем я верно вас понял.Также убрал проверку на OrderStopLoss() == 0. Вроде бы помогло. Но еще буду тестироваться. Спасибо большое, вам! Изменено 3 сентября, 2016 пользователем iPerevalov Ссылка на сообщение Поделиться на другие сайты More sharing options...
SilverKZ Опубликовано 3 сентября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 сентября, 2016 iPerevalov, подкорректировал советник, 130 ошибку вроде убрал. Если возникнут проблемы, пишите. test5SAR_2.mq4 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
iPerevalov Опубликовано 3 сентября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 сентября, 2016 iPerevalov, подкорректировал советник, 130 ошибку вроде убрал. Если возникнут проблемы, пишите. Да, все сработало. Без помарок. Спасибо! Вы использовали вместо "Bid > SAR" условие - "(Bid - SAR) > MarketInfo(Symbol(), MODE_STOPLEVEL) * Point)". Я не знал, что это такое, поэтому Comment'ал все значения MarketInfo(Symbol(), MODE_STOPLEVEL) * Point с каждым входом на модификацию ордера. И значение этой функции было неизменным на всем промежутке тестирования и равнялось оно 0.0. То есть минимально допустимый уровень стоп-лосса/тейк-профита в пунктах равен 0. Я правильно понял? Если так, то ведь можно оставить как было, то есть Bid > SAR. Или я не прав?И такой вопрос: чтобы модифицировать ордер на продажу условие поменять, аналогично как у покупок, не получится, так как OrderStopLoss() нулевой. То есть if(SAR Изменено 3 сентября, 2016 пользователем iPerevalov Ссылка на сообщение Поделиться на другие сайты More sharing options...
SilverKZ Опубликовано 4 сентября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 сентября, 2016 Добрый день! Моя формула: double Level_quaternary(int step = 250){ double vol = Close[0] * 100; return(MathFloor(vol) / 100 + step * _Point * (MathFloor((vol - MathFloor(vol)) / (_Point * 100 * step)) + 1)); } Ссылка на сообщение Поделиться на другие сайты More sharing options...
Robert_spb Опубликовано 4 сентября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 сентября, 2016 К сожалению, мои познания в mql4 не такие глубокие что бы понять этот код) Но спасибо, за помощь. Буду разбираться. Ссылка на сообщение Поделиться на другие сайты More sharing options...
overdrive90 Опубликовано 4 сентября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 сентября, 2016 https://www.mql5.com/ru/blogs/post/661065 Ссылка на сообщение Поделиться на другие сайты More sharing options...
SVS696 Опубликовано 4 сентября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 сентября, 2016 Всем добрый день.У меня возник такой вопрос: Как мне определить уровни Фибоначчи не растягивая сетку вручную, т.е. растянуть сетку виртуально с целью определить расположение уровней относительно цены сугубо автоматически. Ссылка на сообщение Поделиться на другие сайты More sharing options...
iPerevalov Опубликовано 4 сентября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 сентября, 2016 Всем добрый день.У меня возник такой вопрос: Как мне определить уровни Фибоначчи не растягивая сетку вручную, т.е. растянуть сетку виртуально с целью определить расположение уровней относительно цены сугубо автоматически. Здравствуйте. Возможно это поможет вам:[list type=decimal]https://docs.mql4.com/ru/objects/objectsetdouble https://docs.mql4.com/ru/constants/objectconstants/enum_object/obj_fibo Ссылка на сообщение Поделиться на другие сайты More sharing options...
SVS696 Опубликовано 4 сентября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 сентября, 2016 Всем добрый день.У меня возник такой вопрос: Как мне определить уровни Фибоначчи не растягивая сетку вручную, т.е. растянуть сетку виртуально с целью определить расположение уровней относительно цены сугубо автоматически. Здравствуйте. Возможно это поможет вам:[list type=decimal]https://docs.mql4.com/ru/objects/objectsetdouble https://docs.mql4.com/ru/constants/objectconstants/enum_object/obj_fibo Объекты мне вот и не нужны как раз. Хотелось бы все делать виртуально без отрисовки. Хотя бы понять с какой стороны начать свою реализацию расчета фибосетки Ссылка на сообщение Поделиться на другие сайты More sharing options...
SilverKZ Опубликовано 4 сентября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 сентября, 2016 Определить две точки на графике и рассчитать уровни по формуле. Определение двух точек зависит от ваших условий. Какие условия? Ссылка на сообщение Поделиться на другие сайты More sharing options...
SVS696 Опубликовано 4 сентября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 сентября, 2016 Определить две точки на графике и рассчитать уровни по формуле. Определение двух точек зависит от ваших условий. Какие условия? Формула же это по сути расстояние от высшой до низшей цены переведенное в проценты? Ссылка на сообщение Поделиться на другие сайты More sharing options...
SilverKZ Опубликовано 5 сентября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 сентября, 2016 Формула же это по сути расстояние от высшой до низшей цены переведенное в проценты? Добрый день!Алгоритм действий:1) Получить Price_1 (например, по ZigZag)2) Получить Price_23) Рассчитать расстояние Distance = Price_2 - Price_14) Рассчитать уровень (например, 161,8%) Fibo = Price_1 + Distance * 1,618EURUSDH14.png 3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Noname1 Опубликовано 5 сентября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 сентября, 2016 Здравствуйте, нужно написать простой индикатор для МТ4.Индикатор в отдельном окне должен отображать дельту от разницы двух валютных пар. В Экселе это все очень просто делается, хотелось бы перенести в терминал.Внешние настройки:Pair1: GBPUSDPair2: GBPAUDТип мувинга: Simply, Exponential ....Применить к: Оупен, клоуз ....Период мувинга: 14Как это должно выглядеть: 1) (GBPUSD - GBPAUD) = N1, N2.... Nn - после нахождения разницы между каждым баром по ценам клоуз индикатор "рисует" мувинг по этим значениям2) Delta = MA(14) - NВот эту дельту необходимо отобразить в виде индикатора. Должно получится что-то подобное: Изменено 5 сентября, 2016 пользователем Noname1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
SilverKZ Опубликовано 6 сентября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 сентября, 2016 Добрый день, попробую сделать ... one moment pleaseНастройки индикатора Pair_1 = "GBPUSD"; // Финансовый инструмент №1Pair_2 = "GBPAUD"; // Финансовый инструмент №2Period_MA = 14; // Период МАMethod_MA = 0; // Метод расчета МАPrice_MA = 0; // Используемая цена Удачных торгов!GBPUSDH166.pngindPair.mq4 Изменено 6 сентября, 2016 пользователем SilverKZ 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Noname1 Опубликовано 6 сентября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 сентября, 2016 Со стандартными парами (фунтдол фунтауд) работает, попробовал изменить на GBPUSD- GBPCAD и он перестал работать. Ссылка на сообщение Поделиться на другие сайты More sharing options...
SilverKZ Опубликовано 6 сентября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 сентября, 2016 Индикатор простой и не подгружает котировки автоматически. Возможно данная пара отсутствует в обзоре рынка, подгрузите котировки, откройте график данной пары. После всего перегрузите индикатор или смените таймфрейм и затем обратно вернитесь. Если не получиться буду думать дальше.Удачи! Ссылка на сообщение Поделиться на другие сайты More sharing options...
Noname1 Опубликовано 6 сентября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 сентября, 2016 Помогло добавление в обзор рынка, спасибо!Хотел бы спросить, будет ли индикатор корректно считать дельту между такими парами как EURUSD и USDCHF?Дело в том, что в экселе для правильного отображения я "переворачиваю" пару с Франком и выглядит это так:(Eurusd - (1/usdchf) Изменено 6 сентября, 2016 пользователем Noname1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
SilverKZ Опубликовано 6 сентября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 сентября, 2016 Нет, первый вариант корректно считать дельту с переворотом не будет. Подкрутил реверс, теперь будет. Если true - перевернуть вторую пару. Revers = false; // Перевернуть Pair_2 Посмотрите правильно ли считает?indPair_revers.mq4 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Noname1 Опубликовано 6 сентября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 сентября, 2016 Он почему-то переворачивает весь индикатор, но реверс работает.По паре EURUSD - USDCHF он должен выглядеть так:Еще есть небольшая (как мне кажется) просьба :Добавить звуковое оповещение когда гистограмма достигает некого уровня, на скрине я выделил зеленую линию как пример.Хотелось бы иметь возможность нарисовать 2-3 линии-алерты на индикаторе и иметь возможность не следить за ним постоянно.Заранее спасибо! Изменено 6 сентября, 2016 пользователем Noname1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
SilverKZ Опубликовано 6 сентября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 сентября, 2016 Подправил, теперь правильно показывает? Screenshot_1.pngindPair_revers2.mq4 3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
vitek01 Опубликовано 7 сентября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 сентября, 2016 Как всетаки расчитать профит в валюте счета от открытия ордера до тек профита.? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти