Discussione sull’articolo "Eventi di Trade in MetaTrader 5" - pagina 3

 

Renat:
Конечно после принятия сервером - это же очевидно. Кроме того, функция называется OrderSEND.

OK, capisco!

Per quanto riguarda la "ovvietà", questa è per lo più destinata a coloro che lavorano a stretto contatto con il sistema da più di un anno. Mi sono chiesto se la frase del libro di riferimento (per la funzione OrderSend() "in caso di successo del controllo di base delle strutture, viene restituito true") possa essere considerata una condizione sufficiente per restituire true. Ora si scopre che no, non può: è solo una condizione necessaria, ma non sufficiente.

 
Interesting:
A mio parere, non si dovrebbero trarre conclusioni solo da true, ma si dovrebbe analizzare anche il codice di risposta del server (e quest'ultimo è di maggiore priorità, come mi sembra)...

Sì, queste poche ore mi hanno fatto sentire come se fosse caduto un velo: tra i codici di ritorno non c'è alcun codice per il "controllo riuscito della struttura di base" (chiamiamolo così), ed è per questo che true non può essere restituito subito dopo il controllo della base.

Per quanto riguarda l'analisi dettagliata del codice di ritorno, sì, è raccomandata nel libro di riferimento. Continuo a cercare modi per ridurre ragionevolmente il numero di controlli disponibili.

 

Potete per favore spiegare cosa significa. Il mandato è stato messo in coda?

La situazione è la seguente

2011.01.26 12:59:26 Rete '716201': connessione a MetaQuotes-Demo persa
2011.01.26 12:59:26 Trades '716201' : fallito acquisto istantaneo 1.00 EURUSD a 1.37136 [Nessuna connessione]
2011.01.26 12:58:40 Trades '716201' : acquisto istantaneo 1.00 EURUSD a 1.37136
2011.01.26 12:56:17 Rete '716201': terminale sincronizzato con MetaQuotes Software Corp.

Premetto Buy sul mercato senza stop e TP. Viene visualizzato un messaggio, l'ordine viene messo in coda... la connessione si interrompe... viene ripristinata... l'ordine non viene eseguito.

Che cos'è questa coda? Dove si trova? Se l'ordine è già accettato dal server, perché non viene eseguito? Motivo?

 
I link sono per il sito russo!
 
Bell'articolo davvero.
 
void CheckStartDateInTradeHistory()
  {
//--- intervallo iniziale, come se iniziassimo a lavorare in questo momento
   datetime curr_start=TimeCurrent()-days*PeriodSeconds(PERIOD_D1);
//--- assicurarsi che il limite iniziale della cronologia degli scambi non sia stato superato 
//--- più di un giorno rispetto alla data prevista
   if(curr_start-start>PeriodSeconds(PERIOD_D1))
     {
      //--- dovremmo correggere la data di inizio della storia da caricare nella cache 
      start=curr_start;
      PrintFormat("New start limit of the trade history to be loaded: start => %s",
                  TimeToString(start));

      //--- ora carica di nuovo la cronologia degli scambi per il periodo corretto
      HistorySelect(start,end);

      //--- correggere il numero di transazioni e ordini nella cronologia per un ulteriore confronto
      history_orders=HistoryOrdersTotal();
      deals=HistoryOrdersTotal();
     }
  }

vedi le ultime due righe?

dovrebbero essere:

history_orders=HistoryOrdersTotal(); // ok, sembra corretto

deals=HistoryDealsTotal(); /un errore di battitura, forse?

 

L'articolo parla di eventi di trading asincroni, quando la ricezione di un ticket d'ordine quando si invia una richiesta con la funzione OrderSend() e la comparsa dell' ordine nel terminale possono non coincidere nel tempo. Qui è tutto chiaro. Lo scorso autunno si consigliava di superare questa asincronia addormentandosi per tre secondi. Ma qual è il tempo garantito per cui sia il valore del biglietto che l'ordine stesso appariranno nel terminale (dopo che il server ha accettato l'ordine)? Posso aspettare 20 secondi, se necessario, ma vorrei sapere qual è il periodo di tempo garantito per assicurare questa "sincronizzazione manuale".

 

Grazie mille. Questo mi ha davvero aiutato a risolvere alcune confusioni.

Saluti,

Umer Aziz