Errores, fallos, preguntas - página 2411

 
Aleksey Sergan:



Por favor, ejecute este código:Multicurrency iMA Trend 2.

Especifique "EURUSD,GBPUSD" en los ajustes ( parámetro Símbolos).

En mi configuración

MetaTrader 5 x64 build 2009 started (MetaQuotes Software Corp.)
Windows 10 (build 17763) x64, IE 11, UAC, Intel Core i3-3120 M  @ 2.50 GHz, Memory: 3518 / 8077 Mb, Disk: 86 / 415 Gb, GMT+2
C:\Users\barab\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075

todas las SL cerraron a los precios de sus símbolos. Es decir, no hay error de superposición de precios.

 
Vladimir Karputov:

Por favor, ejecute este código:Multicurrency iMA Trend 2.

Especifique "EURUSD,GBPUSD" en los ajustes ( parámetro Símbolos).

En mi configuración

todas las SL cerraron a los precios de sus símbolos. Es decir, no hay error de superposición de precios.

Gracias, el error ha sido localizado. Ponga abajo.

 
Andrey Barinov:

hay dos errores.

№1. Tu error. En alguna parte del código. Usted está estableciendo el SL para la posición EURUSD usando el precio GBPUSD. El terminal no debería tener nada en contra.

№2. Error en el terminal. Si este SL se activa en el precio entonces inexistente en el flujo del EURUSD, utilizando el precio del GBPUSD.

Andrey Barinov:

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

Sí, resultó tener razón, mi error es lógico:

en la estructura:

MqlTradeRequest m_request;

m_request.position = #3

m_request.symbol = GBPUSD

m_request.sl = 1.60704

número de posición real para GBPUSD #4

cuando se ejecuta OrderSend, el probador establece un stop para el símbolo correspondiente a la posición #3, que es eurusd.

Bichos de los probadores:

- no comprueba si m_request.position y m_request.symbol coinciden;

- establece un stop en 1,60704 para la posición de compra, el símbolo eurusd, que tiene un precio actual de 1,30935;

- en el siguiente tick establece un stop en 1,60704, aunque el precio real es 1,30935.

Gracias a todos. Espero que los desarrolladores de la plataforma vean el post.

 
Aleksey Sergan:

Sí, resultó tener razón, mi error es lógico:

En la estructura:

MqlTradeRequest m_request;

m_request.position = #3

m_request.symbol = GBPUSD

m_request.sl = 1.60704

número de posición real para GBPUSD #4

cuando se ejecuta OrderSend, el probador establece un stop para el símbolo correspondiente a la posición #3, que es eurusd.

Bichos de los probadores:

- no comprueba si m_request.position y m_request.symbol coinciden;

- establece un stop en 1,60704 para la posición de compra, el símbolo eurusd, que tiene un precio actual de 1,30935;

- en el siguiente tick establece un stop en 1,60704, aunque el precio real es 1,30935.

Gracias a todos. Espero que los desarrolladores de la plataforma vean el post.

La ejecución de un stop para una posición de compra en 1,60704 al precio actual 1,30935 no es un error. Pero establecer un stop de compra al nivel de 1,60704 al precio actual de 1,30935 es un error.

 

Construir 2007

Función:

bool GetDialLastProfit (string symbol, datetime startDate, datetime endDate, long magic, double &profit, double &lot)
{
  HistorySelect (startDate, endDate);
  int deals = HistoryDealsTotal ();
  ulong ticket;

  for (int i = deals - 1; i >= 0; i--)
  //for (int i = 0; i < deals; i++)
  {
    ticket = HistoryDealGetTicket (i);
    if (ticket != 0)
    {
      if (HistoryDealGetInteger(ticket, DEAL_MAGIC) == magic)
      {
        profit = HistoryDealGetDouble (ticket, DEAL_PROFIT);
        
        //if (!HistoryDealGetDouble(ticket, DEAL_PROFIT, profit))
        //  return false;
        
        lot    = HistoryDealGetDouble (ticket, DEAL_VOLUME);
        
        return (true);
      }
    }
  }

  return (false);
}

se supone que el resultado financiero de la transacción debe aparecer en la variable de beneficio, pero siempre resulta ser 0,0, y el valor en la variable de lote es siempre correcto.

¿Hay algún error? - ¿O estoy haciendo algo mal?

 
Andrey Dik:

Construir 2007

Función:

se supone que el resultado financiero de la transacción debe aparecer en la variable de beneficio, pero siempre resulta ser 0,0, y el valor en la variable de lote es siempre correcto.

¿Hay algún error? - ¿O estoy haciendo algo mal?

DEAL_ENTRY_OUT o INOUT deben ser comprobados. Las operaciones _IN tienen un beneficio de 0

 
Andrey Barinov:

DEAL_ENTRY_OUT o INOUT deben ser vigilados. Las operaciones _IN tienen un beneficio de 0

Bueno, el primero del final de la lista está cogido, debería estar OUT

 
Andrey Dik:

Bueno, es el primero del final de la lista, debería estar fuera

Si pasas TimeCurrent() en el endDate, sustitúyelo por TimeCurrent()+60 o algo así. Eso debería ayudar.

 
Andrey Barinov:

Si pasas TimeCurrent() en endDate, sustitúyelo por TimeCurrent()+60 o algo así. Esto debería ayudar.

No, sigue siendo 0,0.

 
Andrey Dik:

No, sigue siendo 0,0.

Entonces, depúrelo. Imprima los tickets de transacción y vea en el probador lo que realmente se selecciona allí. Añadir un filtro por tipo de comercio.

Razón de la queja: