Domande dai principianti MQL4 MT4 MetaTrader 4 - pagina 22

 
A1exPit:
Intendevo dire che quando i dati vengono passati in un array, questo si riempie in modo sequenziale, cioè array1[] = x; in quale cella verrà scritto il valore x se il numero della cella non è specificato direttamente?

No. Se volete riempire tutte le celle con lo stesso valore , usate ArrayInitialize().

Se volete scrivere valori diversi, usate il ciclo in modo sequenziale. Se avete bisogno di scrivere in una cella specifica, specificate il suo indirizzo.

 
Vitalie Postolache:

No. Se volete riempire tutte le celle con lo stesso valore , usate ArrayInitialize().

Se volete scrivere valori diversi, usate il ciclo in modo sequenziale. Se avete bisogno di scrivere in una cella specifica, specificate il suo indirizzo.

Grazie,

Ecco un'altra domanda: attraverso ArrayCopy, potrò creare un nuovo array con dimensioni pari al numero di celle riempite nel precedente? O devo creare prima un secondo array e solo dopo copiare?

int  ArrayCopy(
   void&        dst_array[],         // куда копируем
   const void&  src_array[],         // откуда копируем
   int          dst_start=0,         // с какого индекса пишем в приемник
   int          src_start=0,         // с какого индекса копируем из источника
   int          count=WHOLE_ARRAY    // сколько элементов
   );
 
A1exPit:

Grazie,

Ecco un'altra domanda: con ArrayCopy, posso creare un nuovo array con la stessa dimensione del numero di celle riempite nel precedente? O devo prima creare un secondo array e poi copiare?

int  ArrayCopy(
   void&        dst_array[],         // куда копируем
   const void&  src_array[],         // откуда копируем
   int          dst_start=0,         // с какого индекса пишем в приемник
   int          src_start=0,         // с какого индекса копируем из источника
   int          count=WHOLE_ARRAY    // сколько элементов
   );
Creare prima, ovviamente.
 
Vitalie Postolache:
Creare prima, ovviamente.
Grazie ancora.
 
Spread = MarketInfo(Symbol(),MODE_SPREAD);
if ( Spread >= 0 ) ExtSpread [x] = Spread;
if ( TimeCurrent() - iTime( NULL, 0, 0) >= 60 ){
int Spread2[x];
ArrayCopy( Spread2[],ExtSpread[],0,0, WHOLE_ARRAY);}
x=x+1;
if (x > 1000) x = 0;

In questo modo, scrivo il valore di Spread in ExtSpread[] e quando la barra di un minuto è finita, lo sposto in un altro array - che dovrebbe, in teoria, sopravvivere alla prossima barra.

Dimensione ExtSpread[1000]

Un'altra domanda: se l'array è numerato a partire da zero, allora, se la sua dimensione è 1000, la sua ultima cella sarà 999?

Allora è corretto: x++ e se ( x > 999 ) x=0;

 
A1exPit:
Spread = MarketInfo(Symbol(),MODE_SPREAD);
if ( Spread >= 0 ) ExtSpread [x] = Spread;
if ( TimeCurrent() - iTime( NULL, 0, 0) >= 60 ){
int Spread2[x];
ArrayCopy( Spread2[],ExtSpread[],0,0, WHOLE_ARRAY);}
x=x+1;
if (x > 1000) x = 0;

In questo modo, scrivo il valore di Spread in ExtSpread[] e quando la barra di un minuto è finita, lo sposto in un altro array - che dovrebbe, in teoria, sopravvivere alla prossima barra.

Dimensione ExtSpread[1000]

Un'altra domanda: se l'array è numerato a partire da zero, allora, se la sua dimensione è 1000, la sua ultima cella sarà 999?

Allora è corretto: x++ e se ( x > 999 ) x=0;

Spread = (int)MarketInfo(Symbol(),MODE_SPREAD);
if ( Spread >= 0 ) ExtSpread [x] = Spread;
if ( TimeCurrent() - iTime( NULL, 0, 0) >= 60 ){
int Spread2[];ArrayInitialize (Spread2,EMPTY_VALUE); ArrayResize( Spread2,x,0);
ArrayCopy( Spread2,ExtSpread,0,0, WHOLE_ARRAY);}
x=x+1;
if (x > 999) x = 0;
 
Buon pomeriggio, potreste dirmi, per favore, che ho scaricato la versione mt4 636 su Android, ma non vede la lista dei broker. La versione del terminale non è più supportata?(( Se è così, dove posso scaricarne una funzionante?
 

Rinviato:

scomoroh, 2016.12.04 18:58

Appare un errore durante la compilazione. Qual è il problema? Aiuta a risolverlo!
File:
 
Vladimir Karputov:

Rinviato:

scomoroh, 2016.12.04 18:58

Durante la compilazione apparirà un errore. Qual è il problema? Aiutami a risolverlo!

ArrayInitialize(max,0) =>ArrayInitialize(arr,0);

for(int a=1;a<=pr;a++) =>for(int a=1;a<pr;a++)

Questo è un codice molto-molto non-ottimale, il terminale si blocca per alcuni minuti quando lo si lancia, e poi sarà molto lento, e se lo si esegue con diversi grafici, allora non funzionerà affatto

 
Vitalie Postolache:

ArrayInitialize(max,0) =>ArrayInitialize(arr,0);

for(int a=1;a<=pr;a++) =>for(int a=1;a<pr;a++)

Questo è un codice molto-molto non-ottimale, il terminale si blocca per alcuni minuti quando lo si lancia, e poi sarà molto lento, e se lo si esegue con diversi grafici, allora non funzionerà affatto

Sì, grazie, risolto tutto, nessun errore. Lags, sì, molto. Potresti dirmi in che direzione muovermi per ottimizzare, o dovrò riscrivere tutto?