Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1518

 
Ich habe einen neuen Indikator gefunden, ich wollte ihn in meinen EA einbauen, aber das Problem ist, dass er bei jeder Kerze einen Handel eröffnet. Können Sie mir sagen, wie ich sie nur bei einem Pfeilsignal öffnen kann?
//------------------------------------------------------------------
#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);
     }
  }
//+------------------------------------------------------------------+
Dateien:
 
jarikn:
Ich habe einen neuen Indikator gefunden, den ich in den EA einbauen wollte, aber das Problem ist, dass er bei jeder Kerze Trades eröffnet. Bitte beraten Sie mich, wie man es nur bei Pfeilsignalen öffnen kann

Zunächst einmal ist der Indikator gar nicht neu, sondern sehr alt. So alt, dass seine Schnittstellen selbst für 4 Jahre veraltet sind

Zweitens: Es wird neu gezeichnet. Genau auf halber Länge (standardmäßig 5 Takte, in den Parametern eingestellt)

Und schließlich - wie man Trades für Expert Advisor eröffnet, hängt zu 90% vom EA ab, d.h. ohne den EA-Code ist alles nutzlos

 
Maxim Kuznetsov:

Zunächst einmal ist der Indikator gar nicht neu, sondern sehr alt. So alt, dass seine Schnittstellen selbst für 4 Jahre veraltet sind

Zweitens: Es wird neu gezeichnet. Genau auf halber Länge (standardmäßig 5 Takte, in den Parametern eingestellt)

Und schließlich - wie man Trades für Expert Advisor eröffnet, hängt zu 90% vom EA ab, d.h. ohne den EA-Code ist alles nutzlos

Ok. Verstanden. Nehmen wir zum Beispiel 2 Indikatoren mit unterschiedlichen Perioden und schreiben die Bedingung *wenn 1 Indikator den Aufwärtspfeil und 2 Indikatoren den Aufwärtspfeil auf einer Kerze zeigen, gib uns einen Alarm und einen Pfeil auf dem Diagramm*. Wissen Sie, wie dies umgesetzt werden kann? Muss ich einen Puffer hinzufügen oder kann ich einen Indikator erstellen, der den Signalen von beiden folgt? Und wenn Sie nicht hart sind, geben Sie ein Beispiel, wie man es macht

 
jarikn:

OK. Ich hab's. Wenn wir zum Beispiel 2 Indikatoren mit unterschiedlichen Perioden nehmen und die folgende Bedingung schreiben *wenn 1 Indikator den Aufwärtspfeil und 2 Indikatoren den Aufwärtspfeil auf einer Kerze zeigen, dann geben Sie uns einen Alarm und einen Pfeil auf dem Diagramm*. Wissen Sie, wie dies umgesetzt werden kann? Muss ich einen Puffer hinzufügen oder kann ich einen Indikator erstellen, der den Signalen von beiden folgt? Und wenn Sie nicht hart sind, geben Sie ein Beispiel, wie man es macht

Fügen Sie Ihrem Expert Advisor zwei iCustom mit unterschiedlichen Zeiträumen hinzu und (vielleicht) werden Sie zufrieden sein.
 
MakarFX:
Fügen Sie Ihrem EA zwei iCustom mit unterschiedlichen Zeiträumen hinzu und Sie werden (vielleicht) zufrieden sein.

OK, ich werde es versuchen. Danke.

 

Nochmals Hallo )))) Wer kann mir sagen, was der Indikator ist?

<*.ex* Datei gelöscht

 

Ich versuche, einen Indikator wie ZigZag nach der Anzahl der übergebenen Punkte zu schreiben.

Ich fürchte, ich habe nicht genug Wissen, um es selbst zu schreiben, also habe ich beschlossen, den Indikator von jemand anderem neu zu schreiben.

Dies ist das Ergebnis

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

Es scheint richtig zu zeichnen, aber es verzögert sich.

Der Preis hat 50 Punkte überschritten, aber der Indikator zeichnet nicht.

Bitte helfen Sie mir, dieses Problem zu beheben.

 
MakarFX:

Bitte helfen Sie, das Problem zu lösen.

Hier ist der Punkt für Punkt zz für mt5

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


sollte in MT4 funktionieren, wenn Sie die Nummerierung im Hauptberechnungszyklus ändern

 
Igor Makanu:

hier ist der Punkt-für-Punkt ZZ für mt5 gepostet

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


Es sollte in MT4 funktionieren, wenn Sie den Hauptberechnungszyklus neu nummerieren

Igor, ich danke Ihnen, aber MT4 funktioniert nicht richtig.


Bitte sagen Sie mir, was richtig sein muss.

 
Ich bin auf ein solches Problem gestoßen. Ich habe die mt2-Indikator auf mt4. es soll die Indikator-Puffer zu lesen und wenn der Pfeil erscheint, sollte es automatisch öffnen Trades auf binäre Optionen. aber das Problem ist, dass ich es öffnen Trades jede neue Kerze und nur nach oben. Wer weiß, was los ist?
Dateien:
Screenshot_8.png  121 kb
123.mq4  5 kb