Ошибки, баги, вопросы - страница 2410

 
Vladimir Karputov:

Ню-ню :)

ОК. Просветите нас. Какая ошибка в коде, или какой код, может закрыть позицию в тестере по цене другого инструмента. Мне правда, очень интересно.

Совершение сделок - Торговые операции - MetaTrader 5
Совершение сделок - Торговые операции - MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
Aleksey Sergan:

Код несколько тысяч строк. Нет смысла прикладывать. статических переменных нет. Классы есть. В любом случае это ошибка тестера.

Есть Ваша ошибка. 

В режиме отладки проводите контроль перед отсылкой торгового приказа. Смотрите на символ и на цены. И тестируйте хотя бы в режиме "Все тики".

 
Andrey Barinov:

ОК. Просвятите нас. Какая ошибка в коде, или какой код, может закрыть позицию в тестере по цене другого инструмента. Мне правда, очень интересно.

Запросто. Прямая зависимость от кривизны кода. Я сам такое вытворял :). Недостаточно продуманная система контроля инициализации класса символов. И плюс к этому статические переменные.

В общем без кода от вопрошаемого дальше говорить бессмысленно.

 
Vladimir Karputov:

Запросто. Прямая зависимость от кривизны кода. Я сам такое вытворял :). Недостаточно продуманная система контроля инициализации класса символов. И плюс к этому статические переменные.

В общем без кода от вопрошаемого дальше говорить бессмысленно.

Пример кода можете показать? Как закрыть позицию по EURUSD по цене GPBUSD?  

Если запросто, то Вам не составит труда. Буду очень признателен.

 
Andrey Barinov:

Пример кода можете показать? Как закрыть позицию по EURUSD по цене GPBUSD?  

Если запросто, то Вам не составит труда. Буду очень признателен.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

Vladimir Karputov, 2019.03.24 05:58

Запросто. Прямая зависимость от кривизны кода. Я сам такое вытворял :). Недостаточно продуманная система контроля инициализации класса символов. И плюс к этому статические переменные.

В общем без кода от вопрошаемого дальше говорить бессмысленно.


 
Этож какие крутые тестерные граали можно делать, больше не надо пипсы трейлингом двигать, круто)
 

В режиме отладки, визуализации ошибка отсутствует. Закрытие позиции происходит не торговым приказом, а по стоплоссу:



Вполне возможна логическая ошибка в коде, скорее всего здесь, посмотрю, конечно, пока не знаю как - в отладке ошибки нет:



удается установить стоп для ордера по цене 1.60704, на 3000 пунктов выше от текущей цены позиции.

Тестер в этом случае должен был бы запретить установку стопа.

 

Вот в лог смотрю:

приказ в изменение стопа отправляется для gpbusd, выделенная строка, а фактически исполняется для eurusd- следущая.


вот код установки стопа 


bool MyOrderSend( MqlTradeRequest &req, MqlTradeResult &res ){

  
  //Print("Попытка выполнения OrderSend ... ");
  Print("Try to execute OrderSend ... for ", req.symbol );
  ResetLastError();
  if (OrderSend( req, res  )){
    if( res.retcode != TRADE_RETCODE_DONE ){
      //Print("Ошибка обработки торгового запроса,код ответа сервера: ", res.retcode, "Описание:", TradeServerReturnCodeDescription(res.retcode) );
      Print("Error of trade requaest: ", res.retcode, "Description:", TradeServerReturnCodeDescription(res.retcode) );
      Print(STradeRequest(req) );
      return(false);
    }else{
      //Print("Успех, код ответа сервера: ", IntegerToString(res.retcode), " Описание:",  TradeServerReturnCodeDescription(res.retcode)  );
      Print("Success, return code is : ", IntegerToString(res.retcode), " Description:",  TradeServerReturnCodeDescription(res.retcode)  );
      Print(STradeRequest(req) );
    }
    return(true);
  }else{
    //Print("Ошибка выполнения OrderSend в ", __FUNCTION__, " _LastError=", _LastError, " ",  ErrorDescription(_LastError) );
    Print("Error of execution OrderSend in ", __FUNCTION__, " _LastError=", _LastError, " ",  ErrorDescription(_LastError) );
    //Print("Код ответа сервера: ", IntegerToString(res.retcode), " Описание:",  TradeServerReturnCodeDescription(res.retcode)  );
    Print("Server return code : ", IntegerToString(res.retcode), " Description:",  TradeServerReturnCodeDescription(res.retcode)  );
    Print(STradeRequest(req) ); 
    return(false);
  }
  return(true);
}


где


OrderSend( req, res  )

нативная функция mql, не перегруженная.

то есть вот здесь 

 Print("Try to execute OrderSend ... for ", req.symbol );


пишет, что устанавливает стоп для gbpusd, так и должно быть, а фактически 


OrderSend( req, res  )


устанавливает его для eurusd

 
Aleksey Sergan:

Вот в лог смотрю:

приказ в изменение стопа отправляется для gpbusd, выделенная строка, а фактически исполняется для eurusd- следущая.

тут 2 ошибки.

№1. Ваша ошибка. Где-то в коде. Вы устанавливаете СЛ для позиции по EURUSD используя цену GBPUSD. Терминал против этого ничего не должен иметь.

№2. Баг терминала. Если этот СЛ срабатывает по несуществующей на тот момент цене в потоке EURUSD, используя цену GBPUSD.

 
Aleksey Sergan:

Вот в лог смотрю:

приказ в изменение стопа отправляется для gpbusd, выделенная строка, а фактически исполняется для eurusd- следущая.


вот код установки стопа 



где


нативная функция mql, не перегруженная.

https://www.mql5.com/ru/docs/constants/structures/mqltraderequest

Видимо при отправке запроса на модификацию, приоритет имеет поле position а не symbol. Распечатайте req.position

Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура торгового запроса
Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура торгового запроса
  • www.mql5.com
Взаимодействие клиентского терминала и торгового сервера для проведения операций постановки ордеров производится посредством торговых запросов. Запрос представлен специальной предопределенной структурой MqlTradeRequest, которая содержит все поля, необходимые для заключения торговых сделок. Результат обработки запроса представлен структурой...
Причина обращения: