molot_1 Опубликовано 23 января, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 января, 2019 И Вам 0ll спасибо за замечания ! Может есть у вас есть рабочий код для перевода в безубыток? Или посоветуете где искать? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 23 января, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 января, 2019 Созрел нубский вопрос: Как сделать оповещение о сделках например на почту?Не назвал-бы вопрос "нубским". Вопрос не простой, нужно подключать виндовые библиотеки и работать с ними, для этого нужно разбираться с типами данных и маскировать mql форматы под C#. Попробуйте копать сюда или сюда. Успехов. Пиши о результатах.Добавлено: 23-01-2019 14:58:54Может есть у вас есть рабочий код для перевода в безубыток?Специальной функции нет. Есть формула расчёта уровня безубытка для сетки (например). После нового ордера уровень пересчитывается, после пересечения уровня+Х пп - СЛ выставляется на уровень БУ. Так что ничего особо сложного нет. Вы показали код последней операции - модификации ордеров, кода по расчёту уровня нет.Есть простое решение - когда сетка вышла в профит на Х$ - ставим СЛ на Y пп от цены, где X и Y зависят от лотности сетки. Изменено 23 января, 2019 пользователем 0ll 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
molot_1 Опубликовано 23 января, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 января, 2019 Спасибо 0ll, но я только учусь и для меня ваши пояснения сложноваты ! Ссылка на сообщение Поделиться на другие сайты More sharing options...
djnet Опубликовано 23 января, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 января, 2019 Не назвал-бы вопрос "нубским". Вопрос не простой, нужно подключать виндовые библиотеки и работать с ними, для этого нужно разбираться с типами данных и маскировать mql форматы под C#. Попробуйте копать сюда или сюда. Успехов. Пиши о результатах. Спросил еще у одних ребят, показали решение - уведомления в телегу прямо из совы, весьма удобный вариант. Пока разбираюсь. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 23 января, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 января, 2019 Спросил еще у одних ребят, показали решение - уведомления в телегу прямо из совы, весьма удобный вариант. Пока разбираюсь.Всё равно телегину библиотеку подключать придётся. В любом случае, если не трудно, публикуй здесь или лучше создай свою тему - думаю будет интерес. Ссылка на сообщение Поделиться на другие сайты More sharing options...
AlexWS Опубликовано 24 января, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 января, 2019 Доброго времени суток, уважаемые. Кто сможет посмотрите мое д/з по 3 уроку, там какой то глюк а какой я не пойму. Заранее спасибо. Test3_TMA.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 24 января, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 января, 2019 Кто сможет посмотрите мое д/з по 3 уроку, там какой то глюк а какой я не пойму.Прости, никто не в курсе д/з... Если хочешь помощи - пиши подробнее что именно не понятно. Ссылка на сообщение Поделиться на другие сайты More sharing options...
AlexWS Опубликовано 25 января, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 января, 2019 Спасибо сам разобрался. Смысл был в следующем: по TMA ставятся ордера снизу Buy сверху Sell закрытие у средней линии и нужно было установить страховочные ордера к уже открытым на определенном расстоянии, т.е. Buy страховочный SellStop и наоборот. Я не смог сразу въехать откуда берутся ордера и отложки не по сигналу индикатора. Оказалось когда срабатывает скажем SellStop, он уже получается в рынке и ему положен страховочный орде BuyStop.По хорошему нужно сделать проверку если отложка сработала то страховочный ордер не устанавливать и сделать удаление не сработавших отложенных ордеров. Но это не обязательно, в принципе домашка выполнена. А вы не в курсе основатель темы тут бывает? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 25 января, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 января, 2019 А вы не в курсе основатель темы тут бывает?Бывает, но очень редко, примерно 1 раз/2 года. :)Раньше он специально оставлял ошибки в коде, чтоб обучающиеся мозги включали, поэтому Вы точно с ДЗ справились! Ссылка на сообщение Поделиться на другие сайты More sharing options...
diodio Опубликовано 25 января, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 января, 2019 Всем привет, пытаюсь получить сигнал с буферов индикатора, вроде бы они есть и какие-то показатели работают, но на деле сигнала нет никакого или я не там смотрю. Выкладываю сам индикатор, к сожалению код закрыт, нет нигде его с отрытым кодом и еще выкладываю сам тест файл. Уникальность индикатора в том что он не рисует, на самом деле это так, я давно за ним наблюдаю. Посмотрите кто знает как еще с него можно получить сигнал. Tester_Indikator.mq4Trend-Focus.ex4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
MikR0ReR Опубликовано 25 января, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 января, 2019 пытаюсь получить сигнал с буферов индикатора 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 Ссылка на сообщение Поделиться на другие сайты More sharing options...
molot_1 Опубликовано 26 января, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 января, 2019 Всем Здравствуйте!!! Очень интересная тема и урок по получению сигналов из буферов индикатора через iCustom.Может посоветуете как "привязаться" к такому индикатору ??? Signal_Bars_v3_Daily.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 26 января, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 января, 2019 Может посоветуете как "привязаться" к такому индикатору ???Этот индикатор не имеет буферов. Значения можно получить через чтение свойства Цвет соответствующих объектов, но это будет не совсем правильно. Проще перенести код индикатора в советник. Ссылка на сообщение Поделиться на другие сайты More sharing options...
molot_1 Опубликовано 26 января, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 января, 2019 0ll, а можно по подробнее или пример, какой нибудь. Заранее большое спасибо! Ссылка на сообщение Поделиться на другие сайты More sharing options...
diodio Опубликовано 26 января, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 января, 2019 пытаюсь получить сигнал с буферов индикатора 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 Ссылка на сообщение Поделиться на другие сайты More sharing options...
xbms Опубликовано 26 января, 2019 Автор Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 января, 2019 А вы не в курсе основатель темы тут бывает?Бывает, но очень редко, примерно 1 раз/2 года. :)Раньше он специально оставлял ошибки в коде, чтоб обучающиеся мозги включали, поэтому Вы точно с ДЗ справились! Ну эт не правда, форум я посещаю и читаю регулярно, правда обычно с мобильника :)Редко пишу что-то, это да...:) 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 26 января, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 января, 2019 можно по подробнее или пример, какой нибудь.Индюк открывает массу объектов, в том числе метки с символом "-", меняющие цвет с красного на зелёный в зависимости от условий, думаю они Вас и интересуют.Разберём на примере: ObjectCreate("SignalEMAM15", OBJ_LABEL, 0, 0, 0); ObjectSetText("SignalEMAM15", M15_EMA, 45, "Tahoma Narrow", color_EMAm15);Мы знаем название объекта "SignalEMAM15" и можем прочитать цвет символа с помощью функции ObjectGetInteger().Т.е. в советнике вызываем индикатор функцией iCustom() с нужными параметрами, а потом ищем интересующий объект по имени и читаем его цвет. Этот подход не рекомендую, но работать как-то будет, рекомендую условия из индикатора перенести в советник - они не такие сложные. Ссылка на сообщение Поделиться на другие сайты More sharing options...
kaetosh Опубликовано 26 января, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 января, 2019 Всем привет! Пытаюсь выполнить домашнее задание по уроку "Введение в Объектно ориентированное Программирование, структуры", где необходимо передать в функцию в качестве параметра структуру-массив: Спойлер 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);} Как правильно это сделать?Спасибо! Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 27 января, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 27 января, 2019 необходимо передать в функцию в качестве параметра структуру-массивНужно чтоб функция ожидала массив, а не отдельную структуру: Спойлер 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 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Larcher Опубликовано 27 января, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 27 января, 2019 Здавствуйте.У меня возникли вопросы при написании советников по пользовательским индикаторам:1) При передче параметов индикатора через функцию iCustom() приходится вводить настройки индикатора через настройки советника. В дальнейшем при использовании советника приходится 2 раза вводить эти настройки, сначала при размещении индикатора на графике в настройках индикатора (для визуализаиции) и потом уже при запуске советника по этому индикатору. А нет ли возможности, чтобы советник считывал настройки индикатора, установленного на график.2) В чем смысл встраивания кода индикатора в советник? В чем преимущество этого способа от использования iCustom? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 27 января, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 27 января, 2019 Larcher1. Настройки при вызове через iCustom можно не вводить совсем, тогда используются настройки по умолчанию. И Вы и Советник можете использовать настройки индикатора сохранённые в .set файле, чтоб не вводить вручную.2. Индикатор создаёт буферы на всю длину истории в терминале и иногда пересчитывает, имхо это больше нагружает терминал и на быстром рынке может подтормаживать - зависит от назначения индикатора и качества его кода. Как правило советнику не нужна глубокая история значений индикатора, а нужно всего 2-3 бара и если перенести вычисления индикатора внутрь советника можно значительно сэкономить ресурсы терминала. НО это не правило, в некоторых случаях это не работает и даже вредно! 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Larcher Опубликовано 27 января, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 27 января, 2019 Спасибо за ответы. И Вы и Советник можете использовать настройки индикатора сохранённые в .set файле, чтоб не вводить вручную. Про .set файлы не знала, надо почитать.Добавлено: 27-01-2019 16:31:13И все же я не поняла, есть ли возможность запрограммировать советник так, чтобы он считывал настройки с установленного на график индикатора (не настойки по умолчанию)? Изменено 27 января, 2019 пользователем Larcher Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 27 января, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 27 января, 2019 И все же я не поняла, есть ли возможность запрограммировать советник так, чтобы он считывал настройки с установленного на график индикатора (не настойки по умолчанию)?Прям с графика считать настройки не получится, но если после изменения сохранить новые настройки в .set, то соответственно запрограммированный советник сможет их применить и к "своему" индюку. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
MikR0ReR Опубликовано 28 января, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 28 января, 2019 Цитата У меня идет такой код, беру 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 Ссылка на сообщение Поделиться на другие сайты More sharing options...
pavlus777 Опубликовано 5 февраля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 февраля, 2019 Новый урокhttp://tradelikeapro.ru/mql4-pishem-ea-dlya-mt4-i-mt5/ 4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти