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

 

Não, não vai apitar o tempo todo, é "array out of range" quando >=. Por quê?

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   if(rates_total<2) return(0);
     {
      int limit=rates_total-prev_calculated;
      if(limit>1) 
        {
         ArrayInitialize(BufferUP,EMPTY_VALUE);
         ArrayInitialize(BufferDN,EMPTY_VALUE);
        }
      for(int i=limit; i>=0; i--) 
        {
         if(TimeCurrent()>=Input1 || TimeCurrent()>=Input2 || TimeCurrent()>=Input3)
           {
            BufferUP[i]=low[i]-10*Point;// в этой строке array out of range in 'a1.mq4' (75,28)

            Alert("__",TimeCurrent());
           }
        }
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
 
volyal:
Obrigado. Apenas>= não é possível, haverá um sinal constante, após a primeira data, você precisa definir o intervalo de tempo. Como definir?

esta é a segunda parte da pergunta e a segunda parte da resposta

Quando o sinal (alerta) dispara, você precisa consertar que o sinal já foi aplicado, você precisa de uma condição adicional:

 {
//---
   static bool alerton=true;
   A=1;B=2;
   if(rates_total<2) return(0);
     {
      int limit=rates_total-prev_calculated;
      if(limit>1)
        {
         ArrayInitialize(BufferUP,EMPTY_VALUE);
         ArrayInitialize(BufferDN,EMPTY_VALUE);
        }
      for(int i=limit; i>=0; i--)
        {
         if(alerton)
           {
            if(A>B)
              {
               if((TimeCurrent()>=Input1 || TimeCurrent()>=Input2 || TimeCurrent()>=Input3))
                 {
                  BufferUP[i]=low[i]-10*Point;
                  Alert("__",TimeCurrent());
                  alerton = false;
                 }
              }
           }
        }
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }

Você tem em seu código condições claras para o acionamento do alerta. Normalmente os indicadores estão pedindo para fazer um sinal por barra, então você precisa "ligar" o tempo da barra a uma variável que armazenará o tempo de acionamento do alerta, ou seja, estou falando de

alerta de data/hora estática=0;

Procure por exemplos prontos, acho que você vai entender isso agora.

 
Aleksey Vyazmikin:

Se muitos sinais forem todos iguais ao mesmo tempo, agrupe-os e jogue-os como um só. Ou coletá-las em matrizes por tipo de sinal e tocá-las lentamente :)

Agrupe-os em uma matriz e reproduza-os em um roteiro separado - isso é bastante claro, corresponde à sua primeira dica.

Mas para agrupar e jogar como um só, eu não entendo bem. Como um arquivo de áudio?

Como, por exemplo, agrupar

if(Sobitie_1)

{
PlaySound("Symbol.wav");
PlaySound("Sobitie1.wav");
PlaySound("Período.wav");
}?


Como PlaySound("Symbol Sobitie1 Period.wav");? Neste caso, o número de arquivos Símbolo * Sobitie * Período=3*10*7=210. Isso é demais):

Além disso, os sinais para reprodução vêm de indicadores de diferentes TFs. Ainda não sei como levá-lo em conta.

 
Algus:

Recolha-o em uma matriz e jogue-o em um roteiro separado - isso é bastante claro, de acordo com sua primeira dica.

Mas para agrupar e jogar como um só, eu não entendo bem. Como um arquivo de áudio?

Como, por exemplo, agrupar

if(Sobitie_1)

{
PlaySound("Symbol.wav");
PlaySound("Sobitie1.wav");
PlaySound("Period.wav");
}?


Como PlaySound("Symbol Sobitie1 Period.wav");? Neste caso, o número de arquivos Símbolo * Sobitie * Período=3*10*7=210. Isso é muito...):

Além disso, os sinais para reprodução estão vindo de indicadores de diferentes TFs. Ainda não sei como levá-lo em conta.

Eu estava falando da freqüência com que o sinal entra, ou seja, como eu entendo que você tem o mesmo e não o mesmo som, enquanto que tocar um som é acumulado em um buffer (pode estar no gráfico acumular) a fila para tocar, após tocar a fila é analisada e descartados aqueles sons que vieram no momento de tocar o arquivo e têm o mesmo som, ou seja, não carregam em si as novas informações. Não conheço os detalhes de seueloponeso :).

 

Boa tarde!

Por favor, ajude-me com este mal-entendido:

Eu estabeleço uma condição para abrir uma posição:

if(MathAbs(WPR1)<20.0)
        {
         if(MathAbs(WPR14)>44.0 && MathAbs(WPR14)<60.0 && op0<cl1) 
{ps2=true;ps1=false;ps3=false;ps4=false;ps5=false;ps6=false;ps7=false;ps8=false;Alert("условие ps2"); OpenSell();}
        }

E ao invés de uma posição com a bandeiraps2, abre duas, com as bandeirasps2 eps3. E não importa o que eu tenha feito, nada muda. Verifiquei todas as situações com alertas e nada. O que há de novo???? Não parece haver nada de errado, as bandeiras estabelecem diferentes níveis de TP. Mas, mesmo assim, não preciso de uma posição extra.

Obrigado.

 
novichok2018:

Boa tarde!

Por favor, ajude-me com este mal-entendido:

Eu estabeleço uma condição para abrir uma posição:

E ao invés de uma posição com a bandeiraps2, abre duas, com as bandeirasps2 eps3. E não importa o que eu tenha feito, nada muda. Verifiquei todas as situações com alertas e nada. O que há de novo???? Não parece haver nada de errado, as bandeiras estabelecem diferentes níveis de TP. Mas, mesmo assim, não preciso de uma posição extra.

Obrigado.

Além disso, o registro diz que primeiro abre aps3, depois aps2.

 
novichok2018:

Boa tarde!

Por favor, ajude-me com este mal-entendido:

Eu estabeleço uma condição para abrir uma posição:

E ao invés de uma posição com a bandeiraps2, abre duas, com as bandeirasps2 eps3. E não importa o que eu tenha feito, nada muda. Verifiquei todas as situações com alertas e nada. O que há de novo???? Não parece haver nada de errado, as bandeiras estabelecem diferentes níveis de TP. Mas, mesmo assim, não preciso de uma posição extra.

Obrigado.

Vovochka retorna da escola. pergunta o papai:

- Que nota você obteve hoje?

- Tive um "D" em ciência.

- Por quê?

- O professor lhe mostra a cauda de um pássaro e lhe diz para adivinhar que tipo de pássaro é...

Este papai vai à escola, abre a porta da sala de aula e aponta seu traseiro para dentro dela.

- Quem diabos é aquele...

pergunta o professor...

- Adivinhe por si mesmo.


Este é exatamente o seu código...))))

 
Alexey Viktorov:

Vovochka volta da escola para casa. pergunta o papai:

- Que nota você obteve hoje?

- Tive um "D" em ciência.

- Por quê?

- O professor lhe mostra a cauda de um pássaro e lhe diz para adivinhar que tipo de pássaro é...

Este papai vai à escola, abre a porta da sala de aula e aponta seu traseiro para dentro dela.

- Quem diabos é aquele...

pergunta o professor...

- Adivinhe por si mesmo.


Esse é exatamente o seu código... ))))

O aluno do quinto ano Ljoshenka não vem para as primeiras aulas para ajudar, mas para amolar as penas.

Essa é exatamente a sua resposta.

 
novichok2018:

Além disso, o diário de bordo diz que abre primeiro aps3, depois aps2.

É isso aí, já descobri. Acontece que é simples: nos alertas com a condiçãops8 em vez de 8, havia 3. E a condição 8 é mais ampla que a condição 2 e é mais alta nas linhas. Consertado e estreitado, está tudo bem.

Mas você não deve abanar sua cauda, esta linha é para novatos. Um verdadeiro especialista sem detalhes deve entender onde o erro está aproximadamente, ou pelo menos fazer perguntas importantes, caso contrário, ele não deve responder de forma alguma, em vez de ostentar pseudo-viragem.

 
Aleksey Vyazmikin:

Eu estava falando sobre a freqüência na qual o sinal entra, ou seja, como eu entendo que você tem o mesmo e não o mesmo som, enquanto toca o som é acumulado em um buffer (você pode no gráfico acumular) fila para tocar, depois de tocar a fila analise e descarte aqueles sons que vieram no momento de tocar o arquivo e têm o mesmo som, ou seja, não carregue a nova informação. Não sei que tipo deeloponeso você tem aí :)

Há um indicador que se mantém e todas as TFs e moedas em funcionamento. Trabalho em intraday, quase escalpando, em 2-3 instrumentos. Eu uso alertas sonoros para não perder nenhum evento e meus olhos não caem no final do dia.

De fato, há 10-14 indicadores que abordam o Windows na atividade. Acontece que devemos alinhar diferentes indicadores que funcionam de forma independente. Esta não é uma tarefa simples para o terminal ou sua programação.

Este é o tipo de "música" que você recebe):