Perguntas de Iniciantes MQL4 MT4 MetaTrader 4 - página 22

 
A1exPit:
Eu quis dizer que quando os dados são passados para um array, ele será preenchido sequencialmente, ou seja, array1[] = x; em qual célula será escrito o valor x se o número da célula não for especificado diretamente?

Não. Se você quiser preencher todas as células com o mesmo valor , use ArrayInitialize().

Se você quiser escrever valores diferentes, use o laço sequencialmente. Se você precisar escrever para uma célula específica, especifique seu endereço.

 
Vitalie Postolache:

Não. Se você quiser preencher todas as células com o mesmo valor , use ArrayInitialize().

Se você quiser escrever valores diferentes, use o laço sequencialmente. Se você precisar escrever para uma célula específica, especifique seu endereço.

Obrigado,

Aqui está outra pergunta: através do ArrayCopy, serei capaz de criar uma nova matriz com tamanho igual ao número de células preenchidas na anterior? Ou devo criar uma segunda matriz primeiro, e só depois copiar?

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

Obrigado,

Aqui está outra pergunta: com o ArrayCopy, posso criar uma nova matriz com o mesmo tamanho que o número de células preenchidas na anterior? Ou eu tenho que criar uma segunda matriz primeiro e depois copiar?

int  ArrayCopy(
   void&        dst_array[],         // куда копируем
   const void&  src_array[],         // откуда копируем
   int          dst_start=0,         // с какого индекса пишем в приемник
   int          src_start=0,         // с какого индекса копируем из источника
   int          count=WHOLE_ARRAY    // сколько элементов
   );
Criar primeiro, é claro.
 
Vitalie Postolache:
Criar primeiro, é claro.
Obrigado, mais uma vez.
 
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;

Assim, eu escrevo o valor Spread para ExtSpread[] e quando a barra de um minuto termina, eu a mudo para outro array - que, em teoria, deveria sobreviver para a próxima barra.

Tamanho ExtSpread[1000]

Mais uma pergunta: se a matriz for numerada a partir de zero, então, se seu tamanho for 1000, sua última célula será 999 ?

Então é correto: 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;

Assim, eu escrevo o valor Spread para ExtSpread[] e quando a barra de um minuto termina, eu a mudo para outro array - que, em teoria, deveria sobreviver para a próxima barra.

Tamanho ExtSpread[1000]

Mais uma pergunta: se a matriz for numerada a partir de zero, então, se seu tamanho for 1000, sua última célula será 999 ?

Então é correto: 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;
 
Boa tarde! poderia me dizer, por favor, que eu baixei a versão mt4 636 em andróide, mas ela não vê a lista de corretores. A versão terminal não é mais suportada?(( Em caso afirmativo, onde posso fazer o download de uma versão funcional?
 

Adiado:

scomoroh, 2016.12.04 18:58

Um erro aparece quando da compilação. Qual é o problema? Ajude a resolvê-lo!
Arquivos anexados:
 
Vladimir Karputov:

Adiado:

scomoroh, 2016.12.04 18:58

Durante a compilação, aparecerá um erro. Qual é o problema? Ajude-me a resolvê-lo!

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

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

Este é um código muito pequeno, o terminal fica pendurado por alguns minutos ao lançá-lo, e então será muito lento, e se você o executar com vários gráficos, então não funcionará de forma alguma

 
Vitalie Postolache:

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

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

Este é um código muito pequeno, o terminal fica pendurado por alguns minutos ao lançá-lo, e então será muito lento, e se você o executar com vários gráficos, então não funcionará de forma alguma

Sim, obrigado, consertou tudo, sem erros. Atrasos, sim, muito. Você poderia me dizer em que direção devo avançar para otimizar, ou terei que reescrever tudo?
Razão: