Come lavorare correttamente in MT5 con OrderSend - pagina 3

 
prostotrader:

Approfittatene.

Perché stai inviando una richiesta vuota al server? Non sembra avere senso.
E cosa farete in "//vedi causa result.retcode" se ottenete diciamo TRADE_RETCODE_TIMEOUT o TRADE_RETCODE_FROZEN?
 
RickD:
Perché stai inviando una richiesta vuota al server? Non sembra avere senso.
E cosa farete in "//see result.retcode" se ottenete, per esempio, TRADE_RETCODE_TIMEOUT o TRADE_RETCODE_FROZEN?
Mi impiccherò :)
 
Andrey Khatimlianskii:

Lo sostengo con entrambe le mani. È come se MQ non volesse assumersi la responsabilità di una funzione già pronta di inviare un ordine e ricevere una risposta.

La mia opzione è anche con le stampelle:

Perché non fare qualcosa di simile (non per tutte le occasioni, almeno la più semplice!) e metterla a SB?

In realtà, a cosa serve la "esecuzione rapida" di OrderSend(...) se noi di EA dobbiamo aspettare

per gli aggiornamenti dell'ambiente, in questo caso gli aggiornamenti della storia... e trovare diversi algoritmi di attesa...

finché la storia non sarà aggiornata, non andremo avanti... cioè questa velocità non serve a niente...

 
Denis Sartakov:

In realtà, a cosa serve un'esecuzione "rapida" di OrderSend(...) se noi di EA dobbiamo aspettare

per un aggiornamento dell'ambiente, in questo caso un aggiornamento della storia... e trovare diversi algoritmi di attesa...

finché la storia non sarà aggiornata, non andremo avanti... cioè questa velocità non serve a niente...

Probabilmente, è implementato in questo modo perché il terminale può eseguire OrderSend e OrderSendAsync in parallelo, e la sincronizzazione forzata della storia dopo OrderSend influenzerebbe in qualche modo OrderSendAsync, OnTrade, OnTradeTransaction, rallentandoli.
 
Andrey Khatimlianskii:
Non sto parlando delle funzioni integrate del linguaggio, sto parlando della libreria standard.
Sto parlando specificamente delle funzioni linguistiche incorporate, che OrderSend potrebbe aspettare un aggiornamento della storia degli scambi internamente, ma non lo fa. :)
Lei dice di avere una stampella, ma non è così affidabile. Fammi un esempio di una buona stampella affidabile.
Sto dicendo che forse si può fare a meno delle stampelle. Se gli sviluppatori si sono degnati di cambiare il comportamento di OrderSend. Fallo come in MT4.
Oppure - o un'opzione alternativa. Aggiungere la funzione OrderSendMT4Style. :)
 

Un sovraccarico OrderSend molto semplice è scritto indipendentemente: finché OnTrade non restituisce una risposta, tutti i successivi OrderSend restituiscono false. Non appena la risposta viene ricevuta - forced false viene cancellato.

Questa è esattamente la soluzione che dobbiamo aggiungere al SB. E dobbiamo usarlo noi stessi.

In SB, aggiungerebool CTrade::IsHistoryLoad( const string Symb = NULL ) per lo stesso principio.

E niente stampelle! Entrambe le funzioni possono essere facilmente scritte da soli.

Se volete ottenere la funzionalità completa (non per SB), chiamate OnTick e OnTimer indipendentemente in OnTrade all'arrivo della sincronizzazione corrispondente.

 

Che mucchio di stampelle hanno scritto... Studiare il comportamento della funzione void OnTradeTransaction()

/*********************TradeTransaction function*********************/
void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result)
{
      if(trans.type == TRADE_TRANSACTION_DEAL_ADD)
       {
        if(!PositionSelectByTicket(trans.position))
         {
          //Print("********* закрылась позиция ", trans.position);
           closedPosition(trans);
         }
        if(PositionSelectByTicket(trans.position))
         {
          //Print("********* отккрылась позиция ", ", ", EnumToString(trans.deal_type), ", ", trans.position);
           openedPosition(trans);
         }
       }
       
}/*******************************************************************/

Gestisce anche gli errori di apertura delle posizioni e degli ordini.

 
Alexey Viktorov:

Che mucchio di stampelle hanno scritto... Studiare il comportamento della funzione void OnTradeTransaction()

Gestisce anche gli errori di apertura delle posizioni e degli ordini.

Avete letto il soggetto in diagonale.
 
fxsaber:
Avete letto l'argomento in diagonale.

No, solo verticalmente. Solo la prima lettera di ogni riga.

 
Andrey Khatimlianskii:

Come funziona questo semplice sovraccarico con 2 EAs sullo stesso strumento?

Purtroppo, solo attraverso una stampella - una variabile globale del terminale.