Orologio in tempo reale MQL4 (secondo per secondo) - pagina 4

 

Bene, ma questa non è una soluzione in tempo reale, perché non possiamo controllare il tempo di risposta per gli eventi non-tick.
Nel caso di "sleep()" possiamo.

 

Quindi se combiniamo tick per tick e prezzi stantii con il sonno allora possiamo avere un orologio in tempo reale :)

 

Come ho detto, se questa soluzione è implementata in un EA non c'è più bisogno di TimeCurrent() e il Loop è controllato da Sleep(Interval-Runtime) (in ms)

La maggior parte del codice rimane lo stesso, redraw() non sarà più necessario. Inoltre, se avete bisogno di aumentare la velocità del codice, potete usare alcuni (ah, mi manca la parola inglese) array con punto zero di rotazione per sbarazzarvi del ciclo di spostamento.

AFAIK questa (o simile) è la soluzione migliore che può essere fatta in MQL puro in un indicatore. Esiste sicuramente una soluzione migliore quando si usa una DLL e si esportano i calcoli in un programma esterno

 
spidermagos:

Quindi se combiniamo tick per tick e prezzi stantii con il sonno allora possiamo avere un orologio in tempo reale :)

Sì, ma lo Sleep non è possibile negli indicatori, questo è il tuo problema dall'inizio di questo thread
 
zzuegg:
Sì, ma Sleep non è possibile negli indicatori, questo è il tuo problema dall'inizio di questo thread

Un EA può chiamare un indicatore?
 
Sì, ma solo attraverso icustom che non risolverà il tuo problema
 
Puoi allegare uno script al grafico che invia un falso tick ogni secondo al grafico. Questo è quello che faccio di solito per aggiornare gli indicatori multi-pair e gli EA a intervalli regolari.
 
7bit:
Puoi allegare uno script al grafico che invia un falso tick ogni secondo al grafico. Questo è quello che faccio di solito per aggiornare gli indicatori multi-pair e gli EA a intervalli regolari.
Hai bisogno di una dll per questo o è possibile senza?
 
zzuegg:
Hai bisogno di una DLL per questo o è possibile senza?

E' solo una manciata di linee in mql4 (naturalmente hai bisogno di chiamate DLL consentite per chiamare le API di windows, ma non hai bisogno di installare nulla):

/**
* MT4/experts/scripts/ticks.mq4
* send a fake tick every 1000ms to the chart and
* all its indicators and EA until this script is removed.
*/

#property copyright "© Bernd Kreuss"

#import "user32.dll"
   int PostMessageA(int hWnd, int Msg, int wParam, int lParam);
   int RegisterWindowMessageA(string lpString);
#import

int start(){
   int hwnd = WindowHandle(Symbol(), Period());
   int msg = RegisterWindowMessageA("MetaTrader4_Internal_Message");
   while(!IsStopped()){
      PostMessageA(hwnd, msg, 2, 1);
      Sleep(1000);
   }
}

Ho questo script nei miei preferiti e quando ho bisogno di tick lo trascino sul grafico.


Ho anche una variazione di questo senza il ciclo che invia solo un tick e poi esce e ho legato questo (one_tick.mq4) al tasto di scelta rapida ALT+T e ora posso inviare un tick al grafico attivo premendo semplicemente ALT-T. Ho bisogno di questo per alcuni dei miei EA stat-arb quando faccio esperimenti durante il fine settimana per imporre start() per innescare i loro calcoli e la tracciatura dei loro grafici (posso spostare le linee sul grafico per cambiare l'intervallo e poi ho bisogno di un nuovo tick per aggiornare i loro calcoli).

 

bella. grazie per averla condivisa