Emulazione di tick da un EA/indicatore - pagina 2

 
Meat:

Il tuo codice, prima di tutto, non si limita ad emulare un tick, ma forza un aggiornamento del grafico con il corrispondente caricamento della storia ad ogni tick. Ma almeno guardi il file di log a volte? Guardalo a tuo piacimento e vedi cosa sta succedendo lì. E stimare cosa ci sarà tra un giorno o poco più. Per non parlare del carico sul vostro sistema e sul canale Internet.

Se invece di aggiornare il grafico nel vostro codice emuliamo il tick, questo porterà a dei loop (cioè, l'indicatore partirà senza fermarsi), e, di conseguenza, il terminale si blocca.

Perché devo aggiornare senza caricare la cronologia? L'aggiornamento forzato del grafico è l'emulazione di tick.

Ecco il log dopo 2500 ticks:

00:51:32 Check_UpdateChart EURUSD,M1: caricato con successo
00:52:48 Check_UpdateChart EURUSD,M1: uninit reason 1
00:52:48 Check_UpdateChart EURUSD,M1: rimosso

Niente è appeso. L'emulazione è fatta perché l'indicatore vada in loop. In altre parole, si innesca da solo.
 
Zhunko:

Perché è necessario aggiornare senza caricare la cronologia? Forzare l'aggiornamento del grafico è l'emulazione del tick.

Ecco il log dopo 2500 ticks:

00:51:32 Check_UpdateChart EURUSD,M1: caricato con successo
00:52:48 Check_UpdateChart EURUSD,M1: uninit reason 1
00:52:48 Check_UpdateChart EURUSD,M1: rimosso

Niente è appeso. L'emulazione è fatta perché l'indicatore vada in loop. Cioè, inizia da solo.


Pensavo di averlo scritto chiaramente: "log log log". Allora perché mi mostri il registro degli esperti? A quanto pare, avevo ragione, non ci guardi mai. Non mi sorprenderei se tu avessi metà del tuo hard disk pieno di questi registri :)

L'aggiornamento della storia e l'emulazione dei tick sono cose diverse. I tick in arrivo dal server non aggiornano la storia (cioè le barre precedenti). Se ciò avvenisse, il terminale starebbe sprecando molto traffico e risorse.

Pertanto, non è chiaro perché è necessario aggiornarlo su ogni tick, il che azzera IndicatorCounted(), e quindi richiede il controllo dell'intera storia su ogni tick. Sono un sacco di risorse sprecate.

 
Meat:

I tick in arrivo dal server non aggiornano la storia (cioè le barre precedenti). Se lo facessero, il terminale consumerebbe molto traffico e risorse.

Cosa fare, se per esempio 1 barra = 2 tick )))))? Nel mio caso le zecche aggiornano la storia ?
 
IgorM:

posto dopo

Ce l'ho nel registro:

23:39:01 test EURUSD,H1: caricato con successo
23:39:01 test EURUSD,H1: PostMsgAddr =1977398342
23:39:01 test EURUSD,H1: inizializzato
23:39:01 test EURUSD,H1: ciclo completato....

Sì, non è chiaro cosa stia succedendo... Prova questo allora: Nella sezione di importazione #import"user32.dll" aggiungete una funzione:

CallWindowProcA(int lpPrevWndFunc[], int hWnd, int Msg, int wParam, int lParam);

E alla fine della funzione SetMyTimer aggiungete una linea: CallWindowProcA(codice,0,0,0,0,0);

E con qualche indicatore in esecuzione parallela controllare se un tick è generato in questo momento.

 
solar:
Cosa succede se ho per esempio 1 barra = 2 tick ))))) Nel mio caso le zecche aggiornano la storia ?
Naturalmente la barra attuale è sempre aggiornata, ma stavamo parlando della storia in generale.
 
Meat:


L'ho scritto chiaramente: "il registro". Allora perché mi mostri il log dell'Expert Advisor? A quanto pare avevo ragione, non ci guardi mai - non mi sorprende che metà del tuo hard disk sia già pieno di questi log :)

E non confondete i concetti: l'aggiornamento della storia e l'emulazione di tick sono cose diverse. I tick in arrivo dal server non aggiornano la storia (cioè le barre precedenti). Se lo facessero, il terminale consumerebbe enormi quantità di traffico e risorse.

Pertanto, non è chiaro perché è necessario aggiornarlo su ogni tick, il che azzera IndicatorCounted(), e quindi richiede il controllo dell'intera storia su ogni tick. Sono un sacco di risorse sprecate.

Anche il registro è vuoto, ma per qualche altra ragione. Uso il pulitore della console dopo aver scambiato la storia. Ho il mio registro.

Il log di MT4 non mi preoccupa affatto. Metacquotes ha ripetutamente affermato che la registrazione è l'ultima cosa da fare. Non è una priorità. Non consuma alcuna risorsa. Ha solo bisogno di essere pulito in tempo, tutto qui.

Per quanto riguarda IndicatorCounted()... Non lo uso. I miei indicatori sono scatole vuote per estrarre informazioni da Expert Advisor. Penso che sia dannoso usare gli indicatori in MT4. I thread dell'interfaccia sono lenti e lavorano 3 volte più lentamente di Expert Advisors.

Evidenziato è ovviamente corretto, ma vale la pena preoccuparsi tanto della separazione?

Ecco il registro per 415 aggiornamenti:

03:00:44 Indicatore personalizzato Check_UpdateChart EURUSD,M1: caricato con successo
03:00:46 HistoryCenter: sincronizzare 'EURUSD1
03:00:46 HistoryCenter: 2 barre importate in 'EURUSD1'.
03:00:47 HistoryCenter: sincronizzare 'EURUSD1'.
03:00:47 HistoryCenter: 2 barre importate in 'EURUSD1'.
03:00:47 HistoryCenter: sincronizzare 'EURUSD1'.
03:00:47 HistoryCenter: 2 barre importate in 'EURUSD1'.
03:00:48 HistoryCenter: sincronizzare 'EURUSD1'.
03:00:48 HistoryCenter: 2 barre importate in 'EURUSD1'.
03:00:48 HistoryCenter: sincronizzare 'EURUSD1'.
03:00:49 HistoryCenter: 2 barre importate in 'EURUSD1'.
03:00:49 HistoryCenter: sincronizzare 'EURUSD1'.
03:00:49 HistoryCenter: 2 barre importate in 'EURUSD1'.
03:00:50 HistoryCenter: sincronizzare 'EURUSD1'.
03:00:50 HistoryCenter: 2 barre importate in 'EURUSD1'.
03:00:51 HistoryCenter: sincronizzare 'EURUSD1'.
03:00:51 HistoryCenter: 2 barre importate in 'EURUSD1'.
03:00:51 HistoryCenter: sincronizzare 'EURUSD1'.
03:00:52 HistoryCenter: 2 barre importate in 'EURUSD1'.
03:00:52 HistoryCenter: sincronizzare 'EURUSD1'.
03:00:55 HistoryCenter: 2 barre importate in 'EURUSD1'.
03:00:55 HistoryCenter: sincronizzare 'EURUSD1'.
03:00:55 HistoryCenter: 2 barre importate in 'EURUSD1'.
03:00:55 HistoryCenter: sincronizzare 'EURUSD1'.
03:00:55 HistoryCenter: 2 barre importate in 'EURUSD1'.
03:00:55 HistoryCenter: sincronizzare 'EURUSD1'.
03:00:56 HistoryCenter: 2 barre importate in 'EURUSD1'.
03:00:56 HistoryCenter: sincronizzare 'EURUSD1'.
03:00:57 Indicatore personalizzato Check_UpdateChart EURUSD,M1: rimosso
03:00:59 HistoryCenter: 2 barre importate in 'EURUSD1'.
03:01:01 MetaTrader build 438 fermato

Non mi sembra importante per testare le prestazioni dell'indicatore durante il fine settimana. Il registro può essere pulito manualmente dopo il lavoro.

Ma è più facile inserire una linea di codice alla fine di start() che inserire il vostro codice. Non ha senso complicare le cose.

 

Ho XP - sembra funzionare - poi si blocca il terminale ....

Sia nel codice dell'indicatore - o nel codice dell'EA - o da solo - il risultato è lo stesso - il terminale si blocca dopo circa 15 - 50 secondi ...

Quindi hai qualcosa che non va...

ma non è una cattiva idea ...

 

C'è un modo per renderlo simile per un indicatore?

Semplicemente puntando il cursore al punto nel tempo in cui voglio vedere la lettura dell'indicatore (in quel punto)?

 

Zhunko, beh, se tutto è non-standard (il tuo log, la tua implementazione degli indicatori, ecc.), allora perché stai iniziando tutta questa conversazione? In realtà stiamo discutendo del lavoro specifico con MT4, non dei nostri sviluppi.

Nel mio primo post ho specificamente sottolineato che il mio codice sarà utile se il compito è quello di fare a meno di collegamenti esterni, vale a dire, per implementare un Expert Advisor/indicatore autosufficiente che utilizza solo le librerie di sistema. E se stai utilizzando i tuoi sviluppi, allora non è applicabile a te.

E in generale, non capisco perché devo "pulire manualmente il registro dopo il lavoro", se è più facile non ingombrarlo. Dopo tutto, per quanto ho capito, voi implementate i vostri sviluppi in DLL. Allora cosa ti impedisce di installare lo stesso timer lì, come ho suggerito qui. Ma per qualche ragione tu preferisci tutti i tipi di balli con il tamburello e la pulizia del log. Il mio codice ti dà fastidio, mentre tu sei troppo pigro per pulire il log ogni giorno :)

 
elmucon:

Ho XP - sembra funzionare - poi si blocca il terminale ....

Sia nel codice dell'indicatore - o nel codice dell'EA - o da solo - il risultato è lo stesso - il terminale si blocca dopo circa 15 - 50 secondi ...

Quindi hai qualcosa che non va...

ma non è una cattiva idea ...


Sì, forse è un po' esagerato. Non sono molto esperto di assemblaggio, quindi non giudicatemi troppo severamente :) Cercherò di capire qual è il problema.