Dron15 Опубликовано 21 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 21 июня, 2015 0ll уже не знаю что не так. Изменено 22 июня, 2015 пользователем Dron15 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Konstebl Опубликовано 21 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 21 июня, 2015 0ll уже не знаю что не так. if(OrderStopLoss() if(OrderStopLoss() f(OrderStopLoss() Вполне возможно ,что не работает вот из-за этой строчки if(OrderOpenPrice()Вы TrailingStop на Point не умножили!!! 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 22 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 22 июня, 2015 Dron15 просто делай так: if(OrderType() == OP_BUY) { if(OrderOpenPrice() { if(OrderStopLoss() если и после этого работать не будет, давай всю сову в .mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Dron15 Опубликовано 22 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 22 июня, 2015 Dron15 просто делай так: if(OrderType() == OP_BUY) { if(OrderOpenPrice() { if(OrderStopLoss() если и после этого работать не будет, давай всю сову в .mq4 файлики прикреплю но с функцией старт еще нечего не делал , работы сегодня много , завтра сяду со стартом повожусь .исправил.txtSNAG-15062218503000.png Ссылка на сообщение Поделиться на другие сайты More sharing options...
holodar Опубликовано 23 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 июня, 2015 Еще раз всем добрый день.Попробовав свои силы, пришел к решению, что нужно попрактиковаться на чем-то попроще, чем советник. Хотя с "подхватом" ордеров справился. Спасибо за советы и моральную поддержку.Решил написать простенький скрипт, который открывал бы ордер с рынка на продажу, выставлял стоп за ближайший минимум и профит в 4 раза больше стопа.Но что-то не так. Ордер открывается, в нужную сторону, даже СЛ и ТП ставятся... но слишком далеко. Боюсь, что я так и не понял, как правильно выставлять, а точнее логически прописывать установку, стопов. Или что-то еще не так?Скрипт во вложении.Заранее спасибо за помощь. Test_Script.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Konstebl Опубликовано 23 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 июня, 2015 Еще раз всем добрый день.Попробовав свои силы, пришел к решению, что нужно попрактиковаться на чем-то попроще, чем советник. Хотя с "подхватом" ордеров справился. Спасибо за советы и моральную поддержку.Решил написать простенький скрипт, который открывал бы ордер с рынка на продажу, выставлял стоп за ближайший минимум и профит в 4 раза больше стопа.Но что-то не так. Ордер открывается, в нужную сторону, даже СЛ и ТП ставятся... но слишком далеко. Боюсь, что я так и не понял, как правильно выставлять, а точнее логически прописывать установку, стопов. Или что-то еще не так?Скрипт во вложении.Заранее спасибо за помощь. Ну начнём с того,что SL=NormalizeDouble(Bid-NL*Point, Digits); //Вычисляем СЛTP=NormalizeDouble(Bid+(NL*Point)*x, Digits);NL не надо умножать на Point,это и так цена , не целое число(3;5;10).Во-вторых .А чему равно NL???Надо примерно так:double L = 1000000; //Стоплосс для БАЙdouble L1 = 0; //Стоплосс для СЕЛЛfor(int i = 1; i { if(iLow(Symbol(),0,i) }for(int i = 1; i { if(iHigh(Symbol(),0,i) > L1) L1 = iHigh(Symbol(),0,i);}В третьих надо найти численное значение SL.Для этого : int Sl = (int) ((Цена открытия - полученное значение Стоплосса)/Point);И вот теперь :TP=NormalizeDouble(Цена открытия+(Sl*x)*Point, Digits); Вот как-то так!!! 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
holodar Опубликовано 23 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 июня, 2015 ...Вот как-то так!!! Другими словами, лучше сначала открыть ордер с нулевыми СЛ и ТП, а уже следующим тиком менять их на нужные значения... Спасибо. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 23 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 июня, 2015 Dron15 почитал по-быстрому код Вашего бота. Вам придётся его переписывать. Домашнее задание:1. подготовить в текстовом виде общий алгоритм, без уточнений.2. в ф-ции OnTick() не должно быть циклов (такое вот задание)3. сбор сведений о последнем ордере (тип, лот, цена) в одной процедуре - запись в глобальные переменные4. Вызов ф-ции CountTredes() - один раз! за проход (сохраняйте в переменную и потом используйте)5. Поиск точки входа 1 раз на открытии бара, а не на каждом тике.Пока достаточно. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Dron15 Опубликовано 23 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 июня, 2015 Dron15 почитал по-быстрому код Вашего бота. Вам придётся его переписывать. Домашнее задание:1. подготовить в текстовом виде общий алгоритм, без уточнений.2. в ф-ции OnTick() не должно быть циклов (такое вот задание)3. сбор сведений о последнем ордере (тип, лот, цена) в одной процедуре - запись в глобальные переменные4. Вызов ф-ции CountTredes() - один раз! за проход (сохраняйте в переменную и потом используйте)5. Поиск точки входа 1 раз на открытии бара, а не на каждом тике.Пока достаточно. Хорошо спасибо, обязательно сделаю. Единственный вопрос доделали мы трал или нет ? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 23 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 июня, 2015 Хорошо спасибо, обязательно сделаю. Единственный вопрос доделали мы трал или нет ?Не совсем - он запускается криво, а чтоб всё ровно - надо домашку сделать. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Dron15 Опубликовано 24 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 июня, 2015 0ll Первый пункт написал. ДЗ.пунк1.txt Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sany2912 Опубликовано 24 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 июня, 2015 Здравствуйте! Друзья, подскажите, кто знает, как правильно написать код, чтоб советник начинал работу с открытия бара и закрывал открытые позиции перед закрытием бара? (прилагаю часть кода, для примера: открываем покупку на пробитии дневного максимума, а закрыть позицию нужно перед закрытием свечи, тоже самое и на продажу: если текущая свеча пробивает минимум предыдущей свечи) G.Day.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
holodar Опубликовано 24 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 июня, 2015 Еще раз добрый день всем. И опять я со своим скриптом :)Вроде переписал, используя советы тов. Konstebl. Но возник другой вопрос: как правильно вытянуть тикет из уже открытого ордера? Моя попытка ордер открывает, но при выставлении стопов выдает: "2015.06.24 15:38:25.694 Test_Script BRN,M5: invalid ticket for OrderModify function" и "2015.06.24 15:38:25.694 Test_Script BRN,M5: invalid takeprofit for OrderModify function" вот в таком порядке. Я правильно понимаю, что я как-то некорректно передаю тикет от функции OrderSelect() функции OrderModify()? Подскажите пожалуйста, где я ошибся.Заранее спасибо, текст скрипта во вложении. Test_Script.txt Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 24 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 июня, 2015 Sany2912 Нужно следить за изменением времени открытия бара. Если время изменилось - значит новый бар. Например: static datetime dd; if (dd != iTime(NULL, PERIOD_D1, 0)) //новый бар! { max = iHigh(Symbol(), PERIOD_D1, 1); min = iLow(Symbol(), PERIOD_D1, 1); }Крайне не советую использовать функции типа iTime(NULL, PERIOD_D1, 0) (т.е. брать данные с другого ТФ) код при 1 запуске может выдавать неадекватные значения. Если есть возможность - используйте текущий ТФ и функции типа Time[0]Dron15 пришлось переделать - сова не умеет ждать и работает практически в цикле. Вот пример алгоритма:1. Проверяем нет ли открытых ордеров в рынке. Если ДА: далее, если НЕТ: п.2.1.1. Проверяем дистанцию от ордера до цены. Если > xx пп.: п.3, если менее: далее1.2. если дистанция менее - уу пп.: п.4. если более - выход2. Проверка условий на вход. Если ДА - далее, если НЕТ - выход.2.1. Входим.3. Профит. Ставим СЛ и Трал.4. Усреднение. Проверка условий. если ДА - далее, если нет - выход.4.1. Вычисляем лот и открываем усредняющий ордер. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Konstebl Опубликовано 24 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 июня, 2015 Еще раз добрый день всем. И опять я со своим скриптом :)Вроде переписал, используя советы тов. Konstebl. Но возник другой вопрос: как правильно вытянуть тикет из уже открытого ордера? Моя попытка ордер открывает, но при выставлении стопов выдает: "2015.06.24 15:38:25.694 Test_Script BRN,M5: invalid ticket for OrderModify function" и "2015.06.24 15:38:25.694 Test_Script BRN,M5: invalid takeprofit for OrderModify function" вот в таком порядке. Я правильно понимаю, что я как-то некорректно передаю тикет от функции OrderSelect() функции OrderModify()? Подскажите пожалуйста, где я ошибся.Заранее спасибо, текст скрипта во вложении. for(int i=1;i if(iLow(Symbol(),0,i) for(int y=0;y { if(OrderSelect(y,SELECT_BY_POS,MODE_TRADES)) { if( (OrderMagicNumber()==magic) && (OrderSymbol()==Symbol()) ) {pos=OrderTicket(); OP=OrderOpenPrice();} } SL=MathRound(OP-L/Point); ПЕРВАЯ ОШИБКА!!! OrderModify( pos,OrderOpenPrice(),NormalizeDouble(Bid-SL*Point,Digits),NormalizeDouble(Bid+(SL*x)*Point,Digits),0 ); } }1). Вы пытаетесь из цены открытия (допустим 0,9.....) вычесть 1000000 ну или какое-то другое целое число!!! Надо хотя-бы поставить (). SL=MathRound((OP-L)/Point); for(int y=0;y { if(OrderSelect(y,SELECT_BY_POS,MODE_TRADES)) { if( (OrderMagicNumber()==magic) && (OrderSymbol()==Symbol()) ) { if(OrderType == OP_BUY) { pos=OrderTicket(); OP=OrderOpenPrice(); SL=MathRound((OP-L)/Point); OrderModify( pos,OrderOpenPrice(),NormalizeDouble(Bid-SL*Point,Digits),NormalizeDouble(Bid+(SL*x)*Point,Digits),0 ); } } } Попробуйте так. Изменено 24 июня, 2015 пользователем Konstebl 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sany2912 Опубликовано 24 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 июня, 2015 Sany2912 Нужно следить за изменением времени открытия бара. Если время изменилось - значит новый бар. Например: static datetime dd; if (dd != iTime(NULL, PERIOD_D1, 0)) //новый бар! { max = iHigh(Symbol(), PERIOD_D1, 1); min = iLow(Symbol(), PERIOD_D1, 1); }Крайне не советую использовать функции типа iTime(NULL, PERIOD_D1, 0) (т.е. брать данные с другого ТФ) код при 1 запуске может выдавать неадекватные значения. Если есть возможность - используйте текущий ТФ и функции типа Time[0]Спасибо за помощь! Только это не работает!!! я уже так делал... Проблема в том, что после закрытия позиции, в данном случае в 23.55, он продолжает открывать сделки на каждом тике и в 23.56 и в 23.57 и т.д. Этого не должно быть... Следующий анализ ситуации должен происходить с открытия следующего бара. Может быть есть еще какиенибудь варианты??? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 24 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 июня, 2015 Sany2912 что именно не работает? - я-ж только намекнул как определить приход нового бара, а как этим пользоваться это Ваша задача.Нужно на листочке расписать алгоритм работы совы, где, какие проверки делать и т.д. Например:1. Если новый день1.1. Определяем уровни мах/мин предыдущего1.2. Вычисляем время окончания работы1.3. флаг работы = тру.2. Если цена на уровне, флаг работы == тру и сделок нет - открываемся, иначе выход3. если время окончания - закрываем ордера, флаг работы = фалсе. Изменено 24 июня, 2015 пользователем 0ll Ссылка на сообщение Поделиться на другие сайты More sharing options...
holodar Опубликовано 24 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 июня, 2015 ...Попробуйте так. Спасибо, всё заработало. Свои ошибки понял. Надеюсь, не сильно всех обеспокоил. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sany2912 Опубликовано 25 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 июня, 2015 Sany2912 что именно не работает? - я-ж только намекнул как определить приход нового бара, а как этим пользоваться это Ваша задача.Нужно на листочке расписать алгоритм работы совы, где, какие проверки делать и т.д. Например:1. Если новый день1.1. Определяем уровни мах/мин предыдущего1.2. Вычисляем время окончания работы1.3. флаг работы = тру.2. Если цена на уровне, флаг работы == тру и сделок нет - открываемся, иначе выход3. если время окончания - закрываем ордера, флаг работы = фалсе. Прилагаю измененный код с учетов всех рекомендаций - не работает! Предлагаю протестировать с 5 апреля, например. Сделки вовремя не закрываются, и много лишних сделок на каждом тике. Не могу понять в чем ошибка??G.Day.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 25 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 июня, 2015 Sany2912 попробуй мой вариант. я не запускал, но думаю работать будет.G.Day.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sany2912 Опубликовано 25 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 июня, 2015 Sany2912 попробуй мой вариант. я не запускал, но думаю работать будет. Нееет, не работает!! Я о чем и говорю: вроде бы все правильно написано, а не работает... прилагаю скрин.Рисунок1.jpgРисунок2.jpg Изменено 25 июня, 2015 пользователем Sany2912 Ссылка на сообщение Поделиться на другие сайты More sharing options...
pavlus777 Опубликовано 26 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 июня, 2015 Новый урок от Сергея XBMS Реконнект для советника Изменено 26 июня, 2015 пользователем pavlus777 4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Dron15 Опубликовано 26 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 июня, 2015 Oll5. Поиск точки входа 1 раз на открытии бара, а не на каждом тике.Правильно я понял , вход так же по рси но ордера сделать чтоб открывались именно на хай или лоу свечи ? 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Konstebl Опубликовано 26 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 июня, 2015 Oll5. Поиск точки входа 1 раз на открытии бара, а не на каждом тике.Правильно я понял , вход так же по рси но ордера сделать чтоб открывались именно на хай или лоу свечи ? Используйте отложенные ордера .БАЙСТОП и СЕЛЛСТОП! 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Dron15 Опубликовано 26 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 июня, 2015 Oll5. Поиск точки входа 1 раз на открытии бара, а не на каждом тике.Правильно я понял , вход так же по рси но ордера сделать чтоб открывались именно на хай или лоу свечи ? Используйте отложенные ордера .БАЙСТОП и СЕЛЛСТОП! А если я поставлю отложку и цена развернется и не зацепит ? я имею введу первый ордер. Или вы имели введу первый с рынка а следующие отложками ? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти