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

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


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

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

И Вам 0ll спасибо за замечания ! Может есть у вас есть рабочий код для перевода в безубыток? Или посоветуете где искать?

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

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

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

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

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

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

Перейти

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

Перейти

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

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

Созрел нубский вопрос: Как сделать оповещение о сделках например на почту?

Не назвал-бы вопрос "нубским". Вопрос не простой, нужно подключать виндовые библиотеки и работать с ними, для этого нужно разбираться с типами данных и маскировать mql форматы под C#. Попробуйте копать сюда или сюда. Успехов. Пиши о результатах.

Добавлено: 23-01-2019 14:58:54

Может есть у вас есть рабочий код для перевода в безубыток?

Специальной функции нет. Есть формула расчёта уровня безубытка для сетки (например). После нового ордера уровень пересчитывается, после пересечения уровня+Х пп - СЛ выставляется на уровень БУ. Так что ничего особо сложного нет. Вы показали код последней операции - модификации ордеров, кода по расчёту уровня нет.
Есть простое решение - когда сетка вышла в профит на Х$ - ставим СЛ на Y пп от цены, где X и Y зависят от лотности сетки. Изменено пользователем 0ll
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

Не назвал-бы вопрос "нубским". Вопрос не простой, нужно подключать виндовые библиотеки и работать с ними, для этого нужно разбираться с типами данных и маскировать mql форматы под C#. Попробуйте копать сюда или сюда. Успехов. Пиши о результатах.


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

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

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

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

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

Доброго времени суток, уважаемые. Кто сможет посмотрите мое д/з по 3 уроку, там какой то глюк а какой я не пойму. Заранее спасибо.

Test3_TMA.mq4

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

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

Кто сможет посмотрите мое д/з по 3 уроку, там какой то глюк а какой я не пойму.

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

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

Спасибо сам разобрался. Смысл был в следующем: по TMA ставятся ордера снизу Buy сверху Sell закрытие у средней линии и нужно было установить страховочные ордера к уже открытым на определенном расстоянии, т.е. Buy страховочный SellStop и наоборот. Я не смог сразу въехать откуда берутся ордера и отложки не по сигналу индикатора. Оказалось когда срабатывает скажем SellStop, он уже получается в рынке и ему положен страховочный орде BuyStop.
По хорошему нужно сделать проверку если отложка сработала то страховочный ордер не устанавливать и сделать удаление не сработавших отложенных ордеров. Но это не обязательно, в принципе домашка выполнена. А вы не в курсе основатель темы тут бывает?

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

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

А вы не в курсе основатель темы тут бывает?

Бывает, но очень редко, примерно 1 раз/2 года. :)
Раньше он специально оставлял ошибки в коде, чтоб обучающиеся мозги включали, поэтому Вы точно с ДЗ справились!
Ссылка на сообщение
Поделиться на другие сайты

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

Всем привет, пытаюсь получить сигнал с буферов индикатора, вроде бы они есть и какие-то показатели работают, но на деле сигнала нет никакого или я не там смотрю. Выкладываю сам индикатор, к сожалению код закрыт, нет нигде его с отрытым кодом и еще выкладываю сам тест файл. Уникальность индикатора в том что он не рисует, на самом деле это так, я давно за ним наблюдаю. Посмотрите кто знает как еще с него можно получить сигнал.

Tester_Indikator.mq4
Trend-Focus.ex4

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

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

пытаюсь получить сигнал с буферов индикатора



double a1 = iCustom(NULL,0, "Trend-Focus", 0, 1);
double a2 = iCustom(NULL,0, "Trend-Focus", 1, 1); // покупка
double a3 = iCustom(NULL,0, "Trend-Focus", 2, 1); // продажа
double a4 = iCustom(NULL,0, "Trend-Focus", 3, 1); // покупка
double a5 = iCustom(NULL,0, "Trend-Focus", 4, 1); // продажа
double a6 = iCustom(NULL,0, "Trend-Focus", 5, 1); // покупка стрелка
double a7 = iCustom(NULL,0, "Trend-Focus", 6, 1); // продажа стрелка


