La tela è forte! - pagina 81

 
Dmitry Fedoseev lavorare con gli oggetti nello studio del consulente.

La soluzione del problema è nell'EA:

Forse ObjectFind() non è necessario.

Se aveste allegato il codice con il problema, il problema sarebbe stato risolto ieri.

Il problema non è affatto questo.
Questo problema ( congelamento di OnChartEvent) esiste solo in MT4 e non è affatto ovvio. Anch'io sono stato tormentato per molto tempo. Ma il problema era già stato discusso in questo thread circa un anno fa.

 
Nikolai Semko #:

non è affatto questo il problema.
Questo problema esiste solo in MT4 e non è affatto evidente. Io stesso mi sono tormentato per molto tempo. Ma è già stato discusso in questo thread circa un anno fa.

Non so assolutamente quale sia il problema, ho solo scritto cosa lo causa e come si risolve. Ma potete continuare a soffrire...

 
Dmitry Fedoseev #:

E non so affatto quale sia il problema, ho solo scritto quali sono le cause e come si risolve. Ma potete continuare a soffrire.

Queste parole dovrebbero essere scolpite nella pietra! :))
 
Dmitry Fedoseev #:

E non so affatto quale sia il problema, ho solo scritto quali sono le cause e come si risolve. Ma potete continuare a soffrire.

Il problema della deunit non ha nulla a che fare con questo. Questo problema si verifica solo nella MT5. E qui stiamo parlando di MT4.

 
Nikolai Semko #:

Lei è una persona strana.
Tu stesso vuoi che gli altri capiscano il tuo codice e le centinaia di righe quando fai una domanda, ma non provi nemmeno a penetrare nella risposta e a guardare nel codice di cento righe.

Ok. Vi semplificherò la vita.
Traducete tutto il codice da OnChartEvent a OnTimer. Impostate il timer a 30 millisecondi. Dovrete inserire solo variabili globali (non terminali), che dovranno essere aggiornate in OnChartEvent, e resettate (che sono bool) in OnTimer.
Le variabili possono essere
le seguenti

Per me non era affatto così ovvio. Dal link che ho fornito prima ho appreso che il problema è vecchio e la sua soluzione è stata cercata più di una volta anche da autori con oltre 10.000 vendite sul mercato.

E questo vale per tutti gli Expert Advisor MT4 con oggetti, il che significa che un numero enorme di utenti ha affrontato questo problema. Scrivono agli autori presenti sul mercato, ma non conoscono la soluzione. Ecco perché era così importante risolvere questo problema.

Guardando la GIF (prova di fattibilità) sono deciso a implementare questo approccio nei miei prodotti. Probabilmente mi siederò, sperimenterò e riferirò domani.
 
Vitaliy Kuznetsov #:

Per me non era affatto così ovvio. Dal link che ho fornito in precedenza, ho appreso che il problema è vecchio e la sua soluzione è stata cercata più di una volta anche da autori con oltre 10.000 vendite sul mercato.

E questo vale per tutti gli Expert Advisor MT4 con oggetti, il che significa che un numero enorme di utenti ha affrontato questo problema. Scrivono agli autori presenti sul mercato, ma non conoscono la soluzione. Ecco perché era così importante risolvere questo problema.

Guardando a GIF sono determinato a implementare questo approccio nei miei prodotti. Probabilmente domani mi siederò, sperimenterò e riferirò.

Forse la stessa cosa può essere fatta nell'Expert Advisor.
Ma funziona senza ritardi.

 
Nikolai Semko #:

Forse la stessa cosa può essere fatta nell'EA.
Ma funziona senza ritardi.

Innanzitutto, grazie!

Sembra funzionare all'interno del codice fornito. Ma è ancora in conflitto con gli EA. Per esempio con questo - https://www.mql5.com/ru/code/35440.

Ho controllato anche con altri EA. Dovrei cercare di migliorare il codice dell'EA. Il problema è ancora rilevante.
cm partial closing position
cm partial closing position
  • www.mql5.com
Советник закрывает позиции частями и переводит их в безубыток.
 
Vitaliy Kuznetsov #:

Innanzitutto, grazie!

Sembra funzionare all'interno del codice fornito. Ma è ancora in conflitto con gli EA. Per esempio con questo - https://www.mql5.com/ru/code/35440.

Ho controllato anche con altri EA. Dovrei cercare di migliorare il codice dell'EA. È ancora un problema.

Non vedo alcun ritardo.
Sì, dovresti anche modificare il codice dell'EA in modo che non ci siano calcoli in OnChartEvent.
La regola è semplice:
- le variabili globali (non terminali) degli eventi e delle coordinate dovrebbero essere riempite in OnChartEvent, ma non eseguire funzioni con calcoliingombranti da esso .
- Tutte le chiamate di tali funzioni devono essere fatte dal timer in base alle variabili dell'evento,
- dopo che gli eventi sono stati elaborati, ci si deve ricordare di resettare questi eventi nel timer, in modo che alla prossima iterazione del timer non si esegua di nuovo la stessa cosa.

Ripeto - si tratta di un bug di OnChartEvent che si blocca solo in MT4

La cosa divertente è che se MQ risolverà questo bug, che è apparentemente elementare ( OnChartEventsi blocca se ci sono circa 10 millisecondi di calcoli al suo interno) ed è risolvibile così facilmente con l'aiuto di un timer, allora molte persone noteranno che dopo aver ricompilato i loro indicatori o Expert Advisor, in cui OnChartEvent è utilizzato attivamente, tutto sta volando:)))
O forse è un bug artificiale per far passare la gente a MT5 ;))))

 
Nikolai Semko #:

Non vedo alcun ritardo.
Sì, dovresti anche adattare il codice nell'EA in modo che non ci siano calcoli in OnChartEvent .
La regola è semplice:
- le variabili globali (non terminali) degli eventi e delle coordinate dovrebbero essere riempite in OnChartEvent, ma non eseguire funzioni con calcoliingombranti da esso .
- Tutte le chiamate di tali funzioni devono essere fatte dal timer in base alle variabili dell'evento,
- dopo che gli eventi sono stati elaborati, ci si deve ricordare di resettare questi eventi nel timer, in modo che alla prossima iterazione del timer non si esegua di nuovo la stessa cosa.

Ripeto - si tratta di un bug di OnChartEvent che si blocca solo in MT4

La cosa divertente è che se MQ risolverà questo bug, che è apparentemente elementare ( OnChartEventsi blocca se ci sono circa 10 millisecondi di calcoli al suo interno) ed è risolvibile così facilmente con l'aiuto di un timer, allora molte persone noteranno che dopo aver ricompilato i loro indicatori o Expert Advisor, in cui OnChartEvent è utilizzato attivamente, tutto sta volando:)))
O forse è un bug artificiale per far passare la gente a MT5 ;))))

Risulta che il metodo di miglioramento del codice dell'indicatore ordinario non può risolvere il conflitto con gli EA in codice chiuso che utilizzano gli oggetti.

Spero che il miglioramento dell'EA risolva globalmente il conflitto con tutti gli indicatori del cruscotto (che è il mio compito).

Ho scritto nel thread MT4 build 1353, forse i programmatori del terminale presteranno attenzione.

P.S. Ho apportato modifiche ai gufi e qualcosa di sci non è andato ...

 
Vitaliy Kuznetsov #:


P.S. Modificati i gufi e qualcosa di sci non è andato....

Siete sicuri che non ci sia nulla in OnChartEvent con loop e chiamate di altre funzioni?
Misurate
con GetMicrosecondCount() il tempo di calcolo di ciò che avviene in OnTimer (o OnChartEvent ) .

Motivazione: