Come faccio a rendere l'output di un grafico in carattere monospaziato? - pagina 6

 
Nikolai Semko:

Con MT4, invece, il quadro è completamente diverso.
Se su MT5 il lavoro di Comment e Canvas è circa lo stesso, su MT4 Comment è 1000 volte più veloce. Concludo che in MT5 Comment è implementato attraverso una BitMap interna, mentre in MT4 è diverso. La differenza è impressionante. Penso che sposterò questa domanda nel forum dei bug.

Spiegazione dettagliata qui: https://www.mql5.com/ru/forum/1111/page2102#comment_6156364

Il commento in MT4 è essenzialmente falso e non causa il ridisegno del grafico.

 
Renat Fatkhullin:

Spiegazione dettagliata qui: https://www.mql5.com/ru/forum/1111/page2102#comment_6156364

Il commento in MT4 è essenzialmente falso e non causa il ridisegno del grafico.


E ora per trarre conclusioni pratiche

1. Sarebbe bello sostituire la serie di funzioni che influenzano le prestazioni nei test con le loro controparti #define

2. Il 90% delle signore/persone presenti qui sono in definizione come gli ammiccamenti nelle arance.

4. C'è un mostro definito sul forum fxsaber

5. Forse chiedergli di fare e mantenere una libreria di definizioni simili, in modo che i semplici mortali non debbano pensare in quale modalità funziona il programma?

Cosa pensa la comunità e fxsaber di un tale suggerimento?

 

Cosa c'entrano le definizioni se la gente non capisce lo strumento e cerca di testare per la velocità ciò che non può essere testato.

Richiamare un commento per guardarlo è normale.

Chiamarlo 1000-10000 volte al secondo è anormale sia logicamente (non puoi guardarlo) che tecnologicamente - causa alti costi per non visualizzare/ridisegnare l'intero grafico (non solo la tua linea).

Devi capire cosa stai facendo. Che è quello di cui ho scritto in dettaglio nella mia risposta.

 
Renat Fatkhullin:

Cosa c'entrano le definizioni se la gente non capisce lo strumento e cerca di testare per la velocità ciò che non può essere testato.

Richiamare un commento per guardarlo è normale.

Chiamarlo 1000-10000 volte al secondo è anormale sia logicamente (non puoi guardarlo) che tecnologicamente - causa alti costi per non visualizzare/ridisegnare l'intero grafico (non solo la tua linea).

Devi capire cosa stai facendo. Che è quello di cui ho scritto in dettaglio nella mia risposta.

E invece di questo suggerite "datemi un pezzo di codice per continuare a pensare", ignorando le spiegazioni del perché è sbagliato farlo in quel modo.

Renat, qui ho un EA funzionante. Sono un babbeo e non so nulla di questi disegni. Funziona ed è fantastico. Lo sottopongo al test e vedo il degrado delle prestazioni dovuto ai problemi che ho descritto.

Non avrebbe senso fare una definizione che determini in quale modalità stiamo lavorando? E in modalità test/ottimizzazione non produce nulla?

 
Alexey Volchanskiy:

Renat, qui ho un EA funzionante. Sono un babbeo e non so assolutamente nulla di questi disegni. Funziona ed è fantastico. Lo sto testando e vedo una diminuzione delle prestazioni a causa dei problemi che ho descritto.

Non avrebbe senso fare una definizione che determini in quale modalità stiamo lavorando? E in modalità test/ottimizzazione non produce nulla?


Non aspettatevi che la gente capisca tutto così. Dio non voglia che il 20% delle persone su questo forum capisca l'OOP. Può essere paragonato alla conoscenza di un'automobile. Tutti li guidano, ma pochissimi capiscono come funziona lo stesso motore a combustione interna e una frazione del % può in qualche modo riparare qualcosa.

Ma sono tutti vostri clienti).

 
Alexey Volchanskiy:

Renat, qui ho un EA funzionante. Sono un babbeo e non so assolutamente nulla di questi disegni. Funziona ed è fantastico. Lo sto testando e vedo una diminuzione delle prestazioni a causa dei problemi che ho descritto.

Non avrebbe senso fare una definizione che determini in quale modalità stiamo lavorando? E in modalità test/ottimizzazione non produce nulla?

