Перейти к содержанию

Обучение языку MQL4 под MetaTrader 4


Рекомендуемые сообщения

Обучение языку MQL4 под MetaTrader 4 Опубликовано



Здравствуйте! Выполняя задание по 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

Изменено пользователем iPerevalov
Ссылка на сообщение
Поделиться на другие сайты

  • Ответов 6,8k
  • Создано
  • Последний ответ

Популярные авторы

Популярные авторы

Популярные посты

Смотрим видео-уроки, изучаем MQL:       Скачать видеокурс «MQL программирование. Как самому написать форекс советник/ индикатор/ скрипт»   P.S. Тема про Обучение MQ

Перейти

Циклы цикл for Иногда необходимо повторять одно и то же действие несколько раз подряд. Для этого используют циклы. К примеру, мы хотим проанализировать последние 10 баров и выяснить наименьшую цен

Перейти

Речь идет о том, что не будет значимых нововведений. А только баги периодически будут править. А вот все новое мол - в МТ5. Когда они вживую сказали то же самое на конференции в Москве, я уточнил: "То

Перейти
Обучение языку MQL4 под MetaTrader 4 Опубликовано

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) или в таких случаях выставлять фиксированный стоплосс.

Изменено пользователем SilverKZ
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


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. если прогнать советник по ценам открытия, то советник не выдает ни одной ошибки. Раньше тестировал по всем тикам. Изменено пользователем iPerevalov
    Ссылка на сообщение
    Поделиться на другие сайты

    Обучение языку MQL4 под MetaTrader 4 Опубликовано


    [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
    Ссылка на сообщение
    Поделиться на другие сайты

    Обучение языку MQL4 под MetaTrader 4 Опубликовано

    Спасибо, помогло. Не совсем я верно вас понял.
    Также убрал проверку на OrderStopLoss() == 0. Вроде бы помогло. Но еще буду тестироваться. Спасибо большое, вам!

    Изменено пользователем iPerevalov
    Ссылка на сообщение
    Поделиться на другие сайты

    Обучение языку MQL4 под MetaTrader 4 Опубликовано

    iPerevalov, подкорректировал советник, 130 ошибку вроде убрал. Если возникнут проблемы, пишите.

    test5SAR_2.mq4

    • Лайк 2
    Ссылка на сообщение
    Поделиться на другие сайты

    Обучение языку MQL4 под MetaTrader 4 Опубликовано


    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 Изменено пользователем iPerevalov
    Ссылка на сообщение
    Поделиться на другие сайты

    Обучение языку MQL4 под MetaTrader 4 Опубликовано

    Добрый день!
    Моя формула:

    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));
    }
    Ссылка на сообщение
    Поделиться на другие сайты

    Обучение языку MQL4 под MetaTrader 4 Опубликовано

    К сожалению, мои познания в mql4 не такие глубокие что бы понять этот код) Но спасибо, за помощь. Буду разбираться.

    Ссылка на сообщение
    Поделиться на другие сайты

    Обучение языку MQL4 под MetaTrader 4 Опубликовано

    Всем добрый день.
    У меня возник такой вопрос: Как мне определить уровни Фибоначчи не растягивая сетку вручную, т.е. растянуть сетку виртуально с целью определить расположение уровней относительно цены сугубо автоматически.

    Ссылка на сообщение
    Поделиться на другие сайты

    Обучение языку MQL4 под MetaTrader 4 Опубликовано


    Всем добрый день.
    У меня возник такой вопрос: Как мне определить уровни Фибоначчи не растягивая сетку вручную, т.е. растянуть сетку виртуально с целью определить расположение уровней относительно цены сугубо автоматически.


    Здравствуйте. Возможно это поможет вам:
    [list type=decimal]
  • https://docs.mql4.com/ru/objects/objectsetdouble

  • https://docs.mql4.com/ru/constants/objectconstants/enum_object/obj_fibo

  • Ссылка на сообщение
    Поделиться на другие сайты

    Обучение языку MQL4 под MetaTrader 4 Опубликовано



    Всем добрый день.
    У меня возник такой вопрос: Как мне определить уровни Фибоначчи не растягивая сетку вручную, т.е. растянуть сетку виртуально с целью определить расположение уровней относительно цены сугубо автоматически.


    Здравствуйте. Возможно это поможет вам:
    [list type=decimal]
  • https://docs.mql4.com/ru/objects/objectsetdouble

  • https://docs.mql4.com/ru/constants/objectconstants/enum_object/obj_fibo



  • Объекты мне вот и не нужны как раз. Хотелось бы все делать виртуально без отрисовки. Хотя бы понять с какой стороны начать свою реализацию расчета фибосетки
    Ссылка на сообщение
    Поделиться на другие сайты

    Обучение языку MQL4 под MetaTrader 4 Опубликовано

    Определить две точки на графике и рассчитать уровни по формуле. Определение двух точек зависит от ваших условий. Какие условия?

    Ссылка на сообщение
    Поделиться на другие сайты

    Обучение языку MQL4 под MetaTrader 4 Опубликовано


    Определить две точки на графике и рассчитать уровни по формуле. Определение двух точек зависит от ваших условий. Какие условия?


    Формула же это по сути расстояние от высшой до низшей цены переведенное в проценты?
    Ссылка на сообщение
    Поделиться на другие сайты

    Обучение языку MQL4 под MetaTrader 4 Опубликовано


    Формула же это по сути расстояние от высшой до низшей цены переведенное в проценты?


    Добрый день!
    Алгоритм действий:
    1) Получить Price_1 (например, по ZigZag)
    2) Получить Price_2
    3) Рассчитать расстояние Distance = Price_2 - Price_1
    4) Рассчитать уровень (например, 161,8%) Fibo = Price_1 + Distance * 1,618

    EURUSDH14.png

    • Лайк 3
    Ссылка на сообщение
    Поделиться на другие сайты

    Обучение языку MQL4 под MetaTrader 4 Опубликовано

    Здравствуйте, нужно написать простой индикатор для МТ4.

    Индикатор в отдельном окне должен отображать дельту от разницы двух валютных пар. В Экселе это все очень просто делается, хотелось бы перенести в терминал.


    Внешние настройки:

    Pair1: GBPUSD
    Pair2: GBPAUD
    Тип мувинга: Simply, Exponential ....
    Применить к: Оупен, клоуз ....
    Период мувинга: 14

    Как это должно выглядеть:

    1) (GBPUSD - GBPAUD) = N1, N2.... Nn - после нахождения разницы между каждым баром по ценам клоуз индикатор "рисует" мувинг по этим значениям

    2) Delta = MA(14) - N

    Вот эту дельту необходимо отобразить в виде индикатора.

    Должно получится что-то подобное:


    Изменено пользователем Noname1
    Ссылка на сообщение
    Поделиться на другие сайты

    Обучение языку MQL4 под MetaTrader 4 Опубликовано

    Добрый день, попробую сделать ... one moment please

    Настройки индикатора

    Pair_1    = "GBPUSD"; // Финансовый инструмент №1
    Pair_2 = "GBPAUD"; // Финансовый инструмент №2
    Period_MA = 14; // Период МА
    Method_MA = 0; // Метод расчета МА
    Price_MA = 0; // Используемая цена


    Удачных торгов!

    GBPUSDH166.png
    indPair.mq4

    Изменено пользователем SilverKZ
    • Лайк 2
    Ссылка на сообщение
    Поделиться на другие сайты

    Обучение языку MQL4 под MetaTrader 4 Опубликовано

    Со стандартными парами (фунтдол фунтауд) работает, попробовал изменить на GBPUSD- GBPCAD и он перестал работать.

    Ссылка на сообщение
    Поделиться на другие сайты

    Обучение языку MQL4 под MetaTrader 4 Опубликовано

    Индикатор простой и не подгружает котировки автоматически. Возможно данная пара отсутствует в обзоре рынка, подгрузите котировки, откройте график данной пары. После всего перегрузите индикатор или смените таймфрейм и затем обратно вернитесь. Если не получиться буду думать дальше.
    Удачи!

    Ссылка на сообщение
    Поделиться на другие сайты

    Обучение языку MQL4 под MetaTrader 4 Опубликовано

    Помогло добавление в обзор рынка, спасибо!

    Хотел бы спросить, будет ли индикатор корректно считать дельту между такими парами как EURUSD и USDCHF?

    Дело в том, что в экселе для правильного отображения я "переворачиваю" пару с Франком и выглядит это так:

    (Eurusd - (1/usdchf)

    Изменено пользователем Noname1
    Ссылка на сообщение
    Поделиться на другие сайты

    Обучение языку MQL4 под MetaTrader 4 Опубликовано

    Нет, первый вариант корректно считать дельту с переворотом не будет. Подкрутил реверс, теперь будет. Если true - перевернуть вторую пару.

    Revers    = false;    // Перевернуть Pair_2

    Посмотрите правильно ли считает?

    indPair_revers.mq4

    • Лайк 1
    Ссылка на сообщение
    Поделиться на другие сайты

    Обучение языку MQL4 под MetaTrader 4 Опубликовано

    Он почему-то переворачивает весь индикатор, но реверс работает.

    По паре EURUSD - USDCHF он должен выглядеть так:




    Еще есть небольшая (как мне кажется) просьба :

    Добавить звуковое оповещение когда гистограмма достигает некого уровня, на скрине я выделил зеленую линию как пример.

    Хотелось бы иметь возможность нарисовать 2-3 линии-алерты на индикаторе и иметь возможность не следить за ним постоянно.

    Заранее спасибо!

    Изменено пользователем Noname1
    Ссылка на сообщение
    Поделиться на другие сайты

    Обучение языку MQL4 под MetaTrader 4 Опубликовано

    Как всетаки расчитать профит в валюте счета от открытия ордера до тек профита.?

    Ссылка на сообщение
    Поделиться на другие сайты

    Для публикации сообщений создайте учётную запись или авторизуйтесь

    Вы должны быть пользователем, чтобы оставить комментарий

    Создать учетную запись

    Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

    Регистрация нового пользователя

    Войти

    Уже есть аккаунт? Войти в систему.

    Войти

  • Специальное предложение


  • Рекомендуемые брокеры

  • ×
    ×
    • Создать...