Il mio approccio. Il nucleo è il motore. - pagina 86

 
Peter, ho capito dalla gif dell'ellisse che la forma è una tela solida? E come funzionano gli elenchi a discesa? Mi interessa il caso in cui l'elenco a discesa è più grande della dimensione del modulo.
 
Vasiliy Sokolov:

Mettiamola così: non mi piacciono alcune sciatterie della mia soluzione. Dovete creare oggetti MT. Ma, in realtà, è solo un pregiudizio. Che differenza fa? Non hai bisogno di più di 20-30 di loro per un trasferimento completo.

30*64 caratteri = 1920 caratteri. Questo è sufficiente per trasferire dati di tabelle di grandi dimensioni.

 
Dmitry Fedoseev:
Peter, vedo dalla gif dell'ellisse che il modulo è una tela continua? E come funzionano gli elenchi a discesa? Mi interessa il caso in cui l'elenco a discesa supera la dimensione del modulo.

Sì, il modulo è un singolo kanvas. Il costruttore scrive i nomi del canvas stesso e crea funzioni wrapper per lavorare con esso.

Gli elenchi a discesa funzionano anche nell'area esterna alla finestra. Questo è implementato.

L'elenco a discesa è un altro kanvas. Appare e scompare quando si clicca il pulsante.

 
Vasiliy Sokolov:

Mappatura diretta delle strutture tramite unione ad array di byte, condivisa per l'accesso globale. Non so se questo è tecnicamente fattibile, ma se così fosse, la velocità sarebbe cosmica, dato che non si dovrebbe copiare assolutamente nulla.

Accetterei volentieri questa soluzione se mi fornite un esempio.

 

Fate attenzione allo scambio di dati tramite oggetti grafici :-)

altrimenti puoi facilmente far apparire il tuo Expert Advisor come "non può essere ottimizzato"...

 
Реter Konow:

La mia soluzione è la migliore opzione nelle condizioni iniziali.

Cos'è una stringa:

  1. Nessuna dimensione fissa. Di conseguenza, è impossibile organizzare un array di stringhe e accedere a una stringa arbitraria in questo array;
  2. Completa assenza di digitazione dei dati nelle stringhe. Dovete definire un sottotipo dinamicamente all'interno del parsing delle stringhe. Si perde tempo prezioso per analizzare i token necessari; e se i lessemi contengono errori, la stringa non lo controlla in alcun modo. Si ottiene una stringa e si prega che sia corretta;
  3. Bassa efficienza di memorizzazione delle informazioni per byte. Stringhe di servizio come "opt=1;cancel=3" usano al massimo 35-40 caratteri (byte) su 256 possibili (17%). Per inviare 100 byte di informazioni si dovrebbe formare una stringa di 588 byte, sovraccaricando il canale di comunicazione. Se si comprimono i caratteri, il codice diventa molto complicato. Se abbreviate i nomi delle variabili, aiuta solo un po'.

E nonostante tutte queste cose ovvie, sei come Robin Hood , continuando a proclamare quanto sei veloce e preciso, e quanto bene hai indovinato la corda. No, non l'ho fatto, ed è tutto molto malsano.

Non cercare di cavalcare il tuo istinto dove è necessaria una conoscenza fondamentale.

 
Vasiliy Sokolov:

Che cos'è una corda:

  1. Non c'è una dimensione fissa. Di conseguenza, è impossibile organizzare un array di stringhe e accedere a una stringa arbitraria in questo array;
  2. Completa mancanza di dati di battitura nella stringa. Dovete definire un sottotipo dinamicamente all'interno del parsing delle stringhe. Si perde tempo prezioso per analizzare i token necessari; e se i lessemi contengono errori, la stringa non lo controlla in alcun modo. Si ottiene una stringa e si prega che sia corretta;
  3. Bassa efficienza di memorizzazione delle informazioni per byte. Stringhe di servizio come "opt=1;cancel=3" usano al massimo 35-40 caratteri (byte) su 256 possibili (17%). Per inviare 100 byte di informazioni si dovrebbe formare una stringa di 588 byte, sovraccaricando il canale di comunicazione. Se si comprimono i caratteri, il codice diventa molto complicato. Se abbreviate i nomi delle variabili, aiuta solo un po'.

E nonostante tutte queste cose ovvie, sei come Robin Hood , continuando a proclamare quanto sei veloce e preciso, e quanto bene hai indovinato la corda. No, non l'ho fatto, ed è tutto molto malsano.

Non cercate di cavalcare il vostro istinto dove è necessario conoscere i fondamenti.

Vasily, non pensi che gli sviluppatori di MT abbiano preso in considerazione i problemi delle stringhe quando hanno preservato la descrizione degli oggetti MT?

È molto più figo cavalcare la conoscenza fondamentale di qualcun altro e usare la propria intuizione per ottenere ancora di più.

 
Реter Konow:

Vasiliy, non pensi che gli sviluppatori di MT abbiano preso in considerazione i problemi delle stringhe, quando hanno memorizzato la descrizione degli oggetti MT?

Peter, ogni algoritmo di memorizzazione dei dati ha le sue debolezze e i suoi punti di forza. Gli sviluppatori hanno certamente preso in considerazione molte cose, e sono certamente buone, ma fondamentalmente le stringhe rimarranno sempre stringhe.

 
Vasiliy Sokolov:

Peter, ogni algoritmo di memorizzazione dei dati ha le sue debolezze e i suoi punti di forza. Gli sviluppatori, naturalmente, hanno preso in considerazione molte cose, e sono certamente buone, ma fondamentalmente, le stringhe rimarranno sempre stringhe.

Vasily, se la pratica mostra che la mia soluzione è difettosa, la abbandonerò. E prenderò la soluzione di Nikolai. Se anche questo è brutto, tornerò a OnChartEvent() e dirò che non si può fare nulla.

Tuttavia, non c'è motivo di credere che l'implementazione della mia soluzione sarà ancora zoppa.

Lo scopriremo presto.

 
z.s. Specificamente sul tema della memorizzazione di stringhe in oggetti MT, c'è uno strano inconveniente. Se iniziate a comprimere i dati e usate caratteri non stampabili nel nome dell'oggetto, in alcuni casi non sarete in grado di accedere a questo oggetto. Il glitch è probabilmente ancora lì perché è molto specifico e non molte persone lo conoscono, ma potresti comunque imbatterti in esso.
Motivazione: