Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 136

 
paladin80:
Talvez o que eu entendi de sua pergunta seja diferente do que você quis dizer. Meu exemplo compara os preços de abertura entre 3 e 2 barras, e 2 e 1. As barras 3 e 1 não são comparadas. Caso os valores comparados sejam iguais - nada acontece, basta passar para a próxima comparação.
Por que x>1 (não >=). A primeira iteração compara Open[3]==Open[3-1], ou seja, Open[3]==Open[2]. OK. No segundo (x=2), Open[2]==Open[1]. OK. Não há uma terceira iteração. Em x>==1 haverá comparação Open[1]==Open[0], não está OK, porque haverá comparação com 0 bar.

Muito obrigado! E se compararmos os preços de abertura e fechamento de cada uma das três barras, será que isso mudaria o código?
extern int n=4;
//-----------------------------------------------+
for (x=n;x>1;x--)
   {
    if(Close[x]==Open[x]) continue;
      if(Close[x]<Open[x])
     {
      action
     }
     else{
      if(Close[x]>Open[x])
     {
      action
      }
    }
   }
 
ALXIMIKS:

Não, a cada novo tick o valor de A bandeira será verdadeira . https://book.mql4.com/ru/variables/types

Você pode declarar a variável globalmente, no início do programa, por exemplo, fora de todas as funções.

Ou fazer a variável estática - bandeira estática bool=verdadeira; .

Basta lembrar que a variável é reinicializada no reinício. Portanto, esta abordagem é aceitável para um testador, mas não para o comércio real.
 
Pessoal, vocês poderiam sugerir um indicador? É baseado em dois slides. E quando atravessa, dá a direção como flechas. Não consigo encontrá-lo, obrigado.
 
skyjet:

Muito obrigado! E se compararmos os preços de abertura e fechamento de cada uma das três barras, será que o código mudará assim tanto?

Para esclarecer o problema. Precisamos comparar a abertura e o fechamento do mesmo bar, ou seja, se o número do bar n é em baixa ou em alta. Jogue o script abaixo na janela de cotação.

extern int n=4;
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
   for (int x=n; x>1; x--)
    {  
     if(Close[x]==Open[x])
      {
       Print("Бар номер ",n," плоский :)");
       continue;
      }
     if(Close[x]<Open[x])
      {
       Print("Бар номер ",n," медвежий");
       continue;
      }
     else // if(Close[x]>Open[x]) - В данном случае сравнение if можно пропустить
          // т.к. два случая (равно и меньше) уже обработаны
      {
       Print("Бар номер ",n," бычьий");
      }
    }
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
paladin80:

Para inserir o código corretamente aqui, clique em SRC e depois o código ali.

Jogue esta EA na janela de cotação.


Eu atirei na janela, como se o indicador apenas escrevesse o valor do turno como eu o entendo, mas o que devo acrescentar ao código para que eu possa acrescentar quantos níveis eu preciso nas configurações?
 
Danila_mactep:

Eu o coloco na janela, como se o indicador apenas escrevesse o valor do turno como eu o entendo, mas o que devo acrescentar ao código para poder acrescentar às configurações quantos níveis eu preciso?

Ele não escreve um valor de turno. Se a memória me serve corretamente, o código não especifica um turno, ele apenas lê o valor da MAHA. Portanto, ele produz este valor.

Para ver o valor de deslocamento em relação ao valor MA, é necessário definir este valor em parâmetros externos e então emitir o valor MA + valor de deslocamento*Ponto para um deslocamento para cima e o valor MA - valor de deslocamento*Ponto para um deslocamento para baixo.

 
Danila_mactep:

Eu atirei na janela, assim como o indicador apenas escreve o valor do turno como eu o entendo, mas o que devo acrescentar ao código para que eu possa acrescentar tantos níveis quantos eu precisar nas configurações?
extern int  sdvig=0;
//---
int init() 
{
  return(0);
}
//--------------
int start()
{
  double MA=iMA(NULL, 0, 12, 144, MODE_SMA, PRICE_CLOSE, sdvig);
  Comment("Для бара номер ",sdvig," значение МА = ",DoubleToStr(MA,Digits));
  return(0);
}
//--------------
int deinit()
{
  Comment("");
  return(0);
}
 
paladin80:


Não, não é. Você precisa de um turno de subida e descida do MA por um determinado número de pontos. Não é uma mudança de bar na história.
 
artmedia70:

Não, não é. Você precisa de um turno de subida e descida do MA por um determinado número de pontos. Não é uma mudança de bar na história.
extern int move=100; 
//---
int init() 
{
  return(0);
}
//--------------
int start()
{
  double MA=iMA(NULL, 0, 12, 144, MODE_SMA, PRICE_CLOSE, 0);
  double Sdvig=MA+(move*Point);
  Comment("Сдвиг на ",sdvig," пунктов от МА = ",DoubleToStr(Sdvig,Digits));
  return(0);
}
//--------------
int deinit()
{
  Comment("");
  return(0);
} 
 
paladin80:

E agora também em menos... E ele ficará feliz :) Ou você vai deixar que ele "pense" sobre como se deslocar para baixo por conta própria?
Razão: