Уважаемые коллеги!
Постоянно высвечивается сообщение о коде возврата 10015 "Не правильно указана цена":
2017.06.02 09:06:00.851 2017.04.26 14:59:59 failed buy stop 1.00 @BR at 51.88 sl: 51.82 [Invalid price]2017.06.02 09:06:00.851 2017.04.26 14:59:59 Alert: Запрос на установку ордера Buy не выполнен - код ошибки:4756
Но цена правильная же - 51.88, два знака после запятой.
Вот код, помогите, пожалуйста, разобраться:
{ Alert("Сейчас: "+(string)tm, "время открывать ордер");
mrequest.action = TRADE_ACTION_PENDING; // отложенное исполнение
mrequest.price=NormalizeDouble(latest_price.ask + Delta*point,digits); // нормализованная цена открытия
mrequest.sl = NormalizeDouble(latest_price.ask - StopLoss*_Point,_Digits); // Stop Loss
mrequest.symbol = _Symbol; // текущий инструмент
mrequest.volume = Lot; // количество лотов для торговли
mrequest.magic = EA_Magic; // Magic Number
mrequest.type = ORDER_TYPE_BUY_STOP; // тип ордера
mrequest.type_filling = ORDER_FILLING_FOK; // тип исполнения ордера - все или ничего
//--- отсылаем ордер
Alert("Цена покупки:",mrequest.price,"!!");
OrderSend(mrequest,mresult);
// анализируем код возврата торгового сервера
if(mresult.retcode==10009 || mresult.retcode==10008) //запрос выполнен или ордер успешно помещен
{ Alert("Ордер Buy успешно помещен, тикет ордера #:",mresult.order,"!!");
}
else
{ Alert("Запрос на установку ордера Buy не выполнен - код ошибки:",GetLastError());
Alert("Код возврата:",mresult.retcode,"!!");
return;
}
}
if(stm.day_of_week==DayOfWeek && stm.hour==OpenHour && stm.min==OpenMin && stm.sec>=OpenSec) { Alert("Сейчас: "+(string)tm,"время открывать ордер"); mrequest.action=TRADE_ACTION_PENDING; // отложенное исполнение mrequest.price=NormalizeDouble(latest_price.ask+Delta*point,digits); // нормализованная цена открытия mrequest.sl = NormalizeDouble(latest_price.ask-StopLoss*_Point,_Digits); // Stop Loss
Вы, когда переменную mrequest.price нормализуете, digits откуда у Вас берется? Какое значение у него?
Вы, когда переменную mrequest.price нормализуете, digits откуда у Вас берется? Какое значение у него?
цена у него нормализована до второго знака, иначе писалось бы другое значение в failed buy stop 1.00 @BR at 51.88 sl: 51.82 [Invalid price]
нужно попробовать открыться на этом инструменте руками в buy со стопом в -0.06 от цены открытия, скорее всего выдаст ту-же ошибку
цена у него нормализована до второго знака, иначе писалось бы другое значение в failed buy stop 1.00 @BR at 51.88 sl: 51.82 [Invalid price]
По предоставленному коду не видно ни тип, ни значения digits. Вы нормализуете ведь, по одному символу, цену открытия - одной переменной, стопы - другой. Устанете так ошибки искать.
А вывод нормализованного вещественного числа не всегда соответствует действительному ее значению, об этом в справке написано.
Выводите еще Bid/Ask цены, и проверяйте для отложенных ордеров уровни заморозки и стоплевел, может в этом причина.
А если зайти в спецификацию символа, что будет в строке "Tick size":
?
По предоставленному коду не видно ни тип, ни значения digits. Вы нормализуете ведь, по одному символу, цену открытия - одной переменной, стопы - другой. Устанете так ошибки искать.
А вывод нормализованного вещественного числа не всегда соответствует действительному ее значению, об этом в справке написано.
Выводите еще Bid/Ask цены, и проверяйте для отложенных ордеров уровни заморозки и стоплевел, может в этом причина.
Я уже разные способы нормализации цены пробовал. Ниже digits привел в соответствие, но результат тот же.
Самое интересное, что этот же код в другом советнике работает без ошибок, на том же самом инструменте, а здесь выдает ошибку 10015. Просто бред какой-то. Есть еще у кого -нибудь мысли по этому поводу?
Да, брокер БКС, может это с ним как-то связано?
2017.06.03 10:22:41.927 2017.03.22 14:59:59 Alert: Сейчас: 2017.03.22 14:59:59 время открывать ордер2017.06.03 10:22:41.927 2017.03.22 14:59:59 Alert: Цена покупки:51.06!!
2017.06.03 10:22:41.927 2017.03.22 14:59:59 failed buy stop 1.00 @BR at 51.06 sl: 51.00 [Invalid price]
2017.06.03 10:22:41.927 2017.03.22 14:59:59 Alert: Запрос на установку ордера Buy не выполнен - код ошибки:4756
2017.06.03 10:22:41.927 2017.03.22 14:59:59 Alert: Код возврата:10015!!
double point=SymbolInfoDouble(_Symbol,SYMBOL_POINT); // размер пункта
int digits=SymbolInfoInteger(_Symbol,SYMBOL_DIGITS); // кол-во знаков после запятой (точность)
if(stm.day_of_week==DayOfWeek && stm.hour==OpenHour && stm.min==OpenMin && stm.sec>=OpenSec)
{
Alert("Сейчас: "+(string)tm, "время открывать ордер");
mrequest.action = TRADE_ACTION_PENDING; // отложенное исполнение
mrequest.price=NormalizeDouble(latest_price.ask + Delta*point,digits); // нормализованная цена открытия
mrequest.sl = NormalizeDouble(latest_price.ask - StopLoss*point,digits); // Stop Loss
mrequest.symbol = _Symbol; // текущий инструмент
mrequest.volume = Lot; // количество лотов для торговли
mrequest.magic = EA_Magic; // Magic Number
mrequest.type = ORDER_TYPE_BUY_STOP; // тип ордера
mrequest.type_filling = ORDER_FILLING_FOK; // тип исполнения ордера - все или ничего
//--- отсылаем ордер
Alert("Цена покупки:",mrequest.price,"!!");
OrderSend(mrequest,mresult);
// анализируем код возврата торгового сервера
if(mresult.retcode==10009 || mresult.retcode==10008) //запрос выполнен или ордер успешно помещен
{
Alert("Ордер Buy успешно помещен, тикет ордера #:",mresult.order,"!!");
}
else
{
Alert("Запрос на установку ордера Buy не выполнен - код ошибки:",GetLastError());
Alert("Код возврата:",mresult.retcode,"!!");
return;
}
}
}
Я уже разные способы нормализации цены пробовал. Ниже digits привел в соответствие, но результат тот же.
Самое интересное, что этот же код в другом советнике работает без ошибок, на том же самом инструменте, а здесь выдает ошибку 10015. Просто бред какой-то. Есть еще у кого -нибудь мысли по этому поводу?
Да, брокер БКС, может это с ним как-то связано?
2017.06.03 10:22:41.927 2017.03.22 14:59:59 Alert: Сейчас: 2017.03.22 14:59:59 время открывать ордер2017.06.03 10:22:41.927 2017.03.22 14:59:59 Alert: Цена покупки:51.06!!
2017.06.03 10:22:41.927 2017.03.22 14:59:59 failed buy stop 1.00 @BR at 51.06 sl: 51.00 [Invalid price]
2017.06.03 10:22:41.927 2017.03.22 14:59:59 Alert: Запрос на установку ордера Buy не выполнен - код ошибки:4756
2017.06.03 10:22:41.927 2017.03.22 14:59:59 Alert: Код возврата:10015!!
double point=SymbolInfoDouble(_Symbol,SYMBOL_POINT); // размер пункта
int digits=SymbolInfoInteger(_Symbol,SYMBOL_DIGITS); // кол-во знаков после запятой (точность)
if(stm.day_of_week==DayOfWeek && stm.hour==OpenHour && stm.min==OpenMin && stm.sec>=OpenSec)
{
Alert("Сейчас: "+(string)tm, "время открывать ордер");
mrequest.action = TRADE_ACTION_PENDING; // отложенное исполнение
mrequest.price=NormalizeDouble(latest_price.ask + Delta*point,digits); // нормализованная цена открытия
mrequest.sl = NormalizeDouble(latest_price.ask - StopLoss*point,digits); // Stop Loss
mrequest.symbol = _Symbol; // текущий инструмент
mrequest.volume = Lot; // количество лотов для торговли
mrequest.magic = EA_Magic; // Magic Number
mrequest.type = ORDER_TYPE_BUY_STOP; // тип ордера
mrequest.type_filling = ORDER_FILLING_FOK; // тип исполнения ордера - все или ничего
//--- отсылаем ордер
Alert("Цена покупки:",mrequest.price,"!!");
OrderSend(mrequest,mresult);
// анализируем код возврата торгового сервера
if(mresult.retcode==10009 || mresult.retcode==10008) //запрос выполнен или ордер успешно помещен
{
Alert("Ордер Buy успешно помещен, тикет ордера #:",mresult.order,"!!");
}
else
{
Alert("Запрос на установку ордера Buy не выполнен - код ошибки:",GetLastError());
Alert("Код возврата:",mresult.retcode,"!!");
return;
}
}
}
проверьте какие данные отдаете на отправку приказов, если вы нормализуете значение до второго знака, это не значит, что это значение в таком виде уйдет в торговую систему, приведите значение стопа и цены к значение размера тика, к примеру стоп у вас не выставится в этом случае:
- значение размера тика == 0.01
- вы отдаете в приказ значение х.хх111
в этом случае получите ту же ошибку, так же посмотрите на близкое расположение стопов и уровней заморозки ))
в любом случае проблема кроется тут 51.06 sl: 51.00 [Invalid price]
проверьте какие данные отдаете на отправку приказов, если вы нормализуете значение до второго знака, это не значит, что это значение в таком виде уйдет в торговую систему, приведите значение стопа и цены к значение размера тика, к примеру стоп у вас не выставится в этом случае:
- значение размера тика == 0.01
- вы отдаете в приказ значение х.хх111
в этом случае получите ту же ошибку, так же посмотрите на близкое расположение стопов и уровней заморозки ))
в любом случае проблема кроется тут 51.06 sl: 51.00 [Invalid price]
Да, действительно. Увеличил значение стопов и дельту к цене, и всё заработало.
Странно только, что при тех же значениях на другом советнике с тем же кодом не выдает ошибку.
Спасибо за помощь, буду приводить к оптимальным заключениям дельта и стопов.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Уважаемые коллеги!
Постоянно высвечивается сообщение о коде возврата 10015 "Не правильно указана цена":
2017.06.02 09:06:00.851 2017.04.26 14:59:59 failed buy stop 1.00 @BR at 51.88 sl: 51.82 [Invalid price]2017.06.02 09:06:00.851 2017.04.26 14:59:59 Alert: Запрос на установку ордера Buy не выполнен - код ошибки:4756
Но цена правильная же - 51.88, два знака после запятой.
Вот код, помогите, пожалуйста, разобраться:
{ Alert("Сейчас: "+(string)tm, "время открывать ордер");
mrequest.action = TRADE_ACTION_PENDING; // отложенное исполнение
mrequest.price=NormalizeDouble(latest_price.ask + Delta*point,digits); // нормализованная цена открытия
mrequest.sl = NormalizeDouble(latest_price.ask - StopLoss*_Point,_Digits); // Stop Loss
mrequest.symbol = _Symbol; // текущий инструмент
mrequest.volume = Lot; // количество лотов для торговли
mrequest.magic = EA_Magic; // Magic Number
mrequest.type = ORDER_TYPE_BUY_STOP; // тип ордера
mrequest.type_filling = ORDER_FILLING_FOK; // тип исполнения ордера - все или ничего
//--- отсылаем ордер
Alert("Цена покупки:",mrequest.price,"!!");
OrderSend(mrequest,mresult);
// анализируем код возврата торгового сервера
if(mresult.retcode==10009 || mresult.retcode==10008) //запрос выполнен или ордер успешно помещен
{ Alert("Ордер Buy успешно помещен, тикет ордера #:",mresult.order,"!!");
}
else
{ Alert("Запрос на установку ордера Buy не выполнен - код ошибки:",GetLastError());
Alert("Код возврата:",mresult.retcode,"!!");
return;
}
}