E qual è il problema per pensare e migliorare drasticamente tutto?

C'è già qualche libreria MQL4-MQL5 in modalità "funziona ed è grande", ecco perché dobbiamo strapparci i capelli. La gente lo usa seriamente per confrontare la velocità di entrambe le piattaforme.

E ora vi state offrendo non di pensare, ma di fare un altro prodotto artigianale che sarà portato in giro dicendo "MT5 è più lento".

 
Renat Fatkhullin:

C'è già una libreria MQL4-MQL5 in modalità "funziona ed è grande", che ti fa strappare i capelli. La gente lo usa seriamente per confrontare la velocità di entrambe le piattaforme.

Questa non è un'affermazione ben ragionata.

 
Alexey Volchanskiy:

Non è logico fare una definizione che determini in quale modalità stiamo lavorando? E in modalità test/ottimizzazione non produce nulla?

C'è uno strumento universale che permette di misurare le prestazioni del codice nel tester con una linea. Possiamo vedere molte cose lì. In particolare, che una corsa singola è più lenta di una corsa di ottimizzazione.

A proposito del commento, gli sviluppatori hanno dato la loro risposta. Finora, io stesso accelero l'ottimizzazione di 1,5-2 volte con una linea.

E l'SD mi ha parlato di una sfumatura importante per la performance.


Preoccuparsi dei microsecondi di esecuzione della funzione è ragionevole solo in modalità di ottimizzazione. In tempo reale, non fa differenza. E il Commento non gioca alcun ruolo nella performance dell'Expert Advisor in tempo reale, anche se è un ordine di grandezza più lento.


Ma è un fatto che quasi nessuno scrive gli EA in modo tale che girino il più velocemente possibile nel tester.

 
Renat Fatkhullin:

Cosa c'entrano le definizioni se la gente non capisce lo strumento e cerca di testare qualcosa che non può essere testato per la velocità.

Renat Fatkhullin:

C'è già una libreria MQL4-MQL5 in modalità "funziona ed è fantastico" che ti fa strappare i capelli. La gente lo usa seriamente per confrontare la velocità di entrambe le piattaforme.


E personalmente non mi dispiace per il lavoro svolto. Questibenchmark apparentemente inutili si sonorivelati non essere affatto inutili. Come molte cose utili sono venute alla luce grazie alla tua spiegazione dettagliata, e di conseguenza alcuni puzzle hanno cominciato a combaciare. Non riesco a trovarlo da nessuna parte, quindi devo pizzicarlo :)).

Per esempio, anche se mi vergogno a confessarlo, non sapevo che la funzione Update() di Kanvas ridisegna tutta la finestra indipendentemente dalle sue dimensioni. Ma per capirlo, ho dovuto solo guardare nelle viscere di CCanvas. E sapere almeno questo fatto cambierà la logica del lavoro e mi salverà da gesti inutili in alcune implementazioni legate alla grafica. E Comment non c'entrava niente, era solo un "solo per arrivare in fondo". Grazie ancora!

Ciò che non è chiaro è che mentre la funzione Update(false) in MT5 non disegna nulla sullo schermo, la funzione MT4 non disegna l'intera finestra ma solo il canvas stesso. Ciò significa che la funzione ResourceCreate in MT5 non disegna un array di pixel senza ChartRedraw() ma lo fa in MT4. Penso che sarebbe utile anche in MT5.

 
Nikolai Semko:

ResourceCreate in MT5 non visualizza un array di pixel senza ChartRedraw(), ma lo fa in MT4.

E lo fa correttamente. È logico come non fare ChartRedraw dopo aver cambiato le proprietà dell'oggetto. Usando la terminologia di

Forum sul trading, sistemi di trading automatico e test di strategia

Errori, bug, domande

Renat Fatkhullin, 2017.12.05 02:51

  • MT5 ha un sistema più corretto di cambiare gli oggetti sul grafico e bisogna capire chiaramente le conseguenze di mescolare i comandi di lettura/scrittura
    si raccomanda di non mischiare i comandi di lettura/scrittura, ma di fare una lettura e una scrittura di massa separate.

ChartRedraw dovrebbe essere chiamato dopo la scrittura di massa, non dopo ogni scrittura.