Check - was habe ich falsch gemacht?

 

Code schreiben

int GetN()
{
   int n = 0;
   for (int i = OrdersHistoryTotal() - 1; i >= 0; i--)
   {
      if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && OrderMagicNumber() == Magic && OrderSymbol() == _Symbol)
      {
         bool profit = OrderType() == OP_BUY ? OrderClosePrice() > OrderOpenPrice() : OrderClosePrice() < OrderOpenPrice();
         
         bool loss = OrderType() == OP_BUY ? OrderClosePrice() < OrderOpenPrice() : OrderClosePrice() > OrderOpenPrice();
         
         bool neutral = OrderClosePrice() == OrderOpenPrice();

            SumPosOrder = OrderLots();
            Tiket2 = OrderTicket();
           }


         if(loss)
           {
            n++;
            ObchMin = ObchMin + SumPosOrder; // Подсчет общего минуса
            Minus++;                         //Подсчет отрицательных сделок
            Sdelok++;                        //Подсчет количества сделок
           }

         if(n >= MartinSteps)
           {
            n = 0;
            break;
           }

         if(profit)
           {
            ObchPlus = ObchPlus + (SumPosOrder * 0.8); // Расчет для Бинарных опционов поэтому умножаю на 0,8
           }

         if(profit && ObchPlus < ObchMin)
           {
            n++;
            Pobeda++;
            Sdelok++;
           }



         if(profit && ObchPlus > ObchMin)
           {
            ObchPlus = 0;
            ObchMin = 0;
            Pobeda++;
            Sdelok++;
            n = 0;
            break;
           }
        }
     
   return n;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double SelectVolume(int n)
  {
   return
      n == 0 ? Volume1
      : n == 1 ? Volume2
      : n == 2 ? Volume3
      : n == 3 ? Volume4
      : n == 4 ? Volume5
      : n == 5 ? Volume6
      : n == 6 ? Volume7
      : n == 7 ? Volume8
      : n == 8 ? Volume9
      : n == 9 ? Volume10
      : Volume1;
  }
//+------------------------------------------------------------------+

Die Aufgabe lautete ursprünglich:
Finde den letzten abgeschlossenen Auftrag.
Prüfen Sie, ob er in der Plus- oder Minusposition geschlossen ist.
Zählen Sie die Anzahl der Abschlüsse
Zählen Sie die Anzahl der Plus- und Minusabschlüsse.

Berechnen Sie die Höhe des Einsatzes.


Wenn der Handel profitabel ist (und das Gesamtminus = 0), dann wird Wette Nr. 1
Wenn der Handel negativ ist, wird das Minus gezählt und Wette Nr. 2
Wenn Plus, aber Minus > 0, dann wird die nächste Wette gesetzt.
Aber aus irgendeinem Grund zählt es die Anzahl der Einsätze und den Einsatzbetrag nicht korrekt...

 

z.B. Zeichenkette

bool neutral = OrderClosePrice() == OrderOpenPrice();

sollten wir wahrscheinlich die Funktionsweise der algorithmischen Bedingungen so gestalten:

   bool neutral=false;

   if(NormalizeDouble(OrderClosePrice(),_Digits) == NormalizeDouble(OrderOpenPrice(),_Digits)neutral=true;

und die beiden anderen Bedingungen in der gleichen Art und Weise

 

Übrigens: Das letzte Geschäft in der Geschichte ist nicht immer das letzte Geschäft in der Zeit.

 
Nikita Chernyshov #:

Übrigens, das letzte Geschäft in der Geschichte ist nicht immer das letzte Geschäft in der Zeit.

Ja, ich habe die Zeitabtastung entfernt, aber es funktioniert immer noch nicht...
Renat Akhtyamov #:

z.B. Linie

vielleicht sollten wir die Arbeit der algorithmischen Bedingungen so gestalten:

   bool neutral=false;

   if(NormalizeDouble(OrderClosePrice(),_Digits) == NormalizeDouble(OrderOpenPrice(),_Digits)neutral=true;

und die beiden anderen Bedingungen in der gleichen Art und Weise

Ich habe diesen Block bereits in anderen Systemen verwendet und er hat in diesem Teil perfekt funktioniert.
aber trotzdem werde ich das sicherlich überprüfen und neu schreiben. Ich werde Sie über das Ergebnis informieren.
 
Natalya Smirnova #:
Ja, ich habe die Zeitabtastung entfernt, aber es funktioniert immer noch nicht... Ich habe diesen Block bereits in anderen Systemen verwendet und er hat in diesem Teil perfekt funktioniert.
aber trotzdem werde ich das sicherlich überprüfen und neu schreiben. Ich werde Sie über das Ergebnis informieren.

Werden diese Variablen irgendwo zurückgesetzt?

            ObchMin = ObchMin + SumPosOrder; // Подсчет общего минуса
            Minus++;                         //Подсчет отрицательных сделок
            Sdelok++;                        //Подсчет количества сделок
 
Renat Akhtyamov #:

Werden diese Variablen irgendwo zurückgesetzt?

Ja, beim Start haben sie einen Wert von 0
und vor der Fertigstellung.
 
Renat Akhtyamov #:

Sind diese Variablen irgendwo auf Null gesetzt?

Vielleicht gehen Sie von der kartierten.
Ich werde die Sammlung von Statistiken aus dieser Funktion für jetzt zu entfernen, und allgemeine Minus-und Statistiken in einem anderen (separate Funktion produzieren wird)

Schreiben nach Blöcken.

Erfassen von Statistiken und Berechnen von Minus und Plus (Minus und Plus sind globale Variablen)

if(OrderSelect((OrdersHistoryTotal() - 1), SELECT_BY_POS, MODE_HISTORY) && OrderMagicNumber() == Magic && OrderSymbol() == _Symbol)
              {
               if(OrderTicket() != Tiket2)
                 {
                  bool profit1 = false;
                  if(OrderClosePrice() > 0)
                    {
                     profit1 = true;
                    }
                  bool loss1 = false;
                  if(OrderClosePrice() < 0)
                    {
                     loss1 = true;
                    }


                  SumPosOrder = OrderLots();
                  Tiket2 = OrderTicket();
                  Print(OrderCloseTime());
                 


               if(loss1)
                 {
                  ObchMin = ObchMin + SumPosOrder;
                  Minus++;
                  Sdelok++;
                 }



               if(profit1)
                 {
                  ObchPlus = ObchPlus + (SumPosOrder * 0.8);
                 }

               if(profit1 && ObchPlus < ObchMin)
                 {

                  Pobeda++;
                  Sdelok++;
                 }




               if(profit1 && ObchPlus > ObchMin)
                 {
                  ObchPlus = 0;
                  ObchMin = 0;
                  Pobeda++;
                  Sdelok++;

                 }
}


Block 2 - Auswahl der Variablen n für die Berechnung (bzw. Auswahl) des Satzes

int GetN()
  {
   int n = 0;
   for(int i = OrdersHistoryTotal() - 1; i >= 0; i--)
     {
      if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && OrderMagicNumber() == Magic && OrderSymbol() == _Symbol)
        {
         bool profit = false;
         if(OrderClosePrice() > 0)
            profit = true;

         bool loss = false;
         if(OrderClosePrice() < 0)
            loss = true;


        }


      if(loss)
        {
         n++;
        }

      if(n >= MartinSteps)
        {
         n = 0;
         break;
        }

      

      if(profit && ObchPlus < ObchMin)
        {
         n++;
        }



      if(profit && ObchPlus > ObchMin)
        {
         n = 0;
         break;
        }
     }

   Print(n);

   return n;
  }


double SelectVolume(int n)
  {
   return
      n == 0 ? Volume1
      : n == 1 ? Volume2
      : n == 2 ? Volume3
      : n == 3 ? Volume4
      : n == 4 ? Volume5
      : n == 5 ? Volume6
      : n == 6 ? Volume7
      : n == 7 ? Volume8
      : n == 8 ? Volume9
      : n == 9 ? Volume10
      : Volume1;
  }
//+------------------------------------------------------------------+


Das wäre wahrscheinlich richtig...

 

Ich verstehe die Logik immer noch nicht.

Wie das?

bool profit = false;
         if(OrderClosePrice() > 0)
            profit = true;

         bool loss = false;
         if(OrderClosePrice() < 0)
            loss = true;

Wie kann der Schlusskurs des Auftrags kleiner als Null sein?

Die BUY-Order ist gewinnbringend, wenn der Schlusskurs höher ist als der Eröffnungskurs.

Hier ist die Bedingung für einen Kauf plus (ohne Provisionen und Swap):

OrderClosePrice() > OrderOpenPrice()
Wenn es andersherum ist, ist das ein Minuspunkt.
 
Renat Akhtyamov der Schlusskurs des Auftrags niedriger als Null sein?

Die BUY-Order ist gewinnbringend, wenn der Schlusskurs höher ist als der Eröffnungskurs.

Hier ist die Bedingung für einen Kauf plus (ohne Provisionen und Swap):

Wenn es andersherum ist, ist das ein Minuspunkt.

Da ich für binäre Optionen schreibe, habe ich die Dinge ein wenig anders gemacht:

if(OrderProfit() > 0)


Das wäre wahrscheinlich richtig?

 
Natalya Smirnova #:

Vielleicht gehen Sie von der kartierten.
Ich werde die Sammlung von Statistiken aus dieser Funktion entfernen und das Gesamtminus und die Statistiken in einer anderen (separaten Funktion, die ich erstellen werde)

Schreiben nach Blöcken

Kumuliertes Minus und Plus (Minus und Plus sind globale Variablen)


Block 2 - Auswahl der Variablen n für die Berechnung (bzw. Auswahl) des Satzes


Das wäre wahrscheinlich richtig...

Ich möchte mich nicht einmischen und habe mir Ihren Code und Ihre Tipps nicht einmal angesehen...

double SelectVolume(int n)
  {
   return
      n == 0 ? Volume1
      : n == 1 ? Volume2
      : n == 2 ? Volume3
      : n == 3 ? Volume4
      : n == 4 ? Volume5
      : n == 5 ? Volume6
      : n == 6 ? Volume7
      : n == 7 ? Volume8
      : n == 8 ? Volume9
      : n == 9 ? Volume10
      : Volume1;
  }

fiel mir auf. In diesem Zusammenhang eine Frage: Ist es nicht einfacher und lesbarer, den Schalteroperator

double SelectVolume(int n)
  {
   double Volume = 0.0;
    switch(n)
    {
     case 1  :  Volume = Volume2;     break;
     case 2  :  Volume = Volume3;     break;
     case 3  :  Volume = Volume4;     break;
     case 4  :  Volume = Volume5;     break;
     case 5  :  Volume = Volume6;     break;
     case 6  :  Volume = Volume7;     break;
     case 7  :  Volume = Volume8;     break;
     case 8  :  Volume = Volume9;     break;
     case 9  :  Volume = Volume10;    break;
     default :  Volume = Volume1;     break;
    }
   return(Volume);
  }
Ich denke, es ist einfacher zu lesen und zu verstehen. Vielleicht geht es auch ein bisschen schneller.
 
Alexey Viktorov #:

Sie haben bereits Ratschläge für den gesamten Algorithmus erhalten, ich möchte mich nicht einmischen und habe mir Ihren Code und die gleichen Ratschläge noch nicht einmal angesehen... Aber das

fiel mir auf. In diesem Zusammenhang eine Frage: Ist es nicht einfacher und lesbarer, den Schalteroperator

Ich denke, es ist einfacher zu lesen und zu verstehen. Vielleicht geht es auch ein bisschen schneller.
Da ich nicht sehr erfahren bin, ist Ihr Vorschlag für mich völlig neu.
Ich habe es ursprünglich so gemacht, wie ich es vorgefunden habe, und es hat funktioniert, also habe ich nicht daran gedacht, es zu verbessern.
Sie wissen ja, was man sagt: "Es funktioniert - rühren Sie es nicht an.

Aber jetzt werde ich auf jeden Fall versuchen, diese Methode anzuwenden. Denn es ist notwendig, zu lernen und sich zu entwickeln.

Aber ich werde mich jetzt nur mit meiner Variable n beschäftigen. Er will nicht gezählt werden.
immer n = 0 (bisher)
Grund der Beschwerde: