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

 
J'ai trouvé un nouvel indicateur, je voulais le mettre dans mon EA, mais le problème est qu'il ouvre des trades sur chaque bougie. Pouvez-vous me dire comment faire pour qu'il ne s'ouvre que sur le signal de la flèche ?
//------------------------------------------------------------------
#property copyright "Hill"
#property link      "Romio.com"
//------------------------------------------------------------------
#property indicator_separate_window
#property indicator_buffers 6
#property indicator_color1 Orange
#property indicator_color2 DarkGray
#property indicator_color3 Orange
#property indicator_color4 LimeGreen
#property indicator_style2 STYLE_DOT
#property indicator_style3 STYLE_DOT
#property indicator_style4 STYLE_DOT
//

//
//
//
//
//

extern int    RsiLength  = 4;
extern int    RsiPrice   = PRICE_CLOSE;
extern int    HalfLength = 5;
extern int    DevPeriod  = 100;
extern int    Sise       = 10;
extern double Deviations = 1.0;
extern bool   UseAlert   = true;
extern bool   DrawArrows = true;

color ColorDn = Crimson;
color ColorUp = DodgerBlue;
int     CodDn = 222;
int     CodUp = 221;

string   Font = "Verdana";

// ti init() if(ObjectFind("100s")<0)GetText(3,"100s","BuySell Pro",LawnGreen,5,5,7);


string PrefixArrow = "ArrowsHill";

double buffer1[];
double buffer2[];
double buffer3[];
double buffer4[];

double up[];
double dn[];

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   HalfLength=MathMax(HalfLength,1);
   SetIndexBuffer(0,buffer1);
   SetIndexBuffer(1,buffer2);
   SetIndexBuffer(2,buffer3);
   SetIndexBuffer(3,buffer4);

   SetIndexStyle(4,DRAW_ARROW,0,2,Blue);
   SetIndexArrow(4,233);
   SetIndexBuffer(4,up);

   SetIndexStyle(5,DRAW_ARROW,0,2,Red);
   SetIndexArrow(5,234);
   SetIndexBuffer(5,dn);


   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int deinit()
  {
   DellObj(PrefixArrow);

   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   int i,j,k,counted_bars=IndicatorCounted();
   if(counted_bars<0)
      return(-1);
   if(counted_bars>0)
      counted_bars--;
   int limit=MathMin(Bars-1,Bars-counted_bars+HalfLength);

   static datetime timeLastAlert = NULL;

   for(i=limit; i>=0; i--)
      buffer1[i] = iRSI(NULL,0,RsiLength,RsiPrice,i);
   for(i=limit; i>=0; i--)
     {
      double dev  = iStdDevOnArray(buffer1,0,DevPeriod,0,MODE_SMA,i);
      double sum  = (HalfLength+1)*buffer1[i];
      double sumw = (HalfLength+1);
      for(j=1, k=HalfLength; j<=HalfLength; j++, k--)
        {
         sum  += k*buffer1[i+j];
         sumw += k;
         if(j<=i)
           {
            sum  += k*buffer1[i-j];
            sumw += k;
           }
        }
      buffer2[i] = sum/sumw;
      buffer3[i] = buffer2[i]+dev*Deviations;
      buffer4[i] = buffer2[i]-dev*Deviations;

      if(buffer1[i] >= buffer3[i] /*&& buffer1[i+1] < buffer3[i+1]*/)
        {
         dn[i] = buffer3[i];
         if(DrawArrows)
            ArrowDn(Time[i], High[i]);

         if(UseAlert && i == 0 && Time[0] != timeLastAlert)
           {
            Alert("Signal DOWN!");
            timeLastAlert = Time[0];
           }
        }

      if(buffer1[i] <= buffer4[i] /*&& buffer1[i+1] > buffer4[i+1] */)
        {
         up[i] = buffer4[i];
         if(DrawArrows)
            ArrowUp(Time[i], Low[i]);

         if(UseAlert && i == 0 && Time[0] != timeLastAlert)
           {
            Alert("Signal UP!");
            timeLastAlert = Time[0];
           }
        }
     }
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ArrowUp(datetime tim,double pr)
  {
   if(ObjectFind(PrefixArrow+"TextUp"+tim)==-1)
     {
      if(ObjectCreate(PrefixArrow+"TextUp"+tim,OBJ_TEXT,0,tim,pr-GetDistSdvig()))
         ObjectSetText(PrefixArrow+"TextUp"+tim,CharToStr(CodUp),Sise,"WingDings",ColorUp);
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ArrowDn(datetime tim,double pr)
  {
   if(ObjectFind(PrefixArrow+"TextDn"+tim)==-1)
     {
      if(ObjectCreate(PrefixArrow+"TextDn"+tim,OBJ_TEXT,0,tim,pr+GetDistSdvig()))
         ObjectSetText(PrefixArrow+"TextDn"+tim,CharToStr(CodDn),Sise,"WingDings",ColorDn);
     }
  }
extern double TextSdvigMnoj = 2;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double GetDistSdvig()
  {
   return(iATR(NULL, 0, 100, 1) * TextSdvigMnoj);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DellObj(string dell)
  {
   string name;
   for(int i = ObjectsTotal()-1 ; i >=0 ; i--)
     {
      name = ObjectName(i);
      if(StringFind(name, dell) != EMPTY)
         ObjectDelete(name);
     }
  }
//+------------------------------------------------------------------+
Dossiers :
 
jarikn:
J'ai trouvé un nouvel indicateur, je voulais le mettre sur l'EA, mais le problème est qu'il ouvre des trades sur chaque chandelier. Veuillez me conseiller sur la manière de l'ouvrir uniquement sur le signal de la flèche
.

Tout d'abord, l'indicateur n'est pas du tout nouveau, mais très ancien. Si vieux que ses interfaces sont dépassées même pour 4

Deuxièmement, il redessine. Exactly at HalfLength (5 mesures par défaut, réglées dans les paramètres)

et enfin - la façon d'ouvrir des transactions pour Expert Advisor dépend de 90% de l'EA, c'est-à-dire que sans le code de l'EA, tout est inutile.

 
Maxim Kuznetsov:

Tout d'abord, l'indicateur n'est pas du tout nouveau, mais très ancien. Si vieux que ses interfaces sont obsolètes même pour 4

Deuxièmement, il redessine. Exactly at HalfLength (5 mesures par défaut, réglées dans les paramètres)

Enfin, la façon d'ouvrir des positions pour un conseiller expert dépend à 90% de l'EA, c'est-à-dire que sans le code de l'EA, tout est inutile.

Ok. Je l'ai. Par exemple, si nous prenons 2 indicateurs avec des périodes différentes et écrivons la condition *si 1 indicateur montre la flèche vers le haut et 2 indicateurs montrent la flèche vers le haut sur une bougie, donnez-nous une alerte et une flèche sur le graphique*. Savez-vous comment cela peut être mis en œuvre ? Dois-je ajouter un tampon ou puis-je créer un indicateur qui suit les signaux des deux ? Et si vous n'êtes pas dur, donnez un exemple de la façon de le faire.

 
jarikn:

Ok. Je l'ai. Par exemple, si nous prenons 2 indicateurs avec des périodes différentes et écrivons la condition suivante *si 1 indicateur montre la flèche vers le haut et 2 indicateurs montrent la flèche vers le haut sur une bougie, alors donnez-nous une alerte et une flèche sur le graphique*. Savez-vous comment cela peut être mis en œuvre ? Dois-je ajouter un tampon ou puis-je créer un indicateur qui suit les signaux des deux ? Et si vous n'êtes pas difficile, donnez un exemple de la manière de procéder.

Vous ajoutez deux iCustom avec des périodes différentes à votre Expert Advisor et (peut-être) vous serez heureux.
 
MakarFX:
Ajoutez deux iCustom avec des périodes différentes à votre EA et (peut-être) vous serez heureux.

OK, je vais essayer. Merci.

 

Bonjour à nouveau )))) Qui peut me dire quel est l'indicateur ?

Fichier <*.ex* supprimé

 

J'essaie d'écrire un indicateur comme ZigZag par le nombre de points passés.

J'ai peur de ne pas avoir assez de connaissances pour l'écrire moi-même, j'ai donc décidé de réécrire l'indicateur de quelqu'un d'autre.

C'est ce que j'ai obtenu.

#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot Label1
#property indicator_label1  "Label1"
#property indicator_type1   DRAW_SECTION
#property indicator_color1  clrCrimson
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- input parameters
input int      Points=50;
//--- indicator buffers
int Trend=1,InTrend;
datetime ttime;
double Last_High,Last_Low;
double Buffer01[],Buffer02[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   IndicatorBuffers(2);
   IndicatorDigits(Digits);
//--- indicator buffers mapping
   SetIndexBuffer(0,Buffer01);
   SetIndexBuffer(1,Buffer02);
   SetIndexEmptyValue(0,0);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
//---
   int limit=rates_total-prev_calculated-2;
   if(limit<2) return(0);
   for(int i=limit; i>=0;i--)
     {
      if(time[i]!=ttime) {InTrend=InTrend+1; ttime=time[i];}
      Buffer01[i]=0;
      Buffer02[i]= open[i]; 
      if(Buffer02[i+1]>Last_High && Trend==1)   InTrend=1;
      if(Buffer02[i+1]<Last_Low  && Trend==0)   InTrend=1;
      if(Buffer02[i+1]>Last_High) Last_High=Buffer02[i+1];
      if(Buffer02[i+1]<Last_Low ) Last_Low =Buffer02[i+1];
      //----
      if(Trend==1 && Buffer02[i+1]<Last_High-Points*Point && InTrend>1)
        {
         Trend=0;
         if(i+InTrend<ArraySize(Buffer01))
         Buffer01[i+InTrend]=Buffer02[i+InTrend];
         Last_High=Buffer02[i+1];
         Last_Low=Buffer02[i+1];
         InTrend=1;
        }
      if(Trend==0 && Buffer02[i+1]>Last_Low+Points*Point && InTrend>1)
        {
         Trend=1;
         if(i+InTrend<ArraySize(Buffer01))
         Buffer01[i+InTrend]=Buffer02[i+InTrend];
         Last_Low=Buffer02[i+1];
         Last_High=Buffer02[i+1];
         InTrend=1;
        }
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

Il semble que le dessin soit correct, mais il est lent.

Le prix a dépassé 50 points mais l'indicateur ne tire pas.

Veuillez m'aider à résoudre ce problème.

 
MakarFX:

Aidez-nous à résoudre ce problème, s'il vous plaît.

voici le zz point par point pour mt5

https://www.mql5.com/ru/forum/318267#comment_12508440


devrait fonctionner dans MT4 si vous changez la numérotation dans le cycle de calcul principal.

 
Igor Makanu:

voici le point par point que ZZ a posté pour mt5

https://www.mql5.com/ru/forum/318267#comment_12508440


Cela devrait fonctionner dans MT4 si vous renumérotez le cycle de calcul principal.

Igor, merci, mais MT4 ne fonctionne pas correctement.


S'il vous plaît, dites-moi ce qui doit être correct.

 
J'ai rencontré un tel problème. Le problème est qu'il ouvre des transactions à chaque nouvelle bougie et uniquement à la hausse. Qui sait ce qui ne va pas ?
Dossiers :
Screenshot_8.png  121 kb
123.mq4  5 kb