usver73 Опубликовано 8 февраля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 февраля, 2019 Предлагаю (прошу) сделать обзор/описание библиотеки MT4Orders. В ней действительно реализованы механизмы мультиплатформенности. 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
molot_1 Опубликовано 12 февраля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 февраля, 2019 Всем здравствуйте! Помогите пожалуйста, не пойму ошибку! Снимок_экрана_1.png Ссылка на сообщение Поделиться на другие сайты More sharing options...
radioman Опубликовано 12 февраля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 февраля, 2019 Попробуйте объявить режим строгой проверки ошибок: #property strict Ссылка на сообщение Поделиться на другие сайты More sharing options...
djnet Опубликовано 12 февраля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 февраля, 2019 Всем здравствуйте! Помогите пожалуйста, не пойму ошибку! Тестер говорит что переменная уже глобально объявлена выше. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
MikR0ReR Опубликовано 14 февраля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 февраля, 2019 Из лички. Цитата Привет, ты мне помог очень, я ещё решил засунуть один индикатор, и тут у него немного другие показания, на покупку открывает и должен закрыть как только будет продажа, но получается что он выставляет ордера на каждом баре. Посмотри пожалуйста. 1.) Привет. Всегда проверяй какие данные поставляет тебе источник. iCustom.mq4 и тестер индикаторов тебе в помощь.Источник нам дает 0 как отсутствие сигнала и 1,3254 как сигнал.2.)if(EMA_Hone != EMPTY_VALUE && EMA_Htwo != EMPTY_VALUE) 0 равен EMPTY_VALUE(2147483647)? нет!1,3254 равен EMPTY_VALUE(2147483647)? нет! Такое условие всегда будет верным и пропускать.исправляем наif(EMA_Hone != 0 && EMA_Htwo != 0) Работает.Да! этот индикатор есть скользящая средняя, сглаживание EMA по ценам CLOSE.iCustom.mq4 Изменено 14 февраля, 2019 пользователем MikR0ReR Ссылка на сообщение Поделиться на другие сайты More sharing options...
Larcher Опубликовано 14 февраля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 февраля, 2019 Здравствуйте. При тестировании своего советника в тестере стратегий у меня возникло недопонимание одного момента со спредом.Например, для ордера Buy я рассчитываю SL в советнике по формулеSL = NormalizeDouble(Ask - StopLoss*Point, Digits);При проверке на демо-счете все работает корректно при закрытие сделки по стопу. А при проверке в тестере убыток увеличиваетя на размер некого фиксированного спреда. Причем настройки в поле "Спред" в тестере ничего не дают, результат не меняется.Аналогично фин. результат сделки при закрытии по TP так же отличается на Демо и в тестере на тотже самьй спред.Я не так давно пользуюсь тестером. Подскажите, пожалуйста, что я делаю не так? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rever27 Опубликовано 15 февраля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 февраля, 2019 Подскажите, пожалуйста, что я делаю не так? Попробуй как вариант модифицировать ордер уже после открытия. На ECN типе счетов выставлять ТП/СЛ сразу нельзя, насколько я помню.Т.е. уже после открытия ордера бери цену его открытия от нее выставляй цели: int ticket = (int)OrderSend(_Symbol, op, Lot, Ask, slippage, 0, 0, EAName, MagicNumber, 0, clrBlue); if(ticket else { if(OrderSelect(ticket,SELECT_BY_TICKET) { double tp = NormalizeDouble(OrderOpenPrice() + TakeProfit*Point, Digits); double sl = NormalizeDouble(OrderOpenPrice() - StopLoss*Point, Digits); if(!OrderModify(ticket, OrderOpenPrice(), sl, tp, 0)) Print("Ошибка модификации ордера"); } } Возможно у тебя разница до целей возникает из-за проскальзывания и времени между выставлением ордера и модификацией - вначале Ask был один, потом стал другой. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Ar4i Опубликовано 15 февраля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 февраля, 2019 проблема с CountSell().подсчет открытых позиций на реале порой дает сбой. "успевает" открыть две позиции в место одной. может конечно на оборот и "не успевает" просчитать, но думаю ошибка в чем то этаком. подскажите пожалуйста как стабилизировать эту функцию: int CountSell() { int count = 0; for(int trade=OrdersTotal()-1; trade>=0; trade--) { if(OrderSelect(trade, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_SELL) count++; }} return(count) ; } Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 15 февраля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 февраля, 2019 проблема с CountSell().подсчет открытых позиций на реале порой дает сбой. "успевает" открыть две позиции в место однойПроблема не в функции, а в общей логике. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Larcher Опубликовано 15 февраля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 февраля, 2019 Попробуй как вариант модифицировать ордер уже после открытия. На ECN типе счетов выставлять ТП/СЛ сразу нельзя, насколько я помню.Возможно у тебя разница до целей возникает из-за проскальзывания и времени между выставлением ордера и модификацией - вначале Ask был один, потом стал другой. Я так и делаю с модификацией. И на демо все работает четко. SL выставляется ровно 10 пунктов, убыток при лоте 0.1 - 10$.Но при запуске в тестере стратегий убыток получается - 10,5$, хотя SL также выставлется ровно на 10 пунктов, те при расчете убытка в $ добавляется еще и спред. Вопросы:Так и должно быть?Как убрать этот спред? Я меняю его в настойках тестера в поле "спред", но ничего не менется, убыток по прежнему 10,5 при любом значении в поле "спред".Кстати таже история, когда запускаю учебные советники из курса Изменено 15 февраля, 2019 пользователем Larcher Ссылка на сообщение Поделиться на другие сайты More sharing options...
Ar4i Опубликовано 15 февраля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 февраля, 2019 "Как убрать этот спред? Я меняю его в настойках тестера в поле "спред", но ничего не менется, убыток по прежнему 10,5 при любом значении в поле "спред"." - а ты, именно ноль вписывал в окне спреда? - имею другой вопрос к TralingStop: параметр шаг/step начинается только после достижения без убытка заданного параметром stoploss. то есть первый step = размеру stoploss. - а хотелось бы что бы TralingStop сразу начинался по заданному шагу. - как? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 15 февраля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 февраля, 2019 Но при запуске в тестере стратегий убыток получается - 10,5$, хотя SL также выставлется ровно на 10 пунктов, те при расчете убытка в $ добавляется еще и спред.Возможно из-за другой стоимости пункта - зависит от валюты счёта и валют пары теста. Проверьте комиссию. Демо и тестер на одном счёте?имею другой вопрос к TralingStop: параметр шаг/step начинается только после достижения без убытка заданного параметром stoploss. то есть первый step = размеру stoploss. - а хотелось бы что бы TralingStop сразу начинался по заданному шагу.Трал может включаться сразу после открытия ордера или некого уровня просадки - вопрос алгоритма. Вы готовы заранее задать условие включения трала если сделка ушла в минус на 10$ или на 20$? Поэтому проще определить БУ ордера как точку срабатывания условия включения трала. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Larcher Опубликовано 18 февраля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 18 февраля, 2019 Но при запуске в тестере стратегий убыток получается - 10,5$, хотя SL также выставлется ровно на 10 пунктов, те при расчете убытка в $ добавляется еще и спред.Возможно из-за другой стоимости пункта - зависит от валюты счёта и валют пары теста. Проверьте комиссию. Демо и тестер на одном счёте? Спасибо. Разобралась) Это не спред, а комиссия (счет ECN), я совсем про нее забыла ;) На демо финрезультат и комиссия показываются отдельно, а в тестере они суммируются. Изменено 18 февраля, 2019 пользователем 0ll Ссылка на сообщение Поделиться на другие сайты More sharing options...
Ar4i Опубликовано 18 февраля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 18 февраля, 2019 Вы готовы заранее задать условие включения трала если сделка ушла в минус на 10$ или на 20$? ну скажем так, я хотел бы попробовать такое условия срабатывания трала(сразу). запустить на тесте и проверить. потом поразмышлять над результатом.я так понимаю речь идет об изменении этого условия: ... if(OrderStopLoss() { if(!OrderModify...подскажите алгоритм для включения трала в роботу сразу после открытия ордера. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 19 февраля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 февраля, 2019 я так понимаю речь идет об изменении этого условия:Нет, это условие перестановки СЛ. Включается трал в месте вызова функции.Алгоритм простой: если есть рыночные ордера - вызываем функцию для каждого. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
pavlus777 Опубликовано 19 февраля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 февраля, 2019 Новый урок:http://tradelikeapro.ru/mql4-raschet-stat-koeffitsientov/ 4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Ar4i Опубликовано 19 февраля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 февраля, 2019 Включается трал в месте вызова функции. в месте вызова, какой функции:OrderModify(), или там где запускаетсяTrailing() ? Изменено 19 февраля, 2019 пользователем Ar4i Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 19 февраля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 февраля, 2019 функции трала. Ar4i Вы свой код показываете кусочками и хотите помощи... Ссылка на сообщение Поделиться на другие сайты More sharing options...
Ar4i Опубликовано 20 февраля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 20 февраля, 2019 функции трала. Ar4i Вы свой код показываете кусочками и хотите помощи... понял. исправляюсь: Спойлер //----------------------void Trailing() { for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderSymbol() == Symbol() && OrderMagicNumber()== Magic) { //-------------------- if(OrderType() == OP_BUY) { last_type = OP_BUY; if(Bid-OrderOpenPrice() > TralingStop *Point || OrderStopLoss()==0) { if(OrderStopLoss() { TP = NormalizeDouble(OrderOpenPrice() + TakeProfit*Point, Digits); if(!OrderModifyX(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid-TralingStop *Point, Digits), TP, 0, Red)) Print ("Trailing(): Ошибка! модификации ордера на buy"); }}} //----------------- if(OrderType() == OP_SELL) { last_type = OP_SELL; if(OrderOpenPrice()-Ask > TralingStop *Point || OrderStopLoss()==0) { if(OrderStopLoss() > Ask+(TralingStep + TralingStop)*Point || OrderStopLoss()==0) { TP = NormalizeDouble(OrderOpenPrice() - TakeProfit *Point, Digits); if(!OrderModifyX(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask + TralingStop *Point, Digits), TP, 0, Red)) Print ("Trailing(): Ошибка! модификации ордера на sell"); }}} } // if(OrderSelect.. }// for.. } //end //---------------------- ну и уже соответственно в нужном мне контексте вставляю: Trailing(). Изменено 20 февраля, 2019 пользователем 0ll Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 20 февраля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 20 февраля, 2019 понял. исправляюсь: ну и уже соответственно в нужном мне контексте вставляю: Trailing(). fcplm я и веду речь о том, что не вижу кода места вызова функции Trailing(). Там должно условие какое-то быть... Ссылка на сообщение Поделиться на другие сайты More sharing options...
Ar4i Опубликовано 20 февраля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 20 февраля, 2019 if(PriceHigh_2 >= PriceHigh) { //-----------------------------close sell if(CountSell() > 0) { 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(), Ask, Slippadge, Black )== true) Print("Закрытие на sell №" + IntegerToString(OrderTicket(), 1, ' ')); }}} //-------------------------------open buy if(CountSell()==0 && CountBay()==0 && last_type != OP_BUY) { ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippadge, 0, 0,"OrderSend", Magic, Blue); if(ticket > 0) { Print("Открытие сделки №" + IntegerToString(aticket, 1, ' ')); } else Print("error of opening order on buy"); } Trailing(); } //------------------------------------------------------- правда не понимаю какое значение это может имеет к самому интересующему меня моменту алгоритма самой функции Trailing(). Изменено 21 февраля, 2019 пользователем Ar4i Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 21 февраля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 21 февраля, 2019 правда не понимаю какое значение это может имеет к самому интересующему меня моменту алгоритма самой функции Trailing().У Вас Трал включается только при условии на вход, т.е. максимум 1 раз за свечу - поэтому не работает. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Ar4i Опубликовано 21 февраля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 21 февраля, 2019 изменил но суть та же. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 22 февраля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 22 февраля, 2019 изменил но суть та же.В разведке служите? В чём суть-то? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Ar4i Опубликовано 25 февраля, 2019 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 февраля, 2019 В чём суть-то? есть функция: Спойлер //----------------void Trailing() { for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderSymbol() == Symbol() && OrderMagicNumber()== Magic) { if(OrderType() == OP_BUY) { last_type = OP_BUY; if(Ask-OrderOpenPrice() > TralingStop *Point || OrderStopLoss()==0) { if(OrderStopLoss() { TP = NormalizeDouble(OrderOpenPrice() + TakeProfit*Point, Digits); if(!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask-TralingStop *Point, Digits), TP, 0, Red)) Print ("Ошибка! модификации ордера на buy"); }}} if(OrderType() == OP_SELL) { last_type = OP_SELL; if(OrderOpenPrice()-Bid > TralingStop *Point || OrderStopLoss()==0) { if(OrderStopLoss() > Bid+(TralingStep + TralingStop)*Point || OrderStopLoss()==0) { TP = NormalizeDouble(OrderOpenPrice() - TakeProfit *Point, Digits); if(!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid + TralingStop *Point, Digits), TP, 0, Red)) Print ( Ошибка! модификации ордера на sell"); }}}}}}//---------------- в ней есть параметры TralingStop и TralingStep. так вот, срабатывание заданного шага(TralingStep) в этой функции происходит ТОЛЬ ПОСЛЕ ПЕРВОГО ШАГА равному всегда TralingStop(линии без убытка), а уже последующие шаги совершаются равные TralingStep.хочется получить, что бы ПЕРВЫЙ ШАГ был тоже равен TralingStep. Изменено 25 февраля, 2019 пользователем 0ll Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти