MQL4: Как написать ночного скальпера

Добрый день, уважаемые друзья! Продолжаются наши уроки по MQL4 программированию.

В последнее время стала очень популярной работа при помощи ночных скальперов. Живой пример — советник Generic A-TLP. Конечно, в рамках одного урока сложно будет создать советник, хотя бы примерно имеющий такую же результативность, что и робот, создававшийся на протяжении целого года большим количеством форумчан. Но мы изучим основной принцип создания подобных советников, а также в последующих уроках мы улучшим его работу и наш советник обрастет многими полезными функциями. Итак, начнем.

Справочный раздел

Тема на форуме

С уважением, Дмитрий аkа Silentspec
TradeLikeaPro.ru

Уроки по MQL , , , ,
  • sh

    дженерик начал сдавать позиции

    • Silentspec

      А причем тут генерик?

      • ИВАН

        спасибо вам за вашу работу

    • Linhost

      Где? У меня все отлично идет. Моник mynightfly посмотрите.

      • ВЛАДИМИР РЫЖАКОВ

        Как видео может отлично идти,если в двух местах пропуски?

  • Neel

    Большая просьба перезалить видео. Качество даже HD -ужОсс, местами битое(например на 1:21:03) как следствие-потеряно описание по данной процедуре, в целом хочется больше описания -«коментов» по видео,как,зачем,почему. За труд спасибо.

  • ВЛАДИМИР РЫЖАКОВ

    Большое спасибо за Ваш труд!
    Согласен с Neel,хочется больше описания -«коментов» по видео,как,зачем,почему.И ещё одно — когда записываете видео сделайте в метаэдиторе шрифт покрупнее пожалуйста.

  • Игорь

    Переписал советника с видео. Скомпилировал. Все ок.

    Но при тестировании, как будто зависает. В логе мт4 пишет, что начал работу и на этом все. Никаких сделок.

    Просьба уважаемому автору(если не затруднит) выложить исходник советника!

    • ВЛАДИМИР РЫЖАКОВ

      При компиляции есть ошибки , предупреждения?

  • Влад Пономарев

    Инструкция if(OrderOpenPrice()-Ask>ExitProfitPips*_Point && TimeCurrent()-OrderOpenTime()>60*ExitProfitMinutes) return(true); в процедуре ExitTimeProfit(…) не верна, из TimeCurrent() и OrderOpenTime() для сравнения необходимо выделить минуты

    • ВЛАДИМИР РЫЖАКОВ

      Если считаешь,что не верна — напиши свой вариант, правильный и поясни что будет происходить в твоём варианте.

    • Нет, не нужно. Время в языке mql4 измеряется в секундах (нет, не от рождества христова:) от 1970.01.01. Именно до такой даты вглубь истории кстати можно построить график цены в терминале — если вы попробуете загрузить историю с 60-х годов, например, ничего не выйдет. Ну так вот. Время — в секундах с определенной даты. Разница TimeCurrent()-OrderOpenTime() тоже получается в секундах. ExitProfitMinutes мы задаем в минутах, поэтому умножаем на 60 (количество секунд в минуте). И вуаля — получаем нужное нам сравнение — прошло ли ExitProfitMinutes с момента открытия ордера, или нет.

  • Влад Пономарев

    Очень жду продолжения работы над советником, на тестах дает неплохие результаты.

  • Ребят, пишите, что не понятно, в продолжении обязательно поясню. Написание ночника этого — не на один присест, уроков будет много — вам еще смотреть успеет надоесть:)

  • ВЛАДИМИР РЫЖАКОВ

    Да,есть непонятки.
    Как работает переменная «dir».В некоторых функциях она объявлена,но даже не используется.
    Я так понимаю,что эта переменная относится к направлению открытия сделки.Но ей не задаётся никакого значения и ничего не присваивается.
    И ещё меня смущает в функции bool TimeFilter() последние 2 строчки

    if (MyStartHour = MyStartHour && Hour() MyStopHour && (Hour() = MyStopHour)) return(true);

    как советник может торговать,если MyStartHour == MyStopHour
    Вот как я понимаю в моём варианте выглядит так
    {
    ———————————————
    ————————————————-
    ——————————————————-
    if (MyStartHour = MyStartHour && Hour() MyStopHour && (Hour() >= MyStartHour || Hour() < MyStopHour)) return(true);
    if (MyStartHour == MyStopHour) return(false);

    return(false);
    }
    В общем я в этом запутался,пытаясь разобраться,впервые столкнувшись с этой функцией,хотя задумывался раньше как записать такую функцию.

    И ещё такой вопрос — как получается,например в настройки выведено false или true . То как считать true это включено,советник использует этот алгоритм,а если false — то не использует в торговле.
    При extern —— = false советник просто проходит мимо этой функции,а при —- = true читает и использует то что в ней.
    Извини что так дотошно и подробно описываю,просто нужно мне разобраться.Спасибо.