Помогите, ошибка 130 при попытке открыть Sell

 

Помогите, советник все время выдает ошибку 130 при попытке открыть Sell. При этом при попытке открыть Buy, выдал ошибку 130 один раз и после ни разу не выдавал, сколько я не присоединял советника к графику. Вот и получается, что все Buy он открывает, а Sell не может. Что это может быть.

// ---- открытие ордеров ---------------------------------------------//

while(true) // цикл закрытия ордера
{
if (Total==0 && Opn_B==true) // открытых ордеров нет +
{ // критерий на открытие Buy
RefreshRates(); // обновление данных
SL=Bid - StopLoss*Point; // вычисление SL открываемого ордера
Alert("Попытка открыть Buy. Ожидание ответа..");
Ticket=OrderSend(Symb,OP_BUY,Lots,Ask,3,SL,Green); //открытие Buy
if (Ticket > 0) // получилось
{
Alert ("Открыт ордер Buy ",Ticket);
return; // выход из функции start()
}
if (Fun_Error(GetLastError())==1) // обработка ошибок
continue; // повторная попытка
return; // выход из функции start()
}
if (Total==0 && Opn_S==true) // открытых ордеров нет +
{ // критерий на открытие Sell
RefreshRates(); // обновление данных
SL=Ask + StopLoss*Point; // вычисление SL откр.
Alert("Попытка открыть Sell. Ожидание ответа..");
Ticket=OrderSend(Symb,OP_SELL,Lots,Bid,3,SL,Green); //открытие Sell
if (Ticket > 0) // получилось
{
Alert ("Открыт ордер Sell ",Ticket);
return; // выход из функции start()
}
if (Fun_Error(GetLastError())==1) // обработка ошибок
continue; // повторная попытка
return; // выход из функции start()
}
break; // выход из функции while
}

// ---------------------------------------------------------------------//

 
Ошибка 130 - это неправилные стопи, вот и подумайте сами.
 

Константа Значение Описание
ERR_NO_ERROR 0 Нет ошибки
ERR_NO_RESULT 1 Нет ошибки, но результат неизвестен
ERR_COMMON_ERROR 2 Общая ошибка
ERR_INVALID_TRADE_PARAMETERS 3 Неправильные параметры
ERR_SERVER_BUSY 4 Торговый сервер занят
ERR_OLD_VERSION 5 Старая версия клиентского терминала
ERR_NO_CONNECTION 6 Нет связи с торговым сервером
ERR_NOT_ENOUGH_RIGHTS 7 Недостаточно прав
ERR_TOO_FREQUENT_REQUESTS 8 Слишком частые запросы
ERR_MALFUNCTIONAL_TRADE 9 Недопустимая операция нарушающая функционирование сервера
ERR_ACCOUNT_DISABLED 64 Счет заблокирован
ERR_INVALID_ACCOUNT 65 Неправильный номер счета
ERR_TRADE_TIMEOUT 128 Истек срок ожидания совершения сделки
ERR_INVALID_PRICE 129 Неправильная цена
ERR_INVALID_STOPS 130 Неправильные стопы
ERR_INVALID_TRADE_VOLUME 131 Неправильный объем
ERR_MARKET_CLOSED 132 Рынок закрыт
ERR_TRADE_DISABLED 133 Торговля запрещена
ERR_NOT_ENOUGH_MONEY 134 Недостаточно денег для совершения операции
ERR_PRICE_CHANGED 135 Цена изменилась
ERR_OFF_QUOTES 136 Нет цен
ERR_BROKER_BUSY 137 Брокер занят
ERR_REQUOTE 138 Новые цены
ERR_ORDER_LOCKED 139 Ордер заблокирован и уже обрабатывается
ERR_LONG_POSITIONS_ONLY_ALLOWED 140 Разрешена только покупка
ERR_TOO_MANY_REQUESTS 141 Слишком много запросов
ERR_TRADE_MODIFY_DENIED 145 Модификация запрещена, так как ордер слишком близок к рынку
ERR_TRADE_CONTEXT_BUSY 146 Подсистема торговли занята
ERR_TRADE_EXPIRATION_DENIED 147 Использование даты истечения ордера запрещено брокером
ERR_TRADE_TOO_MANY_ORDERS 148 Количество открытых и отложенных ордеров достигло предела, установленного брокером.


{ // критерий на открытие Sell
RefreshRates(); // обновление данных
SL=Ask + StopLoss*Point; // вычисление SL откр.

Исправте на: SL=Bid + StopLoss*Point; // вычисление SL откр.

 
Axioss писал(а) >>

... Что это может быть.

ERR_INVALID_STOPS 130 Слишком близкие стопы или неправильно рассчитанные или ненормализованные цены в стопах (или в цене открытия отложенного ордера). Попытку можно повторять только в том случае, если ошибка произошла из-за устаревания цены. Необходимо после задержки от 5 секунд обновить данные при помощи функции RefreshRates и повторить попытку. Если ошибка не исчезает, необходимо прекратить все попытки торговых операций и изменить логику программы.

P.S. В Вашем варианте это или Слишком близкие стопы или ненормализованные цены в стопах или и то и другое.

См. также

MODE_STOPLEVEL 14 Минимально допустимый уровень стоп-лосса/тейк-профита в пунктах

 

В команде OrderSend после SL должно стоять значение для TP.

 

да, что тут скажешь ... rtfm

 
WWer писал(а) >>
Ошибка 130 - это неправилные стопи, вот и подумайте сами.

То, что это неправильные стопы, я знаю. Я пробывал и нормализовывать цену, и RefreshRates есть, так на Buy то все нормально, а на Sell - ошибка 130 и все тут, хотя мой SL очень далек от StopLevel

 
BARS писал(а) >>

Константа Значение Описание
ERR_NO_ERROR 0 Нет ошибки
ERR_NO_RESULT 1 Нет ошибки, но результат неизвестен
ERR_COMMON_ERROR 2 Общая ошибка
ERR_INVALID_TRADE_PARAMETERS 3 Неправильные параметры
ERR_SERVER_BUSY 4 Торговый сервер занят
ERR_OLD_VERSION 5 Старая версия клиентского терминала
ERR_NO_CONNECTION 6 Нет связи с торговым сервером
ERR_NOT_ENOUGH_RIGHTS 7 Недостаточно прав
ERR_TOO_FREQUENT_REQUESTS 8 Слишком частые запросы
ERR_MALFUNCTIONAL_TRADE 9 Недопустимая операция нарушающая функционирование сервера
ERR_ACCOUNT_DISABLED 64 Счет заблокирован
ERR_INVALID_ACCOUNT 65 Неправильный номер счета
ERR_TRADE_TIMEOUT 128 Истек срок ожидания совершения сделки
ERR_INVALID_PRICE 129 Неправильная цена
ERR_INVALID_STOPS 130 Неправильные стопы
ERR_INVALID_TRADE_VOLUME 131 Неправильный объем
ERR_MARKET_CLOSED 132 Рынок закрыт
ERR_TRADE_DISABLED 133 Торговля запрещена
ERR_NOT_ENOUGH_MONEY 134 Недостаточно денег для совершения операции
ERR_PRICE_CHANGED 135 Цена изменилась
ERR_OFF_QUOTES 136 Нет цен
ERR_BROKER_BUSY 137 Брокер занят
ERR_REQUOTE 138 Новые цены
ERR_ORDER_LOCKED 139 Ордер заблокирован и уже обрабатывается
ERR_LONG_POSITIONS_ONLY_ALLOWED 140 Разрешена только покупка
ERR_TOO_MANY_REQUESTS 141 Слишком много запросов
ERR_TRADE_MODIFY_DENIED 145 Модификация запрещена, так как ордер слишком близок к рынку
ERR_TRADE_CONTEXT_BUSY 146 Подсистема торговли занята
ERR_TRADE_EXPIRATION_DENIED 147 Использование даты истечения ордера запрещено брокером
ERR_TRADE_TOO_MANY_ORDERS 148 Количество открытых и отложенных ордеров достигло предела, установленного брокером.

{ // критерий на открытие Sell
RefreshRates(); // обновление данных
SL=Ask + StopLoss*Point; // вычисление SL откр.

Исправте на: SL=Bid + StopLoss*Point; // вычисление SL откр.

Спасибо, помогло. Открывает чудно. Я вроде пробовал так, как вы написали, и у меня ничего не получалось. Но. раз получилось сейчас, значит так пробовал.

P.S. Поставил советника (долго пробовал его разные варианты) в воскресенье ночью по GBP/JPY. Сегодня вторник. С начала недели на 4-х часовых свечах отмечается три ярко выраженных движения: первое - вверх, второе - вниз, и, соответственно, которое сейчас - вверх. Советник открылся четыре раза: три сделки (включая открытую) - + 1800 пунктов. одна в минусе - 26 пунктов. Класс. На прошлой неделе ставил на демо без стопов (по известной причине), собрал более 5000 пунктов. И это только по одной паре (хотя советник под нее и затачивался). Хороших профитов.

 
Axioss писал(а) >>

То, что это неправильные стопы, я знаю. Я пробывал и нормализовывать цену, и RefreshRates есть, так на Buy то все нормально, а на Sell - ошибка 130 и все тут, хотя мой SL очень далек от StopLevel

Как уже написали - TP забыт

Ticket=OrderSend(Symb,OP_SELL,Lots,Bid,3,SL, TP, Green); //открытие Sell
Но видимо проблема не в этом?

Я сделал так

sl1 = NormalizeDouble(Bid + MLockSL * Point,Digits);
if (MLockSL <= 0) sl1 = NormalizeDouble(0,Digits);
tp1 = NormalizeDouble(Bid - MLockTP * Point,Digits);
if (MLockTP <= 0) tp1 = NormalizeDouble(0,Digits);

Balancelots = NormalizeDouble(Balancelots,Digits);

Comment ("155: Balancelots=",Balancelots);
Alert ("155: Пытаюсь залочить buy! Balancelots=",Balancelots," SL1=",sl1," TP1=",tp1);

LockTicketB=OrderSend(Symbol(),OP_SELL,Balancelots,Bid,Slippage,sl1,tp1,"225:залочили buy",362,0,Magenta); // лочим buy
if(LockTicketB<0)
     {
      LockBuy =0;
      Print("165: Не смог залочить buy ",ErrorDescription(GetLastError()));
      Alert ("165: Не смог залочить buy! Balancelots=",Balancelots," SL1=",sl1," TP1=",tp1,"Bid=",Bid);
     }
     else
     Alert ("166: Залочил buy! Balancelots=",Balancelots," SL1=",sl1," TP1=",tp1,"Bid=",Bid);
 
Roger писал(а) >>

В команде OrderSend после SL должно стоять значение для TP.

Спасибо, также помогло. Еще надо было параметр string добавить кроме TP. В первом варианте советника я ставил TP (как 0) и коммент (как " "), а во втором варианте, так как TP мне вообще не нужен, я его убрал, вместе с комментом, вот и вышла запарка. Невнимательность!

 
Talex писал(а) >>

P.S. В Вашем варианте это или Слишком близкие стопы или ненормализованные цены в стопах или и то и другое.

У меня сегодня тоже возникла проблема с ошибкой 130.

Мой советник при открытии нового бара делает перерасчет параметров, удаляет старые отложенники и устанавливает новые (система пробойная). Раньше таких проблем не было, но сегодня он начал выбивать ошибку 130 и писать, что торговля запрещена. В тот момент (это было в 10:00 по ГТМ+1) рыночная цена находилась от цены открытия ордера на расстоянии 36,5 пунктов. В советнике, правда, фриз-левел не учтен, но ведь и значение в 36,5 пипсов – многовато для ф-л, или нет?

Советник без устали лупил ошибку и я его снес, но даже и вручную не удавалось ордер удалить. Перезапустил МТ и только через пару минут удалил вручную. С чем это может быть связано?

З.Ы. дц – Альпари.

Причина обращения: