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

 
splxgf:

Normalmente faço uma variável LastBarAlert e escrevo Tempo[0] para ela quando o alerta é acionado.

E então elementar, o alerta é emitido se LastBarAlert!=Time[0]


Obrigado. Funciona realmente. Mas por que o indicador economiza o valor da variável LastBarAlert, mas não o valor de qualquer outra variável. Eu o fiz desta maneira. É essencialmente o mesmo, mas por alguma razão não funciona.

if (Signal && AllowAlert = true){
Alert('Signal detected');
AllowAlert = false;
} 
 
sss2019:


Obrigado. Funciona realmente. Mas por que o indicador economiza o valor da variável LastBarAlert, mas não o valor de qualquer outra variável. Eu o fiz desta maneira. Parece funcionar da mesma maneira, mas por alguma razão não funciona.

Onde em seu código está a inicialização da variável AllowAlert com valor verdadeiro?

Se antes de verificar o sinal e o estado desta variável na linha...

if (Signal && AllowAlert = true)

... ...então, um novo reajuste da bandeira para falso não fará nada. Afinal de contas, será inicializada com true novamente antes desta verificação.

 
sss2019:


Obrigado. Funciona realmente. Mas por que o indicador economiza o valor da variável LastBarAlert, mas não o valor de qualquer outra variável. Eu o fiz desta maneira. É essencialmente o mesmo, mas por alguma razão não funciona.

O problema deve estar na lógica... Se você utiliza uma variável que leva os valores 0 e 1, seu valor deve ser redefinido em cada nova barra, e isso muito provavelmente não acontece. Ou a variável é descrita localmente sem estática e seu valor não é salvo entre chamadas. É inútil adivinhar sem o código.
 

Спасибо. Это действительно работает. Но почему индикатор сохраняет значение переменной LastBarAlert, а значение какой нибудь другой переменной не сохраняет. Я делал так. По сути получается точно так же, но почему то не работает.

if (Signal && AllowAlert = true){
Alert('Signal detected');
AllowAlert = false;
} 

Você tem o AllowAlert ajustado para true no momento da verificação. Deve ser assim (duplo =):

if (Signal && AllowAlert == true){
Alert('Signal detected'); 
AllowAlert = false;
}   

Ou melhor assim:

if (Signal && AllowAlert){
Alert('Signal detected');
AllowAlert = false; }   
 
leksiq:

Você tem o AllowAlert ajustado para true no momento da verificação. Deve ser assim (duplo =):

Ou melhor assim:




Basicamente, a variável foi declarada estática, e foi reiniciada após algumas barras. A condição era a seguinte.

static bool AllowAlert = true;

if(Time[i] == Time[2] && AllowAlert == true)
  {
  Alert("sdfsdf");
  AllowAlert = false;
  }

if(Time[i] != Time[2])
  {
  AllowAlert = true;
  }
O ideal seria que o sinal estivesse uma vez na barra de corrente, mas era acionado em cada tic tac.
 
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool NewBar(){static int prevBar;
   if(prevBar!=Time[0]){
      prevBar =Time[0];
      return(true);
   }
   return(false);
}
//+------------------------------------------------------------------+
Por que você não dá uma olhada preliminar aqui :https://www.mql5.com/ru/forum/131853?
 
FAQ:
Por que você não dá uma olhada preliminar aqui :https://www.mql5.com/ru/forum/131853?

Estou mais interessado não em como fazer isso, mas por que meu código não funciona. Mais precisamente, porque funciona na EA, mas não funciona no indicador.
 

Muito provavelmente, e isto foi-me sugerido aqui (por falta do seu código)

Você tem vários alertas, e aplica a mesma variável estatutária a todos eles

 

Olá.

alguém pode me dizer?

como faço para que uma gama de um EA funcione?

traçar uma linha, renomeá-la "buy_down".

desenhar uma segunda linha, renomeá-la "buy_up".

e deixar a EA negociar somente entre essas linhas.

Não vejo nenhuma diferença entre eles.

 
TESKATLIPOKA:

Olá.

alguém pode me dizer?

como faço para que uma gama de um EA funcione?

traçar uma linha, renomeá-la "buy_down".

traçar a segunda linha, renomeá-la "buy_up".

e deixar a EA negociar somente entre essas linhas.

Não vejo nenhuma diferença entre eles.


Vá aqui: https: //www.mql5.com/ru/job