[Archiv!] Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Könnte nirgendwo ohne dich hingehen - 2. - Seite 513

 

Profi-Tipps für die Optimierung der Eröffnungspreise im Auto-Optimierer:

https://forum.mql4.com/ru/42125

 
Hallo, ich bin ein Anfänger, der versucht zu verstehen, wie man einen EA schreibt
Wie schreibe ich "wenn ein zuvor geschlossener Auftrag ein Kaufauftrag war und mit einem Stop-Loss geschlossen wurde, dann verkaufe bitte 0,1 Lot mit einem Stop-Loss 50 Take-Profit 50"?)
 

Fachleute! Hilfe! Wie kann dies umgesetzt werden?


int start() 
{
 bool OPEN=false;

 условие1=х;//вычисление условия1
 условие2=y;//вычисление условия2
 
 if(условие1==х)OPEN=true;
 
 if(условие2==y&&OPEN==true)
 OrderSend;

Wir müssen OPEN=true festlegen, bis die
Bedingung2. Bedingung1 kann sich während dieser Zeit ändern.

Vielen Dank im Voraus!

 

für den Start herausnehmen

 bool OPEN=false;
 
sergeev:

für den Start herausnehmen


Ich danke Ihnen vielmals! Wie man so schön sagt: Alles ist genial einfach! Und ich habe mir den ganzen Tag den Kopf zerbrochen.
 

Bitte sagen Sie mir, was ich falsch mache, wenn ich die Anzahl der ersten Balken (Quant_Bars) berechne, die der Bedingung nur oberhalb oder unterhalb des Puffers entsprechen. D.h. sobald der Indikator VOR dem geschlossenen Balken (1) gezeichnet wird, sollte ich die vorherigen Balken mit dem Indikator UNTER den Balken zählen (außer denen, die nicht der Bedingung entsprechen) und umgekehrt, in der entgegengesetzten Richtung der Bewegung. Meine Variante liefert falsche Werte.

Wer weiß, wie man es macht?

#property indicator_chart_window     
#property indicator_buffers 1
#property indicator_color1 Green
double step = 0.1;
double max = 0.2;

int n = 1;
double S;
double barA;
double barB;
double Bufer[];
int k,k1;
//---------------------------------
int init()
{
   SetIndexStyle(0, DRAW_ARROW,EMPTY,0,Green); 
   SetIndexArrow(0, 159); 
   SetIndexBuffer(0, Bufer);
   return (0);
}
//---------------------------------
int deinit() 
{
   return (0);
}
//----------------------------------
int start()
{

 k1=k;
 for(int i=Bars-2; i>=0; i--)  
    {
     if(i == Bars-2)
       {
         Bufer[i] = Low[i] - 10.0 * Point;
         n = 1;
         S = step;
         barA = High[i];
         barB = Low[i];
       }
    else
       {
         if(Close[i] > barA)
           {
             barA = Close[i];
               if (n==1 && S <= max - step)
                  { S = S + step; }
             k=1;
           }          
         if(Close[i] < barB)
           {
            barB = Close[i];
              if (n == -1 && S <= max - step)
                 { S = S + step;}
            k=2;
           }
        if (n == 1)
           { Bufer[i] = Bufer[i + 1] + S * (barA - (Bufer[i + 1]));}
       else
           { Bufer[i] = Bufer[i + 1] + S * (barB - (Bufer[i + 1]));}
      
       if ((Bufer[i+1] < Close[i + 1] && Bufer[i] > Close[i]) || (Bufer[i + 1] > Close[i + 1] && Bufer[i] < Close[i]))
          {
           S = step;
             if (n == 1)
                {Bufer[i] = barA;}
             else
                {Bufer[i] = barB;}
           barB = Close[i];
           barA = Close[i];
           n = -1 * n;
          }
       }
   }
    
//--------------------------Подсчитать бары:
   int num1 = 2;  // бар  
   int counted_bars = IndicatorCounted(); 
 //-----СЕЛЛ
if(Bufer[2]<Close[2] && Bufer[1]>Close[1])    
   {
     for( i=num1; i<=Bars; i++ )
        { 
          if(Bufer[i]<Close[i])
                                 
             {int Quant_Bars = Quant_Bars+i;}
          if(Bufer[i]>Close[i] && Bufer[i-1]<Close[i-1]) 
          break;
         }
     Alert("Число баров= ",Quant_Bars, "  counted_bars= ",counted_bars," бары= ", Bars );    
    }
    
 //-----БАЙ  
if(Bufer[2]>Close[2] && Bufer[1]<Close[1])     
   {
     for( i=num1; i<=Bars; i++ )
        { 
          if(Bufer[i]<Close[i])                     
            {Quant_Bars = Quant_Bars+i;}
          if(Bufer[i]>Close[i] && Bufer[i-1]<Close[i-1]) 
          break;
         }
     Alert("Число баров= ",Quant_Bars, "  counted_bars= ",counted_bars," бары= ", Bars );    
    }  

   return (0);
}
 

Frage,

Warum, wenn mein Expert Advisor ordentlich die gesamte Kaution abfährt und praktisch alle Trades verlieren, dann, wenn ich die "Polarität" der Signale ändere, steigt die Kaution nicht so schnell, aber schon? )))) die Punkte gleich sind, liegt der Fehler nur in der Öffnungsrichtung der Bestellung, oder gibt es etwas anderes?

 
Maxaxa:

Frage,

Warum, wenn mein Expert Advisor ordentlich die gesamte Kaution abläuft und praktisch alle Trades verlieren, dann, wenn ich die "Polarität" der Signale ändere, steigt die Kaution nicht so schnell, aber schon? )))) die Punkte gleich sind, liegt der Fehler nur in der Öffnungsrichtung der Bestellung, oder gibt es etwas anderes?

Dies ist eine Handelsphilosophie.
 
Maxaxa:


Es gibt noch etwas anderes
 
Solree:

Guten Tag.

Es gibt 4 Aufträge, 2 Verkäufe und 2 Käufe. Siegel werden, bildlich gesprochen, erstellt, wenn der Preis steigt, und gekauft, wenn er fällt. Die Verkäufe werden gelöscht, wenn ein Kauf erstellt wird und umgekehrt. Wenn ein Ticket erstellt wird, wird der 1. Verkauf oder Kauf in der Variablen pos gespeichert. Alle 4 haben den gleichen Kommentar - "Aelit". Es gibt also einen Code:

Die Reihenfolge wird normalerweise durch das Ticket ausgewählt, aber sehr oft schlägt der Kommentarvergleich fehl. Aus Interesse habe ich sonst Alert(OrderComment()) gemacht; und das Protokoll zeigte "Alert: Aelit[sl]". Was ist [sl]? Liegt es daran, dass alle Bestellungen denselben Kommentar enthalten? Warum war dann derselbe [sl], als ich einen Kommentar abgab, der nicht mit den anderen für den Test übereinstimmte? Wenn Sie die Kommentarprüfung entfernen, wird im Protokoll für OrderModify ein Ticketfehler angezeigt. Zuerst dachte ich, dass diese Bedingung erreicht wurde, bevor ein Auftrag erstellt wurde, aber nein, zu diesem Zeitpunkt ist der Auftrag bereits vorhanden, und das Ticket ist dasselbe, ob die Bedingung ausgelöst wird oder nicht. Wie können wir das verstehen?

Es ist kein Wunder, dass Ihr Maklerunternehmen Ihrem Kommentar hinzugefügt hat - der Auftrag wurde geschlossen, als der StopLoss erreicht wurde.

Sie haben die Bestellungsauswahl auf dem Ticket nicht korrekt organisiert. Bei einer solchen Auswahl ist MODE_TRADES zunächst einmal unnötig - es wird in der Funktion OrderSelect() weggelassen,

Zweitens wird nach der erfolgreichen Auswahl des Auftrags nicht überprüft, ob der Auftrag aus der Reihe der Aufträge gemäß dem Ticket ausgewählt wurde - aus den Marktaufträgen oder aus den geschlossenen Aufträgen.

Um dies zu tun, nachdem der Auftrag ausgewählt ist, überprüfen Sie seine Schließzeit und wenn es gleich Null ist, dann nur dann der Auftrag ist ein Markt ein, sonst - es ist von den Aufträgen bereits geschlossen ausgewählt (daher der Zusatz zu Ihrem Kommentar)