Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 264

 
ma è così che sembra. Se la dimensione dell'array non è preimpostata, allora deve assolutamente essere ArrayResize. E alla fine di ArrayResize(array,0); sì, è perfetto, non ci avevo mai pensato...........Uchtu....... Grazie))))
 
Non si può fare un ArrayResize su ogni tick!!!!!!! Altrimenti vi impantanerete nei calcoli................... E nessun processore multi-core vi salverà........
 
L'articolo "ShowCandleSize" pubblicato il 11.11.2013 07:54 non viene visualizzato correttamente e non può essere modificato per qualche motivo sconosciuto.
Ho contattato il supporto il 15 novembre con questo problema su noreply@metaquotes.net, ma non ho ricevuto risposta.
Potete per favore dirmi l'indirizzo corretto per una domanda del genere.
Con rispetto.
--
Vladislav Shurkin,
Il 20 novembre 2013.
 
artmedia70:
Tutti i risultati delle operazioni chiuse possono essere visualizzati nella storia del conto. Per software. È necessario stipare un array con loro tutto il tempo? Potrebbero essercene molti. È meglio limitare la profondità necessaria della storia e riempire l'array, se proprio non si può vivere senza.

Grazie per il chiarimento!

"Tutti i risultati dei trade chiusi possono essere visualizzati nella storia del conto. Da un software" - Come?
 
VladislavVG:


Al termine del programma, la memoria allocata dinamicamente deve essere liberata per evitare perdite di memoria. Non so se gli sviluppatori di MKL seguono questo



Lo fanno, ecco perché gli array sono resi statici, per raccoglierli in un posto e liberarli in seguito. ArrayResize(a,0) alla fine del programma non ha molto senso, se non altro per autoassicurazione.
 
Leo59:
Grazie per il tuo chiarimento!

"Tutti i risultati delle operazioni chiuse possono essere visualizzati nella cronologia del conto. Programmaticamente" - Come?

OrderSelect(ticket,SELECT_BY_TICKET,MODE_HISTORY)

o

OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)

 
alsu:

OrderSelect(ticket,SELECT_BY_TICKET,MODE_HISTORY)

o

OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)




Grazie!


Cosa c'è di buono nel tutorial di Kovalev? Penso che sia buono perché si impara a risolvere semplici problemi usando semplici esempi di codice di programma.

In realtà, ho iniziato a imparare la programmazione dal codice degli indicatori di Vladislav Goshkov. Ho disegnato quell'indicatore con i raggi di supporto e resistenza di De-Mark. C'erano le seguenti linee:
ObjectMove(buff_str, 1, UpBT[0], UpP[0]);
ObjectMove(buff_str, 0, UpBT[1], UpP[1]);
L'ho messo. L'ho guardato nel tester e ho visto come funziona. Disegna raggi per frattali ma guarda nel passato invece che nel futuro... )))). Ho iniziato a fare domande e ha funzionato! Rispetto a Vladislav!!!!
Mi sono imbattuto nel libro di testo di Kovalev più tardi. Vorrei che più domande avessero una risposta in questo formato.

E un'altra cosa.
"Vuoi scrivere il tuo esperto e non sai da dove cominciare? Con l'apparizione degli articoli di Rosh sul sito di Alpari, i primi passi nella creazione di un esperto possono essere resi facili e indolori.
Rosh descrive i passi che ogni scrittore EA attraversa in modo semplice e accessibile. Molte delle sfumature della programmazione, la cui conoscenza viene con una lunga esperienza, sono ora disponibili per tutti.
Passo dopo passo, partendo dalle basi, imparerete le complessità della programmazione Forex"

Forse sapete a quale link si può leggere questa panoramica dell'articolo?
 
VladislavVG:


Perché non è un array, per essere precisi. Se vuoi maggiori dettagli - vedi le descrizioni di C. Mi sto riferendo ad esso, perché gli sviluppatori fin dall'inizio hanno detto che su tutto ciò che non è chiaro o presentato in modo incompleto - vedi lo standard C.

