Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 938

 
Konstantin Nikitin:

Así que saca la funcionalidad necesaria de la clase y escríbela tú mismo.

Gracias. Mi pregunta es mucho más sencilla: he abierto una orden mediante OrderSend(request,result) y quiero operar inmediatamente con sus parámetros, por ejemplo, imprimirlos. Así:
 //============================================================
        //--- declare and initialize the trade request and result of trade request
        MqlTradeRequest request={0};
        MqlTradeResult  result={0};
        //--- parameters of request
        request.action   = TRADE_ACTION_DEAL;    // type of trade operation
        request.symbol   = Pair1;                // symbol
        request.volume   = lots;                 // volume of lot
        request.type     = oper;                 // order type
        request.price    = priceOpen;            // price for opening
        request.deviation= Slippage;             // allowed deviation from the price
        request.magic    = magic;   
  //===================================      
        if(OrderSend(request,result))
                
        Print ("retcode = " + retcode + "; ");        
        Print ("deal = " + deal + "; ");
        Print ("order = " + order + "; "); 
        Print ("volume = " + volume + "; ");  
        Print ("price = " + price + "; ")
Algunos de los parámetros, como el código de repetición, el pedido y el volumen se imprimen, pero el trato y el precio no.
Especialmente el precio es de interés. Todos los resultados están en MqlTradeResult. Los imprimo todos de la misma manera, pero algunos se imprimen y otros no. La pregunta es: ¿por qué se imprimen ciertos parámetros y otros no?
 

¿Cómo se fusionan las matrices?

string eData[][50][3];
string bData[][20][5];
 ArrayCopy(eData,bData,ArraySize(eData)); // error: incompatible 3 arrays ranges for ArrayCopy function (50 and 20)

Tengo entendido queArrayCopy sólo copia matrices unidimensionales.

 
Vitaly Muzichenko:

¿Cómo se fusionan las matrices?

Tengo entendido queArrayCopy sólo copia matrices unidimensionales.

No, ArrayCopy copia cualquier array que esté permitido en mql5\4. Pero deben ser idénticos para ser copiados. La segunda dimensión de la primera matriz tiene 50, y la segunda matriz sólo tiene 20. Lo mismo ocurre con la tercera dimensión.
 
Algotrader18:
Gracias. Mi pregunta es mucho más sencilla: he abierto una orden mediante OrderSend(request,result) y quiero operar inmediatamente con sus parámetros, por ejemplo, imprimirlos. Así: algunos de los parámetros como el código de repetición, el pedido y el volumen se imprimen, pero el trato y el precio no.
Especialmente el precio es de interés. Todos los resultados están disponibles en MqlTradeResult. Los imprimo por igual, pero algunos se imprimen y otros no. La pregunta es: ¿por qué se imprimen ciertos parámetros y otros no?
 //============================================================
        //--- declare and initialize the trade request and result of trade request
        MqlTradeRequest request={0};
        MqlTradeResult  result={0};
        //--- parameters of request
        request.action   = TRADE_ACTION_DEAL;    // type of trade operation
        request.symbol   = Pair1;                // symbol
        request.volume   = lots;                 // volume of lot
        request.type     = oper;                 // order type
        request.price    = priceOpen;            // price for opening
        request.deviation= Slippage;             // allowed deviation from the price
        request.magic    = magic;   
  //===================================      
        if(!OrderSend(request,result))
          return;
                
        Print ("retcode = " + result. retcode + "; ");        
        Print ("deal = " + result. deal + "; ");
        Print ("order = " + result. order + "; "); 
        Print ("volume = " + result. volume + "; ");  
        Print ("price = " + result. price + "; ");
 
Konstantin Nikitin:

Así es como era originalmente

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

Preguntas de los principiantes MQL5 MT5 MetaTrader 5

Algotrader18, 2018.10.25 07:39

¡Buenas tardes!

Abro una posición y quiero imprimir el contenido de MqlTradeResult así:


   //--- declare and initialize the trade request and result of trade request
        MqlTradeRequest request={0};
        MqlTradeResult  result={0};
        //--- parameters of request
        request.action   = TRADE_ACTION_DEAL;    // type of trade operation
        request.symbol   = Pair1;                // symbol
        request.volume   = lots;                 // volume of lot
        request.type     = oper;                 // order type
        request.price    = priceOpen;            // price for opening
        request.deviation= Slippage;             // allowed deviation from the price
        request.magic    = magic;   
 //============================================================     
        if(OrderSend(request,result))       
        Print ("result.retcode = " + result.retcode + "; ");        
        Print ("deal = " + result.deal + "; ");
        Print ("order = " + result.order + "; "); 
        Print ("volume = " + result.volume + "; ");  
        Print ("price = " + result.price + "; ");

result.retcode, el pedido y el volumen se imprimen pero el trato y el precio son siempre ceros.
Por favor, ¿podría decirme qué estoy haciendo mal?

Por qué se perdió en el siguiente código.... Pregunta...

Creo que el rendimiento es inaceptable. Se imprimirá en el siguiente tick.

 
Alexey Viktorov:
Y creo que ese retorno es inaceptable. Al fin y al cabo, se imprimirá en el siguiente tic.

Aprender a enviar órdenes

Valor devuelto

Si lacomprobación de la estructura básica (comprobación del puntero) tiene éxito, se devuelve true - esto no indica que se haya ejecutado con éxito la operación comercial. Para obtener una descripción más detallada del resultado de la función, debemos analizar los campos de la estructura delresultado.

Si se supera la comprobación básica, sólo entonces lo imprimimos. Todo en un solo tic. Por eso escribí
        if(!OrderSend(request,result))
          return;
 
Konstantin Nikitin:

Exploración de OrderSend

Si pasa la comprobación básica, sólo entonces imprímalo. Todo en la misma garrapata. Por eso lo escribí.
Aha. ¡Pero no había visto eso! Lo siento...
 
Alexey Viktorov:

Este era el caso originalmente.

por qué se perdió en el siguiente código... pregunta...

Pero en mi opinión, ésta es inaceptable. Se imprimirá en el siguiente tick.

He probado varias variantes, incluida ésta:

        ulong  deal;
        ulong  order;
        double volume;
        double price;    
          
 //============================================================
        //--- declare and initialize the trade request and result of trade request
        MqlTradeRequest request={0};
        MqlTradeResult  result={0};
        //--- parameters of request
        request.action   = TRADE_ACTION_DEAL;    // type of trade operation
        request.symbol   = Pair1;                // symbol
        request.volume   = lots;                 // volume of lot
        request.type     = oper;                 // order type
        request.price    = priceOpen;            // price for opening
        request.deviation= Slippage;             // allowed deviation from the price
        request.magic    = magic;   
  //===================================      
        if(OrderSend(request,result))

        retcode = result.retcode;
        deal = result.deal;
        order = result.order;
        volume = result.volume;
        price = result.price;
       
      
        Print ("retcode = " + retcode + "; ");        
        Print ("deal = " + deal + "; ");
        Print ("order = " + order + "; "); 
        Print ("volume = " + volume + "; ");  
        Print ("price = " + price + "; ");

No he copiado todo en la pregunta por error...

 
Algotrader18:

He probado diferentes opciones, incluyendo esta:

y copiado en la pregunta por error...

Intenta buscar, fxsaber una vez trabajó en este problema. No sé lo que hizo, no me interesa. Me resulta más fácil obtener todos estos parámetros en OnTradeTransaction
 
Rustam Esedulaev:
Hola a todos.
En mql 4 existe una verificación como IsTradeContedtBusy
¿Hay algo similar en mql 5?
Gracias.

No hay nada parecido. MT5 es multihilo.