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

 

Es wurden falsche Parameter an die Handelsfunktion gesendet, z.B. falsches Symbol, nicht identifiziertes Geschäft, negative Preistoleranz, nicht existierende Ticketnummer, etc. Sie müssen die Programmlogik ändern.


Versuchen Sie den zweiten Parameter OrderOpenPrice() anstelle von Null zu setzen

 
sergeev:

Gewöhnen Sie sich an, alle Parameter auszudrucken, die für den Fehler relevant sein könnten.

if (!OrderModify(...)) { Print(GetlastError()+.... OrderModify-Parameterliste ); }



Ja, das ist eine gute Angewohnheit. Vielen Dank.))

FOReignEXchange 03.07.2011 18:35

Versuchen Sie den zweiten Parameter anstelle von Null zu setzen OrderOpenPrice()

Ja, das ist richtig. )) Und aus irgendeinem Grund war ich davon überzeugt, dass man keine Parameter festlegen kann, die man nicht ändern muss, da dies zu einem weiteren Fehler führen würde. Gibt es etwas Ähnliches wie das, wovon ich spreche?

So etwas ist in meinem Kopf fest verankert:

Die Funktion versucht, den Parameter auf denselben Wert zu ändern.

 
tol64:


Und aus irgendeinem Grund war ich davon überzeugt, dass man keine Parameter festlegen kann, die man nicht ändern möchte, da dies einen weiteren Fehler verursachen würde. Gibt es etwas Ähnliches wie das, wovon ich spreche?

So etwas ist im Kopf fest verankert:

Die Funktion versucht, den Parameter auf denselben Wert zu ändern.


Sie könnten nur einen Parameter ändern und den Rest unverändert lassen und überall OrderOpenPrice(), OrdsrStopLoss() usw. schreiben.
 
Hallo! Hat jemand ein Beispiel für ein Schleppnetz ab einem bestimmten Preisniveau mit einem bestimmten Abstand? Ich danke Ihnen!
 

Ich habe eine weitere Frage. Zu dem Codebeispiel, das ich oben angegeben habe (tol64 03.07.2011 18:20).

Das Programm synchronisiert nicht immer den Stop-Loss der verschiedenen Positionen. Das heißt, die Position wird ausgewählt, die Bedingung ist erfüllt, sie wird auch im Journal eingetragen, aber der Stop-Loss wird nicht geändert.

In der obigen Abbildung sollte der Stop Loss für die Position mit Ticket 4 geändert und auf den gleichen Wert wie für die Position mit Ticket 1 gesetzt werden. Das Programm erreicht diesen Punkt mit dem Druck, aber die weitere Ausführung scheint blockiert zu sein.

   for(count = 0; count < OrdersTotal(); count++)
      {  
         if(OrderSelect(count,SELECT_BY_POS,MODE_TRADES)) 
            Print("Ticket: ",OrderTicket(),", Type: ",OrderType(),", Magic: ",OrderMagicNumber(),", StopLoss: ",OrderStopLoss());

         double Op_Price = NormalizeDouble(OrderOpenPrice(),Digits);
         double Stp_Loss = NormalizeDouble(OrderStopLoss(),Digits);
         
         if(OrderMagicNumber() == Magic_SP01)
            {  if(OrderType() == OP_SELLSTOP)
                  {  if(Low_1 < SP_Level_01 && new_val > Op_Price && new_val < Open_0)  
                        {  OrderModify(OrderTicket(),new_val,OrderStopLoss(),0,0,DeepPink);  }

                     if(!(global_trailing_SP < Stp_Loss && global_trailing_SP > High_1)) Print("Условие не выполняется!");  else
                        {  OrderModify(OrderTicket(),OrderOpenPrice(),global_trailing_SP,0,0,DeepPink);
                           Print("Условие ModifyOrder исполнилось: global_trailing_SP: ",global_trailing_SP,", Stop Loss: ",OrderStopLoss());  }
                  }
               if(OrderType() == OP_SELL)
                  {  if(global_trailing_SP < Stp_Loss && global_trailing_SP > High_1)  
                       {  OrderModify(OrderTicket(),OrderOpenPrice(),global_trailing_SP,0,0,DeepPink);  }
                  }
            }

         ...

Denn die Variante, bei der die Bedingung nicht erfüllt ist, wird auch nicht protokolliert. Ich habe so viele verschiedene Kombinationen ausprobiert, aber keine davon hat funktioniert. Bitte um Hilfe.

 

Und hier.

 if(OrderSelect(count,SELECT_BY_POS,MODE_TRADES)) 

Ist das nicht der richtige Weg?

 if(OrderSelect(count,SELECT_BY_POS,MODE_TRADES)=true) 
 
FOReignEXchange:

Und hier.

Ist das nicht der richtige Weg?


Nein, das tut es nicht. Es gibt sowieso ein bool zurück.
 
tol64:

Ich habe eine weitere Frage. Zu dem Codebeispiel, das ich oben angegeben habe (tol64 03.07.2011 18:20).

Das Programm synchronisiert nicht immer den Stop-Loss der verschiedenen Positionen. Das heißt, die Position wird ausgewählt, die Bedingung ist erfüllt, sie wird auch im Journal eingetragen, aber der Stop-Loss wird nicht geändert.

In der obigen Abbildung sollte der Stop Loss für die Position mit Ticket 4 geändert und auf den gleichen Wert wie für die Position mit Ticket 1 gesetzt werden. Das Programm erreicht diesen Punkt mit dem Druck, aber die weitere Ausführung scheint blockiert zu sein.

Denn die Variante, bei der die Bedingung nicht erfüllt ist, wird auch nicht protokolliert. Ich habe so viele verschiedene Kombinationen ausprobiert, aber keine davon hat funktioniert. Ich bitte um Ihre Hilfe.


Print(), um den Wert der Variablen global_trailing_SP direkt in der von Ihnen angegebenen Funktion auszugeben.

Wo können Sie den Wert dieser Variablen ablesen?

Und ersetzen Sie die Null (hervorgehoben) in dem Code

OrderModify(OrderTicket(),OrderOpenPrice(),global_trailing_SP,0,0,DeepPink)

Zu BestellungGewinnermittlung()

 
FOReignEXchange:

Wozu ist diese Bedingung dann gut, wenn es keine Bedingung gibt? Und die Auftragsdaten werden dann nicht verwendet.


Dann sagen Sie mir, welcher Code besser ist

if(OrderSelect(count,SELECT_BY_POS,MODE_TRADES)) 

notieren Sie es als:

if(!OrderSelect(count,SELECT_BY_POS,MODE_TRADES)) continue;
 
abolk:


und sagen Sie mir dann, was der bessere Code ist

notieren Sie es als:


Ich verstehe das nicht? Ich schaue gerade in der Hilfe nach, da OrderSelect() eine Bedingung verwendet. Ich habe noch nirgends gesehen, dass es nicht stimmt.

If ist ein Bedingungsoperator. Und es sollte eine Bedingung in Klammern stehen. Das scheint mir logischer zu sein. Auch wenn es keinen Unterschied gibt.