[ARCHIV] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 3. - Seite 465

 

Alles wählt OK, aber die Fehler sind seltsam, ich kann den Tester noch nicht verstehen.

Hier steht, dass ich das Los 0.3 geschlossen und gleichzeitig das Los 0.7 verkauft habe. Wird so ein Teil eines Geschäfts im Tester abgeschlossen? Ich weiß nicht, woher solche Volumina kommen; ich sehe keine Informationen über solche Volumina in meinem Expert Advisor.

   for(Counter1=0;Counter1<OrdersTotal();Counter1++)
     {
     if(OrderSelect(Counter1,SELECT_BY_POS,MODE_TRADES) == false) break;
     if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
       {
       if(OrderType() == OP_BUY)
         {
         
         BuyOpened = 1;
         if((Bid - OrderOpenPrice()) / Point >= TrailingLevel1 && (Bid - OrderOpenPrice()) / Point < TrailingLevel2)
           {
           // Перенести в безубыток
           }
         }
       if(OrderType() == OP_SELL)
         {
         TrailingPrice1 = OrderOpenPrice() - TrailingLevel1*Point;
         MyOrderStopLoss1 = NormalizeDouble(OrderStopLoss(),4);
         MyOrderStopLoss1 = OrderOpenPrice() - BreakEven*Point;
         SellOpened = 1;
         if((OrderOpenPrice() - Ask) / Point >= TrailingLevel1 && (OrderOpenPrice() - Ask) / Point < TrailingLevel2 && OrderStopLoss() != MyOrderStopLoss1)
           {
           ClosingLot = OrderLots() / 100 * ClosingPercent;
           ClosingLot = NormalizeDouble(ClosingLot,3);
           OrderClose(OrderTicket(),ClosingLot,Ask,Slippage,Yellow);
           OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice() - BreakEven*Point,OrderTakeProfit(),OrderExpiration(),Black);
           }
         }
       }
     }
 
sss2019:

Alles wird normal ausgewählt, aber die Fehler sind seltsam, ich kann es mit dem Tester nicht herausfinden.

Hier steht, dass ich das Los 0.3 geschlossen und gleichzeitig das Los 0.7 verkauft habe. Wird so ein Teil eines Geschäfts im Tester abgeschlossen? Ich weiß auch nicht, woher solche Volumina kommen, wenn ein Teil eines Handels geschlossen wird und dann 0,16, 0,24, 0,12 öffnet; der Expert Advisor hat solche Volumina nicht.

ja, so wird ein Teil des Abschlusses angezeigt - erst ist alles geschlossen, dann ist ein Teil offen


Ich habe zwei Fragen:

1) Woher wissen Sie, was Sie als nächstes nicht schließen sollten?

beim nächsten Tick wird die Bedingung für diese Funktion erneut erfüllt

2) Wenn ich mich nicht irre, ändert sich das Auftragsticket nach dem Teilabschluss, d.h.

OrderClose(OrderTicket(),ClosingLot,Ask,Slippage,Yellow);
           OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice() - BreakEven*Point,OrderTakeProfit(),OrderExpiration(),Black);
           

die zweite Zeile wird nicht geändert


3) Und vergessen wir nicht die Normalisierung...

 
ilunga:

ja, so wird das Schließen eines Teils angezeigt - erst alle geschlossenen, dann die offenen Teile


sofort zwei Fragen:

1) Woher wissen Sie, dass keine weitere Schließung erforderlich ist?

die Bedingung beim nächsten Tick wird für diese Funktion erneut erfüllt

2) Wenn ich mich nicht irre, ändert sich das Auftragsticket nach dem Teilabschluss, d.h.

die zweite Zeile wird nicht geändert


3) Und vergessen wir nicht die Normalisierung...


Ändert sich der Fahrschein wirklich? Das muss der Grund für die vielen Fehler sein. Warum ändert sich dann das Ticket nicht, wenn der Auftrag manuell geändert wird? Ich muss sicher wissen, ob sich das Ticket ändert oder nicht.
 


Eine echte Veränderung, vielen Dank
 
Ich habe gehört, dass, wenn Sie einen Preis von einem Währungspaar für die weitere Arbeit mit ihm zu erhalten, sollte es normalisiert werden, zum Beispiel, ein Preis von einem Minimum erhalten und es sollte normalisiert werden, um es zu einem Stop-Loss gesetzt, ist das wahr?
 
sss2019:
Ich habe gehört, dass man, wenn man einen Preis von einem Währungspaar erhält, diesen normalisieren muss, z.B. erhält man einen Preis von einem Tiefststand und muss diesen auf einen Stop-Loss normalisieren, ist das wahr?

Ja, aber wir meinen die Normalisierung in dem Moment, in dem sie auf Ordersend/OrderModify/... gesetzt wird. vor diesen Funktionen können Sie damit arbeiten und Operationen durchführen
 
sergeev:

Ja, aber die Normalisierung ist zum Zeitpunkt der Ersetzung in Ordersend/OrderModify/... gemeint. vor diesen Funktionen können Sie damit arbeiten und Operationen durchführen

Auf wie viele Ziffern sollte sie normalisiert werden? Standardmäßig scheint der Preis 4 Stellen nach dem Komma zu haben, selbst bei fünfstelligen Preiswerten haben zumindest Low[0] und High[0] immer nur 4 Stellen nach dem Komma, ich habe versucht, es über Alert oder über Print auszugeben,
 
sss2019:

Auf wie viele Ziffern sollte sie normalisiert werden? Standardmäßig scheint der Preis 4 Stellen nach dem Komma zu haben, auch bei fünfstelligen Werten, zumindest haben Low[0] und High[0] immer nur 4 Stellen nach dem Komma, ich habe versucht, es über Alert oder über Print auszugeben,

standardmäßig hat der Preis Digits Nachkommastellen

und Warnung und Druckausgabe nur 4 standardmäßig. Verwenden Sie string DoubleToStr( double value, int digits) für mehr.

 

Helfen Sie dann, einen Trailing-Stop zu implementieren, etwa so. Verkaufsauftrag

         if((OrderOpenPrice() - Ask) / Point > Trailing) //Если прибыль в пунктах больше чем уровень трейлинг стопа
           {
           NewStopLoss = Ask + TrailingLevel2*Point;
           double NewStopLoss2 = 9999;
           if(NewStopLoss2 > NewStopLoss)
             {
             NewStopLoss2 = NewStopLoss;
             }
           OrderModify(OrderTicket(),OrderOpenPrice(),NewStopLoss2,OrderTakeProfit(),OrderExpiration(),Black);
           }

Das Problem ist, dass der Stop-Loss nur vorwärts gerollt werden sollte, aber in meinem Auftrag rollt er auch rückwärts.

________________________________

Meine Frage ist verschwunden, tut mir leid.

 
sss2019:

Helfen Sie dann, einen Trailing-Stop zu implementieren, etwa so. Verkaufsauftrag

Das Problem ist, dass der Stop Loss nur nach vorne verschoben werden sollte, aber ich habe ihn auch nach hinten verschoben.

double NewStopLoss2 = 9999;
           if(NewStopLoss2 > NewStopLoss)
             {
             NewStopLoss2 = NewStopLoss;
             }

ist gleichbedeutend mit

NewStopLoss2 = NewStopLoss;