Qualsiasi domanda da un PROFI a un SUPER PROFI - 1. - pagina 43

 
fxsaber:

Non capisco. Se qualcosa è cambiato nel database, l'unico modo per scoprirlo è confrontarlo con lo stato precedente del database.

È possibile confrontare ogni elemento del database corrispondente. Oppure si può calcolare l'hash da loro e confrontare gli hash.

Il terminale sa già di questo cambiamento (OnTrade). Ecco perché voglio saperlo nella mia funzione.

 
fxsaber:

Particolarmente rilevante per MT4, dove il cambio di passo time_msc è di 1000ms.

Peccato, rende impossibile utilizzare l'opzione più semplice che conosco al momento.

 
Andrey Khatimlianskii:

Il terminale sa già di questo cambiamento(OnTrade). Ecco perché voglio saperlo nella mia funzione.

Non c'è nessun evento Trade in MT4.

 
fxsaber:

L'evento commerciale non è in MT4.

Solo che non è stato indirizzato a MKL. Il terminale non aggiorna la lista delle compravendite su un timer.

 
Andrey Khatimlianskii:

Solo che non è stato cablato nel MCL. Il terminale non aggiorna la lista delle compravendite su un timer.

Pertanto, solo attraverso la verifica.

 
Andrey Khatimlianskii:

1. Qual è il modo più economico per sapere che la chiamata della funzione è sullo stesso tick della chiamata precedente?

Il tempo (TimeCurrent) può rimanere lo stesso, il tempo in ms da SymbolInfoTick, anche teoricamente.

Confrontare i tempi di bid, ask e ms è abbastanza costoso.

Non suggerisco di organizzare il controllo nell'Expert Advisor stesso, voglio ottenere una funzione universale indipendente.


La stessa domanda riguarda le operazioni commerciali. Come facciamo a sapere che qualcosa è cambiato nella lista degli ordini/posizioni (inclusi i livelli aperti, SL e TP) dall'ultima esecuzione?

Dovrei mettere qualche bandiera in OnTrade (e resettarla quando ho finito), è il modo più economico.

Ma, di nuovo, vorrei una soluzione universale.


Chi ha qualche idea?

Giusto:

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
   int count = 0;
   if ( A ) some_func( count );
   if ( B ) some_func( count );
   if ( C ) some_func( count );
}
//+------------------------------------------------------------------+
void some_func( int& count )
{
   if( count++ > 0 )
      return;
      
   // recalculate only once on each tick
}
//+------------------------------------------------------------------+
 
Koldun Zloy:

Ok:

Grazie.

Andrey Khatimlianskii:

Non suggerisco l'opzione di organizzare il controllo nell'EA stesso, voglio solo ottenere una funzione universale indipendente.

 
Andrey Khatimlianskii:

Grazie.

Visto che non è stato ancora suggerito, ti do un'idea di dove scaverei, controlla il tempo dell'ultimo PostMessage o qualcosa del genere, probabilmente non ha senso, non sono così versato in Api.

 
Aleksey Mavrin:

Controllare il tempo dell'ultimo PostMessage o qualcosa del genere è probabilmente un'assurdità, non so molto di Api.

Sì, sembra una sciocchezza)

Grazie per aver provato.

 
Andrey Khatimlianskii:

Irrealistico senza controllo nell'EA stessa.

Non solo, non è necessario. La funzione richiesta sarà chiamata nell'EA, cioè è essenzialmente lo stesso controllo nell'EA, solo meno invasivo

Motivazione: