Судя по логам, надо смотреть, что показывает
SymbolInfoInteger(_Symbol, SYMBOL_TRADE_FREEZE_LEVEL);
Я не могу увидеть, этот параметр при тестировании валидатором Маркет.
К тому же, ругает ордер BUY открытый по курсу 1.11800 при попытке закрытия на уровне 1.11989.
То есть получается
SymbolInfoInteger(_Symbol, SYMBOL_TRADE_FREEZE_LEVEL);
Должен показывать значение больше чем 189?
Для закрытия позиции использую класс CTrade: m_trade.PositionClose(m_position.Ticket())
Я не могу увидеть, этот параметр при тестировании валидатором Маркет.
К тому же, ругает ордер BUY открытый по курсу 1.11800 при попытке закрытия на уровне 1.11989.
То есть получается
Должен показывать значение больше чем 189?
Для закрытия позиции использую класс CTrade: m_trade.PositionClose(m_position.Ticket())
Вот, попробовал еще раз и получил:
test on EURUSD,H1 (hedging) 2020.04.07 09:57:37 failed instant sell 1.05 EURUSD at 1.08568, close #36 buy 1.05 EURUSD 1.08501 [Modification failed due to order or position being close to market] 2020.04.07 09:57:37 failed instant sell 0.65 EURUSD at 1.08568, close #35 buy 0.65 EURUSD 1.08440 [Modification failed due to order or position being close to market] 2020.04.07 09:57:37 failed instant sell 0.4 EURUSD at 1.08568, close #34 buy 0.4 EURUSD 1.08381 [Modification failed due to order or position being close to market] 2020.04.08 09:04:28 failed instant buy 1.05 EURUSD at 1.08434, close #53 sell 1.05 EURUSD 1.08500 [Modification failed due to order or position being close to market] 2020.04.08 09:04:28 failed instant buy 0.65 EURUSD at 1.08434, close #52 sell 0.65 EURUSD 1.08560 [Modification failed due to order or position being close to market] 2020.04.08 09:04:28 failed instant buy 0.4 EURUSD at 1.08434, close #51 sell 0.4 EURUSD 1.08620 [Modification failed due to order or position being close to market] 2020.04.13 13:13:40 failed instant buy 1.05 EURUSD at 1.09081, close #77 sell 1.05 EURUSD 1.09147 [Modification failed due to order or position being close to market] 2020.04.13 13:13:40 failed instant buy 0.65 EURUSD at 1.09081, close #76 sell 0.65 EURUSD 1.09207 [Modification failed due to order or position being close to market] 2020.04.13 13:13:40 failed instant buy 0.4 EURUSD at 1.09081, close #75 sell 0.4 EURUSD 1.09267 [Modification failed due to order or position being close to market] 2020.04.15 11:04:36 failed instant buy 1.05 EURUSD at 1.09269, close #94 sell 1.05 EURUSD 1.09336 [Modification failed due to order or position being close to market] 2020.04.15 11:04:36 failed instant buy 0.65 EURUSD at 1.09269, close #93 sell 0.65 EURUSD 1.09396 [Modification failed due to order or position being close to market] 2020.04.15 11:04:36 failed instant buy 0.4 EURUSD at 1.09269, close #92 sell 0.4 EURUSD 1.09454 [Modification failed due to order or position being close to market] 2020.05.04 17:13:41 failed instant buy 1.05 EURUSD at 1.09209, close #161 sell 1.05 EURUSD 1.09275 [Modification failed due to order or position being close to market] 2020.05.04 17:13:41 failed instant buy 0.65 EURUSD at 1.09209, close #160 sell 0.65 EURUSD 1.09335 [Modification failed due to order or position being close to market] 2020.05.04 17:13:41 failed instant buy 0.4 EURUSD at 1.09209, close #159 sell 0.4 EURUSD 1.09396 [Modification failed due to order or position being close to market] 2020.05.12 15:12:36 failed instant sell 1.05 EURUSD at 1.08570, close #210 buy 1.05 EURUSD 1.08505 [Modification failed due to order or position being close to market] 2020.05.12 15:12:36 failed instant sell 0.65 EURUSD at 1.08570, close #209 buy 0.65 EURUSD 1.08444 [Modification failed due to order or position being close to market] 2020.05.12 15:12:36 failed instant sell 0.4 EURUSD at 1.08570, close #208 buy 0.4 EURUSD 1.08384 [Modification failed due to order or position being close to market] 2020.05.13 17:52:26 failed instant buy 1.05 EURUSD at 1.08480, close #228 sell 1.05 EURUSD 1.08532 [Modification failed due to order or position being close to market] 2020.05.13 17:52:26 failed instant buy 0.65 EURUSD at 1.08480, close #227 sell 0.65 EURUSD 1.08591 [Modification failed due to order or position being close to market] 2020.05.13 17:52:26 failed instant buy 0.4 EURUSD at 1.08480, close #226 sell 0.4 EURUSD 1.08652 [Modification failed due to order or position being close to market] strategy tester report 296 total trades
У ордера TP установлен?
Мне трудно ответить однозначно, но это возможно.
Никогда не сталкивался с ограничением закрытия ордера при установленном TP
Недоумение вызывает еще и то, что это уже шестая версия советника в которой казалось бы нет критичных изменений.
А предыдущие версии проходили тестирование и публиковались.
Действительно проблема была при модификации или закрытии ордеров с установленными SL или TP близкими к текущей котировке.
Решил частично за счет оптимизации параметров, а также функции проверки перед удалением отложенных ордеров:
//+------------------------------------------------------------------+
//| проверяет дистанцию от цену открытия до цены активации |
//+------------------------------------------------------------------+
#define _Ask SymbolInfoDouble(_Symbol,SYMBOL_ASK)
#define _Bid SymbolInfoDouble(_Symbol,SYMBOL_BID)
bool CheckOrderForFREEZE_LEVEL(ulong ticket)
{
//--- получим уровень SYMBOL_TRADE_FREEZE_LEVEL
int freeze_level=(int)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_FREEZE_LEVEL);
if(freeze_level!=0)
{
//PrintFormat("SYMBOL_TRADE_FREEZE_LEVEL=%d: Нельзя модифицровать ордер"+
// " ближе %d пунктов от цены активации",freeze_level,freeze_level);
}
//--- выберем ордер для работы
if(!OrderSelect(ticket))
{
//--- не удалось выбрать ордер
return(false);
}
//--- получим данные ордера
double price=OrderGetDouble(ORDER_PRICE_OPEN);
double sl=OrderGetDouble(ORDER_SL);
double tp=OrderGetDouble(ORDER_TP);
ENUM_ORDER_TYPE type=(ENUM_ORDER_TYPE)OrderGetInteger(ORDER_TYPE);
//--- результат проверки
bool check=false;
//--- проверяем типа ордера
switch(type)
{
//--- отложенный ордер BuyLimit
case ORDER_TYPE_BUY_LIMIT:
{
//--- проверим дистанцию от цены открытия до цены активации
check=((_Ask-price)>freeze_level*_Point);
//if(!check)
// PrintFormat("Ордер %s #%d нельзя модифицировать: Ask-Open=%d пунктов < SYMBOL_TRADE_FREEZE_LEVEL=%d пунктов",
// EnumToString(type),ticket,(int)((_Ask-price)/_Point),freeze_level);
return(check);
}
//--- отложенный ордер BuyLimit
case ORDER_TYPE_SELL_LIMIT:
{
//--- проверим дистанцию от цены открытия до цены активации
check=((price-_Bid)>freeze_level*_Point);
//if(!check)
// PrintFormat("Ордер %s #%d нельзя модифицировать: Open-Bid=%d пунктов < SYMBOL_TRADE_FREEZE_LEVEL=%d пунктов",
// EnumToString(type),ticket,(int)((price-_Bid)/_Point),freeze_level);
return(check);
}
break;
//--- отложенный ордер BuyStop
case ORDER_TYPE_BUY_STOP:
{
//--- проверим дистанцию от цены открытия до цены активации
check=((price-_Ask)>freeze_level*_Point);
//if(!check)
// PrintFormat("Ордер %s #%d нельзя модифицировать: Ask-Open=%d пунктов < SYMBOL_TRADE_FREEZE_LEVEL=%d пунктов",
// EnumToString(type),ticket,(int)((price-_Ask)/_Point),freeze_level);
return(check);
}
//--- отложенный ордер SellStop
case ORDER_TYPE_SELL_STOP:
{
//--- проверим дистанцию от цены открытия до цены активации
check=((_Bid-price)>freeze_level*_Point);
//if(!check)
// PrintFormat("Ордер %s #%d нельзя модифицировать: Bid-Open=%d пунктов < SYMBOL_TRADE_FREEZE_LEVEL=%d пунктов",
// EnumToString(type),ticket,(int)((_Bid-price)/_Point),freeze_level);
return(check);
}
break;
}
//--- ордер не прошел проверку
return (false);
}
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте, не могу понять причину этих ошибок при публикации советника МТ5 на Маркете:
test on EURUSD,H1 (hedging)
2019.04.08 15:43:35 failed cancel order #26 buy stop 1.3 EURUSD at 1.12556 tp: 1.12671 [Invalid stops]
2019.04.30 11:28:39 failed instant sell 1.05 EURUSD at 1.11989, close #104 buy 1.05 EURUSD 1.11920 [Modification failed due to order or position being close to market]
2019.04.30 11:28:39 failed instant sell 0.65 EURUSD at 1.11989, close #103 buy 0.65 EURUSD 1.11862 [Modification failed due to order or position being close to market]
2019.04.30 11:28:39 failed instant sell 0.4 EURUSD at 1.11989, close #102 buy 0.4 EURUSD 1.11800 [Modification failed due to order or position being close to market]
2019.05.29 10:02:13 failed instant buy 1.05 EURUSD at 1.11548, close #199 sell 1.05 EURUSD 1.11617 [Modification failed due to order or position being close to market]
2019.05.29 10:02:13 failed instant buy 0.65 EURUSD at 1.11548, close #198 sell 0.65 EURUSD 1.11677 [Modification failed due to order or position being close to market]
2019.05.29 10:02:13 failed instant buy 0.4 EURUSD at 1.11548, close #197 sell 0.4 EURUSD 1.11737 [Modification failed due to order or position being close to market]
2019.06.20 04:03:41 failed instant sell 1.05 EURUSD at 1.12612, close #297 buy 1.05 EURUSD 1.12488 [Modification failed due to order or position being close to market]
2019.06.20 04:03:41 failed instant sell 0.65 EURUSD at 1.12612, close #296 buy 0.65 EURUSD 1.12428 [Modification failed due to order or position being close to market]
2019.06.20 04:03:41 failed instant sell 0.4 EURUSD at 1.12612, close #295 buy 0.4 EURUSD 1.12368 [Modification failed due to order or position being close to market]
strategy tester report 149 total trades
Например, получается что в 11:28:39 советник пытается закрыть серию ордеров BUY по курсу 1.11989, выставляя встречные ордера SELL
Значения 1.11920, 1,11862, 1.11800 по видимому цены открытия ордеров BUY, так в чем проблема?