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

 
7bit:

La sua è 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):

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).


7 Non ho mai usato importazioni di dll quindi potete spiegarmi quanto segue.

+ Bisogna includere i file dll nella cartella di Meta Trader Client?

+ Come possiamo abilitare questo EA dal client MT?

Per favore, ci dia qualche esempio di importazione di DLL in Meta Trader

 
spidermagos:


7 Non ho mai usato importazioni di dll, quindi puoi spiegare quanto segue.

+ Bisogna includere i file dll nella cartella di Meta Trader Client?

+ Come possiamo abilitare questo EA dal client MT?

Ci dia solo qualche esempio di importazione di DLL in Meta Trader

Sono spiacente di informarla che le sarà completamente impossibile farne qualsiasi uso (o anche capire per quale scopo potrebbe essere usato) a meno che non impari l'abilità di leggere un testo più lungo di 140 caratteri.

Come inizio potresti cercare di estrarre il significato dal testo che hai appena citato nel tuo ultimo post. Scoprirai allora che l'ho descritto come uno script e non come un EA, inoltre, con tua grande sorpresa, scoprirai che ho scritto che non c'è bisogno di installare alcuna DLL e potresti anche essere in grado di trovare le parti del testo in cui ho spiegato come dovrebbe essere usato.

 
7bit:

Mi dispiace informarvi che sarà completamente impossibile per voi farne qualsiasi uso (o anche capire per quale scopo potrebbe essere usato) a meno che non impariate l'abilità di leggere un testo più lungo di 140 caratteri.

Come inizio potresti cercare di estrarre il significato dal testo che hai appena citato nel tuo ultimo post. Troverai allora che l'ho descritto come uno script e non come un EA, inoltre troverai con tua grande sorpresa che ho scritto che non c'è bisogno di installare alcuna DLL e potresti anche essere in grado di trovare le parti del testo in cui ho spiegato come si suppone che venga utilizzato.

Ammiro la tua arroganza e le tue capacità inglesi e probabilmente il tuo esempio di codifica.

Ma risolvere un problema senza fornire una soluzione è solo evitare la domanda.

7 bit invece di mettere in dubbio le mie capacità di lettura e le mie tecniche, perché non scrivi l'intero programma e dimostri il tuo valore. invece di filosofeggiare!

Sai fare un orologio in tempo reale secondo per secondo o no? questa è la domanda ? questo orologio dovrebbe essere nel grafico?

 

potete semplicemente aggiungere 2 e 2.

Usate il codice di 7bit per generare falsi tick in combinazione con il codice che ho postato e avrete tutto ciò che vi serve.

e btw, 7bit sembra essere uno dei migliori programmatori che partecipano a questo forum...

//z

 

spidermagos:

Ammiro la tua arroganza

Grazie.


spidermagos:

Perché non scrivi tutto il programma e lo dimostri, invece di filosofeggiare!

Lo script è completo e funziona standalone, esattamente nelle specifiche che ho dato.

L'ho postato come suggerimento per risolvere il problema degli indicatori che non possono usare chiamate bloccanti come sleep() e che non esiste altro modo per generare eventi timer dall'interno dell'indicatore stesso. Questo esatto sottoproblema dell'intero problema dell'orologio è stato menzionato immediatamente prima in questo thread e solo questo e nient'altro è stato affrontato da me. Può essere trattato come un problema completamente indipendente da solo e il mio script è una soluzione generica (e completamente indipendente) per esso e può anche essere applicato in molti scenari simili, e ho anche dato un esempio per un caso d'uso diverso.

Se vuoi scrivere codice allora devi imparare l'abilità della scomposizione dei problemi e devi anche essere in grado di riconoscere immediatamente una soluzione e anche una soluzione parziale quando ti capita di inciampare in una.

 
//< This is EA : Compile and run in folder "/experts" >
 
 
int start()
{
static int iClockPeriod = 1000 ;
 
static int iTimeStamp          ;
static int iRunTime            ;
 
while  ( ! IsStopped () )
       {
           iTimeStamp = GetTickCount ()                             ;
           Comment    ( TimeToStr ( TimeLocal () , TIME_SECONDS ) ) ;
           iRunTime   = GetTickCount () - iTimeStamp                ;
           Sleep      ( iClockPeriod    - iRunTime                ) ;
       }
}
//</This is EA : Compile and run in folder "/experts" > 

//< This is Indicator : Compile and run in folder "/experts/indicators" >
#property  indicator_chart_window
 
int start()
{
static int iClockPeriod = 1000 ;
 
static int iTimeStamp          ;
  
  
if     ( ( GetTickCount () - iTimeStamp ) < iClockPeriod )   return ;
       {
           iTimeStamp = GetTickCount ()                             ;
           Comment    ( TimeToStr ( TimeLocal () , TIME_SECONDS ) ) ;
  
 
       }
}
//</This is Indicator : Compile and run in folder "/experts/indicators" > 

Eseguite questi programmi in diversi grafici.

 
Ais:

Esegui questi programmi in diversi grafici.


Ais ; 7bit ha ragione, questo non funzionerà! La funzione di avvio è tick per tick

Le importazioni di dll sono necessarie per risolvere questo problema. ...

cioè chiamare gli script dagli indicatori

 
7bit:

Grazie.


Lo script è completo e funziona standalone, esattamente nelle specifiche che ho dato.

L'ho postato come suggerimento per risolvere il problema degli indicatori che non possono usare chiamate bloccanti come sleep() e che non esiste altro modo per generare eventi timer dall'interno dell'indicatore stesso. Questo esatto sottoproblema dell'intero problema dell'orologio è stato menzionato immediatamente prima in questo thread e solo questo e nient'altro è stato affrontato da me. Può essere trattato come un problema completamente indipendente da solo e il mio script è una soluzione generica (e completamente indipendente) per esso e può anche essere applicato in molti scenari simili, e ho anche dato un esempio per un caso d'uso diverso.

Se vuoi scrivere codice, allora devi imparare l'abilità di decomposizione del problema e devi anche essere in grado di riconoscere immediatamente una soluzione e anche una soluzione parziale quando ti capita di inciampare in una.



7bit - come si può chiamare uno script da un indicatore?

Puoi fare un esempio?

 
spidermagos:

Ho capito che la funzione Start() funziona tick per tick.

C'è un modo per usare i dati in tempo reale dall'orologio del computer e aggiornare ogni secondo? Non tick per tick ma ogni secondo?

Se è così, vi prego di darmi un aiuto.

grazie

Ciao, puoi usare un'applicazione separata per la trasmissione dei tick invece di uno script (ce ne sono diverse freeware; cerca su google "mt4 tick sender") e fare in modo che generi tick ogni 200ms circa., poi assicurati che l'orologio del tuo PC sia sincronizzato frequentemente e usa TimeLocal() + hour_difference_between_yourtimezone_and_servertimezone * 3600 invece di TimeCurrent() perché con i tick generati, forzi "solo" l'esecuzione di Start(), TimeCurrent() NON si aggiornerà a meno che il tick venga dal tuo broker.. in questo modo otterrete il tempo del vostro broker secondo per secondo... questo funziona sia per gli indicatori che per gli EAs... il fatto divertente è che ci sono alcuni broker con i loro server fuori sincronia, hanno un ritardo di diversi secondi ma solo il timestamp, purtroppo non il prezzo, candele diverse, M1 completamente diverso a volte quando c'è momentum, lol
 

Prima mettete la logica che avete in start in una funzione.

Poi fate un ciclo while nella init() con uno sleep e chiamate la funzione da lì. Ricordate che lo sleep è in millisecondi.

Questo vi permetterà di controllare i tempi invece di aspettare un cambiamento di prezzo.

Funziona perfettamente se la logica del vostro programma è a posto. L'unico problema è che non potete eseguirlo nel backtester. Fate i vostri test usando prima Start() e poi passate a init().