0ll Опубликовано 19 апреля, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 апреля, 2018 KriKs-Fx у функций есть "вызов" и "тело-описание", так вот тело должно описываться за скобками основной функции - на пустом месте, например:void OnTick(){ //здесь вызываем функцию CountBuy() if ( Ask ..... } - закрывающая скобка основной функции ( скобки - очень важная часть MQL )int CountBuy() { ... здесь описание функции - её тело, заканчивается - return( N ); } - закрывающая скобка функции 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
KriKs-Fx Опубликовано 20 апреля, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 20 апреля, 2018 Благодарю Вас Oll с скобками я действительно лоханулся. Ошибок больше нет. Но в тесторе на любом ДЦ сова выставляет только один ордер без SL and TP И всё.. дальше ступор. И предупреждения... OrderModify (ticket,OrderOpenPrice(),SL,TP,0); и предупреждение return value of 'OrderModify' should be checked. OrderSelect(trade,SELECT_BY_POS,MODE_TRADES); предупреждение...return value of 'OrderSelect' should be checked Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 20 апреля, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 20 апреля, 2018 KriKs-Fx предупреждения можно игнорировать, если мешают, создайте переменную bool hren; и все функции, требующие контроля, вызывайте так:hren = OrderSelect(...); и предупреждений не будет.По поводу 1 ордера - добейтесь выставления СЛ/ТП и будут другие ордера, проверьте правильность расчёта СЛ/ТП Ссылка на сообщение Поделиться на другие сайты More sharing options...
d1w4m3 Опубликовано 21 апреля, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 21 апреля, 2018 Доброго времени суток, столкнулся с ошибкой, не закрывает на обратный сигнал, НИКАК не увижу, прошу помощи ///условия открытия if(CountSell()==0 && Bid Bid SD163 - max_indent*Point)//lastBarTime != Time[0] { ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "Sloper", Magic, 0, Red); if (ticket > 0) { SL = NormalizeDouble(Bid + StopLoss*Point, Digits); TP = NormalizeDouble(Bid - TakeProfit*Point, Digits); if (OrderSelect(ticket, SELECT_BY_TICKET)) if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0)) Print("Ошибка на продажу"); } } if(CountBuy()==0 && Ask > SD163 && BuySignal()==true && Bid >= SD163 + min_indent*Point && Bid { ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "Sloper", Magic, 0, Blue); if (ticket>0) { TP = NormalizeDouble(Ask + TakeProfit*Point, Digits); SL = NormalizeDouble(Ask - StopLoss*Point, Digits); if (OrderSelect(ticket, SELECT_BY_TICKET)) if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0)) Print("Ошибка на покупку"); } } //условия обратного сигнала if(z==true) { if ( CountSell()>0 && Ask > SD163 && BuySignal()==true && Bid >= SD163 + min_indent*Point && Bid { for(int i = OrdersTotal() -1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderMagicNumber() == Magic && OrderType() == OP_SELL ) if(!OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Black)) Print("Ошибка"); } } } if ( CountBuy()>0 && Bid Bid SD163 - max_indent*Point) { for(int i = OrdersTotal() -1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderMagicNumber() == Magic && OrderType() == OP_BUY) if(!OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Black)) Print("Ошибка"); } } } } Добавлено: 21-04-2018 07:03:14Как такое может быть в будни работает, в выходные нет??? Изменено 21 апреля, 2018 пользователем d1w4m3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 21 апреля, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 21 апреля, 2018 Может из-за расширения спреда в тестере? ведь у Вас в условиях:Ask > SD163 , а Bid Ссылка на сообщение Поделиться на другие сайты More sharing options...
d1w4m3 Опубликовано 21 апреля, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 21 апреля, 2018 я и без пробовал if(CountSell() == 0 && SellSignal()==true) { ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "Sloper", Magic, 0, Red); if (ticket > 0) { SL = NormalizeDouble(Bid + StopLoss*Point, Digits); TP = NormalizeDouble(Bid - TakeProfit*Point, Digits); if (OrderSelect(ticket, SELECT_BY_TICKET)) if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0)) Print("Ошибка на продажу"); } } if( CountBuy() == 0 && BuySignal()==true) { ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "Sloper", Magic, 0, Blue); if (ticket>0) { TP = NormalizeDouble(Ask + TakeProfit*Point, Digits); SL = NormalizeDouble(Ask - StopLoss*Point, Digits); if (OrderSelect(ticket, SELECT_BY_TICKET)) if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0)) Print("Ошибка на покупку"); } } //условия обратного сигнала if(z==true) { if ( CountSell()>0 && BuySignal()==true ) { for(int i = OrdersTotal() -1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderMagicNumber() == Magic && OrderType() == OP_SELL ) if(!OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Black)) Print("Ошибка"); } } } if ( CountBuy()>0 && SellSignal()==true) { for(int i = OrdersTotal() -1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderMagicNumber() == Magic && OrderType() == OP_BUY) if(!OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Black)) Print("Ошибка"); } } } }********************bool SellSignal(){ //если последний столбик красный, а предпоследний зеленый if(Reds(1)!=EMPTY_VALUE && (Blacks(2)!=EMPTY_VALUE || Greens(2)!=EMPTY_VALUE)) return(true); else return (false);}bool BuySignal(){ //если последний столбик зеленый, а предпоследний красный if(Greens(1)!=EMPTY_VALUE && (Blacks(2)!=EMPTY_VALUE || Reds(2)!=EMPTY_VALUE)) return(true); else return (false); Добавлено: 21-04-2018 12:28:43Я сейчас монитр разобью, сейчас заработал, да что это такое............ Изменено 21 апреля, 2018 пользователем d1w4m3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
machine Опубликовано 21 апреля, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 21 апреля, 2018 В OrderClose для Sell - Ask, для Buy - Bid. Ссылка на сообщение Поделиться на другие сайты More sharing options...
d1w4m3 Опубликовано 21 апреля, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 21 апреля, 2018 ^:)^ ^:)^ ^:)^ ^:)^ ^:)^ ^:)^ ^:)^ ^:)^ ^:)^ ^:)^ ^:)^ Добавлено: 21-04-2018 12:54:45получается - это все из за спреда, ппц спасибо вам ребята Ссылка на сообщение Поделиться на другие сайты More sharing options...
pavlus777 Опубликовано 22 апреля, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 22 апреля, 2018 Новый урок:http://tradelikeapro.ru/mql4-logirovanie-sobyitiy-dlya-ea/ 5 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Ar4i Опубликовано 23 апреля, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 апреля, 2018 альтернативный вариант закрытия ордера в сове работающей по Trailing-stop на примере урока № 5. там ситуация следующая, по условию if (CountBay() + CountSell() == 0 && Bid >= maprice) открывается ордер и срабатывает следующая ф-ция Trailing (). по которой и происходит закрытия ордера. а хотелось бы получить в общем такой вариант, что бы было двойное условие выхода: по Trailing (), но пока не выпадет дополнительное условия на выход Bid попробовал например так, но не сработало: Спойлер ... if (CountBay() + CountSell() == 0 && Bid >= maprice && last_type != OP_BUY ) { ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippadge, 0,0,"РОБОТ", Magic, Blue); if (ticket > 0) Print ("ошибка открытия ордера на бая"); } //------------------- + закрытие while( Bid >= maprice) Trailing (); if (Bid 0 ) { for(int i = OrdersTotal() -1; i>=0; i-- ) { if ( OrderSelect( i,SELECT_BY_POS, MODE_TRADES)) { if ( OrderMagicNumber() == Magic && OrderType()== OP_BUY ) if (! OrderClose( OrderTicket(), OrderLots(), Bid , Slippadge, Black )) Print("ошибка закрытия ордера на покупку"); }}} ... но вопрос вроде как решился поставив ф-ции на закрытие: Спойлер ... Trailing (); close_OP_BUY(); close_OP_SELL(); //---------- void close_OP_BUY() { if (Bid 0 ) { for(int i = OrdersTotal() -1; i>=0; i-- ) { if ( OrderSelect( i,SELECT_BY_POS, MODE_TRADES)) { if ( OrderMagicNumber() == Magic && OrderType()== OP_BUY ) if (! OrderClose( OrderTicket(), OrderLots(), Bid , Slippadge, Black )) Print("ошибка закрытия ордера на покупку"); }}} } //+------------------------------------------------------------------+ но висит еще такая идея как совместить сл, тп и Trailing(). например работает Trailing() и при достижение проеденного кол -ва пунктов он выходил бы из сделки в любой ситуации. то есть наверное надо как то задать что бы на каком то его Trailing() уровне, шаг -TralingStep стал = 0. наверное так, я так понимаю? урок_№5.mq4 Изменено 23 апреля, 2018 пользователем 0ll Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 23 апреля, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 апреля, 2018 например работает Trailing() и при достижение проеденного кол -ва пунктов он выходил бы из сделки в любой ситуации. то есть наверное надо как то задать что бы на каком то его Trailing() уровне, шаг -TralingStep стал = 0. наверное так, я так понимаю?Я думаю если цена прошла заданное кол-во пунктов, надо не тралом заморачиваться, а просто закрыть ордер.и в Вашем коде ошибочка: ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippadge, 0,0,"РОБОТ", Magic, Blue); if (ticket > 0) Print ("ошибка открытия ордера на бая");когда тикет > 0 - это значит открылся ордер, а вот когда Ссылка на сообщение Поделиться на другие сайты More sharing options...
mihascor Опубликовано 27 апреля, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 27 апреля, 2018 Хочу сам написать индикатор (MQL4), но данные для массивов надо брать из web-ресурса. Подскажите что почитать, где поюзать??? 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rever27 Опубликовано 27 апреля, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 27 апреля, 2018 Хочу сам написать индикатор (MQL4), но данные для массивов надо брать из web-ресурса. Подскажите что почитать, где поюзать??? 1-й вариант функции webrequest 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sacred70 Опубликовано 2 мая, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 мая, 2018 Добрый день. Надеюсь пишу по адресу. Опишу ситуацию: пишу советника который открывал бы ордера по показаниям индикаторов и закрывал бы позиции через определенное время. Так вот в какой то момент на тестах советник стал открывать только один ордер за весь период и закрывает его. Думал косяк в коде(возможно и в коде тоже), нашел и скачал сторонний советник частично похожий, так и он на тесте открывает и закрывает только один ордер за весь период тестирования, ордер открытия на обоих советниках только buy. Может это быть косяком компилятора или МТ4? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 2 мая, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 мая, 2018 Sacred70 т.е. сначала всё открывалось, а потом перестало? Трудно что-то сказать, у меня такого не было... Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sacred70 Опубликовано 2 мая, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 мая, 2018 0ll да, сначала открывалось как надо, единственное закрывалось раньше, а сейчас так же раньше, но только один ордер открывается, тусовал строки по разному, менял местами блоки, в любом порядке кода открывается только buy. Попутно вопрос: существует ли МТ4 без привязки к брокеру, чтобы избежать косяков со сборкой брокера? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 2 мая, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 мая, 2018 У нас на форуме есть коллекция чистых билдов МТ4 с практически до-исторических времён :dчитать здесь Изменено 2 мая, 2018 пользователем 0ll Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sacred70 Опубликовано 2 мая, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 мая, 2018 0llСпасибоеще вопрос)): как проще прописать в условии индикатора серию из свечей одного направления(например 5 черных свечей)? первое что пришло на ум Open[n]>Close[n], но это долго и объемно получается. и сразу еще вопросик: какие существуют варианты вывода сигнала индикатора, а именно запись в файл? Изменено 2 мая, 2018 пользователем Sacred70 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 2 мая, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 мая, 2018 Sacred70 У Вас идут свечи одна за другой, ведь по другому ни как - значит просто поставьте счётчик, типа:if ( Close[1] > Open[1] ) { countB++; countS = 0; }else { countS++; countB = 0; }а теперь анализируем счётчикиif ( countB == 5 ) // делаем что-то Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sacred70 Опубликовано 3 мая, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 мая, 2018 0ll спасибо, прикрутил, все работает отлично, еще бы замутить чередование ордеров Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 3 мая, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 мая, 2018 еще бы замутить чередование ордеровЭто вопрос или мечта и сами справитесь? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sacred70 Опубликовано 4 мая, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 мая, 2018 был бы признателен если дадите направление куда копать Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 4 мая, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 мая, 2018 самое простое решение это сохранить направление последнего открытого ордера или тикет (если потом мартина прикручивать)добавьте глобальную переменную int lastType = -1;Когда открываете ордер (BUY) делаете проверку if ( lastType != OP_BUY ) { открываем Бай ...; lastType = OP_BUY; } Ссылка на сообщение Поделиться на другие сайты More sharing options...
solderr Опубликовано 6 мая, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 мая, 2018 Здравствуйте.Подскажите, как подключить индикатор MovingAverage, не к графику цены, а к индикатору что находится в "подвале".Спасибо. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
sleturin Опубликовано 10 мая, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 мая, 2018 Привет! Подскажите как в коде обрисовать ситуацию : есть некий гэп и далее цена проходит определенное расстояние в пунктах. Спойлер Изменено 13 мая, 2018 пользователем 0ll Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти