Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 527

 
novichok2018: Obrigado! Eu entendo as convenções, eu as levarei em consideração. Mas para entender o roteiro sugerido, infelizmente, meu conhecimento do mcl4 não é suficiente. Desculpe :( .

Eu faço todas as minhas experiências com roteiros. Execute o roteiro em seu terminal. Mude algumas linhas ou jogue-as fora. Veja o que acontece

 

Quero encontrar o Mínimo Máximo de dados indicadores, já fiz "tudo de acordo com o manual", mas parece que os dados indicadores não estão escritos em uma matriz. MQL pro me diz onde cometi um erro.

     
int limit=40000;
     
      double ArrayGreen[];  
      ArrayResize(ArrayGreen,limit);
      for (int i=0;i>=limit;i++)
         {
            ArrayGreen[i] =iCustom(NULL,0,"Kolier_SuperTrend_Indi",ATR_Period,ATR_Multiplier,0,1);
         }
      int max=ArrayMaximum(ArrayGreen,Quant,0); 
      double iMaximum = ArrayGreen[max];
      Print("Max = ",ArrayGreen[max]," at index=",max); 

      
     
      double ArrayRad[];  
      ArrayResize(ArrayRad,limit);
      for (int i=0;i>=limit;i++)
         {
            ArrayRad[i] = iCustom(NULL,0,"Kolier_SuperTrend_Indi",ATR_Period,ATR_Multiplier,1,1);
         }
     int min=ArrayMinimum(ArrayRad,Quant_Bars,0); 
     double iMinimum = ArrayRad[min];
     Print("Min= ",ArrayRad[min]," at index=",min); 
 
Corvin85:

Quero encontrar o Mínimo Máximo de dados indicadores, já fiz "tudo de acordo com o manual", mas parece que os dados indicadores não estão escritos em uma matriz. Se você é um profissional da MQL, por favor, me informe onde cometi um erro.

O valor do limite variável é maior que zero. Portanto, nenhum dos loops funcionará. Como resultado, o ArrayGreen e o ArrayRad ficarão por preencher.

Se estabelecermos o limite a zero ou menos, o programa voltará ao primeiro laço.

Assim, precisamos modificar a condição dos loops. Muito provavelmente, deveria ser feito assim:

 for (int i = 0; i < limit; i++)
 
Corvin85:

Quero encontrar o Mínimo Máximo de dados indicadores, já fiz "tudo de acordo com o manual", mas parece que os dados indicadores não estão escritos em uma matriz. Eu tenho um bom profissional de MQL, por favor me avise onde cometi um erro.

Também, no iCustom(...........); o último parâmetro aprovado i

 for (int i=0;i<limit;i++)
         {
            ArrayGreen[i] =iCustom(NULL,0,"Kolier_SuperTrend_Indi",ATR_Period,ATR_Multiplier,0,i);
         }

algo como isto.

 
Obrigado! Está funcionando!
 

Boa tarde!


Para a conveniência de testar, quero remover o botão para ativar e desativar a condição, para que eu não tenha que entrar sempre no código e não tenha que mudar esta condição em texto para torná-la ineficaz.

Em outras palavras, neste momento o faço desta maneira:

if ((Close[1]<=High[2])&&(Close[1]>=Low[2])&&(Open[1]<=High[2])&&(Open[1]>=Low[2]))
{

Desligando desta maneira:

//if ((Close[1]<=High[2])&&(Close[1]>=Low[2])&&(Open[1]<=High[2])&&(Open[1]>=Low[2]))
//{

Tentei ativar e desativar a bool Y=True; (Onde Y é a condição), atribuir Y à condição, e dividir ramos se a condição está ou não em vigor através de outro se. Mas algo não deu certo.

Você pode aconselhar como proceder em tais casos?

 
YanSay:

Boa tarde!


Para a conveniência de testar, quero remover o botão para ativar e desativar a condição, para que eu não tenha que entrar sempre no código e não tenha que mudar a condição em texto, para que ela não tenha efeito.

Em outras palavras, neste momento o faço desta maneira:

Desligando desta maneira:

Tentei ativar e desativar o botão de entrada Y=True; (Onde Y é a condição) configurações, atribuir Y à condição, e dividir ramos se a condição funciona ou não através de outro se. Mas algo não deu certo.

Por favor, informe o que fazer em tais casos.

Poder-se-ia fazer o seguinte

input bool FLAG =True;


if (FLAG && (Close[1]<=High[2])&&(Close[1]>=Low[2])&&(Open[1]<=High[2])&&(Open[1]>=Low[2]))
{
 
Vitaly Muzichenko:

Você poderia fazer isso.

A razão é que o algoritmo ignora a Falsa condição e passa para as condições seguintes.

input bool FLAG =False;

O algoritmo não irá mais longe, enquanto deve ignorar esta condição quando o código for Falso e ir para as próximas condições.

No meu caso, a única opção é especificar 2 filiais?

input bool FLAG =True;

if (FLAG=True)
{(Close[1]<=High[2])&&(Close[1]>=Low[2])&&(Open[1]<=High[2])&&(Open[1]>=Low[2]))
 {//следующие условия
 }
}

if (FLAG=False)
 {//следующие условия
 }

Ou há uma maneira mais fácil?

 
YanSay:

Em sua versão, se o valor

O algoritmo não irá mais longe, enquanto deve ignorar esta condição se for Falso e ir para as próximas condições.

No meu caso, a única opção é escrever 2 filiais?

Ou há uma maneira mais fácil?

//+------------------------------------------------------------------+
input bool FLAG =True;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
  if(FLAG) {
    if(Close[1]<=High[2]) && (Close[1]>=Low[2]) && (Open[1]<=High[2]) && (Open[1]>=Low[2])
    //...
  } else {
    //следующие условия
  }
//+------------------------------------------------------------------+
 
YanSay:

Em sua versão, se o valor

O algoritmo não irá mais longe, enquanto deve ignorar esta condição se for Falso e ir para as próximas condições.

No meu caso, a única opção é escrever 2 filiais?

Ou há uma maneira mais fácil?

Somente desta maneira

if(!FLAG || (Close[1]<=High[2] && Close[1]>=Low[2] && Open[1]<=High[2] && Open[1]>=Low[2]))