Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 777

 

Non, il n'émet pas de bip tout le temps, c'est "array out of range" quand >=. Pourquoi ?

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:
Merci. Just>= n'est pas possible, il y aura un signal constant, après la première date, vous devez définir la plage de temps. Comment régler ?

c'est la deuxième partie de la question et la deuxième partie de la réponse

Lorsque le signal (alerte) se déclenche, vous devez fixer que le signal a déjà été appliqué, vous avez besoin d'une condition supplémentaire :

 {
//---
   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);
  }

Vous avez dans votre code des conditions claires pour le déclenchement de l'alerte. Habituellement, les indicateurs demandent de faire un signal par barre, alors vous devez "lier" le temps de la barre à une variable qui stockera le temps de déclenchement de l'alerte, c'est-à-dire que je parle de

date statiquealerton=0;

Cherchez des exemples concrets, je pense que vous comprendrez maintenant.

 
Aleksey Vyazmikin:

Si plusieurs signaux sont identiques en même temps, regroupez-les et jouez-les comme un seul. Ou encore, rassemblez-les dans des tableaux par type de signal et jouez-les lentement :)

Regroupez-les dans un tableau et jouez-les dans un script séparé - c'est assez clair, cela correspond à votre premier conseil.

Mais de les regrouper et de les jouer comme un tout, je ne comprends pas bien. En un seul fichier audio ?

Comment, par exemple, regrouper

if(Sobitie_1)

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


Comme PlaySound("Symbol Sobitie1 Period.wav"); ? Dans ce cas, le nombre de fichiers Symbole * Sobitie * Période=3*10*7=210. C'est trop) :

En outre, les signaux de lecture proviennent d'indicateurs de différentes TF. Je ne sais pas encore comment en tenir compte.

 
Algus:

Rassemblez-les dans un tableau et lisez-les dans un script séparé - c'est assez clair, d'après votre premier conseil.

Mais se regrouper et jouer comme un seul homme, je ne comprends pas bien. En un seul fichier audio ?

Comment, par exemple, regrouper

if(Sobitie_1)

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


As PlaySound("Symbole Sobitie1 Période.wav"); ? Dans ce cas, le nombre de fichiers Symbole * Sobitie * Période=3*10*7=210. C'est beaucoup...) :

En outre, les signaux de lecture proviennent d'indicateurs de différentes TF. Je ne sais pas encore comment en tenir compte.

Je parlais de la fréquence à laquelle le signal arrive, c'est-à-dire, comme je le comprends vous avez le même et pas le même son, tout en jouant un son est accumulé dans un tampon (peut être dans le graphique accumuler) la file d'attente pour jouer, après la file d'attente de lecture analysé et jeté les sons qui sont venus au moment de la lecture du fichier et ont le même son, c'est-à-dire ne portent pas la nouvelle information. Je ne connais pas les détails de votre mélophone :).

 

Bonjour !

Veuillez m'aider à résoudre ce malentendu :

J'ai défini une condition pour ouvrir une position:

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();}
        }

Et au lieu d'une position avec le drapeaups2, il en ouvre deux, avec les drapeauxps2 etps3. Et quoi que je fasse, rien ne change. J'ai vérifié toutes les situations avec des alertes et rien. Quoi de neuf ???? Il semble n'y avoir aucun problème, les drapeaux définissent différents niveaux de TP. Mais toujours pas besoin d'une position supplémentaire.

Merci.

 
novichok2018:

Bonjour !

Veuillez m'aider à résoudre ce malentendu :

J'ai défini une condition pour ouvrir une position:

Et au lieu d'une position avec le drapeaups2, il en ouvre deux, avec les drapeauxps2 etps3. Et quoi que je fasse, rien ne change. J'ai vérifié toutes les situations avec des alertes et rien. Quoi de neuf ???? Il semble n'y avoir aucun problème, les drapeaux définissent différents niveaux de TP. Mais tout de même, je n'ai pas besoin d'un poste supplémentaire.

Merci.

De plus, le journal indique qu'il ouvre d'abordps3, puisps2.

 
novichok2018:

Bonjour !

Veuillez m'aider à résoudre ce malentendu :

J'ai défini une condition pour ouvrir une position:

Et au lieu d'une position avec le drapeaups2, il en ouvre deux, avec les drapeauxps2 etps3. Et quoi que je fasse, rien ne change. J'ai vérifié toutes les situations avec des alertes et rien. Quoi de neuf ???? Il semble n'y avoir aucun problème, les drapeaux définissent différents niveaux de TP. Mais tout de même, je n'ai pas besoin d'un poste supplémentaire.

Merci.

Vovochka rentre de l'école. Papa demande :

- Quelle note as-tu eu aujourd'hui ?

- J'ai eu un "D" en sciences.

- Pourquoi ?

- Le professeur me montre la queue d'un oiseau et me demande de deviner de quelle espèce d'oiseau il s'agit...

Ce papa va à l'école, ouvre la porte de la classe et pointe son cul dedans.

- Qui diable est ce...

...demande le professeur...

- Devinez par vous-même.


C'est exactement votre code...))))

 
Alexey Viktorov:

Vovochka rentre de l'école. Papa demande :

- Quelle note as-tu eu aujourd'hui ?

- J'ai eu un "D" en sciences.

- Pourquoi ?

- Le professeur vous montre la queue d'un oiseau et vous demande de deviner de quelle espèce d'oiseau il s'agit...

Ce papa va à l'école, ouvre la porte de la classe et pointe son cul dedans.

- Qui diable est ce...

...demande le professeur...

- Devinez par vous-même.


C'est exactement votre code... ))))

Ljoshenka, élève de cinquième année, ne vient pas aux premiers cours pour aider, mais pour hérisser les poils.

C'est exactement votre réponse.

 
novichok2018:

De plus, le journal de bord indique qu'il ouvre d'abord laps3, puis laps2.

C'est ça, j'ai compris. Il s'est avéré que c'était simple : dans les alertes avec la conditionps8 au lieu de 8, il y avait 3. Et la condition 8 est plus large que la condition 2 et est plus haute sur les lignes. Je l'ai réparé et réduit, tout est OK.

Mais vous ne devriez pas remuer la queue, ce fil est pour les débutants. Un véritable expert sans détails devrait comprendre où se situe approximativement l'erreur, ou au moins poser des questions suggestives, sinon il ne devrait pas répondre du tout, plutôt que d'afficher un pseudo-tourbillon.

 
Aleksey Vyazmikin:

Je parlais de la fréquence à laquelle le signal arrive, c'est-à-dire que, si je comprends bien, vous avez le même son et pas le même, pendant la lecture du son est accumulé dans un tampon (vous pouvez dans le graphique accumuler) file d'attente pour jouer, après avoir joué la file d'attente analyser et jeter les sons qui sont venus au moment de la lecture du fichier et ont le même son, c'est-à-dire, ne portent pas la nouvelle information. Je ne connais pas les détails du type de mélophone que vous avez là :)

Il y a un indicateur qui se tient sur et tous les TFs et les devises de travail. Je travaille en intraday, presque en scalping, sur 2-3 instruments. J'utilise des alertes sonores pour ne manquer aucun événement et mes yeux ne tombent pas à la fin de la journée.

En fait, il y a 10 à 14 indicateurs concernant Windows dans l'activité. Il s'avère que nous devons aligner différents indicateurs qui fonctionnent de manière indépendante, ce qui n'est pas une tâche simple pour le terminal ou sa programmation.

C'est le genre de "musique" que nous obtenons) :