denis77515 Опубликовано 1 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 февраля, 2015 Ребята доброго времени,у меня вопрос возник.написал советник.вроде все работает.Но вот не задача, сегодня начал его тестировать. Советник ставит отложки. Он мне в журнале пишет ошибка 145. то есть в модификации отказано ордер сильно близко к рынку.Ордер становится рыночным,но модификации так не происходит.то есть он у меня повисает и все тут. Функции обработки ошибок открытия и модификации ордеров я взял из советника 10Pips уважаемого xbms.Подскажите чего можно сделать,что бы такая оказия не повторялась ? Ссылка на сообщение Поделиться на другие сайты More sharing options...
chistaia-rodina Опубликовано 1 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 февраля, 2015 denis77515, ну тогда сам бы блок модификации посмотреть, что именно взято и как реализовано. Ссылка на сообщение Поделиться на другие сайты More sharing options...
denis77515 Опубликовано 1 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 февраля, 2015 Вот сам советник, еще подскажите такую вещь,я хочу что бы по прошествии N-свечей если отложка не сработала то ее удалить.Я пробовал через Сlose[5]; но получается так что он на следующем баре удаляет отложку. MA_Sympol_AutoProfit.v1.0.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Silentspec Опубликовано 2 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 февраля, 2015 Вот сам советник, еще подскажите такую вещь,я хочу что бы по прошествии N-свечей если отложка не сработала то ее удалить.Я пробовал через Сlose[5]; но получается так что он на следующем баре удаляет отложку. По отложке: CandlePast=MathFloor(((TimeCurrent()-OrderOpenTime())/60)/Period());затем сравниваешь с CandlesToDelete, которую задаешь во внешних переменных. Ссылка на сообщение Поделиться на другие сайты More sharing options...
SVBond Опубликовано 2 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 февраля, 2015 SVBond, проблема похоже проявляется на ECN счёте, а то так бегло посмотрел код, там параметры SL и TP заданы сразу при установке ордера? Да именной в ECN счете проблема. на обычном все нормально открывается. Что можно в коде прописать что бы избавиться от этой напасти?) Ссылка на сообщение Поделиться на другие сайты More sharing options...
Silentspec Опубликовано 2 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 февраля, 2015 Он же у тебя стопы сразу ставит, на ецн так нельзя. Сначала открыл, потом модифицировал. Ссылка на сообщение Поделиться на другие сайты More sharing options...
chistaia-rodina Опубликовано 2 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 февраля, 2015 SVBond, пробуйте, а то я не проверял, тестовый терминал сильно занят.Stat_Euclidean_Metric.mq4Stat_Euclidean_Metric.ex4 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
pavlovost Опубликовано 3 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 февраля, 2015 Здравствуйте!Пытался сделать трейлинг-стоп по уроку. Ордера не модифицирует почему-то. Подскажите пожалуйста, в чем дело? Где я что-то не так написал. Спасибо! SimpleTraling.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 3 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 февраля, 2015 Пытался сделать трейлинг-стоп по уроку. Ордера не модифицирует почему-то. Подскажите пожалуйста, в чем дело? Где я что-то не так написал. Спасибо!по баю модифицирует по селлу - нет, потому что:if(OrderStopLoss() > Ask + (TralingStop + TralingStep)*Point)у Вас начальный СЛ = 0! (для бая прокатывает) 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Андрей_090 Опубликовано 4 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 февраля, 2015 Приветствую, прошу подсказать по возможности..Есть бот от известного многим Игоря Кима- данный советник закрывает ордера по указанному времени.Но время можно указать лишь одно- а как нужно изменить код, чтобы советник стал закрывать сделки каждые 4 часа например??Видимо для начала надо добавить переменных extern int по количеству нужных часов и минут, а вот как эти переменные получить и обработать в основном модуле??//+------------------------------------------------------------------+//| e-CloseOnTime.mq4 |//| Ким Игорь В. aka KimIV |//| http://www.kimiv.ru |//| |//| 2005.11.01 Советник в нужное время закрывает все позиции. |//+------------------------------------------------------------------+#property copyright "Ким Игорь В. aka KimIV"#property link "http://www.kimiv.ru"//---- input parametersextern int CloseHour = 7; // Время закрытия, часыextern int CloseMinute = 0; // Время закрытия, минутыextern bool UseCurrSymbol = False; // Использовать только один инструментextern bool UseOneAccount = False; // Использовать только один счётextern int NumberAccount = 11111; // Номер торгового счётаextern int Slippage = 3; // Проскальзывание ценыextern color clCloseBuy = Blue; // Цвет закрытия покупкиextern color clCloseSell = Red; // Цвет закрытия продажиvoid start() { double pBid, pAsk; if (UseOneAccount && AccountNumber()!=NumberAccount) { Comment("Работа на счёте: "+AccountNumber()+" ЗАПРЕЩЕНА!"); return; } else Comment(""); if (Hour()==CloseHour && Minute()>=CloseMinute) { for (int i=OrdersTotal()-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (!UseCurrSymbol || OrderSymbol()==Symbol()) { if (OrderType()==OP_BUY) { pBid=MarketInfo(OrderSymbol(), MODE_BID); OrderClose(OrderTicket(), OrderLots(), pBid, Slippage, clCloseBuy); } if (OrderType()==OP_SELL) { pAsk=MarketInfo(OrderSymbol(), MODE_ASK); OrderClose(OrderTicket(), OrderLots(), pAsk, Slippage, clCloseSell); } } } } }}//+------------------------------------------------------------------+ Ссылка на сообщение Поделиться на другие сайты More sharing options...
ax$id Опубликовано 5 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 февраля, 2015 Здравствуйте. Вопрос к автору ветки. Начал изучать, но столкнулся с проблемой и нужна подсказка в чём причина. На втором уроке по функциям и циклам писал всё и делал как у Вас, но вот при компиляции выскакивают постоянно предупреждения такого контекста: 1. return value of 'OrderSelect' should be checked.2. return value of 'OrderSelect' should be checked.3. return value of 'OrderDelete' should be checked.Прилагаю код. WORk2_FUNKTION.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 5 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 февраля, 2015 ax$id В новом билде терминала стало всё строже.Данные функции возвращают значения true/false и Вам напоминают, что это надо проверить. Сделайте так:bool check = OrderSelect(....и предупреждение исчезнет 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
ax$id Опубликовано 5 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 февраля, 2015 ax$id В новом билде терминала стало всё строже.Данные функции возвращают значения true/false и Вам напоминают, что это надо проверить. Сделайте так:bool check = OrderSelect(....и предупреждение исчезнет Спасибо за подсказку, сегодня допишем. Вот ещё вопрос переменной check значение присваивать cразу в объявлении переменных или как?Добавлено: 05-02-2015 16:52:07ax$id В новом билде терминала стало всё строже.Данные функции возвращают значения true/false и Вам напоминают, что это надо проверить. Сделайте так:bool check = OrderSelect(....и предупреждение исчезнет Да ваш совет по борьбе с предупреждениями помог. Спасибо, будем далее заниматься.Добавлено: 06-02-2015 08:10:04Здравствуйте опять у меня вопрос к знающим и опытным. Вчера отписал что проблема при компиляции выдаёт предупреждения, но предупреждения благодаря наставлению 0ll устранены. Вопрос теперь втом что по видео-уроку проверяем советник в терминале мт4 в тестировщике стратегий, мой код не открывает ни одной сделки. Мог бы кто нибудь растолковать новичку где искать проблему. Заранее благодарен за участие.Код прилагаю в файле mql4.WORk2_FUNKTION.mq4 Изменено 6 февраля, 2015 пользователем ax$id Ссылка на сообщение Поделиться на другие сайты More sharing options...
MK1 Опубликовано 6 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 февраля, 2015 В методе void OnInit(); создайте таймер вызвав метод EventSetTimer(int seconds); с 1 параметром - интервал в секундах, например таймер на каждые 4 часа 20 минут будет равен (4 * 3600 + 20 * 60) = 15600 секунд.Далее в методе void OnTimer(); Выполняйте необходимые Вам действия. 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 6 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 февраля, 2015 ax$id код нужно писать в функции ОнТик(), а Вы в ОнДеинит() :dМинимум цены можно искать так:prcLo = (iLow (NULL, 0, iLowest (NULL, 0, MODE_LOW , bar, 1))); //максимум аналогичноесли есть вопросы по функциям смотрите справку. не желательно использовать ТФ отличный от текущего.Не указывайте в отложке время экспирации - не все брокеры это поддерживают. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
ax$id Опубликовано 7 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 февраля, 2015 ax$id код нужно писать в функции ОнТик(), а Вы в ОнДеинит() :dМинимум цены можно искать так:prcLo = (iLow (NULL, 0, iLowest (NULL, 0, MODE_LOW , bar, 1))); //максимум аналогичноесли есть вопросы по функциям смотрите справку. не желательно использовать ТФ отличный от текущего.Не указывайте в отложке время экспирации - не все брокеры это ется катьисдподдерживают. Благодарю за ответ. Вот видите-ли код который я написал это можно сказать точная копия из видеокурса который представлен в самом начале ветки. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 7 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 февраля, 2015 ax$id Сергей (автор курсов) писал, что специально оставлял ошибки в коде для самостоятельного поиска... ;) Ссылка на сообщение Поделиться на другие сайты More sharing options...
kempo Опубликовано 12 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 февраля, 2015 Доброго времени суток , ув. Oll ...возник вопрос...мне нужно при определенных условиях закрыть все ордера...как один закрыть я знаю, а как все...не знаюvoid CloseSell() { for (int trade = OrdersTotal() - 1; trade >= 0; trade--) { OrderSelect(trade, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol()) { if (OrderMagicNumber() == Magic && OrderType() == OP_SELL) { OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Green); } } }}по идее все можно оставить кроме тикета...а что вместо него писать???С ув. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 12 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 февраля, 2015 kempo всё правильно - в цикле. Про тикет - не понял Ваших сомнений... OrderClose прописана корректно. Ссылка на сообщение Поделиться на другие сайты More sharing options...
denis77515 Опубликовано 12 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 февраля, 2015 Можно сделать так: Использовать вvoid OnTick(){if(Условие на закрытие)Close_Orders(Magic,OP_BUY);if(Условие на закрытие)Close_Orders(Magic,OP_SELL);} Все ордера с закроются по типу и магику. Спойлер [bool Close_Orders(int &mag, int &otype) {bool error = false;int _OR_err = GetLastError(); for (int pos_0 = OrdersTotal() - 1; pos_0 >= 0; pos_0--) { if(OrderSelect(pos_0, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == mag && OrderType() == otype) { if(otype == OP_BUY || otype == OP_SELL) { if (otype == OP_BUY) RefreshRates(); if(!OrderClose(OrderTicket(), OrderLots(), MarketInfo(Symbol(),MODE_BID), Slippage, clrBlue)) error = true; else Print("Ошибка закрытия ордера "+IntegerToString(_OR_err)); if (otype == OP_SELL) RefreshRates(); if(!OrderClose(OrderTicket(), OrderLots(), MarketInfo(Symbol(),MODE_ASK), Slippage, clrRed)) error = true; else Print("Ошибка закрытия ордера "+IntegerToString(_OR_err)); } } Sleep(500); } } return(false); }] Изменено 12 февраля, 2015 пользователем denis77515 Ссылка на сообщение Поделиться на другие сайты More sharing options...
kempo Опубликовано 13 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 февраля, 2015 Ух ты!!! Благодарю Денис)))можно спросить, а для чего вы берете булевую переменную Close_Orders??? Ссылка на сообщение Поделиться на другие сайты More sharing options...
denis77515 Опубликовано 13 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 февраля, 2015 Потому что функция OrderClose(); булевого типа, в случаи успеха она возвращает true в случаи не удачи false почитайте справку. Ссылка на сообщение Поделиться на другие сайты More sharing options...
kempo Опубликовано 13 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 февраля, 2015 Потому что функция OrderClose(); булевого типа, в случаи успеха она возвращает true в случаи не удачи false почитайте справку. Ув. Денис, вроде все сделал как Вы сказали, но у меня при компиляции вылетают ошибки...'OP_BUY' - parameter passed as reference, variable expected dan1.mq4'OP_SELL' - parameter passed as reference, variable expected dan1.mq4в чем может быть проблема???с ув. Ссылка на сообщение Поделиться на другие сайты More sharing options...
denis77515 Опубликовано 13 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 февраля, 2015 сделай такint op_buy = -1, op_sell = -1;int OnInit(){if(op_buy {op_buy = OP_BUY;op_sell = OP_SELL;}}void OnTick(){ Close_Orders(Magic,op_buy ) Close_Orders(Magic,op_sell )} Изменено 13 февраля, 2015 пользователем denis77515 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 13 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 февраля, 2015 denis77515 извини, но это не решение. надо разбираться в причинах возникновения ошибки.ошибка заключается (имхо) в передаче аргумента в функцию по ссылке, т.е. с возможностью модификации, а константа OP_BUY не подлежит модификации. Т.е. достаточно убрать знак "&" в вызове: bool Close_Orders(int &mag, int &otype) Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти