Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 83

 

Столкнулся с проблемой - при тестировании в определенный момент по непонятным причинам выдается ошибка "invalid stops", но стопы верные.

 Алгоритм  тривиальный - ставится ордер

   MqlTradeResult result = { 0 };
   MqlTradeRequest request = { 0 };
   
   double price = SymbolInfoDouble(_Symbol, isBuy ? SYMBOL_ASK : SYMBOL_BID);
   double sl = price - lvl * _Point;
   double tp = price + lvl * _Point;

   request.action = TRADE_ACTION_DEAL;
   request.magic = magic;
   request.symbol = _Symbol;
   request.volume = lot;
   request.price = price;
   request.deviation = deviation;
   request.type = isBuy ? ORDER_TYPE_BUY : ORDER_TYPE_SELL;

   OrderSend(request, result);

   order = result.order;
   
   if (order)
   {   
      ZeroMemory(result);
      ZeroMemory(request);

      request.action = TRADE_ACTION_SLTP;
      request.order = order;
      request.symbol = _Symbol;
      request.sl = isBuy ? sl : tp;
      request.tp = isBuy ? tp : sl;

      if (!OrderSend(request, result))
      {
         Print(" --- Can not modify order --- error = " + GetLastError() + " order = " + order + " price = " + price);
      }
   }

 когда он закрывается повторяем процедуру

 

В итоге вот что вышло (начали 2010.05.01):

2013.01.16 13:22:16     Core 1  2011.03.18 21:59:00    --- Can not modify order --- error = 4756 order = 4720 price = 1.41795
2013.01.16 13:22:16     Core 1  2011.03.18 21:59:00   failed modify sell 0.10 EURUSD sl: 0.00000, tp: 0.00000 -> sl: 1.42095, tp: 1.41495 [Invalid stops]
2013.01.16 13:22:16     Core 1  2011.03.18 21:59:00   order performed sell 0.10 at 1.41795 [#4720 sell 0.10 EURUSD at 1.41795]
2013.01.16 13:22:16     Core 1  2011.03.18 21:59:00   deal performed [#4720 sell 0.10 EURUSD at 1.41795]
2013.01.16 13:22:16     Core 1  2011.03.18 21:59:00   deal #4720 sell 0.10 EURUSD at 1.41795 done (based on order #4720)
2013.01.16 13:22:16     Core 1  2011.03.18 21:59:00   exchange sell 0.10 EURUSD at 1.41795 (1.41795 / 1.42399 / 1.41795)
2013.01.16 13:22:16     Core 1  2011.03.18 21:59:00   order performed buy 0.10 at 1.42003 [#4719 buy 0.10 EURUSD at 1.42003]
2013.01.16 13:22:16     Core 1  2011.03.18 21:59:00   deal performed [#4719 buy 0.10 EURUSD at 1.42003]
2013.01.16 13:22:16     Core 1  2011.03.18 21:59:00   deal #4719 buy 0.10 EURUSD at 1.42003 done (based on order #4719)
2013.01.16 13:22:16     Core 1  2011.03.18 21:59:00   stop loss triggered sell 0.10 EURUSD 1.41703 sl: 1.42003 tp: 1.41403 [#4719 buy 0.10 EURUSD at 1.42003]
2013.01.16 13:22:16     Core 1  2011.03.18 17:37:33   position modified [sell 0.10 EURUSD 1.41703 sl: 1.42003 tp: 1.41403]
2013.01.16 13:22:16     Core 1  2011.03.18 17:37:33   order performed sell 0.10 at 1.41703 [#4718 sell 0.10 EURUSD at 1.41703]
2013.01.16 13:22:16     Core 1  2011.03.18 17:37:33   deal performed [#4718 sell 0.10 EURUSD at 1.41703]
2013.01.16 13:22:16     Core 1  2011.03.18 17:37:33   deal #4718 sell 0.10 EURUSD at 1.41703 done (based on order #4718)
2013.01.16 13:22:16     Core 1  2011.03.18 17:37:33   exchange sell 0.10 EURUSD at 1.41703 (1.41703 / 1.41711 / 1.41703)
2013.01.16 13:22:16     Core 1  2011.03.18 17:37:33   order performed buy 0.10 at 1.41711 [#4717 buy 0.10 EURUSD at 1.41711]
2013.01.16 13:22:16     Core 1  2011.03.18 17:37:33   deal performed [#4717 buy 0.10 EURUSD at 1.41711]
2013.01.16 13:22:16     Core 1  2011.03.18 17:37:33   deal #4717 buy 0.10 EURUSD at 1.41711 done (based on order #4717)
2013.01.16 13:22:16     Core 1  2011.03.18 17:37:33   stop loss triggered sell 0.10 EURUSD 1.41411 sl: 1.41711 tp: 1.41111 [#4717 buy 0.10 EURUSD at 1.41711]
2013.01.16 13:22:16     Core 1  2011.03.18 13:29:27   position modified [sell 0.10 EURUSD 1.41411 sl: 1.41711 tp: 1.41111]
2013.01.16 13:22:16     Core 1  2011.03.18 13:29:27   order performed sell 0.10 at 1.41411 [#4716 sell 0.10 EURUSD at 1.41411]
2013.01.16 13:22:16     Core 1  2011.03.18 13:29:27   deal performed [#4716 sell 0.10 EURUSD at 1.41411]
2013.01.16 13:22:16     Core 1  2011.03.18 13:29:27   deal #4716 sell 0.10 EURUSD at 1.41411 done (based on order #4716)
2013.01.16 13:22:16     Core 1  2011.03.18 13:29:27   exchange sell 0.10 EURUSD at 1.41411 (1.41411 / 1.41420 / 1.41411)
2013.01.16 13:22:16     Core 1  2011.03.18 13:29:27   order performed buy 0.10 at 1.41420 [#4715 buy 0.10 EURUSD at 1.41420]
2013.01.16 13:22:16     Core 1  2011.03.18 13:29:27   deal performed [#4715 buy 0.10 EURUSD at 1.41420]
2013.01.16 13:22:16     Core 1  2011.03.18 13:29:27   deal #4715 buy 0.10 EURUSD at 1.41420 done (based on order #4715)
2013.01.16 13:22:16     Core 1  2011.03.18 13:29:27   stop loss triggered sell 0.10 EURUSD 1.41120 sl: 1.41420 tp: 1.40820 [#4715 buy 0.10 EURUSD at 1.41420]
2013.01.16 13:22:16     Core 1  2011.03.18 11:56:13   position modified [sell 0.10 EURUSD 1.41120 sl: 1.41420 tp: 1.40820]
2013.01.16 13:22:16     Core 1  2011.03.18 11:56:13   order performed sell 0.10 at 1.41120 [#4714 sell 0.10 EURUSD at 1.41120]
2013.01.16 13:22:16     Core 1  2011.03.18 11:56:13   deal performed [#4714 sell 0.10 EURUSD at 1.41120]
2013.01.16 13:22:16     Core 1  2011.03.18 11:56:13   deal #4714 sell 0.10 EURUSD at 1.41120 done (based on order #4714)
2013.01.16 13:22:16     Core 1  2011.03.18 11:56:13   exchange sell 0.10 EURUSD at 1.41120 (1.41120 / 1.41126 / 1.41120)
2013.01.16 13:22:16     Core 1  2011.03.18 11:56:13   order performed buy 0.10 at 1.41126 [#4713 buy 0.10 EURUSD at 1.41126]
2013.01.16 13:22:16     Core 1  2011.03.18 11:56:13   deal performed [#4713 buy 0.10 EURUSD at 1.41126]
2013.01.16 13:22:16     Core 1  2011.03.18 11:56:13   deal #4713 buy 0.10 EURUSD at 1.41126 done (based on order #4713)
2013.01.16 13:22:16     Core 1  2011.03.18 11:56:13   stop loss triggered sell 0.10 EURUSD 1.40826 sl: 1.41126 tp: 1.40526 [#4713 buy 0.10 EURUSD at 1.41126]
2013.01.16 13:22:16     Core 1  2011.03.18 11:00:28   position modified [sell 0.10 EURUSD 1.40826 sl: 1.41126 tp: 1.40526]
2013.01.16 13:22:16     Core 1  2011.03.18 11:00:28   order performed sell 0.10 at 1.40826 [#4712 sell 0.10 EURUSD at 1.40826]
2013.01.16 13:22:16     Core 1  2011.03.18 11:00:28   deal performed [#4712 sell 0.10 EURUSD at 1.40826]
2013.01.16 13:22:16     Core 1  2011.03.18 11:00:28   deal #4712 sell 0.10 EURUSD at 1.40826 done (based on order #4712)
2013.01.16 13:22:16     Core 1  2011.03.18 11:00:28   exchange sell 0.10 EURUSD at 1.40826 (1.40826 / 1.40835 / 1.40826)
2013.01.16 13:22:16     Core 1  2011.03.18 11:00:28   order performed buy 0.10 at 1.40832 [#4711 buy 0.10 EURUSD at 1.40832]
2013.01.16 13:22:16     Core 1  2011.03.18 11:00:28   deal performed [#4711 buy 0.10 EURUSD at 1.40832]
2013.01.16 13:22:16     Core 1  2011.03.18 11:00:28   deal #4711 buy 0.10 EURUSD at 1.40832 done (based on order #4711)
2013.01.16 13:22:16     Core 1  2011.03.18 11:00:28   stop loss triggered sell 0.10 EURUSD 1.40532 sl: 1.40832 tp: 1.40232 [#4711 buy 0.10 EURUSD at 1.40832]
2013.01.16 13:22:16     Core 1  2011.03.18 09:56:28   position modified [sell 0.10 EURUSD 1.40532 sl: 1.40832 tp: 1.40232]
2013.01.16 13:22:16     Core 1  2011.03.18 09:56:28   order performed sell 0.10 at 1.40532 [#4710 sell 0.10 EURUSD at 1.40532]
2013.01.16 13:22:16     Core 1  2011.03.18 09:56:28   deal performed [#4710 sell 0.10 EURUSD at 1.40532]
2013.01.16 13:22:16     Core 1  2011.03.18 09:56:28   deal #4710 sell 0.10 EURUSD at 1.40532 done (based on order #4710)
2013.01.16 13:22:16     Core 1  2011.03.18 09:56:28   exchange sell 0.10 EURUSD at 1.40532 (1.40532 / 1.40542 / 1.40532)
2013.01.16 13:22:16     Core 1  2011.03.18 09:56:28   order performed buy 0.10 at 1.40543 [#4709 buy 0.10 EURUSD at 1.40543]
2013.01.16 13:22:16     Core 1  2011.03.18 09:56:28   deal performed [#4709 buy 0.10 EURUSD at 1.40543]
2013.01.16 13:22:16     Core 1  2011.03.18 09:56:28   deal #4709 buy 0.10 EURUSD at 1.40543 done (based on order #4709)
2013.01.16 13:22:16     Core 1  2011.03.18 09:56:28   take profit triggered sell 0.10 EURUSD 1.40843 sl: 1.41143 tp: 1.40543 [#4709 buy 0.10 EURUSD at 1.40543]
2013.01.16 13:22:16     Core 1  2011.03.18 09:00:37   position modified [sell 0.10 EURUSD 1.40843 sl: 1.41143 tp: 1.40543]
2013.01.16 13:22:16     Core 1  2011.03.18 09:00:37   order performed sell 0.10 at 1.40843 [#4708 sell 0.10 EURUSD at 1.40843]
2013.01.16 13:22:16     Core 1  2011.03.18 09:00:37   deal performed [#4708 sell 0.10 EURUSD at 1.40843]
2013.01.16 13:22:16     Core 1  2011.03.18 09:00:37   deal #4708 sell 0.10 EURUSD at 1.40843 done (based on order #4708)
2013.01.16 13:22:16     Core 1  2011.03.18 09:00:37   exchange sell 0.10 EURUSD at 1.40843 (1.40843 / 1.40852 / 1.40843)
...

 В чем может быть дело? (на тот момент свободно было 80% депозита)

 
Forux: Столкнулся с проблемой - при тестировании в определенный момент по непонятным причинам выдается ошибка "invalid stops", но стопы верные.

В итоге вот что вышло (начали 2010.05.01):

 В чем может быть дело? (на тот момент свободно было 80% депозита)

Сообщение об ошибке выскакивает в ответ на модификацию позиции. При этом в коде нет проверки на допустимое расстояние уровней  sl/tp от текущей цены. Может случиться так, что за время обработки двух торговых запросов текущая рыночная цена приблизится к уровням sl или tp на расстояние меньшее, чем разрешено сервером. Посмотрите в Справочнике ORDER_STOPS_LEVEL 
 
Yedelkin:
Сообщение об ошибке выскакивает в ответ на модификацию позиции. При этом в коде нет проверки на допустимое расстояние уровней  sl/tp от текущей цены. Может случиться так, что за время обработки двух торговых запросов текущая рыночная цена приблизилась к уровням sl или tp на расстояние, меньшее, чем разрешено сервером. Посмотрите в Справочнике ORDER_STOPS_LEVEL 

 Внес изменения в код для проверки:

price = SymbolInfoDouble(_Symbol, isBuy ? SYMBOL_ASK : SYMBOL_BID);
Print(" --- Can not modify order --- error = " + GetLastError() + " order = " + order + " price = " + price);

 в итоге строка об ошибке не поменялась (то есть цена не поменялась). Да и не могла скорее всего, это тестирование за два с половиной года на минутках, на истории alpari (98% качество истории). 

Больше похоже на какую то ошибку самого метатрейдера, так как до этого происходило ровно то же, но ошибки не было. 

 
Forux: Внес изминения в код для проверки:
Ну а проверку на допустимый отступ тоже сделали?
 
Yedelkin:
Ну а проверку на допустимый отступ тоже сделали?
Yedelkin
:

Ну а проверку на допустимый отступ тоже сделали?

Допустимое расстояние на тесте 0 выдает. Да и цена же не поменялась, после ошибки она такая же как и та по которой ордер создавался, еще до модификации. 

price = SymbolInfoDouble(_Symbol, isBuy ? SYMBOL_ASK : SYMBOL_BID);
Print("SymbolInfoInteger(_Symbol, SYMBOL_TRADE_STOPS_LEVEL) == " + SymbolInfoInteger(_Symbol, SYMBOL_TRADE_STOPS_LEVEL));
Print(" --- Can not modify order --- error = " + GetLastError() + " isBuy = " + isBuy + " order = " + order +  " price = " + price);

 лог

2013.01.16 14:32:28     Core 1  2011.03.18 21:59:00    --- Can not modify order --- error = 4756 isBuy = false order = 4720 price = 1.41795
2013.01.16 14:32:28     Core 1  2011.03.18 21:59:00   SymbolInfoInteger(_Symbol, SYMBOL_TRADE_STOPS_LEVEL) == 0
2013.01.16 14:32:28     Core 1  2011.03.18 21:59:00   failed modify sell 0.10 EURUSD sl: 0.00000, tp: 0.00000 -> sl: 1.42095, tp: 1.41495 [Invalid stops]
2013.01.16 14:32:28     Core 1  2011.03.18 21:59:00   order performed sell 0.10 at 1.41795 [#4720 sell 0.10 EURUSD at 1.41795]
2013.01.16 14:32:28     Core 1  2011.03.18 21:59:00   deal performed [#4720 sell 0.10 EURUSD at 1.41795]
2013.01.16 14:32:28     Core 1  2011.03.18 21:59:00   deal #4720 sell 0.10 EURUSD at 1.41795 done (based on order #4720)
2013.01.16 14:32:28     Core 1  2011.03.18 21:59:00   exchange sell 0.10 EURUSD at 1.41795 (1.41795 / 1.42399 / 1.41795)
...
 
Forux:Да и цена же не поменялась, послы ошибки она такая же как и та по которой ордер создавался, еще до модификации. 

Сама по себе цена (в общем случае) может изначально находиться ближе к уровням, чем разрешено сервером на текущий момент. Поэтому проверять такое условие всегда желательно.

Forux: Допустимое расстояние на тесте 0 выдает 

Да, теперь понятно, что проверка на отступ в данном случае проблему не решает. Правильно ли я понял, что уровни sl/tp для Sell-позиции устанавливаются на основе Bid-цены?

 
Yedelkin:

Сама по себе цена (в общем случае) может изначально находиться ближе к уровням, чем разрешено сервером на текущий момент. Поэтому проверять такое условие всегда желательно.

Да, теперь понятно, что проверка на отступ в данном случае проблему не решает. Правильно ли я понял, что уровни sl/tp для Sell-позиции устанавливаются на основе Bid-цены?

Да, и вход и выход идут или по аску или по биду, в зависимости от типа ордера.
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
Forux: Да, и вход и выход идут или по аску или по биду, в зависимости от типа ордера.
Правильно ли я понял, что уровни sl/tp для Sell-позиции устанавливаются на основе Bid-цены? Если не трудно, распечатайте для проблемного места текущие Ask, Bid, SL & TP
 
Yedelkin:
Правильно ли я понял, что уровни sl/tp для Sell-позиции устанавливаются на основе Bid-цены? Если не трудно, распечатайте для проблемгного места текущие Ask, Bid, SL & TP
2013.01.16 15:55:57     Core 1  2011.03.18 21:59:00    --- Can not modify order --- error = 4756 isBuy = false order = 4720 price = 1.41795
2013.01.16 15:55:57     Core 1  2011.03.18 21:59:00   TP == 1.41495
2013.01.16 15:55:57     Core 1  2011.03.18 21:59:00   SL == 1.42095
2013.01.16 15:55:57     Core 1  2011.03.18 21:59:00   BID == 1.41795
2013.01.16 15:55:57     Core 1  2011.03.18 21:59:00   ASK == 1.42399
2013.01.16 15:55:57     Core 1  2011.03.18 21:59:00   SymbolInfoInteger(_Symbol, SYMBOL_TRADE_STOPS_LEVEL) == 0
2013.01.16 15:55:57     Core 1  2011.03.18 21:59:00   failed modify sell 0.10 EURUSD sl: 0.00000, tp: 0.00000 -> sl: 1.42095, tp: 1.41495 [Invalid stops]
2013.01.16 15:55:57     Core 1  2011.03.18 21:59:00   order performed sell 0.10 at 1.41795 [#4720 sell 0.10 EURUSD at 1.41795]
2013.01.16 15:55:57     Core 1  2011.03.18 21:59:00   deal performed [#4720 sell 0.10 EURUSD at 1.41795]
2013.01.16 15:55:57     Core 1  2011.03.18 21:59:00   deal #4720 sell 0.10 EURUSD at 1.41795 done (based on order #4720)
2013.01.16 15:55:57     Core 1  2011.03.18 21:59:00   exchange sell 0.10 EURUSD at 1.41795 (1.41795 / 1.42399 / 1.41795)
...
Вопрос снят. (ну и спред о_О)
 

Здравствуйте! В программе МТ-5 раньше не было, а сейчас начали давать в разделе "сигналы"

не нужную мне информацию . Я пользуюсь мобильным интернетом и плачу за каждый Мгб.

А эти сигналы увеличили потребление интернета в 3-4 раза.

Вопрос: как настроить, что и где, чтобы эти сигналы не поступали? Ни на один из сигналов я не подписывался.