Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 244

 
forexman77:
Puoi dirmi se ci sono altri modi rapidi per ottenere il prezzo corrente oltre a "SymbolInfoTick". Forse c'è un modo più veloce per ottenere la quotazione attuale?

SymbolInfoDouble può essere usato

con identificatoriSYMBOL_BID eSYMBOL_ASK.

 
Fleder:

SymbolInfoDouble può essere usato

con identificatoriSYMBOL_BID eSYMBOL_ASK.

Grazie!

Non è molto chiaro cosa segue da "SYMBOL_BID" (Bid è la migliore offerta di vendita). È ancora la quotazione attuale o il miglior prezzo di mercato della coppa ESN?

 
forexman77:

Grazie!

Non è molto chiaro cosa segue da "SYMBOL_BID" (Bid è la migliore offerta di vendita). È ancora la quotazione attuale o il miglior prezzo di mercato della coppa ESN?

La quotazione attuale e il miglior prezzo nella tazza del mercato ECN sono la stessa cosa.

 
Fleder:

La quotazione attuale e il miglior prezzo nel Dock ECN sono la stessa cosa.

In generale, si scopre che se usiamo "SymbolInfoDouble" quando interroghiamo, un trade a questo prezzo potrebbe non avvenire, cioè è l'attuale Bid.

Se usiamo "SymbolInfoTick", allora il prezzo era esattamente lì, cioè questo è il prezzo attuale al quale si è verificato l'ultimo scambio, quando si usa double last; // Prezzo attuale dell'ultimo scambio (Last)

 
forexman77:

In generale, si scopre che se usiamo "SymbolInfoDouble" nella query, un trade a questo prezzo potrebbe non avvenire, cioè è l'attuale Bid.

Se usiamo "SymbolInfoTick", allora il prezzo era sicuramente lì, cioè è il prezzo corrente al quale ha avuto luogo l'ultima transazione.

Nota

Se questa funzione è usata per ottenere informazioni sull'ultimo tick, allora è meglio usareSymbolInfoTick(). È molto probabile che non ci sia stata alcuna quotazione per questo simbolo dal momento in cui il terminale si è collegato al conto di trading. In questo caso, il valore richiesto sarà indefinito.

SymbolInfoTick può restituire un valore non definito se non c'è stato un singolo tick da quando il terminale si è collegato al server.

SymbolInfoDouble esclude questa situazione.

 
Fleder:

Nota

Se la funzione è usata per ottenere informazioni sull'ultimo tick, è meglio usareSymbolInfoTick(). È molto probabile che non ci sia stata alcuna quotazione per questo simbolo da quando il terminale è stato collegato al conto di trading. In questo caso, il valore richiesto sarà indefinito.

SymbolInfoTick può restituire un valore non definito se non c'è stato un singolo tick da quando l'EA è stato collegato al grafico.

SymbolInfoDouble esclude tale situazione.

Capito. Grazie! Ora l'unica cosa da fare è trovare un semplice esempio di codice per controllare quanto tempo impiega ogni funzione quando viene chiamata?
 
forexman77:
Capito. Grazie! Ora non resta che trovare un semplice esempio di codice per verificare quanto tempo ci vuole per chiamare entrambe le funzioni?
uint start=GetTickCount();
// здесь Ваш код вызова 
Print("Вызов прошёл за = ",GetTickCount()-start);
 
barabashkakvn:

Questo trucco probabilmente non funzionerà in questa situazione.

Ci sarà sempre un undershoot zero.

Le funzioniSymbolInfoTick eSymbolInfoDouble sono troppo veloci- non più di unità di microsecondi.

 
Fleder:

Questo trucco probabilmente non funzionerà in questa situazione.

Ci sarà sempre un undershoot zero.

Le funzioniSymbolInfoTick eSymbolInfoDouble sono troppo veloci- non più di unità di microsecondi.

Tanto più interessante, c'è un codice di esempio. Stiamo aspettando il risultato.
 
barabashkakvn:
Fleder:

Questo trucco probabilmente non funzionerà in questa situazione.

Ci sarà sempre un undershoot zero.

Le funzioniSymbolInfoTick eSymbolInfoDouble sono troppo veloci- non più di unità di microsecondi.

Nello script ho creato questa piccola cosa:

void OnStart()
  {
uint start=GetTickCount();
double ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
Alert("ask=",ask);
uint time=GetTickCount()-start;
Alert("time=",time);
   
  }
//+------------------------------------------------------------------+

tempo=0

SymbolInfoTick sarà controllato lunedì.