MQL для тебя
MQL для чайников, программирование на MQL4, MQL5
Вопрос №5 — «Коды ошибок при тестировании советника»
Что значит 2010.02.01 17:00 MyExpert GBPUSD,M15: OrderModify error 130
почему обычно эта ошибка возникает?
Очень много подобных вопросов мне приходит. Поэтому публикую таблицу кодов ошибок. Например посмотрев вышеописанную ошибку error 130 становится понятно, что функция OrderModify пытается изменить стоп-лосс или тейк-профит слишком близко к текущей цене.
Коды ошибок
GetLastError() — функция, возвращающая коды ошибок. Кодовые константы ошибок определены в файле stderror.mqh. Для вывода текстовых сообщений следует использовать функцию ErrorDescription(), определенную в файле stdlib.mqh.
Коды ошибок, возвращаемые торговым сервером или клиентским терминалом:
Значение | Описание |
---|---|
Нет ошибки | |
1 | Нет ошибки, но результат неизвестен |
2 | Общая ошибка |
3 | Неправильные параметры |
4 | Торговый сервер занят |
5 | Старая версия клиентского терминала |
6 | Нет связи с торговым сервером |
7 | Недостаточно прав |
8 | Слишком частые запросы |
9 | Недопустимая операция нарушающая функционирование сервера |
64 | Счет заблокирован |
65 | Неправильный номер счета |
128 | Истек срок ожидания совершения сделки |
129 | Неправильная цена |
130 | Неправильные стопы |
131 | Неправильный объем |
132 | Рынок закрыт |
133 | Торговля запрещена |
134 | Недостаточно денег для совершения операции |
135 | Цена изменилась |
136 | Нет цен |
137 | Брокер занят |
138 | Новые цены |
139 | Ордер заблокирован и уже обрабатывается |
140 | Разрешена только покупка |
141 | Слишком много запросов |
145 | Модификация запрещена, так как ордер слишком близок к рынку |
146 | Подсистема торговли занята |
147 | Использование даты истечения ордера запрещено брокером |
148 | Количество открытых и отложенных ордеров достигло предела, установленного брокером. |
Коды ошибок выполнения MQL4 программы:
Модификация ордера ошибка 130
Всем привет! Советник работает хорошо, но бывает выскакивает ошибка 130 , а бывает не выставляет ТП, бывает очень редко, в основном на движухе и то не всегда. Но это очень напрягает. Вот кусок кода и модификация ордера. NumberOfTry=5 , то есть всего 5 попыток. Понимаю, что цена за это время пока он крутит эти 5 попыток цикле уходит дальше чем ТП+Проскальзывание и потому вылетает эта ошибка 130. Но как сделать, чтобы он открывал по цене какая есть? Хотя тоже понимаю, что цена может рвануть сильно и никакое проскальзывание не спасёт и будет невозможно выставить ТП даже по новой цене или это не так? В общем, помогите опытные товарищи, советом как поступить?!
Всем привет! Советник работает хорошо, но бывает выскакивает ошибка 130 , а бывает не выставляет ТП, бывает очень редко, в основном на движухе и то не всегда. Но это очень напрягает. Вот кусок кода и модификация ордера. NumberOfTry=5 , то есть всего 5 попыток. Понимаю, что цена за это время пока он крутит эти 5 попыток цикле уходит дальше чем ТП+Проскальзывание и потому вылетает эта ошибка 130. Но как сделать, чтобы он открывал по цене какая есть? Хотя тоже понимаю, что цена может рвануть сильно и никакое проскальзывание не спасёт и будет невозможно выставить ТП даже по новой цене или это не так? В общем, помогите опытные товарищи, советом как поступить?!
Добрый день.
замените Аsк на MarketInfo(_Symbol,MODE_ASK)
в большинстве случаев помогает.
а еще можно перенести расчет тейка в цикл перед отправкой запроса на модификацию, так будет лучше, расчет тейка будет происходить по текущим данным цены.
Andrey Kisselyov :
Добрый день.
замените Аsк на MarketInfo(_Symbol,MODE_ASK)
в большинстве случаев помогает.
а еще можно перенести расчет тейка в цикл перед отправкой запроса на модификацию, так будет лучше, расчет тейка будет происходить по текущим данным цены.
Спасибо буду пробовать. Вот что получилось))
OrderModify и error 130 — моделирование по ценам открытия
Позиция на покупку открывается по Аску, а закрывается по Биду. Поэтому прежде всего нужно знать, что при подтягивании стопа нужно работать с ценой бид.
Далее. Если, как Вы утверждаете, подтягивание происходит слишком близко к рынку, то сама логика ситуации подсказывает Вам решение — сначала проверить цену на предмет близости, потом подтягивать, если близость допустимая.
Позиция на покупку открывается по Аску, а закрывается по Биду. Поэтому прежде всего нужно знать, что при подтягивании стопа нужно работать с ценой бид.
Далее. Если, как Вы утверждаете, подтягивание происходит слишком близко к рынку, то сама логика ситуации подсказывает Вам решение — сначала проверить цену на предмет близости, потом подтягивать, если близость допустимая.
Это правильно, если тестировать по тикам (методы «все тики» или «контрольные точки»). А как быть, если тестирование осуществляется «по ценам открытия». Как я уже упомянул, 1,3508 — это цена открытия текущего бара.
Как здесь написано, произойдет сравнение, SL не подтянется, правильно. Теперь следующий запуск функции start() произойдет ЛИШЬ на цене открытия следующего бара (так как метод моделирования по ценам открытия). И SL не будет подтянут. А само тело текущего бара запросто может пробить уровень SL, который не был выставлен.
Error 130, invalid stops
Подскажите пожалуйста, где может быть ошибка у меня в коде.
Я пытаюсь открыть позицию, но получаю ошибку 130 — invalid stops.
iTicket = OrderSend(Symbol(), OP_BUY, e_dLotSize, NormalizeDouble(Ask, Digits), 10, 0.0,
NormalizeDouble(dMABidMain + dSpreadCurr * e_dTakeProfitInSpreads, Digits));
if (iTicket > 0)
<
Print(g_strInf, «Opened new BUY positions #», iTicket,
«, Ask=», DoubleToStr(Ask, Digits),
«, Bid=», DoubleToStr(Bid, Digits),
«, OpenPrice=», DoubleToStr(Ask, Digits),
«, TakeProfit=», DoubleToStr(dMABidMain + dSpreadCurr * e_dTakeProfitInSpreads, Digits),
«, LotSize=», e_dLotSize
);
>
else
<
iErrorCode = GetLastError();
dNewStopLevel = MarketInfo(Symbol(), MODE_STOPLEVEL);
dNewFreezeLevel = MarketInfo(Symbol(), MODE_FREEZELEVEL);
Print(g_strErr, «Failed to open new BUY position»,
«, NewStpLvl=», DoubleToStr(dNewStopLevel, Digits),
«, NewFrzLvl=», DoubleToStr(dNewFreezeLevel, Digits),
«, Ask=», DoubleToStr(Ask, Digits),
«, Bid=», DoubleToStr(Bid, Digits),
«, OpenPrice=», DoubleToStr(Ask, Digits),
«, TakeProfit=», DoubleToStr(dMABidMain + dSpreadCurr * e_dTakeProfitInSpreads, Digits),
«, LotSize=», e_dLotSize,
«, ErrCode=», iErrorCode, «, «, ErrorDescription(iErrorCode)
);
>
ERR Failed to open new BUY position, NewStpLvl=0.00000, NewFrzLvl=0.00000, Ask=1.26506, Bid=1.26432, OpenPrice=1.26506, TakeProfit=1.26573, LotSize=0.1, ErrCode=130, invalid stops
Видно, что пытаюсь купить по цене Ask. TakeProfit поставлен вроде правильно. И все равно не срабатывает. Может, я где-нибудь Bid/Ask перепутал?
Грешил на StopLevel, но он нулевой. Может нельзя выставлять уровень Take Profit одновременно с открытием позиции?
Как узнать в чем проблема?
Можно предположить, что с момента получения тика цены Bid/Ask изменились, но ведь тогда ошибка должна быть уже другой, верно?
Или нельзя не указывать stop loss (ставить нулевым) при задании take profit?
MQL для тебя
MQL для чайников, программирование на MQL4, MQL5
Вопрос №5 — «Коды ошибок при тестировании советника»
Что значит 2010.02.01 17:00 MyExpert GBPUSD,M15: OrderModify error 130
почему обычно эта ошибка возникает?
Очень много подобных вопросов мне приходит. Поэтому публикую таблицу кодов ошибок. Например посмотрев вышеописанную ошибку error 130 становится понятно, что функция OrderModify пытается изменить стоп-лосс или тейк-профит слишком близко к текущей цене.
Коды ошибок
GetLastError() — функция, возвращающая коды ошибок. Кодовые константы ошибок определены в файле stderror.mqh. Для вывода текстовых сообщений следует использовать функцию ErrorDescription(), определенную в файле stdlib.mqh.
Коды ошибок, возвращаемые торговым сервером или клиентским терминалом:
Значение | Описание |
---|---|
Нет ошибки | |
1 | Нет ошибки, но результат неизвестен |
2 | Общая ошибка |
3 | Неправильные параметры |
4 | Торговый сервер занят |
5 | Старая версия клиентского терминала |
6 | Нет связи с торговым сервером |
7 | Недостаточно прав |
8 | Слишком частые запросы |
9 | Недопустимая операция нарушающая функционирование сервера |
64 | Счет заблокирован |
65 | Неправильный номер счета |
128 | Истек срок ожидания совершения сделки |
129 | Неправильная цена |
130 | Неправильные стопы |
131 | Неправильный объем |
132 | Рынок закрыт |
133 | Торговля запрещена |
134 | Недостаточно денег для совершения операции |
135 | Цена изменилась |
136 | Нет цен |
137 | Брокер занят |
138 | Новые цены |
139 | Ордер заблокирован и уже обрабатывается |
140 | Разрешена только покупка |
141 | Слишком много запросов |
145 | Модификация запрещена, так как ордер слишком близок к рынку |
146 | Подсистема торговли занята |
147 | Использование даты истечения ордера запрещено брокером |
148 | Количество открытых и отложенных ордеров достигло предела, установленного брокером. |
Коды ошибок выполнения MQL4 программы: