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

 
PolarSeaman:

Il existe 3 cycles de ce type. Je les ai remplacés, le terminal a gelé.

J'en ai compté quatre :

   int i;

   SetIndexDrawBegin(0,Bars-cb);
   SetIndexDrawBegin(1,Bars-cb);

   double avg;

   ki=2.0/(p+1);

   int total;
   int limit = GetRecalcIndex(total,rates_total,prev_calculated);

   for(i=limit; i>=0; i--) 
      fx1[i]=Close[i];

   for(int m=0; m<=s; m++)
     {
      z1=fx1[0];
      for(i=0; i<=limit; i++) {z1=z1+(fx1[i]-z1)*ki; hp[i]=z1;}

      z2=fx1[limit];
      for(i=limit; i>=0; i--) {z2=z2+(fx1[i]-z2)*ki; fx1[i]=(hp[i]+z2)/2;}
     }

   fs=0;
   for(i=limit; i>=0; i--)
     {
      if(fx1[i]>fx1[i+1]) fs=1;
      if(fx1[i]<fx1[i+1]) {if(fs==1) fx2[i+1]=fx1[i+1]; fs=2;}
      if(fs==2) fx2[i]=fx1[i]; else fx2[i]=0.0;

      avg=iATR(NULL,0,ATR,i+10);
      upper[i] = hp[i] + distance*avg;
      lower[i] = hp[i] - distance*avg;

      if(Close[i+1+barsig]<upper[i+1+barsig] && Close[i+barsig]>upper[i+barsig])
         dnar[i]=High[i]+arrots*Point; else dnar[i]=EMPTY_VALUE;

      if(Close[i+1+barsig]>lower[i+1+barsig] && Close[i+barsig]<lower[i+barsig])
         upar[i]=Low[i]-arrots*Point; else upar[i]=EMPTY_VALUE;
     }

Rien ne s'accroche. Il ne devrait pas y avoir de dépassement des tableaux. Sauf que la valeur de la barre de zéro n'est pas calculée correctement à mon avis.

 
Ihor Herasko:

J'en ai compté quatre :

Rien ne s'accroche. Il ne devrait pas y avoir de dépassement en dehors des tableaux. Sauf que je pense que la valeur de la barre de zéro n'est pas calculée correctement.

Merci, c'est bon. Je n'en ai pas besoin sur la barre zéro, mais sur la première barre, mais les positions sont ouvertes de manière chaotique.

sell_1_B=NormalizeDouble(iCustom(Symbol(),0,"HiLo",1,1),Digits);
sell_1_1_B=NormalizeDouble(iCustom(Symbol(),0,"HiLo",1,2),Digits);

if(sell_1_1_B==0.0&&sell_1_B!=0.0)
{открываю sell}
if(sell_1_1_B!=0.0&&sell_1_B==0.0)
{открываю buy}

Pourquoi ?

 
Ihor Herasko:

Dans le testeur, sur la visualisation se trouve ceci

ooppe

le premier coude, le début du test, l'indicateur qui a une erreur, construit une ligne droite quand je le lance sur le graphique après le début du test

nous avons cassé quelque chose)

 

Pouvez-vous me dire comment mettre une "sélection" d'un outil graphique sur le bouton dans l'Expert Advisor, de sorte qu'en cliquant sur le bouton, l'icône de l'outil apparaisse sous le curseur et qu'il soit possible de l'étirer ?

Et il devrait déjà avoir les propriétés spécifiées

 
PolarSeaman:

Dans le testeur, sur la visualisation se trouve ceci

le premier coude, le début du test, l'indicateur qui a une erreur, construit une ligne droite quand je le lance sur le graphique après le début du test

nous avons cassé quelque chose)

Il s'agit d'un indicateur de redécoupage qui recalcule l'historique complet pour un nombre spécifié de barres à chaque tick. Très mauvaise solution. Alors vous devez le faire de cette façon :

   int i;

   SetIndexDrawBegin(0,Bars-cb);
   SetIndexDrawBegin(1,Bars-cb);

   double avg;

   ki=2.0/(p+1);

   int total;
   int limit = GetRecalcIndex(total,rates_total,prev_calculated);

   for(i=total; i>=0; i--) 
      fx1[i]=Close[i];

   for(int m=0; m<=s; m++)
     {
      z1=fx1[0];
      for(i=0; i<=total; i++) {z1=z1+(fx1[i]-z1)*ki; hp[i]=z1;}

      z2=fx1[total];
      for(i=total; i>=0; i--) {z2=z2+(fx1[i]-z2)*ki; fx1[i]=(hp[i]+z2)/2;}
     }

   fs=0;
   for(i=total; i>=0; i--)
     {
      if(fx1[i]>fx1[i+1]) fs=1;
      if(fx1[i]<fx1[i+1]) {if(fs==1) fx2[i+1]=fx1[i+1]; fs=2;}
      if(fs==2) fx2[i]=fx1[i]; else fx2[i]=0.0;

      avg=iATR(NULL,0,ATR,i+10);
      upper[i] = hp[i] + distance*avg;
      lower[i] = hp[i] - distance*avg;

      if(Close[i+1+barsig]<upper[i+1+barsig] && Close[i+barsig]>upper[i+barsig])
         dnar[i]=High[i]+arrots*Point; else dnar[i]=EMPTY_VALUE;

      if(Close[i+1+barsig]>lower[i+1+barsig] && Close[i+barsig]<lower[i+barsig])
         upar[i]=Low[i]-arrots*Point; else upar[i]=EMPTY_VALUE;
     }

Désagréable, bien sûr, mais ça marche.

 
pourquoi cette construction ne fonctionne-t-elle pas dans les déclarations de variables?
int K=20;
int TIKET[K];
 
igrok333:
pourquoi cette construction ne fonctionne-t-elle pas dans la déclaration de variable?

Parce que K est une variable. Sa valeur au moment de la compilation est inconnue. Pour que ça marche, nous devons faire de K une constante :

#define  K 20
int TIKET[K];
 
Ihor Herasko:

Exact, car c'est un indicateur de redécoupage qui recalcule tout l'historique pour un nombre spécifié de barres à chaque tick. C'est une très mauvaise solution. Alors vous devez le faire de cette façon :

Désagréable, bien sûr, mais ça marche.

Merci. J'ai passé tellement de temps avec vous et ça attire toujours 20( !) barres, peut-être même plus.

Devons-nous créer une pétition ?

Avoir une loiinterdisant la distribution d'indicateurs qui redessinent plus de trois barres !

Pour être pris en compte par le Parlement, nous devons recueillir un total de 100 000 signatures en un an.

 
PolarSeaman:

Merci. Nous avons perdu tellement de temps, vous et moi, et il dessine 20( !) barres, peut-être plus, que je n'ai pas cherché plus loin.

En définissant une valeur plus petite de cb, il y aura moins de barres qui seront redessinées.

On crée une pétition ?

Avoir une loiinterdisant la distribution d'indicateurs qui redessinent plus de trois barres !

Il suffira de 100 000 signatures en un an pour qu'elle soit examinée par l'Assemblée.

)))

 

Pouvez-vous me dire comment exclure/ajouter une date spécifique à l'EA ?

Par exemple, ne pas faire de commerce le 2 mars 2018. J'ai essayé différentes options, je me suis embrouillé avec les dates.

TimeDayOfYear (TimeCurrent()) != StrToTime("2018.03.02")
Raison: