Il mio approccio. Il nucleo è il motore. - pagina 124
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Perché invece di OrderOpenPrice metti OrderOpenTime()
Giusto. Ho fatto confusione. :)
Devo ammettere che sono rimasto un po' sorpreso dai risultati del test.
Per questo volevo che faceste tutto da soli, non dare soluzioni preconfezionate, che sono come piselli contro il muro.
Ho sentito parlare di puntatori a funzioni. Ma ho pochissime funzioni. È per questo che non ho spazio e ho bisogno di usare OOP.
Ho un concetto di sviluppo diverso. Credo che il funzionamento di blocchi olistici multifunzione sia più efficiente di quello di grandi complessi di piccole funzioni.
Più promettente, dal punto di vista dello sviluppo dei meccanismi.
Questa è la mia opinione...
Ho diversi grandi blocchi. Per applicare l'OOP, bisogna scomporli in piccole funzioni, organizzarli in classi, e poi, usare puntatori e altre cose.
Ma non sarò in grado di farlo. Semplicemente perché la penso diversamente.
Il concetto di OOP non coincide con le peculiarità del mio modo di pensare, e non posso espandermi in esso. Questo è il motivo.
Nota, Nikolai, che in materia di sviluppo programmatico, non ho alcun problema. Tutto si sta sviluppando molto rapidamente.
Allo stesso tempo, i meccanismi funzionano bene.
Ora ho imparato a padroneggiare le unioni, e vedo la loro applicazione in un compito particolare: scrivere stringhe in una risorsa.
Proverò a controllare la velocità e il carico della CPU nell'EA di prova e posterò il risultato.
Se è buono, ricostruirò la comunicazione tra motore e EA, rendendola su risorse.
Per usare le risorse per passare stringhe di lunghezza non definita, queste stringhe devono essere scritte in un array di char.
Tuttavia, sembra che la loro dimensione sia dichiarata solo all'interno dell'unione e non cambi dopo.
Ho provato a ridimensionare l'array di char dall'unione, attraverso ArrayResize, ma non c'è alcun effetto.
Sembra che la dimensione dell'array di char debba essere impostata in anticipo. E dovrebbe essere di dimensioni massime.
Ecco il codice:
Ora è chiaro che la dimensione dell'array dichar nell' unione deve essere conosciuta in anticipo. PerchéArrayResize(u.Char,StrSize) non lo cambia.
Quindi dobbiamo impostare la dimensione dell'array uguale alla lunghezza della stringa massima...
Buone notizie. Tutto funziona bene.
La stringa viene scritta nella risorsa e letta da un altro EA su un altro grafico.
Non c'è carico sul processore. Il carico è causato solo dalla chiamata dell'Alert che stampa la stringa.
Ecco il codice di Expert Advisors:
1. Expert Advisor forma la stringa e la scrive in una risorsa.
Un consulente che legge una linea da una risorsa su un altro grafico:
Userà le risorse per la comunicazione. L'unico inconveniente è che dovete impostare la dimensione massima dell'array di char nell'unione. Ma non c'è bisogno di pensare alla dimensione della stringa e al numero di oggetti MT.
Questo metodo è più lento del metodo di collegamento MT-object, ma va bene.
Hai una teoria interessante, anche se non corrisponde del tutto ai risultati dei miei esperimenti, che ora posterò qui sotto.
Come mostra il test, è l'inizializzazione dell'array di pixel che carica maggiormente la CPU.
Guarda il test EA qui sotto.
Rileggete il compito:
Vasiliy Sokolov:
Peter, ecco il compito. Creare un pannello che mostri le attuali aperture degli ordini in MT4. Non è necessario fare una copia completa del pannello del sistema, basta fare una semplice tabella con le proprietà di base degli ordini aperti: prezzo aperto, direzione, profitto. Il resto dipende da voi. La cosa principale è che quando un ordine viene chiuso, anche la sua indicazione nella tua tabella scompare. E viceversa, apparirebbe in questa tabella quando viene aperto un nuovo ordine.
Qui potete vedere le due operazioni necessarie di ridisegno quando la tabella cambia sullo schermo: 1. quando si chiude un trade e 2. quando si apre un trade. Perché ridisegnare i pixel nel resto del tempo?
Sta risolvendo qualche altro problema?
Rileggete il problema:
Vasiliy Sokolov:
Qui vediamo due operazioni di ridisegno necessarie quando la tabella cambia sullo schermo: 1. quando si chiude un trade e 2. quando si apre un trade. Perché ridisegnare i pixel in altri momenti?
Sta risolvendo qualche altro problema?
Beh, sono ridisegnati esattamente come hai detto tu.
Il carico del processore appare durante l'animazione:
C'è una costante reinizializzazione dei valori nell'array di pixel. Ogni 16 millisecondi. Questo carica il processore fino al 40%.
Stavo cercando di capire quale sia esattamente il carico. Ho pensato che si trattasse di salvare una risorsa o di leggerla. Si è scoperto che era la reinizializzazione dell'array nel ciclo di disegno.
Si è anche scoperto che una chiamata costante di ObjectSetInteger(0, "MT object",OBJPROP_SELECTED,1); (ogni 16 ms) carica anche il processore. Di circa il 10%.
Uso questa chiamata per dire a un altro EA di leggere la risorsa con i dati dell'animazione.
In totale, ottiene +~50% di carico della CPU durante l'animazione.