diodio Опубликовано 6 апреля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 апреля, 2019 Подскажите , кто знает... Иногда случается, что как будто зависает Мета Эдитор. В сове меняю код, условия . Меняю, компилирую. Все правильно ,без ошибок. А в тестере эти изменения не проявляются. Как работал до изменения , так эти же результаты и показывает. Не компилирует , короче, по ходу. Приходится удалять сову с терминала. И заново закидывать. Только тогда изменения компилируются. Из за чего такое ? После того как откомпилировал сову, заходишь в терминал, жмешь кнопку "навигатор", в открывшемся окошке правой кнопкой мыши жмешь "обновить", дожидаешься нескольких секунд перезагрузки списка, после чего тестишь свою сову. 3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
pavlus777 Опубликовано 12 апреля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 апреля, 2019 Новый урок:http://tlap.com/mql4-pishem-ea-po-poisku-patternov/ 3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
geugene Опубликовано 12 апреля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 апреля, 2019 Понеслась(((Полезли ошибки в журнале по сове на паттернах:"2019.04.12 17:48:05.761 2019.04.11 23:59:55 Test 2 EA EURUSD,Daily: zero divide in 'Test 2 EA.mq4' (198,57)"и куча таких"2019.04.12 17:50:22.542 TestGenerator: unmatched data error (volume limit 34652 at 2019.04.10 00:00 exceeded)" Ссылка на сообщение Поделиться на другие сайты More sharing options...
allex_all Опубликовано 13 апреля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 апреля, 2019 Понеслась(((Полезли ошибки в журнале по сове на паттернах:"2019.04.12 17:48:05.761 2019.04.11 23:59:55 Test 2 EA EURUSD,Daily: zero divide in 'Test 2 EA.mq4' (198,57)"и куча таких"2019.04.12 17:50:22.542 TestGenerator: unmatched data error (volume limit 34652 at 2019.04.10 00:00 exceeded)" И что? первая ошибка деление на ноль, указаны строка и столбец кода, делаете проверку перед делением, чтобы не выполнял действие если переменная в знаменателе ноль. вторая связана с загрузкой истории, долго объяснять) тестить этот сов на всех тиках необязательно, проще по ценам открытия, он же свечные паттерны просто ищет. Ссылка на сообщение Поделиться на другие сайты More sharing options...
geugene Опубликовано 13 апреля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 апреля, 2019 И что? первая ошибка деление на ноль, указаны строка и столбец кода, делаете проверку перед делением, чтобы не выполнял действие если переменная в знаменателе ноль. вторая связана с загрузкой истории, долго объяснять) тестить этот сов на всех тиках необязательно, проще по ценам открытия, он же свечные паттерны просто ищет. Хоть так, хоть сяк. Не работает сова. Деление на ноль во всех вариантах. Даже, если OnTester() закомментировать, все равно не нератает. Изменено 13 апреля, 2019 пользователем geugene Ссылка на сообщение Поделиться на другие сайты More sharing options...
awals Опубликовано 15 апреля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 апреля, 2019 Здравствуйте, не могли бы вы сделать Урок по Индикатору Стоп Лоссов с вашего сайта, чтобы данные выводилес в Терминале. Ссылка на сообщение Поделиться на другие сайты More sharing options...
liliiana Опубликовано 19 апреля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 апреля, 2019 =b Здравствуйте, не могли бы вы сделать Урок по Индикатору Стоп Лоссов с вашего сайта, чтобы данные выводилес в Терминале. ПРИСОЕДИНЯЮСЬ К ПРОСЬБЕ Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 19 апреля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 апреля, 2019 не могли бы вы сделать Урок по Индикатору Стоп Лоссов с вашего сайта, чтобы данные выводилес в Терминале.Обратите внимание на эту тему, это не то что Вы просите, но очень близко - можно сказать родственные индикаторы. Обратите внимание и на другие индикаторы, которые развивает chadaevr. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Владимир Стариков Опубликовано 24 апреля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 апреля, 2019 Здравствуйте!Скачал видео уроки по программированию MQL4 "Курс молодого бойца".ну и создал советника согласно урока №2.Но во время торговли чего не работает. Не открывает отложенные ордера.При компиляции ошибок нет.Поскольку я в начале пути, пока трудно найти ошибку.Прошу помочь, если кто может.Спасибо!Код во вложении тест2_Обучение.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 24 апреля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 апреля, 2019 ну и создал советника согласно урока №2.Отлично, поздравляю!По коду 2 замечания:1. В строчках проверки ордеров - if ( BuyLimitCount() && BuyCount() ==0 ), нужно проверить 1 параметр: BuyLimitCount() = 02. Рекомендую перенести GetMinPrice(); в раздел расчёта параметров для Бай-Лимит - так будет правильней. 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
ZloyZam Опубликовано 24 апреля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 апреля, 2019 Прошу помочь, если кто может. Еще момент. У Вас четыре перебора ордеров. Можно обойтись одним циклом.int buyLimitCount=0, sellLimitCount=0, buyCount=0, sellCount=0;for (int i=0,count=OrdersTotal();i if (OrderSelect(i,SELECT_BY_POS)) switch (OrderType()){ case OP_BUY: ++buyCount; break; case OP_SELL: ++sellCount; break; case OP_BUYLIMIT: ++buyLimitCount; break; case OP_SELLLIMIT: ++sellLimitCount;}Далее используются переменные. Еще один нюанс. Он может вообще не играет роли, а может быть и существенным, все зависит от того, как компилятор работает. Вы используете вызов функции Symbol(), хотя у Вас есть предопределенная переменная _Symbol, разница в том, что если компилятор этот момент не оптимизирует, то в случае вызова функции, можно получить каждый раз лишнее разыменование, а то и кучу проверочных операций (тут все зависит от реализации создателей), а в случае обращения к переменной Вы сразу имеете адрес памяти по которой данные находятся.Удачи и старайтесь сразу в эти нюансы вникать. 3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
powernet Опубликовано 29 апреля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 апреля, 2019 ребят, помогите, плиз)создал панель и кнопку в ней, но что-то не так, кнопка смещается по одной из осей сверху, но следует за панелью.то есть, нужно либо сделать правильную отвязку от углов привязки или же не хватает правильной команды для привязки кнопки к панели...и еще потом) какой командой создать текстовый объект, чтобы рядом с ним были две мелкие кнопочки сверху и внизу +/- меняющие значения на 0.01 пункт? спасибо Изменено 29 апреля, 2019 пользователем powernet Ссылка на сообщение Поделиться на другие сайты More sharing options...
Владимир Стариков Опубликовано 29 апреля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 апреля, 2019 Здравствуйте!Продолжаю изучать MQL4 по видеоурокам "Курс молодого бойца". На мой взгляд очень удачный курс.Хотел бы спросить, может кто знает: Ответы на домашние задания этого курса можно где-нибудь раздобыть? Для самоконтроля.Премного буду благодарен! Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 29 апреля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 апреля, 2019 powernet обратите внимание на эту тему - там разбор создания кнопочек с исходниками. Ссылка на сообщение Поделиться на другие сайты More sharing options...
powernet Опубликовано 29 апреля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 апреля, 2019 powernet обратите внимание на эту тему - там разбор создания кнопочек с исходниками. спасибо, но у них там усложненный какой-то вариант в коде и совсем по-другому, и у меня панель и две кнопки уже есть. я только не могу понять как к правильно расположить код, потому что сейчас при текущем коде идет открытие ордера даже если я пытаюсь перетащить панель с кнопками.Ordersend тоже пока не знаю как правильно вписывать и задать в работу только по нажатию кнопок.... Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 29 апреля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 апреля, 2019 powernet если нужна перетаскиваемая панель - то лучше вникнуть в более сложный код по ссылке, если нет необходимости в перетаскивании, то и панель не нужна - можно фиксированные кнопки прямо на графике расположить и пользоваться.Самый "простой" и доступный способ получить значение кнопки, это на каждом тике проверять её состояние нажата/отжата. Если нажата - OrderSend и возвращаем состояние "отжата". 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
vitek01 Опубликовано 29 апреля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 апреля, 2019 я так делаю примерно, там еще нужно проверить, открылся ли ордер. //+------------------------------------------------------------------+ BUY if(ObjectGetInteger(0,"s_button_buy",OBJPROP_STATE)==1)// проверяешь нажата копка или нет { tiket=OrderSend(Symbol(),OP_BUY,LOT,Ask,slip,SL,TP,"",magic,0,clrBlue); ObjectSetInteger(0,"s_button_buy",OBJPROP_STATE,0); // затем отжимаешь ее } 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
powernet Опубликовано 30 апреля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 апреля, 2019 (MQL4) подскажите, пожалуйста, какой в данном случае должен быть код для закрытия всех открытых позиций по нажатию кнопки? (ордера на открытие работают из этого кода).что-то не получается. или может нужно отдельно через Void или другую команду это делать? Цитата if (id==CHARTEVENT_OBJECT_CLICK) { if (sparam=="buttonbuy") { OrderSend(Symbol(), OP_BUY, lots, Ask, 3, 0, 0, "Opened by Advisor", 0, 0, clrBlue); //add your buy order here } if (sparam=="buttonsell") { OrderSend(Symbol(), OP_SELL, lots, Bid, 3, 0, 0, "Opened by Advisor", 0, 0, clrYellow); //add your sell order here } if (sparam=="buttoncloseall") { } } } Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 30 апреля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 апреля, 2019 что-то не получается. В цикле перебираете все ордера и, если ордер удовлетворяет условиям (магик, символ и т.п.), то закрываем. Из справки:bool OrderClose( int ticket, // номер ордера double lots, // количество лотов double price, // цена закрытия int slippage, // максимальное проскальзывание color arrow_color // цвет ); Ссылка на сообщение Поделиться на другие сайты More sharing options...
ZloyZam Опубликовано 30 апреля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 апреля, 2019 По поводу создания диалоговых окон, на mql5.com была хорошая статья (с ходу найти не смог), в ней автор последовательно создает объект "диалоговое окно", заодно основы ООП хорошо описывает. Если найдете, то почитайте, очень доступно было написано, я тогда сам только-только ООП трогать начал, много интересного подчерпнул.Вообще, диалоговые окна создавать без ООП, можно конечно, но это как в анекдоте про женщину и комсомольца, где он, как любитель преодолевать трудности, копает огород в ОЗК и противогазе, а на предложение заняться чем-нибудь поинтересней, соглашается, но в гамаке и стоя. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 30 апреля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 апреля, 2019 что-то не получается. или может нужно отдельно через Void или другую команду это делать?О, Вы всё-таки через события запустили - похвально! Void - это тип данных, не команда. Сделайте через функцию, примерно так:if (sparam=="buttoncloseall") { CloseAll ( ); }далее в самом низу, на пустом месте опишите функцию:void CloseAll ( ) Спойлер { for(int i=total-1;i>=0;i--) { if (!OrderSelect(i, SELECT_BY_POS)) continue; if ( OrderSymbol() != _Symbol || OrderMagicNumber() != Magic ) continue; // если есть магик int type = OrderType(); bool result = false; switch(type) { //Close opened long positions case OP_BUY : result = OrderClose( OrderTicket(), OrderLots(), OrderClosePrice(), 5, clrGray ); break; //Close opened short positions case OP_SELL : result = OrderClose( OrderTicket(), OrderLots(), OrderClosePrice(), 5, clrGray ); break; } }} Эта функция простенькая, без проверок, поэтому можете скачать любой скрипт закрытия ордеров и в ней вставить. Ссылка на сообщение Поделиться на другие сайты More sharing options...
powernet Опубликовано 1 мая, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 мая, 2019 О, Вы всё-таки через события запустили - похвально! Void - это тип данных, не команда. Сделайте через функцию, примерно так: Спасибо, но ваш код почему-то не сработал или выдавал какие-то ошибки)Я случайно нашел другой код и он сработал и хорошо закрывает открытые ордера) Цитата } if (sparam=="buttonclose") { { CloseOrder(); ObjectSetInteger(0,"buttoncloseall",OBJPROP_STATE,false); } } } } и потом внизу Цитата void CloseOrder() {//Close Long Order for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) if(OrderSymbol()==Symbol()) { if(OrderType()==OP_BUY) { //------------------------------------------------------------------------------------------------- double CloseBuy=OrderClose(OrderTicket(),OrderLots(),Bid,0); //------------------------------------------------------------------------------------------------- ChartSetInteger(0,CHART_COLOR_FOREGROUND,clrSteelBlue); //------------------------------------------------------------------------------------------------- } if(OrderType()==OP_SELL) { //------------------------------------------------------------------------------------------------- double CloseSell=OrderClose(OrderTicket(),OrderLots(),Ask,0); //------------------------------------------------------------------------------------------------- ChartSetInteger(0,CHART_COLOR_FOREGROUND,clrSteelBlue); //------------------------------------------------------------------------------------------------- } } } } 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Mcdos Опубликовано 2 мая, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 мая, 2019 Забавно. В "Как самому написать советник / индикатор / скрипт" втором уроке странный глюк. Повторяю код , но всё равно он мне выписывает "possible loss of data due to type conversion" на знач. StopLoss в СэндОредере. Причем ТэйкПрофит преобразуется ровно точно также, но у него такой ошибки нет. Жаль нет возможности оставлять комментарии под конкретным уроком.Кто подскажет, что не так? Спойлер extern int BarCount=10;// перем. для кол. баров анализа.extern int HourStart=11;// для времени старта.extern double Lots=0.1; // перемен. для объемаextern int StopLoss = 300; //в пунктахextern int TakeProfit = 200;extern int Magic=12345;double minprice=999999, mp, maxprice=-999999; double SL, TP;int ticket;//Цикл - можно выполнить одну и туже вещь много раз. Узнать мин и макс цену нескольких баров проще в цикле.int OnInit(){return(INIT_SUCCEEDED);}void OnDeinit(const int reason){}void OnTick(){GetMinPrice();GetMaxPrice();if (TimeHour(TimeCurrent())==HourStart)//тут мы вычленяем какой час из текущего времени и срав. с заданным экст.{SL=NormalizeDouble(minprice-StopLoss*Point,5);// поинт нужен для приведения к числу. Нормализ для уменьшения чисел после запятой.TP=NormalizeDouble(minprice+TakeProfit*Point,5);ticket=OrderSend(Symbol(), OP_BUYLIMIT, Lots, minprice, SL, TP, 3, "", Magic, 0, Blue);//открытие лимит.ордера на покупкуif (ticketSL=NormalizeDouble(minprice + StopLoss*Point,5);// поинт нужен для приведения к числу. Нормализ для уменьшения чисел после запятой.TP=NormalizeDouble(minprice - TakeProfit*Point,5);{ticket=OrderSend(Symbol(),OP_SELLLIMIT,Lots,minprice,SL, TP,3,"",Magic,0, Blue);}//открытие лимит.ордера на продажуif (ticket}Comment("Minprice:"+DoubleToStr(minprice,5)+"\n"+"MaxPrice:"+DoubleToStr(maxprice,5));}void GetMinPrice()//войд - создание функции. функция вызывается выше и имеет пустые парам(){for (int i=0; i{mp=iLow(Symbol(),PERIOD_CURRENT,i);//получаем и присваиваем минимальную цену переменной.//iLow=индикатор.Парам(Symbol=ф-я опр.валют.пары,Таймфрейм=(знач.отМ5доН4иБольше)PERIOD_CURRENT=конст. на котором был запуск советника,shift=смещение 0.//Далее делаем сравнение i c minprice.это нужно для даль. перебора значений.if (mpminprice=mp;}return;}void GetMaxPrice(){for(int i=0; i{mp=iHigh(Symbol(),PERIOD_CURRENT,i);if(mp>maxprice)maxprice=mp;}return;} И еще выдает ошибку 130 в режиме работы советника, даже с прописанным нулем за место SL. Изменение спреда ничего не дает.Я вывел значения СЛ и ТП, но ничего экстраординарного в значениях не вижу.2019.05.02 19:31:15.857 2019.04.26 11:59:59 2 EURUSD,H4: OrderSend error 1302019.05.02 19:31:15.857 2019.04.26 11:59:59 2 EURUSD,H4: 1.10879 1.11379 Изменено 2 мая, 2019 пользователем Mcdos Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 2 мая, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 мая, 2019 Повторяю код , но всё равно он мне выписывает "possible loss of data due to type conversion" на знач. StopLoss в СэндОредереВы пропустили Slippage, причём и в SL и TPXr.png Ссылка на сообщение Поделиться на другие сайты More sharing options...
Mcdos Опубликовано 2 мая, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 мая, 2019 Вы пропустили Slippage, причём и в SL и TP Чувствую себя ... Спасибо. Изменено 3 мая, 2019 пользователем 0ll Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти