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

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


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

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

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

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

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

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

Перейти

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

Перейти

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

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

привет всем. как будет кусок код отвечающий за условие , вход-выход советника по стрелочному индикатору(без исходника) ? заранее спасибо

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

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


привет всем. как будет кусок код отвечающий за условие , вход-выход советника по стрелочному индикатору(без исходника) ? заранее спасибо

Вот кусок кода из подобного советника:
bufBuy = iCustom(NULL,0,"beforexguru_orig",Sensitivity, false, false,3,1);
bufSell = iCustom(NULL,0,"beforexguru_orig",Sensitivity, false, false,4,1);
if (bufBuy != EMPTY_VALUE) ordOpen(OP_BUY);
if (bufSell != EMPTY_VALUE) ordOpen(OP_SELL);
Стрелки в разных буферах. Значения в этих буферах либо пусто (EMPTY_VALUE) или цена где рисовать стрелку.

pavlovost У Вас ошибки в коде.
1. Вместо Start используйте OnTick
2. Это: HourStart == TimeCurrent() работать не будет, т.к. HourStart это целое = 10, а TimeCurrent datetime = 16587456.
Вам надо писать так: (HourStart TimeHour(TimeCurrent()))
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

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





pavlovost У Вас ошибки в коде.
1. Вместо Start используйте OnTick
2. Это: HourStart == TimeCurrent() работать не будет, т.к. HourStart это целое = 10, а TimeCurrent datetime = 16587456.
Вам надо писать так: (HourStart TimeHour(TimeCurrent()))



А это будет работать? (HourEnd == TimeHour(TimeCurrent()))

И OnTick использовать вместо Start, это для чего? Ведь функция Start вроде основная для работы советника.

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

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


Yura Vakulenko я чего то не вкурил твои правила входа в и выхода в рынок по этому индюку.Вот что он показывает.как с ним работать я пока не понял ?


Добавлено: 22-12-2014 17:39:48

Yura Vakulenko,я понаблюдал за индикатором и понял что за продажу отвечает буфер 1, за пакупку буфер 3. и нулевой сигналка. Значит на пакупку входим когда открывается новый бар и есть сигналы от трех буферов, то есть Сигнальный больше - 100, буфер 1 со смещением в 1 бар, то же больше -100,и буфер 1 со смещением в 2 бара то же больше -100. Открываем ордер. Далее если поступают сигналы пока нет противоположного открываем сетку ордеров с использованием мартина.При появлении противоположного сигнала закрываем сетку ордеров. Тут же окрываем в обратную сторону ,все повторяется до противоположного сигнала индюка. Я правильно понял идею твоей системы ?


да, ты все правильно понял. Вышло что0то?

Добавлено: 23-12-2014 13:25:10



привет всем. как будет кусок код отвечающий за условие , вход-выход советника по стрелочному индикатору(без исходника) ? заранее спасибо

Вот кусок кода из подобного советника:
bufBuy = iCustom(NULL,0,"beforexguru_orig",Sensitivity, false, false,3,1);
bufSell = iCustom(NULL,0,"beforexguru_orig",Sensitivity, false, false,4,1);
if (bufBuy != EMPTY_VALUE) ordOpen(OP_BUY);
if (bufSell != EMPTY_VALUE) ordOpen(OP_SELL);
Стрелки в разных буферах. Значения в этих буферах либо пусто (EMPTY_VALUE) или цена где рисовать стрелку.

pavlovost У Вас ошибки в коде.
1. Вместо Start используйте OnTick
2. Это: HourStart == TimeCurrent() работать не будет, т.к. HourStart это целое = 10, а TimeCurrent datetime = 16587456.
Вам надо писать так: (HourStart TimeHour(TimeCurrent()))


Oli
, можешь скинуть советник, который ты уже навоял на моем индикаторе? )) Ну это же не хорошо!) Изменено пользователем Yura Vakulenko
Ссылка на сообщение
Поделиться на другие сайты

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

Здравствуйте!

В ходе изучения индикаторных функций на MQL возникли следующие вопросы:
[list type=decimal]

  • В окне индикаторов в терминале MT4 можно установить необходимые уровни и, в зависимости от значения индикатора относительно уровня, принимать решения по торговле. Можно ли получить доступ к уровням в MQL4?

  • Каким образом можно применять индикаторы (к примеру, сглаживающее среднее MA) к данным другого индикатора (к примеру, RSI)?

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

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


    Здравствуйте!

    В ходе изучения индикаторных функций на MQL возникли следующие вопросы:
    [list type=decimal]

  • В окне индикаторов в терминале MT4 можно установить необходимые уровни и, в зависимости от значения индикатора относительно уровня, принимать решения по торговле. Можно ли получить доступ к уровням в MQL4?

  • Каким образом можно применять индикаторы (к примеру, сглаживающее среднее MA) к данным другого индикатора (к примеру, RSI)?



  • 1. Читай
    2. Здесь варианты. Вы применять сглаживание к индюку в терминале будете? или в советнике? или в польз. индикаторе?
    Ссылка на сообщение
    Поделиться на другие сайты

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

    [list type=decimal]

  • Насчет уровней понял, спасибо.

  • Сглаживающую среднюю к RSI планирую применять в советнике. Есть мысль записать значения RSI в массив и дальше использовать эти значения для построения MA. Но это изобретение велосипеда. Может, есть какие-нибудь встроенные средства?

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

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


    • Сглаживающую среднюю к RSI планирую применять в советнике. Есть мысль записать значения RSI в массив и дальше использовать эти значения для построения MA. Но это изобретение велосипеда. Может, есть какие-нибудь встроенные средства?
    Есть встроенные средства, но всё-таки велосипед будет быстрее. Три пути:
    1. Открываете индюк РСИ, добавляете параметр МАпериод и 1 буфер. После расчёта основного буфера вставляете расчёт со сглаживанием. В сове импортируете через иКустом() 2-й буфер модифицированного РСИ. (я так делал)
    2. В сове копируете в массив значения РСИ и сглаживаете с помощью этой функции iMAOnArray()
    3. В сове по-барно получаете значение РСИ и сразу применяете экспоненциальное сглаживание (без дополнительного копирования в массив) типа: maRSI = (newRSI + maRSI*(МАпериод-1))/МАпериод;. Имхо данный вариант лучше №2.
    • Лайк 1
    Ссылка на сообщение
    Поделиться на другие сайты

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



    привет всем. как будет кусок код отвечающий за условие , вход-выход советника по стрелочному индикатору(без исходника) ? заранее спасибо

    Вот кусок кода из подобного советника:
    bufBuy = iCustom(NULL,0,"beforexguru_orig",Sensitivity, false, false,3,1);
    bufSell = iCustom(NULL,0,"beforexguru_orig",Sensitivity, false, false,4,1);
    if (bufBuy != EMPTY_VALUE) ordOpen(OP_BUY);
    if (bufSell != EMPTY_VALUE) ordOpen(OP_SELL);
    Стрелки в разных буферах. Значения в этих буферах либо пусто (EMPTY_VALUE) или цена где рисовать стрелку.

    pavlovost У Вас ошибки в коде.
    1. Вместо Start используйте OnTick
    2. Это: HourStart == TimeCurrent() работать не будет, т.к. HourStart это целое = 10, а TimeCurrent datetime = 16587456.
    Вам надо писать так: (HourStart TimeHour(TimeCurrent()))

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

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


    спасибо и еще как прикрутить мартингейл к советнику ? заранее спасибо

    Мартин разный бывает. Например после закрытого убытка - увеличение лота (множителем или слагаемым). Или в сетке при незакрытой убыточной позе усреднение с увеличением/уменьшением лота. Вам какой?
    • Лайк 1
    Ссылка на сообщение
    Поделиться на другие сайты

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

    Вопрос, как быть с переменными GlobalVariables, если нужно сохранять все типы значений: int, double и bool, а они могут иметь только тип double. Булевые ещё можно получить обходным путём по условиям, но как быть с целочисленными, если например нужно сохранить туда тикет. Можно конечно после извлечения приводить к нужному типу, но не возникнет ли при этом глюков. В общем прошу подсказать, как правильно и безглючно это устроить?

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

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



    спасибо и еще как прикрутить мартингейл к советнику ? заранее спасибо

    Мартин разный бывает. Например после закрытого убытка - увеличение лота (множителем или слагаемым). Или в сетке при незакрытой убыточной позе усреднение с увеличением/уменьшением лота. Вам какой?

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

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


    Вопрос, как быть с переменными GlobalVariables, если нужно сохранять все типы значений: int, double и bool, а они могут иметь только тип double. Булевые ещё можно получить обходным путём по условиям, но как быть с целочисленными, если например нужно сохранить туда тикет. Можно конечно после извлечения приводить к нужному типу, но не возникнет ли при этом глюков. В общем прошу подсказать, как правильно и безглючно это устроить?

    Приводи к нужному типу через: тикет = (int)глобтикет; глючить не будет.
    Но, по большому счёту, это нужно только если в терминале несколько сов работающих совместно. Если сова одна, необходимости в глобальных переменных нет.

    Добавлено: 27-12-2014 12:23:24


    после убыточного сделка советник увеличивал лот. например в два раза. как это сделать ? заранее спасибо


    Самый оптимальный вариант включает несколько шагов:
    1. При открытии ордера сохраняете его тикет.
    2. Проверяете наличие открытых ордеров. Как только всё закрылось -
    3. Смотрите по тикету закрытый профит, если 4. Умножаете лот закрытого ордера на множитель.
    5. Снова в бой!
    Есть мене оптимальный способ, через исследование истории закрытых ордеров, но этот способ посложнее будет. имхо. Изменено пользователем 0ll
    • Лайк 3
    Ссылка на сообщение
    Поделиться на другие сайты

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

    Подскажите для чего нужны и PositionOpen и Buy с Sell в классе CTrade?
    Суть одна же вроде. Может скорость выполнения или есть какие-то параметры, которые есть в одном, но нет в другом?

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

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

    Стесняюсь спросить: Вы этот класс где увидели? если на этом форуме, то может Вам написать в соответствующую ветку?
    Вот я бы рад Вам помочь, но не знаю о чём речь...

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

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

    Это мкл5. к сожалению я не большой спец в этом вопросе. Мое имхо: будет работать практически одинаково.
    Для компетентных ответов Вам надо обратиться к разработчику класса - метаквотам.

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

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

    Здравствуйте Уважаемые форумчане.
    Появилась идея создать индикатор на основе стандартного Volumes, вот только язык mql уж очень тяжело дается мне.
    Пожалуйста оцените идею и ее реализацию. (Мне и вправду показалось это интересным).
    Идея: Суть индикатора измерить сколько пунктов проходит цена на падающем объеме и сколько на растущем. Обновление данных должно проходить по закрытию свечи. Старт расчетов берется с начала падающего и растущих объемов по индикатору Volumes.
    На рисунке я выделил это вертикальными линиями. То есть перерасчет индикатор ведет после смены падающего объема на растущий и наоборот. В синий квадрат нарисовал пример, как мог бы выглядеть такой индикатор.


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

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

    Такая идея и даже более продвинутые уже реализованы. массово. Конечно я не отговариваю от очередной реализации - это даже полезно.

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

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

    искал... весь интернет облазил, не нашел ничего даже схожего с этим(( Может подскажите где копать? Вы считаете это не интересным?

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

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


    искал... весь интернет облазил, не нашел ничего даже схожего с этим(( Может подскажите где копать? Вы считаете это не интересным?

    Это интересно, сам делал, даже бота делал на этом. Самый доступный индюк On Balance Volume который доступен в Вашем терминале.
    Ссылка на сообщение
    Поделиться на другие сайты

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

    Я нашел сегодня индикатор где просто в пунктах размер свечи, а вот именно то чего хочу пока нету. Чтож буду думать над реализацией. Что можете сказать про реализацию идеи, это сложно? Спасибо за советы.

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

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

    Помогите решить проблемку: Пишу советник по внешнему индикатору, не получается получить значения из буфферов.
    1. функция iCustom не помогает, значения всегда 0
    void OnTick()
    {
    double SignalBuy=iCustom(NULL,0,"indikator",0,0);
    double SignalSell=iCustom(NULL,0,"indikator",1,0);
    Alert(SignalBuy+" "+SignalSell);
    }
    2. На графике рисуются стрелки, но нет ниодного объекта, по которому можно было бы открывать ордера.

    Какие есть ещё пути решения?

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

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

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

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

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

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

    Войти

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

    Войти

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


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

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