Все правильно ты смотришь! Я предполагаю, тебя смутило много цифр. Если значение буфера равно 2147483647(EMPTY_VALUE), то он пустой (посмотри справку EMPTY_VALUE = Пустое значение в индикаторном буфере = 2147483647 (0x7FFFFFFF))

a1 = 1.13374614 нас не интересует
a2 = 1.13374614 сигнал на покупку
a3 = 2147483647.00000000 буфер пустой (сигнала нет)
a4 = 1.13374614 сигнал на покупку
a5 = 2147483647.00000000 буфер пустой (сигнала нет)
a6 = 2147483647.00000000 буфер пустой (сигнала нет) на предыдущей свече стрелки нет
a7 = 2147483647.00000000 буфер пустой (сигнала нет) на предыдущей свече стрелки нет
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

Всем Здравствуйте!!! Очень интересная тема и урок по получению сигналов из буферов индикатора через iCustom.Может посоветуете как "привязаться" к такому индикатору ???

Signal_Bars_v3_Daily.mq4

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

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

Может посоветуете как "привязаться" к такому индикатору ???

Этот индикатор не имеет буферов. Значения можно получить через чтение свойства Цвет соответствующих объектов, но это будет не совсем правильно. Проще перенести код индикатора в советник.
Ссылка на сообщение
Поделиться на другие сайты

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


пытаюсь получить сигнал с буферов индикатора



double a1 = iCustom(NULL,0, "Trend-Focus", 0, 1);
double a2 = iCustom(NULL,0, "Trend-Focus", 1, 1); // покупка
double a3 = iCustom(NULL,0, "Trend-Focus", 2, 1); // продажа
double a4 = iCustom(NULL,0, "Trend-Focus", 3, 1); // покупка
double a5 = iCustom(NULL,0, "Trend-Focus", 4, 1); // продажа
double a6 = iCustom(NULL,0, "Trend-Focus", 5, 1); // покупка стрелка
double a7 = iCustom(NULL,0, "Trend-Focus", 6, 1); // продажа стрелка


Все правильно ты смотришь! Я предполагаю, тебя смутило много цифр. Если значение буфера равно 2147483647(EMPTY_VALUE), то он пустой (посмотри справку EMPTY_VALUE = Пустое значение в индикаторном буфере = 2147483647 (0x7FFFFFFF))

a1 = 1.13374614 нас не интересует
a2 = 1.13374614 сигнал на покупку
a3 = 2147483647.00000000 буфер пустой (сигнала нет)
a4 = 1.13374614 сигнал на покупку
a5 = 2147483647.00000000 буфер пустой (сигнала нет)
a6 = 2147483647.00000000 буфер пустой (сигнала нет) на предыдущей свече стрелки нет
a7 = 2147483647.00000000 буфер пустой (сигнала нет) на предыдущей свече стрелки нет


У меня идет такой код, беру 2 переменные которые заранее вычислил

double FocusH,FocusL; // FocusH - покупка (а2), FocusL - продажа (а3)

далее идет условие:

if (FocusH>0 && FocusH != FocusL) //то открываем покупку
if (FocusL>0 && FocusL != FocusH) // открываем продажу

далее начинаю гонять в тестере, но ордера открываются не так как нужно, может нужно реальное время а не история?
Прилагаю код советника

1order_2versiya.mq4

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

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


А вы не в курсе основатель темы тут бывает?

Бывает, но очень редко, примерно 1 раз/2 года. :)
Раньше он специально оставлял ошибки в коде, чтоб обучающиеся мозги включали, поэтому Вы точно с ДЗ справились!


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

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

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

можно по подробнее или пример, какой нибудь.

Индюк открывает массу объектов, в том числе метки с символом "-", меняющие цвет с красного на зелёный в зависимости от условий, думаю они Вас и интересуют.
Разберём на примере:
ObjectCreate("SignalEMAM15", OBJ_LABEL, 0, 0, 0);
ObjectSetText("SignalEMAM15", M15_EMA, 45, "Tahoma Narrow", color_EMAm15);
Мы знаем название объекта "SignalEMAM15" и можем прочитать цвет символа с помощью функции ObjectGetInteger().
Т.е. в советнике вызываем индикатор функцией iCustom() с нужными параметрами, а потом ищем интересующий объект по имени и читаем его цвет. Этот подход не рекомендую, но работать как-то будет, рекомендую условия из индикатора перенести в советник - они не такие сложные.
Ссылка на сообщение
Поделиться на другие сайты

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

Всем привет!
Пытаюсь выполнить домашнее задание по уроку "Введение в Объектно ориентированное Программирование, структуры", где необходимо передать в функцию в качестве параметра структуру-массив:

Спойлер


struct PendingOrder
{
int Ticket;
int TypeOrder;
double Price;
};
PendingOrder POrder[];
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---

}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{

if(OrdersTotal()// {
// OrderSend(Symbol(),OP_BUYSTOP,0.01,NormalizeDouble(Ask+200*Point,Digits),0,0,0,NULL,0);
// }

ArrayResize(POrder,OrdersTotal(),1);
for(int iii = 0; iii{
if(OrderSelect(iii,SELECT_BY_POS,MODE_TRADES))
{
if(OrderType() !=0 && (OrderType() !=1))
{
POrder[iii].Price = OrderOpenPrice();
POrder[iii].Ticket = OrderTicket();
POrder[iii].TypeOrder = OrderType();
}
}
}
ShowInfoPorder(POrder);
}
//+------------------------------------------------------------------+

void ShowInfoPorder(PendingOrder &info)
{
string cm = "";
for(int ii = 0; ii{
cm = cm + "номер ордера "+IntegerToString(info.Ticket) +" "+"тип ордера "+ IntegerToString(info.TypeOrder) +" "+"цена ордера "+ DoubleToString(info.Price)+ "\n";
}
Comment(cm);
}


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

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

необходимо передать в функцию в качестве параметра структуру-массив

Нужно чтоб функция ожидала массив, а не отдельную структуру:
Спойлер

void ShowInfoPorder(PendingOrder &info[])
{
string cm = "";
for(int ii = 0; ii{
cm = cm + "номер ордера "+IntegerToString(info[ii].Ticket) +
" "+"тип ордера "+ IntegerToString(info[ii].TypeOrder) +
" "+"цена ордера "+ DoubleToString(info[ii].Price)+ "\n";
}
Comment(cm);
}
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

Здавствуйте.
У меня возникли вопросы при написании советников по пользовательским индикаторам:
1) При передче параметов индикатора через функцию iCustom() приходится вводить настройки индикатора через настройки советника. В дальнейшем при использовании советника приходится 2 раза вводить эти настройки, сначала при размещении индикатора на графике в настройках индикатора (для визуализаиции) и потом уже при запуске советника по этому индикатору. А нет ли возможности, чтобы советник считывал настройки индикатора, установленного на график.
2) В чем смысл встраивания кода индикатора в советник? В чем преимущество этого способа от использования iCustom?

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Larcher
1. Настройки при вызове через iCustom можно не вводить совсем, тогда используются настройки по умолчанию. И Вы и Советник можете использовать настройки индикатора сохранённые в .set файле, чтоб не вводить вручную.
2. Индикатор создаёт буферы на всю длину истории в терминале и иногда пересчитывает, имхо это больше нагружает терминал и на быстром рынке может подтормаживать - зависит от назначения индикатора и качества его кода. Как правило советнику не нужна глубокая история значений индикатора, а нужно всего 2-3 бара и если перенести вычисления индикатора внутрь советника можно значительно сэкономить ресурсы терминала. НО это не правило, в некоторых случаях это не работает и даже вредно!
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

Спасибо за ответы.

И Вы и Советник можете использовать настройки индикатора сохранённые в .set файле, чтоб не вводить вручную.


Про .set файлы не знала, надо почитать.

Добавлено: 27-01-2019 16:31:13

И все же я не поняла, есть ли возможность запрограммировать советник так, чтобы он считывал настройки с установленного на график индикатора (не настойки по умолчанию)? Изменено пользователем Larcher
Ссылка на сообщение
Поделиться на другие сайты

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

И все же я не поняла, есть ли возможность запрограммировать советник так, чтобы он считывал настройки с установленного на график индикатора (не настойки по умолчанию)?

Прям с графика считать настройки не получится, но если после изменения сохранить новые настройки в .set, то соответственно запрограммированный советник сможет их применить и к "своему" индюку.
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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


У меня идет такой код, беру 2 переменные которые заранее вычислил


double FocusH,FocusL; // FocusH - покупка (а2), FocusL - продажа (а3)

далее идет условие:

if (FocusH>0 && FocusH != FocusL) //то открываем покупку
if (FocusL>0 && FocusL != FocusH) // открываем продажу

далее начинаю гонять в тестере, но ордера открываются не так как нужно, может нужно реальное время а не история?
Прилагаю код советника

Давай разберем все по полочкам на примере "if (FocusH>0 && FocusH != FocusL) //то открываем покупку".
[list type=decimal]

  • Да, действительно нам достаточно всего двух буферов (1 и 2 из нашей переписки, выше) или (3 и 4 из советника 1order_2versiya.mq4)



  • Разберем первую часть условия "FocusH > 0". Из кода советника мы знаем, что "FocusH = iCustom(NULL,PERIOD_M1,"Trend-Focus",3,1)". Теперь проверяем себя. FocusH может быть, из переписки мы знаем, 2-х видов, есть сигнал и нету. Есть сигнал, значит FocusH равен например 1.13374614 (фактически это есть цена индикатора с точностью до 8 знаков после запятой, посмотри в "Окно данных" Вид=>Окно данных). Проверяем 1.13374614 > 0, ДА, значит условие пока подходит нам. Нету сигнала, то FocusH равен 2147483647 (2147483647 = EMPTY_VALUE - Пустое значение в индикаторном буфере, да именно так, по идеи пустоту логично "0-м" заполнить, а оно вон как 2147483647). Проверяем 2147483647 > 0, ДА, как же так, индикатор сигнала не дает, а условие его пропускает. Вывод, такое условие нам не подходит.



    • Субъективное решение: "FocusH != EMPTY_VALUE" или так "FocusH != 2147483647", условия одинаковы.





  • Разберем вторую часть условия "FocusH != FocusL". Мы знаем что индикатор одновременно дает только один сигнал, продажа или покупка. Мы знаем, что сигнал идет в виде 1.13374614, а отсутствие сигнала в виде 2147483647. Теперь перевожу вторую часть кода в циферки. Сигнал есть, 1.13374614 != 2147483647, ДА, значит условие пока подходит нам. Нет сигнала, 2147483647 != 1.13374614, ДА, как же так, индикатор сигнала не дает, а условие его пропускает. Вывод, такое условие нам не подходит.



    • Субъективное решение: Если индюк дает одновременно один сигнал, покупать или продавать, во второй части условия мы не нуждаемся.





  • На основе выше сказанного перевожу твой код из советника и почему "начинаю гонять в тестере, но ордера открываются не так как нужно"
    if(FocusH>0 && FocusH != FocusL) ((1.13374614>0 или 2147483647>0) && и (1.13374614 != 2147483647 или 2147483647 != 1.13374614))
    {
    Код построен таким образом что будет всегда проходить проверку. При команде "else", что ниже, будет выполнятся всегда эта пара фигурных скобок и дело ни когда не дойдет до той, что ниже.
    }
    else
    if(FocusL>0 && FocusL != FocusH) Аналогичные циферки.
    {
    Если в данной связке IF ELSE IF убрать всего лишь ELSE, оставить IF IF, то будут выполняться оба IF. Будут открываться одновременно покупки и продажи.
    }



    • Субъективное решение:
      if(FocusH!=EMPTY_VALUE) Сигнал на покупку есть?
      {
      }
      else Если покупка, то процессорное время на проверку продаж не будет занято.
      if(FocusL!=EMPTY_VALUE) Здесь можно даже так ELSE {}, обойтись без IF. Но для спокойного сна, сделаем проверку.
      {
      }





  • P.S. Админам. При использовании на форуме нумерации (списка), в него нельзя вставить код, ломается структура.
    • Лайк 2
    Ссылка на сообщение
    Поделиться на другие сайты

    • 2 weeks later...

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

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

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

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

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

    Войти

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

    Войти

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


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

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