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

 
konam1:
Guten Tag zusammen. Verfolgung der Werte des Parabols bei der Eröffnung jeder Stundenkerze.
Wenn ich den Verlauf durchlaufe, stimmt der iSAR des Nullbalkens mit dem Punkt auf dem Diagramm überein, außer wenn die Parabel ihre Position von oben nach unten und umgekehrt ändert.
if (newbarall!=(iTime(Symbol(),60,0))
{
newbarall=iTime(Symbol(),60,0);
Drucken (iTime(Symbol(),60,0));
Print ("SAR = ",NormalizeDouble(iSAR(Symbol(),60,0.02,0.2,0),Digits);
};
Daraus ergeben sich die folgenden Fragen:
Warum wird die Null-Bar-Parabel genau in diesen Momenten falsch gezählt?
Und eigentlich auch, wie man es vermeiden kann, denn wenn der Balken sich öffnet, erscheint der Punkt und ist statisch ohne Neuberechnung während der Bildung der Kerze.
Bitte helfen Sie). Ich danke Ihnen!

Wenn Sie den parabolischen Punkt auf der Nullkerze beobachten, ist er doch nicht statisch - er ändert seine Position, und zwar nicht nur, wenn Sie die Position nach oben und unten ändern, sondern ganz allgemein - manchmal verschiebt er sich leicht an einer Position (ohne nach oben und unten zu gehen)

 

Hallo, könnten Sie mir bitte sagen, warum die horizontalen Linien nicht gelöscht werden?

   if(SellInvertedHammer == true)
   {
      //if ((Open1 < Close1 && delta_minus < 0) || (Open1 >= Close1 && delta_plus > 0))
      {
         if(!ObjectCreate(ChartID(),"Arrow_Down_InvertedHammer"+IntegerToString(InvertedHammerCandle),OBJ_ARROW_DOWN,0,TimeCurrent(),High[1] + 70*Point))
               {
               Print("Не удалось создать метку вниз");
               }
               ObjectSetInteger(ChartID(),"Arrow_Down_InvertedHammer"+IntegerToString(InvertedHammerCandle),OBJPROP_COLOR,clrRed);//--- установка цвета
               ObjectSetInteger(ChartID(),"Arrow_Down_InvertedHammer"+IntegerToString(InvertedHammerCandle),OBJPROP_STYLE,STYLE_SOLID);//--- установка стиля линии
               ObjectSetInteger(ChartID(),"Arrow_Down_InvertedHammer"+IntegerToString(InvertedHammerCandle),OBJPROP_WIDTH,1);//--- установка толщины линии
               ObjectSetInteger(ChartID(),"Arrow_Down_InvertedHammer"+IntegerToString(InvertedHammerCandle),OBJPROP_BACK,false);//--- отображение на переднем (false) или заднем (true) плане
               InvertedHammerCandle ++;
         Print ("Перевернутый молот");
         Print ("Дельта+ = " + IntegerToString (delta_plus));
         Print ("Дельта- = " + IntegerToString (delta_minus));
         Print ("Объем = " + IntegerToString (volume));
         Print ("Кумулитивная дельта = " + IntegerToString (cum_delta));
         
         if(!ObjectCreate(ChartID(),"UpLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJ_HLINE,0,TimeCurrent(),UpLine_InvertedHammer))
         {
         Print("Не удалось создать верхнюю линию");
         }
         ObjectSetInteger(ChartID(),"UpLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJPROP_COLOR,clrBlueViolet);//--- установим цвет прямоугольника 
         ObjectSetInteger(ChartID(),"UpLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJPROP_STYLE,STYLE_SOLID);//--- установим стиль линий прямоугольника 
         ObjectSetInteger(ChartID(),"UpLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJPROP_WIDTH,1);//--- установим толщину линий прямоугольника 
         ObjectSetInteger(ChartID(),"UpLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJPROP_BACK,false);//--- отобразим на переднем (false) или заднем (true) плане 
         
         
         if(!ObjectCreate(ChartID(),"DownLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJ_HLINE,0,TimeCurrent(),DownLine_InvertedHammer))
         {
         Print("Не удалось создать нижнюю линию");
         }
         ObjectSetInteger(ChartID(),"DownLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJPROP_COLOR,clrSlateBlue);//--- установим цвет прямоугольника 
         ObjectSetInteger(ChartID(),"DownLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJPROP_STYLE,STYLE_SOLID);//--- установим стиль линий прямоугольника 
         ObjectSetInteger(ChartID(),"DownLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJPROP_WIDTH,1);//--- установим толщину линий прямоугольника 
         ObjectSetInteger(ChartID(),"DownLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJPROP_BACK,false);//--- отобразим на переднем (false) или заднем (true) плане 
         lineInvertedHammerCandle ++;
                         
      }

   }
   if(ma2 > UpLine_InvertedHammer && ma2 > DownLine_InvertedHammer && ma1 > UpLine_InvertedHammer && ma1 > DownLine_InvertedHammer)
               {
                  UpLine_InvertedHammer = 0;
                  DownLine_InvertedHammer = 0;
               }
      
   if (ma2 < UpLine_InvertedHammer && ma2 > DownLine_InvertedHammer && ma1 < UpLine_InvertedHammer && ma1 < DownLine_InvertedHammer)
         {
            
             if(!ObjectCreate(ChartID(),"Arrow_Sell_InvertedHammer"+IntegerToString(InvertedHammerCandleSell),OBJ_ARROW_SELL,0,TimeCurrent(),Low[1] + 50*Point))
                {
                Print("Не удалось создать метку вниз");
                }
                ObjectSetInteger(ChartID(),"Arrow_Sell_InvertedHammer"+IntegerToString(InvertedHammerCandleSell),OBJPROP_COLOR,clrRed);//--- установка цвета
                ObjectSetInteger(ChartID(),"Arrow_Sell_InvertedHammer"+IntegerToString(InvertedHammerCandleSell),OBJPROP_STYLE,STYLE_SOLID);//--- установка стиля линии
                ObjectSetInteger(ChartID(),"Arrow_Sell_InvertedHammer"+IntegerToString(InvertedHammerCandleSell),OBJPROP_WIDTH,1);//--- установка толщины линии
                ObjectSetInteger(ChartID(),"Arrow_Sell_InvertedHammer"+IntegerToString(InvertedHammerCandleSell),OBJPROP_BACK,false);//--- отображение на переднем (false) или заднем (true) плане
                InvertedHammerCandleSell ++;
                Print("Точка входа SELL по разворотной свече 'Перевернутый молот'");
                UpLine_InvertedHammer = 0;
                DownLine_InvertedHammer = 0;
                
                int upline;
                int downline;
                upline = ObjectFind(ChartID(),"UpLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle));
                downline = ObjectFind(ChartID(),"DownLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle));
                if(upline > -1 && downline > -1)
                  {
                   ObjectDelete("UpLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle));
                   ObjectDelete("DownLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle));
                   Print("Линии удалены");
                  }
                  Print("Не удалось удалить верхнюю и нижнюю линии");
                
          }

Dies ist ein Teil des gesamten Codes. Ich werde den gesamten Code posten, wenn nötig


Dankeschön

 

- Ich möchte lernen, wie man einen EA in MT4 oder MT5 zu schreiben, brauche ich einen erfahrenen EA Schriftsteller, der alle Nuancen des Codes in der Praxis zu erklären und mir helfen, Code zu schreiben. Ich brauche keine Hilfe beim Schreiben eines vorgefertigten EA, ich habe einige Erfahrung im Handel und Ideen, um alles in den Test zu überprüfen und zu verstehen, wie man in Bedingungen verwenden, muss ich lernen, wie man verschiedene Bedingungen zu schreiben.

 
Artyom Trishkin:

Wenn Sie den Punkt der Parabel auf der Nullkerze beobachten, ist er doch nicht statisch - er ändert seine Position, und zwar nicht nur, wenn Sie die Position nach oben und unten ändern, sondern generell - manchmal verschiebt er sich ein wenig an einer Position (ohne Übergang nach oben/unten)


Nichtsdestotrotz stimmt die Geschichte vollständig überein, abgesehen von den "Übergangs"-Momenten. Ich bin sogar mit einem Fehler von 1-2 Punkten zufrieden, denn am "Übergang" könnten es 20 Pips oder mehr sein.

Die Frage ist dieselbe, wie man sie vermeiden kann. Danke

 
konam1:

Nichtsdestotrotz stimmt die Geschichte vollständig überein, abgesehen von den "Übergangs"-Momenten. Ich bin sogar mit einem Fehler von 1-2 Punkten zufrieden, denn am "Übergang" könnten es 20 Pips oder mehr sein.

Die Frage ist dieselbe, wie man sie vermeiden kann. Dankeschön

Was ist das überhaupt für eine Konstruktion?

if(newbarall!=(iTime(Symbol(),60,0)))
  {
   newbarall=iTime(Symbol(),60,0);  
   Print(iTime(Symbol(),60,0));
   Print("SAR = ",NormalizeDouble(iSAR(Symbol(),60,0.02,0.2,0),Digits));
  };

Was bringt sie?

Warum drucken Sie die Uhrzeit auf diese Weise?

Und warum drucken Sie den Wert der Parabel auf diese Weise?

 
Artyom Trishkin:

Was ist das überhaupt für ein Design?

Was ist der Vorteil einer solchen Konstruktion?

Warum drucken Sie die Uhrzeit auf diese Weise?

Warum drucken Sie den Wert der Parabel auf diese Weise?


-Diese Konstruktion ergibt die Erfüllung der Bedingung, wenn eine neue Stundenkerze erscheint: Wenn die Zeit der Stundenkerze nicht mit dem Wert in der Variable newbarall übereinstimmt, dann schreiben wir eine neue Zeit in die Variable und erfüllen die Bedingung.

Zeitpunkt des Öffnens der einstündigen Kerze wird gedruckt

- Der Wert der Parabel wird auf 4 Dezimalstellen gerundet, damit er mit dem in der Tabelle angegebenen Wert übereinstimmt.

 
konam1:

Dieser Entwurf gibt eine Bedingung vor, wenn eine neue Ein-Stunden-Kerze auftritt: Wenn die Zeit der Ein-Stunden-Kerze nicht mit dem Wert in der newbarall-Variablen übereinstimmt, dann schreiben Sie eine neue Zeit in die Variable und füllen die Bedingung aus.

Zeitpunkt der Öffnung der einstündigen Kerze wird gedruckt

- Der Parabelwert wird auf 4 Dezimalstellen gerundet, damit er mit dem in der Tabelle angegebenen Wert übereinstimmt.

1. Nein, das tut sie nicht

2. So soll es sein

3. Sind Sie sicher, dass Sie mit dieser Funktion eine echte Zahl drucken?

4. warum brauchen Sie ; nach der schließenden Klammer?

 
Artyom Trishkin:

1. Nein, das tut sie nicht

2. So soll es sein

3. Sind Sie sicher, dass Sie mit dieser Funktion eine echte Zahl drucken?

4. warum brauchen Sie ; nach der schließenden Klammer?


1. der Algorithmus funktioniert jedoch nur bei der Eröffnung einer Kerze, worin liegt der Fehler in einer solchen Konstruktion?

3. die gedruckten Zahlen lauten zum Beispiel 1,1820, ich bin also sicher.

4. ein Teil des Codes ist angegeben.

 
konam1:

1. der Algorithmus funktioniert jedoch nur bei der Eröffnung einer Kerze, worin liegt der Fehler in einer solchen Konstruktion?

3. Die Zahlen 1.1820 werden zum Beispiel gedruckt, also sicher.

4. ein Teil des Codes ist angegeben.

1. Nun, vielleicht habe ich es verpasst - es ist halb fünf Uhr morgens...

3. doubleToString()

4. Aber Sie haben eine Bedingung und einen zusammengesetzten Operator:

if(condition) { }

Ich sehe keine andere Möglichkeit, sie zu interpretieren. Warum brauchen Sie ";" nach dem Operator?

 
konam1:
Daraus ergeben sich die folgenden Fragen:
Warum wird die Null-Bar-Parabel genau in diesen Momenten falsch gezählt?
Und in der Tat, wie es zu vermeiden, weil, wenn die Bar öffnet der Punkt erscheint und ist statisch ohne Neuberechnung während der Bildung der Kerze.
Bitte helfen Sie). Ich danke Ihnen!

Die Aussage "der Punkt erscheint und ist statisch ohne Neuberechnung während der Bildung einer Kerze" ist nicht korrekt, wenn der Preis die Parabel bricht, wird der Punkt neu gezeichnet.
Sie müssen die Parabel bei jedem Tick neu berechnen, da der Ausbruch zu jedem Zeitpunkt erfolgen kann, nicht nur bei der Balkeneröffnung.