Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 938

 
Konstantin Nikitin:

Quindi prendete la funzionalità richiesta dalla classe e scrivetela a voi stessi.

Grazie. La mia domanda è molto più semplice - ho aperto un ordine tramite OrderSend(request,result) e voglio operare immediatamente con i suoi parametri - per esempio, stamparli. Come questo:
 //============================================================
        //--- 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 + "; ")
Alcuni parametri, come retcode, ordine e volume vengono stampati, ma deal e prezzo no.
Soprattutto il prezzo è interessante. Tutti i risultati sono in MqlTradeResult. Li stampo tutti allo stesso modo ma alcuni vengono stampati mentre altri no. La domanda - perché certi parametri vengono stampati mentre altri no?
 

Come si uniscono gli array?

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

Ho capito cheArrayCopy copia solo array unidimensionali?

 
Vitaly Muzichenko:

Come si uniscono gli array?

Ho capito cheArrayCopy copia solo array unidimensionali?

No, ArrayCopy copia qualsiasi array che sia consentito in mql5\4. Ma dovrebbero essere identici per essere copiati. La seconda dimensione della prima matrice ha 50, e la seconda matrice ha solo 20. È lo stesso per la terza dimensione.
 
Algotrader18:
Grazie. La mia domanda è molto più semplice - ho aperto un ordine tramite OrderSend(request,result) e voglio operare immediatamente con i suoi parametri - per esempio, stamparli. Così: alcuni parametri come retcode, ordine e volume sono stampati, ma deal e prezzo no.
Soprattutto il prezzo è interessante. Tutti i risultati sono disponibili in MqlTradeResult. Li stampo allo stesso modo, ma alcuni di essi vengono stampati mentre altri no. La domanda - perché certi parametri vengono stampati mentre altri 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:

Questo è il modo in cui era originariamente

Forum sul trading, sistemi di trading automatico e test di strategia

Domande dai principianti MQL5 MT5 MetaTrader 5

Algotrader18, 2018.10.25 07:39

Buon pomeriggio!

Apro una posizione e voglio stampare il contenuto di MqlTradeResult come questo:


   //--- 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, order e volume sono stampati ma deal e price sono sempre degli zeri.
Per favore, potreste dirmi cosa sto sbagliando?

Perché si è perso nel prossimo codice.... Domanda...

Penso che questo ritorno sia inaccettabile. Verrà stampato sul prossimo segno di spunta.

 
Alexey Viktorov:
E penso che questo ritorno sia inaccettabile. Dopotutto, sarà stampato sulla prossima spunta.

Imparare OrderSend

Valore restituito

Se ilcontrollo della struttura di base (controllo del puntatore) ha successo, viene restituito true - questo non indica il successo dell'esecuzione dell'operazione commerciale. Per ottenere una descrizione più dettagliata del risultato della funzione, dovremmo analizzare i campi della struttura delrisultato.

Se il controllo di base viene superato, solo allora lo stampiamo. Tutto in una zecca. Ecco perché ho scritto
        if(!OrderSend(request,result))
          return;
 
Konstantin Nikitin:

Esplorare OrderSend

Se supera il controllo di base, solo allora stampatelo. Tutti sulla stessa zecca. Ecco perché l'ho scritto.
Aha. Ma non l'avevo visto! Mi dispiace...
 
Alexey Viktorov:

Questo era originariamente il caso.

perché è stato perso nel codice successivo... domanda...

Ma secondo me, questo è inaccettabile. Verrà stampato sul prossimo segno di spunta.

Ho provato varie varianti tra cui questa:

        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 + "; ");

Non ho copiato tutto nella domanda per errore...

 
Algotrader18:

Ho provato diverse opzioni, compresa questa:

e copiato nella domanda per errore...

Prova a cercare, fxsaber una volta ha lavorato su questo problema. Non so cosa abbia fatto, non mi interessa. È più facile per me ottenere tutti questi parametri in OnTradeTransaction
 
Rustam Esedulaev:
Ciao a tutti!
In mql 4 c'è una verifica come IsTradeContedtBusy
C'è qualcosa di simile in mql 5?
Grazie!

Non c'è niente di simile. MT5 è multithreaded.