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

От xbms, 13 апреля, 2013 в Уголок Программиста

#1701

Yura Vakulenko Спасибо

#1702

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

Изменено 23 декабря, 2014 пользователем abuu

#1703


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

Вот кусок кода из подобного советника:
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()))
#1704





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



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

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

Спасибо за участие и извините, если вопросы глупые.
#1705


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
, можешь скинуть советник, который ты уже навоял на моем индикаторе? )) Ну это же не хорошо!)

Изменено 23 декабря, 2014 пользователем Yura Vakulenko

#1706

Заменил функцию OnInit на init. Стер OnDeinit и OnTick - и все заработало. В этом была проблема.

#1707

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

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

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

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

  • #1708


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

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

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

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



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

    [list type=decimal]

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

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

  • #1710


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



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

    Вот кусок кода из подобного советника:
    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()))

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


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

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

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

    #1714



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

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

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


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

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

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


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


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

    Изменено 27 декабря, 2014 пользователем 0ll

    #1716

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

    #1717

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

    #1718

    Вот здесь увидел:
    mql5.com/ru/docs/standardlibrary/tradeclasses/ctrade

    #1719

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

    #1720

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


    #1721

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

    #1722

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

    #1723


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

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

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

    #1725

    Помогите решить проблемку: Пишу советник по внешнему индикатору, не получается получить значения из буфферов.
    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. На графике рисуются стрелки, но нет ниодного объекта, по которому можно было бы открывать ордера.

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

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

    Перейти к списку тем
    Форум · 2.0.20260627.0025