Sany2912 Опубликовано 15 января, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 января, 2016 Sany2912 я-ж не знаю что Вы используете и как это рассчитывается у Вас в сове.например для восстановления параметров открытых ордеров из ОнИнит запускается ф-ция пересчета, которая ищет свои ордера и восстанавливает внутренние значения СЛ/ТП/БУ, если сетка, то сортирует ордера, восстанавливает лотность, цену открытия последнего колена и т.д. Как, примерно, должен быть написан код чтоб сохранить в ОнИнит последние Бид и Аск известные на момент выключения? Ссылка на сообщение Поделиться на другие сайты More sharing options...
otten Опубликовано 15 января, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 января, 2016 Господа, осваиваю Forex EA Generator, несколько советников несложных уже составил, и теперь не могу понять как составить другого, на основе Боллинджера. Задача, чтобы сделки не открывались одновременно в одну сторону и не открывались одновременно в противоположные стороны. Не пойму, как выставить блоки, чтобы открывался лонг скажем на условии Close(1)>SMA20, а закрывался либо на верхней полосе Боллинджера либо на нижней. Например лонг открылся, и закрылся в профите по верхней линии Боллиджера, и тут нужно ждать, не открывать еще раз лонг на откате, а входить только в шорт по сигналу, как только сработает Close(1)Ну и в дополнение, киньте пожалуйста ссылкой на понятный русскоязычный учебник по MQL4 с примерами по созданию таких роботов. Или может начинать надо лучше с 5 версии?) Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 15 января, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 января, 2016 Как, примерно, должен быть написан код чтоб сохранить в ОнИнит последние Бид и Аск известные на момент выключения?есть индюк, который в реал-тайме пишет тиковые котировки в файл. можно из него читать последнюю известную котировку. Но зачем Вам это (знать последнюю котировку)? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 15 января, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 января, 2016 otten пробуй пересечение! пример: if (Close(1)>SMA20 && Close(2)тогда срабатывать будет только при пересечении и следовательно бай и сел будут чередоваться. Ссылка на сообщение Поделиться на другие сайты More sharing options...
otten Опубликовано 15 января, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 января, 2016 Да! Об этом я не подумал, теперь буду знать способ с пересечением.НО, осталось теперь обойти сумасшедшие свечи. Тут вот одна пробила максимумами обе линии сразу, и советник такого поворота не ожидал. Спойлер Добавлено: 15-01-2016 21:07:35Не нашел как вставить маленькую превьюшку.Добавлено: 15-01-2016 21:34:34Вроде работает. Спасибо за подсказку!С сильными свечами пока не придумал ничего лучше, чем задать ограничение в количество сделок на одну в заданный диапазон минут, в зависимости от таймфрейма нужного. Изменено 15 января, 2016 пользователем otten Ссылка на сообщение Поделиться на другие сайты More sharing options...
htp87 Опубликовано 15 января, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 января, 2016 Доброй ночи. Подскажите пожалуйста, написал советник по 2-ум индикаторам TMA и МА, когда средняя ТМА пересекает МА снизу вверх - покупаем. Закрытие происходит когда средняя ТМА пересекает сверху вниз МА. Сделки на продажу наоборот.Сделки открываются не так как надо и, соответственно, закрываются не так. В чем причина.extern double Lots = 0.1;extern int Slippage = 5;extern int Magic = 123;extern int TakeProfit = 40;extern int StopLoss = 20;extern string comment = "Custom Moving Averages";extern string Indi = "Данные индикатора!";input int InpMAPeriod = 20; // Periodinput int InpMAShift = 0; // Shiftinput ENUM_MA_METHOD InpMAMethod = MODE_EMA; // Methodextern string commentTMA = "TMAnew";extern string IndiTMA = "Данные индикатора!";extern string TimeFrame = "current time frame";extern int HalfLength = 56;extern int Price = PRICE_CLOSE;extern double ATRMultiplier = 2.0;extern int ATRPeriod = 100;extern bool Interpolate = true;double MA, MA1, TMA, TMA1, Close1, Close2, Close3, Open1, TP, SL;int ticket, ticketclose;//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int OnInit() { if(Digits==3 || Digits==5) { TakeProfit *= 10; StopLoss *= 10; Slippage *= 10; } return(INIT_SUCCEEDED); }//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+void OnDeinit(const int reason) { }//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+void OnTick() { MA = iCustom(Symbol(), 0, "Custom Moving Averages", InpMAPeriod, InpMAShift, InpMAMethod, 0, 0); MA1 = iCustom(Symbol(), 0, "Custom Moving Averages", InpMAPeriod, InpMAShift, InpMAMethod, 0, 1); TMA = iCustom (Symbol(), 0, "TMAnew", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 0, 0); TMA1 = iCustom (Symbol(), 0, "TMAnew", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 0, 1); Close1 = iClose (Symbol(), 0, 1); Close2 = iClose (Symbol(), 0, 2); Close3 = iClose (Symbol(), 0, 3); Open1 = iOpen (Symbol(), 0, 1); if(TMA1 MA && CountBuy()==0) { SL = NormalizeDouble(Ask - StopLoss*Point,Digits); ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,comment,Magic,0,Red); if(ticket > 0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)==true) { if(OrderModify(ticket,OrderOpenPrice(),SL,0,0) == true) Print("Ордер успешно изменился"); } } } if(TMA1 > MA1 && TMA { SL = NormalizeDouble(Bid + StopLoss*Point,Digits); ticket = OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,comment,Magic,0,Red); if(ticket > 0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)==true) { if(OrderModify(ticket,OrderOpenPrice(),SL,0,0) == true) Print("Ордер успешно изменился"); } } } if(TMA1MA && CountSell() > 0) { for(int i = OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == true && OrderMagicNumber() == Magic && OrderType() == OP_SELL) { if(OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Black) == true) Print("Ордер успешно закрылся!"); } } } if(TMA1>MA1 && TMA 0) { for(int i = OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == true && OrderMagicNumber() == Magic && OrderType() == OP_BUY) { if (OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Black) == true) Print("Ордер успешно закрылся!"); } } } }//+------------------------------------------------------------------+int CountSell() { int count = 0; for(int i = OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == true && OrderMagicNumber() == Magic && OrderSymbol() == Symbol() && OrderType() == OP_SELL) count++; } return(count); }//+------------------------------------------------------------------+int CountBuy() { int count = 0; for(int i = OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == true && OrderMagicNumber() == Magic && OrderSymbol() == Symbol() && OrderType() == OP_BUY) count++; } return(count); }//+------------------------------------------------------------------+ Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 16 января, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 января, 2016 htp87 тма перерисовывает не только 0-бар, но и ещё HalfLength-баров. Поэтому сделки на истории будут не там. Пробуйте в режиме визуализации (придётся ручками индюки ставить) Ссылка на сообщение Поделиться на другие сайты More sharing options...
LEXAR Опубликовано 16 января, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 января, 2016 Добрый день. Спасибо за такой курс. Научился программированию по нему недели за две. Строчу этих роботов теперь по пять штук в неделю ))) Столкнулся с небольшой трудностью. Сделал робота открывающего сделки в начале каждой свечи. Но например при открытии рынка, когда уже тики идут или при экспирации рынок закрыт. Соответственно робот отрабатывает свои сигналы (10 прописал), а сделки нет. Когда уже рынок открывается робот молчит до следующей свечи. Подскажите пожалуйста функцию открытого рынка? Не могу сообразить... 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
dermitay Опубликовано 16 января, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 января, 2016 Добрый день. Спасибо за такой курс. Научился программированию по нему недели за две. Строчу этих роботов теперь по пять штук в неделю ))) Столкнулся с небольшой трудностью. Сделал робота открывающего сделки в начале каждой свечи. Но например при открытии рынка, когда уже тики идут или при экспирации рынок закрыт. Соответственно робот отрабатывает свои сигналы (10 прописал), а сделки нет. Когда уже рынок открывается робот молчит до следующей свечи. Подскажите пожалуйста функцию открытого рынка? Не могу сообразить... да пожалуйста:http://docs.mql4.com/ru/check/istradeallowedhttp://docs.mql4.com/ru/check/istradecontextbusyпо собственному опыту, первая ф-ция бывает тупит. лучше юзай вторую, которая проверяет доступность торгового потока. ее же, кстати, можно использовать при высокочастотном трейдинге когда у тебя в 1-10 мс идёт модификация/открытие/удаление ордеров при одновременно работающих нескольких совах с одним и тем же ордером, ну чтобы ошибки не вылезали. Изменено 16 января, 2016 пользователем dermitay 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
LEXAR Опубликовано 17 января, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 января, 2016 А так можно?if (IsTradeAllowed() && !IsTradeContextBusy())Вроде в тестере пока хорошо показывает. Гляну на открытии сегодня, в смысле завтра...И спасибо. Я видел эти функции, но по описанию мой мозг отказывался доверять им ))). Ссылка на сообщение Поделиться на другие сайты More sharing options...
dermitay Опубликовано 17 января, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 января, 2016 А так можно?if (IsTradeAllowed() && !IsTradeContextBusy())Вроде в тестере пока хорошо показывает. Гляну на открытии сегодня, в смысле завтра...И спасибо. Я видел эти функции, но по описанию мой мозг отказывался доверять им ))). ну по идее по описанию в IsTradeAllowed() уже есть и IsTradeContextBusy(), но я натыкался на такие глюки что эти функции работают не совсем так, как написано в официальной документации. я их применял именно так как ты и написал.так что тут только тесты на реале нужны >:d Ссылка на сообщение Поделиться на другие сайты More sharing options...
serpent989 Опубликовано 17 января, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 января, 2016 Здравствуйте! Подскажите пожалуйста, есть ли функции типа: вкл/выкл советников, или разрешать/запрещать торговлю, ну на крайняк отключиться/подключиться к счёту. Хочу написать сова, который бы ограничивал бы работу других работающих советников на счету по времени. Ссылка на сообщение Поделиться на другие сайты More sharing options...
pavlus777 Опубликовано 17 января, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 января, 2016 Обновили урок по написанию советника на мартингейле http://tradelikeapro.ru/pishem-sovetnik-po-martingeylu/ 5 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sany2912 Опубликовано 18 января, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 18 января, 2016 Здравствуйте! Подскажите, может быть у кого-нибудь есть пример работы с GlobalVariable или видео-урок по работе с глобальными переменными, например с GlobalVariableSet()? Изменено 18 января, 2016 пользователем Sany2912 Ссылка на сообщение Поделиться на другие сайты More sharing options...
dermitay Опубликовано 18 января, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 18 января, 2016 Здравствуйте! Подскажите, может быть у кого-нибудь есть пример работы с GlobalVariable или видео-урок по работе с глобальными переменными, например с GlobalVariableSet()? ну как бы есть же официальная документация, в которой всё популярно разжевано. работа точно такая же как и с кучей ордеров или одномерным массивом элементов. вместо OrdersTotal() берется GlobalVariablesTotal(), вместо OrderSelect() в цикле перебора нужно создавать стринговую перменную и в нее пихать GlobalVariableName(#i-тый элемент#) и далее все манипуляции проводить через это стринговое имя.нюансы. имя переменной(GlobalVariableName()) - только String, а значение GlobalVariableGet() существует в двух вариациях, тащить можно с проверкой через два параметра(возврат будет булевый) а можно и через один и тут возврат только double. GlobalVariableSet не только меняет значение уже существующей переменной но еще и создает новую, если перменной с запрашиваемым именем не существует. Все изменения с глобальными переменными можно "вживую" отслеживать нажатием клавиши F3 в терминале.http://docs.mql4.com/ru/globals Изменено 18 января, 2016 пользователем dermitay 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Гость denver74 Опубликовано 19 января, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 января, 2016 Помогите пожалуйста. Захотел написать советник на основе magic dots. Скачал пример советника и в нем внес изменения. Цель, чтобы при появлении синий точки покупал, а при красной точке продавал(закрывая предыдущую сделку). Пытаюсь взять из буфера сигнал, вроде ошибок нет, но сделки советник не открывает к сожалению.int IndicatorSignal() { int Sig=0; double mg_1=iCustom(Symbol(),0,"Magic dots 2 mtf alerts",ma_method,period,2,0); double mg_2=iCustom(Symbol(),0,"Magic dots 2 mtf alerts",ma_method,period,3,0); if ((mg_1 if ((mg_1>mg_2)) Sig=2; return(Sig); } Super.mq4Magic_dots_2_mtf_alerts.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sany2912 Опубликовано 19 января, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 января, 2016 Oll, как вы сделали "VaBank" так, чтоб он работал на одном счете одновременно на разных парах?? Дело лишь в разных магиках или, всетаки, есть еще какие то особенности, например каждому сов.выделить определенный размер депозита? Ссылка на сообщение Поделиться на другие сайты More sharing options...
dermitay Опубликовано 19 января, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 января, 2016 1. у вас в iCustom перечислены не все входные параметры индикатора. хоть по документации при таком подходе и должны подставляться значения по умолчнию, и типа все должно корреткно работать. но по факту я всегда нарывался на некорректное поведение кода/вывода вытаскиваемых значений. вы либо вобще удалите все входные параметры индикатора, либо перечислите все, как полагается, с точным совпадением еще и типов переменных2. вывод if ((mg_1 if ((mg_1>mg_2)) Sig=2; немного некорректен, не думали что одно из значений может(и будет) равно нулю? сделки на бай уже пролетают лесом как минимум. а если вытаскиваемое значение таки не равно нулю а например нерисуемое на графике значение буфера будет равно +100500 или -100500?не проще просто сравнивать с нулем чем между собой? Изменено 19 января, 2016 пользователем dermitay Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 19 января, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 января, 2016 Oll, как вы сделали "VaBank" так, чтоб он работал на одном счете одновременно на разных парах?? Дело лишь в разных магиках или, всетаки, есть еще какие то особенности, например каждому сов.выделить определенный размер депозита? Сова проверяет магик и пару. Какой депо выделить - задача пользователя. Совы установленные на разные пары ничего о друг-друге не знают. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Гость project13et Опубликовано 19 января, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 января, 2016 1. у вас в iCustom перечислены не все входные параметры индикатора. хоть по документации при таком подходе и должны подставляться значения по умолчнию, и типа все должно корреткно работать. но по факту я всегда нарывался на некорректное поведение кода/вывода вытаскиваемых значений. вы либо вобще удалите все входные параметры индикатора, либо перечислите все, как полагается, с точным совпадением еще и типов переменных2. вывод if ((mg_1 if ((mg_1>mg_2)) Sig=2; немного некорректен, не думали что одно из значений может(и будет) равно нулю? сделки на бай уже пролетают лесом как минимум. а если вытаскиваемое значение таки не равно нулю а например нерисуемое на графике значение буфера будет равно +100500 или -100500?не проще просто сравнивать с нулем чем между собой? Поправилint IndicatorSignal() { int Sig=0; double mg_1=iCustom(Symbol(),0,"Magic dots 2 mtf alerts",2,0); double mg_2=iCustom(Symbol(),0,"Magic dots 2 mtf alerts",3,0); if ((mg_1 >= 0)) Sig=1; if ((mg_2 >= 0)) Sig=2; return(Sig); } вот так. Теперь он открывает, только одну сделку на sell, не закрывая ее. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sany2912 Опубликовано 19 января, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 января, 2016 Oll, как вы сделали "VaBank" так, чтоб он работал на одном счете одновременно на разных парах?? Дело лишь в разных магиках или, всетаки, есть еще какие то особенности, например каждому сов.выделить определенный размер депозита? Сова проверяет магик и пару. Какой депо выделить - задача пользователя. Совы установленные на разные пары ничего о друг-друге не знают. Понял, спасибо! Ссылка на сообщение Поделиться на другие сайты More sharing options...
dermitay Опубликовано 19 января, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 января, 2016 Поправилint IndicatorSignal() { int Sig=0; double mg_1=iCustom(Symbol(),0,"Magic dots 2 mtf alerts",2,0); double mg_2=iCustom(Symbol(),0,"Magic dots 2 mtf alerts",3,0); if ((mg_1 >= 0)) Sig=1; if ((mg_2 >= 0)) Sig=2; return(Sig); } вот так. Теперь он открывает, только одну сделку на sell, не закрывая ее. включите логику. если сигнала нет вобще - то он может быть и равен нулю, что является судя по функции сигналом и на бай и на селл. сигнал должен быть строго больше нуля. судя по вашему коду в итоге у вас всегда будет возвращен Sig = 2.плюс я хз какой код в основном блоке. может вы с условиями открытия/закрытия ордера налажали >:d Изменено 19 января, 2016 пользователем dermitay Ссылка на сообщение Поделиться на другие сайты More sharing options...
Гость Andym73 Опубликовано 19 января, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 января, 2016 Поправилint IndicatorSignal() { int Sig=0; double mg_1=iCustom(Symbol(),0,"Magic dots 2 mtf alerts",2,0); double mg_2=iCustom(Symbol(),0,"Magic dots 2 mtf alerts",3,0); if ((mg_1 >= 0)) Sig=1; if ((mg_2 >= 0)) Sig=2; return(Sig); } вот так. Теперь он открывает, только одну сделку на sell, не закрывая ее. включите логику. если сигнала нет вобще - то он может быть и равен нулю, что является судя по функции сигналом и на бай и на селл. сигнал должен быть строго больше нуля. судя по вашему коду в итоге у вас всегда будет возвращен Sig = 2.плюс я хз какой код в основном блоке. может вы с условиями открытия/закрытия ордера налажали >:d Спасибо, сделал так. if ((mg_1 > 0)) Sig=1; else if ((mg_2 > 0)) Sig=2;Начал выдавать сигнал на покупку вместо продажи Подскажите здесь нужен, какой-то цикл типа for, чтобы он считал и sig=1 и sig=2? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 19 января, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 января, 2016 mops0000 буфер индикатора выглядит так:0,0,0,0,0,0,0,0,1.1254,0,0,0,0,0,0,1.2687,0,0,0,0,0, значения отличные от "0" - координаты цены отрисовки точки (красной или зелёной - разницы нет)нужно брать значения не с 0 бара - там они точно появляются и исчезают несколько раз, а с 1 бара, т.е.double mg_1=iCustom(Symbol(),0,"Magic dots 2 mtf alerts",2, 1 );кстати вот вызов Вашего индюка (попробуйте):iCustom(NULL, 0, "Magic dots 2 mtf alerts", 0, MODE_EMA, 6, 0, PRICE_CLOSE, false, false, false, false, false, false, 2, 1)чтоб прога лучше читалась используйте стандартные константы (совет), типа:if ((mg_1 > 0)) Sig=OP_SELL; ( или OP_BUY для 3 буфера )реверс сигнала тогда пишется просто: Sig = 1- Sig; 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Гость rayallen Опубликовано 19 января, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 января, 2016 Спасибо. Я попробовал изменить как Вы написали iCustom(NULL, 0, "Magic dots 2 mtf alerts", 0, MODE_EMA, 6, 0, PRICE_CLOSE, false, false, false, false, false, false, 2, 1), теперь при тестировании начали появляться точки сигнала, но цену все равно только один раз открывает на бай и все потом не закрывает. Я посмотрел здесь Урок №3 — пишем советник на внешнем индикаторе и переписал советник, но проблема теперь в том, что он открывает в начале по точкам сначала бай и селл, многократно и только потом переходит к следующей точке? И как указать, что если точка после открытия ордера появляется следующая точка того же цвета, чтобы он не открывал ещё один ордер, а продолжал пока не появится точка другого цвета? Untitled_1.jpg Изменено 19 января, 2016 пользователем mops0000 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти