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

 
Artyom Trishkin:

Encontre o ponto em que o preço atravessa o MA para cima. Este será o início da faixa de busca.

Encontre o ponto em que o preço cruzou o MA para baixo. Esta seria a faixa de parada.

Pegue iHighest() somente nesta faixa.

E como implementar uma busca por pontos MA, de modo que busque apenas 2 pontos extremos e não ao infinito. em palavras eu também o entendo, mas se não for difícil como implementá-lo em código.
 
GlaVredFX:
E como implementar a busca de pontos MA, para que apenas 2 pontos extremos sejam buscados e não ao infinito. Eu também entendo isso, mas se não for difícil como implementá-lo no código.

Uma maneira: criar uma variável no nível global do programa EA (declarar uma variável no cabeçalho EA) - nesta variável escrever o tempo de abertura da barra na qual a última travessia foi feita. Isto ajudará a usar a terceira forma de chamada doCopyBuffer:

A referência das datas de início e fim do intervalo de tempo requerido

int  CopyBuffer(
   int       indicator_handle,     // handle индикатора
   int       buffer_num,           // номер буфера индикатора
   datetime  start_time,           // с какой даты
   datetime  stop_time,            // по какую дату
   double    buffer[]              // массив, куда будут скопированы данные
   );

Aqui o start_time é apenas o tempo de nossa variável, e o stop_time é o tempo da última cotação conhecida do servidor.

Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
  • www.mql5.com
Отсчет элементов копируемых данных (индикаторный буфер с индексом buffer_num) от стартовой позиции ведется от настоящего к прошлому, то есть стартовая позиция, равная 0, означает текущий бар (значение индикатора для текущего бара). При копировании заранее неизвестного количества данных в качестве массива-приемника buffer[] желательно...
 
GlaVredFX:
E como implementar a busca de pontos do MA, para que ele busque apenas 2 externos, e não ao infinito. Em palavras eu também o entendo, mas se não for difícil como implementá-lo no código.

Você tem que percorrer o ciclo até encontrar um afastamento do MA.

Um ponto, esta seção destacada pelo retângulo amarelo, interromperá o laço antes de atingir o segundo cruzamento entre o preço e o MA. O máximo será encontrado na primeira interseção à direita


P.S. Qual é a diferença entre as 2 áreas destacadas?

 
Vitaly Muzichenko:

P.S. Qual é a diferença entre as 2 áreas destacadas?

Podem ser diferentes - ou seja, o primeiro ponto pode ser mais alto ou mais baixo que o segundo.

Este é apenas um exemplo. Mas isso não significa que eles serão sempre idênticos.



Quem pode lançar exemplos de código com condições semelhantes..:

Valor atual de MA> 0 bar.
Procurando por número de barra, Preço<MA, encontrei número 1 barra, escreva valor para tampão 2
Procurando pelopróximo número Preço>MA encontrou o número 2 bar, escreva o valor para o buffer 1.
Pare de procurar.
Depois, entre os valores de tampão 1 e 2, procure o preço mais baixo Baixo.
Se valor MA atual < 0 bar
Procurando o número de barras, Price>MA, encontrou o número de 1 barra, escreva o valor em buffer 2
Procurando pelopróximo número Preço<MA encontrou o número 2 bar, escreva o valor para o buffer 1.
Pare de procurar.
Depois, entre os valores de tampão 1 e 2, procuramos o preço mais alto Alto.

 
GlaVredFX:

Eles podem ser diferentes - o primeiro ponto pode ser superior ou inferior ao segundo ponto.

É apenas um exemplo. Mas isso não significa que eles serão sempre os mesmos.



Quem pode lançar exemplos de código com condições semelhantes..:

O valor atual MA> 0 bar
Estamos procurando o número da barra, Preço <MA, encontramos o número de 1 barra e escrevemos o valor em buffer 2
Procurando pelopróximo número Preço>MA encontrou o número 2 bar, escreva o valor para o buffer 1.
Pare de procurar.
Depois, entre os valores de tampão 1 e 2, procure o preço mais baixo Baixo.
Se valor MA atual < 0 bar
Procurando o número de barras, Price>MA, encontrou o número de 1 barra, escreva o valor em buffer 2
Procurando pelopróximo número Preço<MA encontrou o número 2 bar, escreva o valor para o buffer 1.
Pare de procurar.
Depois, entre os valores de tampão 1 e 2, procuramos o preço mais alto Alto.

Se seguirmos a imagem, temos que iniciar um loop e procurar até que a condição MA<Valor seja encontrada.

Uma vez que isto é encontrado, enchemos a matriz com preços altos. Executamos o ciclo até que a condição MA>Price seja encontrada, assim que encontramos este lugar - quebramos o ciclo.

Bem, na matriz em busca de preços máximos

 
Vitaly Muzichenko:

Se você seguir a imagem, você deve executar um loop e procurar até que a condição MA<Value seja encontrada.

Uma vez que isto é encontrado, enchemos a matriz com preços altos. Executamos o ciclo até que a condição MA>Price seja encontrada, uma vez encontrado o local, quebramos o ciclo.

Em seguida, procuramos os picos de preços na matriz.

Você está certo e eu também o escrevi da mesma forma, mas como implementá-lo no código, você pode pelo menos nos dar um exemplo de código disto :


iniciar um loop e fazer uma busca até que a condição MA<Preço seja encontrada.

Assim que esta condição é encontrada,nós preenchemos a matriz com preços altos.

Документация по MQL5: Операции с массивами / ArrayFill
Документация по MQL5: Операции с массивами / ArrayFill
  • www.mql5.com
При вызове функции ArrayFill() всегда подразумевается обычное направление индексации – слева направо, то есть изменение порядка доступа к элементам массива с помощью функции ArraySetAsSeries() не принимается во внимание. Многомерный массив при обработке функцией ArrayFill() представляется одномерным, например...
 
GlaVredFX:

É isso mesmo e foi assim que eu escrevi, mas como implementá-lo em Código você pode pelo menos dar um exemplo de código disto :


executar um loop e fazer uma busca até que a condição MA<Preço seja encontrada.

Assim que esta condição é encontrada,nós preenchemos a matriz com preços altos.

Não posso escrever o código agora, talvez outra pessoa o escreva - é simples

 

Isto é o que é necessário, alguém pode ajudar com este código.

int start()                           

  {

  int    i;

  double No_1;

  double No_2;

  double k=iClose(NULL,0,i);
  double h=iHigh(NULL,0,i);

  if (ma>k) ma=iMA(NULL,0,24,0,1,0,i);

  for (i=0; i< Bars; i++) {

  //---- Код поиска номер крайнего бара где  iHigh>ma

  //---- Если нашли то возвращаем номер бара No_1

            

          }

Então encontre o próximo valor onde iLow>ma e retornar número de barra No_2 .
Pare a busca e use a função iHighest para encontrar vértices entre estas barras
int val_index=iHighest(NULL,0,MODE_HIGH,No_2,No_1);

 
GlaVredFX:

if (ma>k) ma=iMA(NULL,0,24,0,1,0,i);

Este não é o código MQL5.

 
Vladimir Karputov:

Este não é o código MQL5.

Este é um layout, não há diferença entre 4 e 5

:)