Quando dichiarate la variabile double buffer[]; allocate la memoria per una variabile, che in termini C si chiama "puntatore", è di tipo intero e memorizza l 'indirizzo della cella di memoria da cui partirà l'array. Se si controlla la dimensionalità della variabile in MCL, si ottiene il valore 0. Questo significa che l'array stesso non è allocato in memoria e quando si cerca di assegnare un valore, non c'è nessun posto dove scriverlo: in MCL non c'è aritmetica degli indirizzi e i puntatori non possono essere gestiti. In C si può scrivere, ma con la memoria "non allocata" di solito porta a un crash del sistema. Quando applicate AreiResize(array,N), (N>0), questo alloca la memoria per l'array (almeno un elemento) e crea lo spazio per scrivere i valori. Poi, quando viene controllato, la dimensione dell'array sarà diversa da 0.

Il concetto di array statico in termini di C ha diversi significati:

1. un array statico (così come una variabile/tipo statico) sono tali variabili/array le cui dimensioni sono note in fase di compilazione (precompilazione per MKL4). Per esempio, quando viene descritto double buff[10000];, al compilatore viene detta la dimensione della variabile e può immediatamente allocare la memoria. In contrasto con questo concetto, c'è il concetto di "array dinamico", cioè un tale array la cui dimensione è sconosciuta al momento della compilazione e diventa nota solo a run-time; questi sono tutti array di dimensione variabile. Quando si accede a tali array, la memoria deve essere allocata in anticipo. La memoria è allocata al di fuori della memoria statica del programma.

In C/C++, se un array è descritto in un blocco, la sua visibilità è limitata dal blocco - che si tratti di un array statico o dinamico. Errori nei programmi come i "memory leaks" sono associati agli array dinamici definiti localmente, cioè quando un puntatore di memoria viene distrutto perché lascia l'area di visibilità, ma la memoria allocata ad esso rimane occupata.

2 Il concetto di array "statico" come una variabile descritta con modificatore statico - tali variabili non vengono distrutte quando si lascia l'ambito del blocco - si trovano in un'area di memoria separata - quindi i valori in esse sono conservati. Il rischio di perdite di memoria è ridotto. Un array dichiarato come dinamico nel senso di p.1 (cioè la dimensione dell'array non è nota in fase di compilazione), può anche essere statico nel senso di p.2, cioè dichiarato con il modificatore "static".

Quando si terminano i programmi, la memoria allocata dinamicamente deve essere rilasciata per evitare perdite di memoria. Non so se gli sviluppatori di MKL seguono questo, ma nei miei programmi libero sempre la memoria - abitudine da C - ArreyResize(array,0);

In MKL tutti gli array sono statici nel senso del punto 2.

Ora, per quanto riguarda la tua domanda: "Perchénon si possono assegnare valori a un array statico doppio buffer[]; ? Perché nessuna memoria è allocata per esso (infatti, è un array dinamico con un modificatore statico). Prima di assegnare i valori, la memoria dovrebbe essere allocata, cioè ArrayResize con dimensione maggiore di 0 dovrebbe essere applicato a questo array. Per gli array, è necessario controllare l'overrun di memoria (fuori dall'array).

SZ Spero di essere stato chiaro. Ho cercato di renderlo il più semplice possibile.

"Non puoi perdere la tua maestria"!
Grazie!!!!!!!!
 
VladislavVG:

Perché non è un array, per essere precisi. Se volete maggiori dettagli, consultate le descrizioni del linguaggio C. Mi riferisco ad esso perché gli sviluppatori hanno detto fin dall'inizio che per qualsiasi cosa non chiara o incompleta, consultate lo standard C.
........

Grazie mille. Mi sono svegliato con gli occhi bloccati ma sono così contento di aver letto tutto, grazie ancora.
 
Leo59:


Conoscete, forse, un link dove si può leggere questa recensione dell'articolo?


https://www.mql5.com/ru/articles/mt4


Ah no, non si apre più((((.