Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 114

 
Yedelkin:
Tenho dificuldade em responder. Voltei a ler as vossas mensagens mas não tive a ideia de mudar o tamanho da matriz. A sua resposta ao código depende também da compreensão do conceito. Talvez outra pessoa responda.

Não me interessa realmente mudar o tamanho da matriz, dou-lhe 20, por exemplo.

 double masCenPoc[20]; 

 for(int i=0; i<20; i++){
 
   if((cena_poc < high && cena_poc < low)||(cena_poc > high && cena_poc > low))

//как вот дальше обозначить чтоб он запомнил значение цены уровня Рос?
    
    masCenPoc[i] = cena_poc;

else 

//и удалил значение из массива, если нашлось пересечение с ценой этого уровня Рос?
 
Top2n: Não me interessa realmente mudar o tamanho da matriz; vou definir, por exemplo, para 20.

Aqui tem um conjunto de 20 elementos. Vamos assumir que a condição se mantém - atribuímos um valor de preço ao primeiro elemento do conjunto: masCenPoc[0] = cena_poc;

O que vamos atribuir ao segundo elemento da matriz?

 
Yedelkin:

Aqui tem um conjunto de 20 elementos. Vamos assumir que a condição se mantém - atribuímos um valor de preço ao primeiro elemento do conjunto: masCenPoc[0] = cena_poc;

O que devemos atribuir ao segundo elemento da matriz?

O próximo valor de Ros, que será em n número de vezes. As linhas Ros aparecem no início de cada dia, com base nos resultados do dia anterior. Se o preço não tocar no nível, o valor deste nível Ros será armazenado na matriz.
 
Top2n: O próximo valor de Ros, que será em n tempo. As linhas Ros aparecem no início de cada dia, com base nos resultados do dia anterior. Se o preço não tocar no nível, então o valor deste nível Ros será armazenado na matriz.
Estou a ver. Eu faria o seguinte. Eu criaria um conjunto de 20 elementos e atribuiria o valor -1 a todos eles. No início de cada dia, eu correria o loop for(int i=0; i<20; i++) e procurava o primeiro elemento com valor -1 no array. Após encontrar tal elemento, verificaria as condições comerciais(if((cena_poc < high && cena_poc < low)||(cena_poc > high && cena_poc > low)) e, se for bem sucedido, atribuiria valor de cena_poc ao elemento de matriz encontrado. Isto preencheria gradualmente a matriz com os valores necessários.
 
Top2n: Estou a ver, obrigado.
Sim, se utilizar uma matriz não dinâmica (como no seu último exemplo), também não precisa desta função. Se precisar de uma matriz dinâmica, declare e dimensione-a nas primeiras linhas de código, antes do laço.
 
Top2n:

Não me interessa realmente mudar o tamanho da matriz, dou-lhe 20, por exemplo.

Tem de fazer sentido. Neste caso, pode não ser necessária uma matriz. Num loop com mais cálculos, talvez 1 variável seja suficiente. Penso que pretende obter dados do histórico, por isso seria mais lógico passar de alguma barra para 0. E depois os seus dados serão construídos. Se precisar de uma matriz, esta deve acumular-se como uma pilha no seu caso.

Se quiser construir por citações online, será ainda por regras de empilhamento.

//Удачи!
 

Olá. Quando tento copiar dados indicadores para um array usando a função CopyBuffer obtenho valores como -6.999999999999999999999e-005

Qual pode ser a razão?


Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
  • www.mql5.com
Доступ к таймсериям и индикаторам / CopyBuffer - Документация по MQL5
 
sss20192:

Olá. Quando tento copiar dados indicadores para uma matriz usando a função CopyBuffer obtenho valores como -6.999999999999999999999e-005

Qual pode ser a razão?


Talvez os valores sejam os mesmos que no original. Seria uma boa ideia afixar o código.
 

O indicador tem dados diferentes na janela de dados. Anexei a EA ao gráfico H1 e ele copia os dados dos prazos M5 M15 e H1.

int MacdHandleTf1 = iMACD(_Symbol, Timeframe1, FastEMA, SlowEMA, SignalMA, AppliedPrice); 

int MacdHandleTf2 = iMACD(_Symbol, Timeframe2, FastEMA, SlowEMA, SignalMA, AppliedPrice); 

int MacdHandleTf3 = iMACD(_Symbol, Timeframe3, FastEMA, SlowEMA, SignalMA, AppliedPrice); 

CopyBuffer(MacdHandleTf1, 0, 1, 1, MacdArray);

Print(NormalizeDouble(MacdArray[0], 5)); 

CopyBuffer(MacdHandleTf2, 0, 1, 1, MacdArray);

Print(NormalizeDouble(MacdArray[0], 5)); 

CopyBuffer(MacdHandleTf3, 0, 1, 1, MacdArray); 

Print(NormalizeDouble(MacdArray[0], 5)); 
Razão: