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

 
-Aleks-:

Ich versuche, mir einen Reim darauf zu machen. Ihrer Meinung nach ist die richtige Option also SVA_03, richtig?

Ja, ich denke schon. Aber _02 ist definitiv falsch.
 
Dmitry Fedoseev:
Ja, ich denke schon. Aber _02 ist definitiv falsch.

Hmmm... habe einen Fehler bei mir gefunden, jetzt gibt es fast keine Diskrepanz mehr, hier ist das Original

//+------------------------------------------------------------------+
//|                                                       SVA_04.mq4 |
//|                      Copyright © 2006, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"
#property strict

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Yellow

//---- input parameters
extern int RSIPeriod=14;
extern int Levl=50;
extern int TF=0;
//---- buffers
double MABuffer[];
double PosBuffer[];
double NegBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   string short_name;
   IndicatorBuffers(1);
   SetIndexBuffer(0,MABuffer);
   SetIndexBuffer(1,PosBuffer);
   SetIndexBuffer(2,NegBuffer);
//---- indicator line
   SetIndexStyle(0,DRAW_LINE);
//----
//---- name for DataWindow and indicator subwindow label
//   short_name="RSI("+IntegerToString(RSIPeriod)+")";
   short_name="RSI("+RSIPeriod+")";
   IndicatorShortName(short_name);
   SetIndexLabel(0,short_name);
   SetIndexLabel(1,"U");
   SetIndexLabel(2,"D");
   return(0);
  }
//+------------------------------------------------------------------+
//| Relative Strength Index                                          |
//+------------------------------------------------------------------+
int start()
  {
   int    i,counted_bars=IndicatorCounted();
   double rel,negative,positive,sma,x,y,Pos,Neg;
//----
   if(Bars<=RSIPeriod) return(0);
   if(TF!=0)
     {
      string name=WindowExpertName();
      for(i=0; i<Bars-counted_bars+1; i++)
        {
         int barIndex=iBarShift(NULL,TF,Time[i],false);
         MABuffer[i]=iCustom(Symbol(),TF,name,RSIPeriod,Levl,0,0,barIndex);
        }
      return(0);
     }

   i=Bars-RSIPeriod-1;
   if(counted_bars>=RSIPeriod) i=Bars-counted_bars-1;
   while(i>=0)
     {
      double sumn=0.0,sump=0.0;
      if(i==Bars-RSIPeriod-1)
        {
         int k=Bars-2;
         //---- initial accumulation
         while(k>=i)
           {
            rel=Close[k]-Close[k+1];
            if(rel>0) sump+=rel;
            else      sumn-=rel;
            k--;
           }
         positive=sump/RSIPeriod;
         negative=sumn/RSIPeriod;
        }
      else
        {
         //---- smoothed moving average
         rel=Close[i]-Close[i+1];
         if(rel>0) sump=rel;
         else      sumn=-rel;
         positive=(PosBuffer[i+1]*(RSIPeriod-1)+sump)/RSIPeriod;
         negative=(NegBuffer[i+1]*(RSIPeriod-1)+sumn)/RSIPeriod;
        }
      PosBuffer[i]=positive;
      NegBuffer[i]=negative;
      i--;
     }
   i=Bars-RSIPeriod-1;
   if(counted_bars>=RSIPeriod) i=Bars-counted_bars-1;
   while(i>=0)
     {

      x=PosBuffer[i+1];
      y=NegBuffer[i+1];
      if(x>0)sma=Close[i+1]+x;
      else sma=Close[i+1]-y;
      MABuffer[i]=sma;
      i--;
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+

Hier ist die Version von SVA_03 mit der Korrektur

//+------------------------------------------------------------------+
//|                                                       SVA_03.mq4 |
//|                      Copyright © 2006, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"
#property strict

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Yellow

//---- input parameters
extern int RSIPeriod=14;
extern int Levl=50;
extern int TF=0;
//---- buffers
double MABuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   string short_name;
   IndicatorBuffers(1);
   SetIndexBuffer(0,MABuffer);

//---- indicator line
   SetIndexStyle(0,DRAW_LINE);
//----
//---- name for DataWindow and indicator subwindow label
//   short_name="RSI("+IntegerToString(RSIPeriod)+")";
   short_name="RSI("+RSIPeriod+")";
   IndicatorShortName(short_name);
   SetIndexLabel(0,short_name);

   return(0);
  }
//+------------------------------------------------------------------+
//| Relative Strength Index                                          |
//+------------------------------------------------------------------+
int start()
  {
   int    i,counted_bars=IndicatorCounted();
   double rel,negative,positive,sma,x,y,Pos,Neg;
//----
   if(Bars<=RSIPeriod) return(0);
   if(TF!=0)
     {
      string name=WindowExpertName();
      for(i=0; i<Bars-counted_bars+1; i++)
        {
         int barIndex=iBarShift(NULL,TF,Time[i],false);
         MABuffer[i]=iCustom(Symbol(),TF,name,RSIPeriod,Levl,0,0,barIndex);
        }
      return(0);
     }

   i=Bars-RSIPeriod-1;
   if(counted_bars>=RSIPeriod) i=Bars-counted_bars-1;
   while(i>=0)
     {
      double sumn=0.0,sump=0.0;
      if(i==Bars-RSIPeriod-1)
        {
         int k=Bars-2;
         //---- initial accumulation
         while(k>=i)
           {
            rel=Close[k]-Close[k+1];
            if(rel>0) sump+=rel;
            else      sumn-=rel;
            k--;
           }
         positive=sump/RSIPeriod;
         negative=sumn/RSIPeriod;
        }
      else
        {
         //---- smoothed moving average
         rel=Close[i]-Close[i+1];
         if(rel>0) sump=rel;
         else      sumn=-rel;
         positive=(Pos*(RSIPeriod-1)+sump)/RSIPeriod;
         negative=(Neg*(RSIPeriod-1)+sumn)/RSIPeriod;
        }

      x=Pos;
      y=Neg;
      Pos=positive;
      Neg=negative;
      if(x>0)sma=Close[i+1]+x;
      else sma=Close[i+1]-y;
      MABuffer[i]=sma;

      i--;
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+

dort ersetzt

      x=positive;;
      y=negative;

zu.

      x=Pos;
      y=Neg;
Die Geschichte passt, aber es gibt Probleme beim Nullpunkt - es gibt eine Diskrepanz, wie kann man sie ausgleichen?
Dateien:
SVA_03.mq4  3 kb
SVA_04.mq4  4 kb
 
Falsche Datei versehentlich gepostet - oben geändert...
 
-Aleks-:
История сходится, но проблемы на нулевом баре - имеется расхождение, как их купировать?
Ich verstehe zwar, dass das Problem auf eine Überberechnung des Nullbalkens zurückzuführen ist, aber ich kann nicht herausfinden, wie ich es lösen kann.
 

Guten Tag!

Hilfe! Ich brauche einen Code, um einen schwebenden Auftrag zu öffnen. Und in 20 Minuten nach Eröffnung der Order, wenn diese nicht geschlossen wird, wird der SL auf 50 Pips geändert. Ich danke Ihnen!

 

Guten Tag

Bitte helfen Sie mir bei einer (wahrscheinlich) sehr einfachen Frage. Es gibt eine Standardfunktion:

int  ArraySize(const void& array[]);

Was bedeutet "const void &" und wie ist es zu verwenden? ? Selbst ein einfacher Versuch, eine ähnliche Funktion zu schreiben, führt zu einem Kompilierungsfehler:

int test(const void& array[]) {
    return ArraySize(array);
}

Kompilierungsfehler: 'const' - illegale Verwendung des Typs 'void'

Wie kann ich "const void &"korrekt verwenden , wenn ich meinen eigenen Code schreibe? Ist das überhaupt machbar?

 
mql4-2016:

Guten Tag

Bitte helfen Sie mir bei einer (wahrscheinlich) sehr einfachen Frage. Es gibt eine Standardfunktion:

int  ArraySize(const void& array[]);

Was bedeutet "const void &" und wie ist es zu verwenden? ? Selbst ein einfacher Versuch, eine ähnliche Funktion zu schreiben, führt zu einem Kompilierungsfehler:

int test(const void& array[]) {
    return ArraySize(array);
}

Kompilierungsfehler: 'const' - illegale Verwendung des Typs 'void'

Wie kann ich "const void &"richtig verwenden , wenn ich meinen eigenen Code schreibe? Oder kann sie überhaupt verwendet werden?

Ersetzen Sie void durch den Datentyp, der das Array speichern soll. Die Standardfunktion ist als Vorlage konzipiert.

Tatsächlich ist diese Systemfunktion eine überladene Funktion, und die gesamte Implementierung einer solchen Überladung ist für den MQL4-Entwickler verborgen:

intArraySize(
void&array[]// zu prüfendes Array
);

Der MQL4-Compiler ersetzt tatsächlich eine benötigte Implementierung für jeden Aufruf dieser Funktion, zum Beispiel für Arrays vom Typ Integer wie diese

intArraySize(
int&array[]// Array mit Elementen vom Typ int
);

Und für ein Array vom Typ MqlRates zur Arbeit mit Kursen im History-Datenformat kann die Funktion ArraySize() wie folgt dargestellt werden

intArraySize(
MqlRates&array[]// Array gefüllt mit Werten vom Typ MqlRates
);

 
Kot:

Guten Tag!

Hilfe! Ich brauche einen Code, um einen schwebenden Auftrag zu öffnen. Und in 20 Minuten nach Eröffnung der Order, wenn diese nicht geschlossen wird, wird der SL auf 50 Pips geändert. Ich danke Ihnen!

Wie kann ich Ihnen helfen? Für Sie schreiben? Freiberufler bitte.
 
Artyom Trishkin:

Ersetzen Sie void durch den Datentyp, der das Array speichern soll. Die Standardfunktion ist als Vorlage konzipiert.

Tatsächlich ist diese Systemfunktion eine überladene Funktion, und die gesamte Implementierung einer solchen Überladung ist für den Entwickler von Programmen in MQL4 verborgen.

Habe ich richtig verstanden, dass in MQL4/MQL5 das "const void &"-Konstrukt - ist in Wirklichkeit eine symbolische Notation für den Verweis und kann in der Praxis nicht in eigenen Funktionen geschrieben werden?

Vielen Dank im Voraus

 
mql4-2016:

Habe ich richtig verstanden, dass in MQL4/MQL5 die "const void &" Struktur - in Wirklichkeit eine symbolische Notation für das Nachschlagewerk ist und in der Praxis nicht in Ihren eigenen Funktionen verwendet werden kann?

Ich danke Ihnen im Voraus

Nein.
Grund der Beschwerde: