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

 
FOReignEXchange:


Ich verstehe das nicht? Ich schaue gerade in der Hilfe nach, da OrderSelect() eine Bedingung verwendet. Und ich habe es nirgendwo gesehen, wo es nicht stimmt.

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


Spezifikation:

bool OrderSelect( int index, int select, int pool=MODE_TRADES) 

gibt true oder false zurück

siehe https://docs.mql4.com/ru/basis/operators/if.

Wenn der Ausdruck wahr ist, wird Operator1 ausgeführt, und die Kontrolle wird an den auf Operator2 folgenden Operator übergeben (d. h. Operator2 wird nicht ausgeführt). Wenn der Ausdruck falsch ist, wird operator2 ausgeführt.

if (Ausdruck) operator1 else operator2

Der else-Teil des if-Operators kann weggelassen werden. Daher können verschachtelte if-Anweisungen, bei denen der else-Teil weggelassen wird, zu Mehrdeutigkeit führen. In diesem Fall wird else mit dem nächstfolgenden if-Operator im selben Block verknüpft, der keinen else-Teil hat.

d.h. der Vergleich OrderSelect()==true ist nicht notwendig - verwenden Sie einfach OrderSelect() oder !OrderSelect() anstelle von OrderSelect()==false

 

Das ist nicht das, was ich meine.

Es ist nur so, dass ich, wenn ich eine Bestellung auswähle, diese immer vollständig ausführe.

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

Ich habe es noch nie ohne gesehen.

abolk:
то есть сравнение OrderSelect()==true делать не обязательно - достаточно просто использовать OrderSelect() или !OrderSelect() вместо OrderSelect()==false

Ich habe sie.

 
FOReignEXchange:

Ich habe noch nie einen ohne gesehen.


Sie schauen sich die Codes der falschen Leute an.
 
FOReignEXchange:

Das ist nicht das, was ich meine.

Es ist nur so, dass ich, wenn ich eine Bestellung auswähle, diese immer vollständig ausführe.

Ich habe es noch nie ohne gesehen.

Ich habe sie.


zwei vollkommen gleichwertige Beiträge - ein Beitrag ist nicht schlechter oder besser als der andere - jeder macht, was er will, was er versteht, was er gewohnt ist
 
sergeev:

Sie schauen sich die Codes der falschen Leute an.


Übrigens muss ich FOReignEXchange ein Lob aussprechen.

Ich öffnete "Moving Average.mq4" und sah es:

      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
 
abolk:


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

Wo können Sie den Wert dieser Variablen ablesen?


Wow! )) Wenn ich den Wert der Variablenglobal_trailing_SP aus der vorgestellten Funktion ausdrucke(), sehe ich einen völlig unerwarteten Wert im Protokoll (gelb hervorgehoben). Außerhalb dieser Funktion wird er korrekt gedruckt (gegenüber dem roten Punkt).

global_trailing_SP ist eine globale Variable. Sie wird außerhalb der Funktion Start() deklariert,

double global_trailing_SP = 0.0; 

Nachdem die Trailing-Stop-Funktion den Wert der Hauptposition erfolgreich geändert hat, wird der Wert des Stop Loss der Hauptposition in einer separaten Schleife der Variablenglobal_trailing_SP zugewiesen.

   for(count = OrdersTotal()-1; count >= 0; count--)
      {  OrderSelect(count,SELECT_BY_POS,MODE_TRADES);
         if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_Source_SP)
            {  global_trailing_SP = NormalizeDouble(OrderStopLoss(),dgt); Print("global_trailing_SP: ",DoubleToStr(global_trailing_SP,5));  }
      }
Dies ist der Wert, der durch den roten Punkt oben angezeigt wird.

Dieser Wert wird dann an die Funktion übergeben, in der verschiedene Änderungen der Reihenfolge vorgenommen werden. Aber als Ergebnis zeigt das Protokoll einen Wert an, den ich nicht erwartet habe, und der Wert des Stop-Loss wird sicherlich nicht geändert. Wie kann dieses Problem gelöst werden? Es zeigt sich, dass nicht immer alles so logisch ist, wie es auf den ersten Blick erscheinen mag).

 

Ist es nicht besser, dies hier zu tun, wo der SELLSTOP ist?

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

Damit alles genau so ist wie bei SELL.

 
FOReignEXchange:

Ist es nicht besser, dies hier zu tun, wo sich der SELLSTOP befindet?

Damit alles genau so ist wie bei SELL.


Das scheint in diesem Fall nicht das Problem zu sein. Lesen Sie weiter oben.
 
tol64:


Wow! )) Wenn ich den Wert der Variablen global_trailing_SP aus der vorgestellten Funktion ausdrucke(), sehe ich einen völlig unerwarteten Wert im Journal (gelb hervorgehoben). Außerhalb dieser Funktion wird er korrekt gedruckt (gegenüber dem roten Punkt).

global_trailing_SP ist eine globale Variable. Sie wird außerhalb der Funktion Start() deklariert,

Nachdem die Trailing-Stop-Funktion den Wert der Hauptposition erfolgreich geändert hat, wird in einer separaten Schleife die Variable global_trailing_SP mit dem Wert des Stop Loss der Hauptposition belegt.

Dies ist der Wert, der durch den roten Punkt oben angezeigt wird.

Dieser Wert wird dann an die Funktion übergeben, in der verschiedene Änderungen der Reihenfolge vorgenommen werden. Das Ergebnis ist jedoch, dass das Protokoll einen Wert anzeigt, den ich nicht erwartet habe, während der Wert des Stop Loss sicherlich nicht geändert wird. Wie kann dieses Problem gelöst werden? Es stellt sich heraus, dass nicht immer alles so logisch ist, wie es auf den ersten Blick erscheinen mag)))


zeigen, wie Sie die Variable global_trailing_SP lesen
 

Ich verstehe es also nicht. Besteht der anhängige Auftrag zum Zeitpunkt der Änderung des Hauptauftrags?

Wenn dies der Fall ist, befinden sich die Änderung des Hauptauftrags und die Änderung des schwebenden Auftrags im selben Block. Und wenn der Hauptauftrag geändert wird, sollte das auch für den schwebenden Auftrag gelten, wenn Sie das wünschen.

Eine andere Sache ist, dass unsere Idee nicht funktioniert. Das bedeutet einen Fehler in der Bedingung. Versuchen Sie, alles so zu machen, wie in der Bedingung für die Änderung des Hauptauftrags, wie ich es oben gezeigt habe. Ich habe den Eindruck, dass der Fehler in der Logik liegt. Das überrascht mich nicht. Hier ist alles sehr kompliziert. Sie sollten es einfacher machen.

Grund der Beschwerde: