Errores, fallos, preguntas - página 2410

 
Vladimir Karputov:

Nuh-uh :)

DE ACUERDO. Ilumínanos. Qué error en el código, o qué código, puede cerrar una posición en el probador al precio de otro instrumento. Estoy muy, muy interesado.

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

El código tiene varios miles de líneas. No tiene sentido añadirlo. No hay variables estáticas. Hay clases. En cualquier caso es un error del probador.

Ahí está su error.

En el modo de depuración, ejecute una comprobación antes de enviar la orden de comercio. Mira el símbolo y los precios. Y prueba al menos en el modo "Todos los ticks".

 
Andrey Barinov:

BIEN. Ilumínanos. Qué error en el código, o qué código, podría cerrar una posición en el probador al precio de otro instrumento. Tengo mucha, mucha curiosidad.

Fácilmente. Depende directamente de la esclavitud del código. Lo hice yo mismo :). Sistema de control de la inicialización de las clases de caracteres mal planteado. Y además hay variables estáticas.

De todos modos, no tiene sentido hablar más allá sin el código escrito por la persona a la que se le pregunta.

 
Vladimir Karputov:

Fácilmente. Es una correlación directa con la curvatura del código. Yo mismo lo he hecho :). Sistema de control de la inicialización de la clase de caracteres insuficientemente elaborado. Y además hay variables estáticas.

Así que no tiene sentido seguir hablando sin preguntarte por el código.

¿Puede mostrarnos un ejemplo de código? ¿Cómo puedo cerrar una posición en EURUSD a precio de GPBUSD?

Si es así, no será un problema para usted. Se lo agradecería mucho.

 
Andrey Barinov:

¿Puede mostrarme un código de ejemplo? ¿Cómo puedo cerrar una posición en EURUSD a precio de GPBUSD?

Si es así, no habrá ningún problema para usted. Le estaré muy agradecido.

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias

Bichos, errores, preguntas

Vladimir Karputov, 2019.03.24 05:58

No hay problema. La dependencia de la curvatura del código. Yo también cometí esos errores :). Sistema de control de la inicialización de las clases de caracteres insuficientemente estudiado. Y además variables estáticas.

De todos modos, no tiene sentido hablar más allá sin el código escrito por la persona a la que se le pregunta.


 
Así de chulos pueden ser los graales de los probadores, se acabaron los pips de arrastre, chulos)
 

No hay ningún error en el modo de depuración y visualización. La posición no se cierra mediante una orden comercial, sino mediante un stop loss:



Muy posiblemente un error lógico en el código, lo más probable aquí, voy a mirar en él, por supuesto, no sé cómo todavía - no hay error en el modo de depuración:



consigue establecer un stop para una orden en 1,60704, 3000 pips por encima del precio actual de la posición.

En este caso, el probador debería haber prohibido el ajuste de parada.

 

Aquí estoy mirando el registro:

la orden de cambiar el stop se envía para gpbusd, la línea resaltada, pero en realidad se ejecuta para eurusd- a continuación.


aquí está el código para establecer la parada


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);
}


donde


OrderSend( req, res  )

función nativa de mql, no sobrecargada.

es decir, aquí

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


dice que pone un stop para el gbpusd y debería ser así, pero en realidad


OrderSend( req, res  )


lo pone para el eurusd

 
Aleksey Sergan:

Aquí estoy mirando el registro:

la orden de cambiar el stop se envía para gpbusd, la línea resaltada, pero en realidad se ejecuta para eurusd, la siguiente.

hay dos errores.

№1. Tu error. En alguna parte del código. Usted establece un SL para una posición en EURUSD utilizando el precio de GBPUSD. El terminal no debería tener nada en contra.

№2. Error en el terminal. Si este SL se activa a un precio que no existe en ese momento en el flujo del EURUSD, utilizando el precio del GBPUSD.

 
Aleksey Sergan:

Aquí estoy mirando el registro:

la orden de cambiar el stop se envía para gpbusd, la línea resaltada, pero en realidad se ejecuta para eurusd- a continuación.


aquí está el código para establecer la parada



donde


función nativa de mql, no sobrecargada.

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

Aparentemente, al enviar una solicitud de modificación, el campo de posición tiene prioridad sobre el símbolo. Imprimirreq.position

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