Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 235

 

Und wenn wir den nächsten Kauf eröffnen, rollen wir natürlich sofort alle Positionen um(StopLoss entspricht unserem Durchschnittspreis + 50 Pips).

Das ist der Schurke, der manchmal nicht den letzten Platz einnimmt. Wir hatten 3 Stellen, aber 4 davon waren offen. Ich habe vergessen, StopLoss an die vierte Stelle zu setzen .

DedZone gehalten werden sollte:

StopLevel = (MarketInfo(Symbol(), MODE_STOPLEVEL)*Point);       // текущий уровень стопов
FreezeLevel = (MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point);        // уровень заморозки
DedZone = MathMax(StopLevel,FreezeLevel);              // Зона запрета розмещения ордеров

Die DedZone-Berechnung erfolgt bei der Initialisierung des Expert Advisors.

 
Limita:

Und wenn wir den nächsten Kauf eröffnen, rollen wir natürlich sofort alle Positionen um(StopLoss entspricht unserem Durchschnittspreis + 50 Pips).

Das ist der Schurke, der manchmal nicht den letzten Platz einnimmt. Wir hatten 3 Stellen, aber 4 davon waren offen. Ich habe vergessen, StopLoss an die vierte Stelle zu setzen .

DedZone gehalten werden sollte:

DedZone befindet sich in der Initialisierung des Expert Advisors.

StopLevel = (MarketInfo(Symbol(), MODE_STOPLEVEL)*Point);       // текущий уровень стопов
FreezeLevel = (MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point);        // уровень заморозки
DedZone = MathMax(StopLevel,FreezeLevel);              // Зона запрета розмещения ордеров

Wenn beide gleich Null sind, was dann? Alpari verwendet in einem solchen Fall Spread*2.

Und Sie haben meine Frage nach der Logik dieser Zeilen nicht beantwortet.

 
ALXIMIKS:

es ist besser, es so zu machen (jemand schrieb, dass er Probleme mit Ihrer Vorgehensweise hatte, wenn er Bestellungen änderte oder löschte) :

Und warum Öl und Butter? (etwas in Ruhe lassen).


Ich danke Ihnen!

Scheint mit dem Experten übereinzustimmen :))

 
artmedia70:

Und Sie haben meine Frage nach der Logik dieser Zeilen nicht beantwortet.


artmedia70:

Die gesamte Logik des Verhaltens eines EA kann in logische Blöcke unterteilt werden, die je nach den Bedingungen entweder ausgeführt werden oder nicht.

Für Ihre Zwecke können Sie sehen, dass dieser Block aus einer Reihe von in geschweiften Klammern eingeschlossenen Zeichenfolgen bestehen kann:

If (Bedingung) {wenn die Bedingung wahr ist, wird der in diesen geschweiften Klammern eingeschlossene Block ausgeführt}

Andernfalls {wenn die obige Bedingung nicht erfüllt ist, wird der in diesen geschweiften Klammern eingeschlossene Block ausgeführt}

Wenn nach der Bedingung keine geschweiften Klammern stehen, ist der Block, der ausgeführt wird, wenn die Bedingung wahr ist, eine einzelne Zeile unmittelbar nach der Bedingung:

Wenn (Bedingung) Diese Zeile wird ausgeführt

Andernfalls wird diese Zeile ausgeführt.

In meinen Beispielen ist If gleich if und Otherwise gleich else.

Hier aufgenommen

 
artmedia70:

Und wenn beide null sind, was dann? In diesem Fall verwendet Alpari Spread*2.

Und Sie haben meine Frage nach der Logik dieser Zeichenketten nicht beantwortet.



Vielen Dank für die Informationen über Alpari.

Was die Zeilenlogik betrifft, so hat ALXIMIKS sie beantwortet.

Ich sollte für mich selbst hinzufügen, dass eine Änderung nur vorgenommen werden sollte, wenn alle Bedingungen erfüllt sind. Wenn mindestens einer von ihnen scheitert, machen wir weiter.

 
Limita:


Vielen Dank für die Informationen über Alpari.

Auf die Frage nach der String-Logik antwortete ALXIMIKS.

Ich sollte hinzufügen, dass in diesem Fall die Änderung nur erfolgen sollte, wenn alle Bedingungen erfüllt sind. Wenn mindestens einer von ihnen versagt, machen wir weiter.

Er zeigte mir aus irgendeinem Grund meine eigenen Worte, die ich einmal an jemanden geschrieben hatte.

Ich wollte eine Antwort auf meine Frage nach der Logik erhalten. Alle ifs () in diesem Codeblock werden nacheinander ausgeführt. Das heißt, wenn die erste Bedingung wahr ist, ist auch die zweite wahr, wenn die zweite wahr ist, ist auch die dritte wahr und so weiter, aber... Wenn die erste Bedingung nicht erfüllt ist, wird die zweite nicht ausgeführt, aber die dritte wird erneut geprüft.

Vielleicht ist das ja auch gut so:

bool ProfitManagement() {
   double StopLossBuy = BuyAP+Profit*Point;                             //Вычисляем StopLoss
   double TakeProfitBuy = BuyAP + Profit*Point;                  //Вычисляем цену TakeProfit
   double StopLossSell = SellAP-Profit*Point;
   double TakeProfitSell = SellAP - Profit*Point;
   RefreshRates();
   for(int good = 0; good < OrdersTotal(); good ++) {
      if(OrderSelect (good, SELECT_BY_POS)) {            
         if (OrderMagicNumber()!=MagicNumber)   continue;
         if (OrderSymbol()!=Symbol())           continue;
//-------------------------Order Buy-----------------------------------------------------  
         if (OrderType()==OP_BUY) {                             
            if (BuyAP < Bid) { 
               if (MathAbs(OrderStopLoss() - StopLossBuy) >= Tick) { // Профит не равен нужному
                  if (Bid-StopLossBuy>DedZone) {                     // Уровень достаточно удален от цены
                     if (WaitForTradeContext()) {                    // Свободен ли торговый поток?
                        if (!OrderModify(OrderTicket(), 0, NP(StopLossBuy), 0, 0, Lime)) {
                           Alert (Symbol()," Хрень со стопами! ",   GetLastError());
                           return(false);
                           }
                        }
                     }
                  }
               }
            }
//-------------------------Order Buy-----------------------------------------------------  
         if (OrderType()==OP_SELL) {                             
            // вся та же хрень...
            }
//-------------------------Order Buy-----------------------------------------------------  
         }
      }
   return(true);
}

Dies ist nur meine Vermutung, da ich absolut keine Ahnung habe, welche Logik Sie im Sinn haben und nicht weiß, was einige der Variablen und Funktionen tun und enthalten/zurückgeben.

 
artmedia70:

1) Er zeigte mir aus irgendeinem Grund meine eigenen Worte, die ich einmal an jemanden geschrieben hatte.

2) Das ist es, was ich von Ihnen über die Logik hören wollte. Sie haben alle if () in diesem Codeblock hintereinander geschaltet. Das heißt, wenn die erste Bedingung wahr ist, ist auch die zweite Bedingung wahr, wenn die zweite Bedingung wahr ist, ist auch die dritte Bedingung wahr, usw., aber... Wenn die erste Bedingung nicht erfüllt ist, wird die zweite nicht ausgeführt, aber die dritte wird erneut geprüft.

1) Nun, das galt für alle, nicht nur für Sie.

2) Sie haben diese Aussage schon einmal gemacht, vor ein paar Tagen, nur habe ich damals vergessen, diese Information noch einmal zu überprüfen.

Jetzt habe ich ein einfaches Skript erstellt:

int start(){
 if (3>3)
 if (5>3)
 if (5>3){Alert ("AAAAAAAAAAAAAAAAAAAAAAA");}
} 

Und es stellte sich heraus, dass Sie sich geirrt hatten: KEIN ALERT !!!

 
ALXIMIKS:

1) Nun, das galt für alle, nicht nur für Sie.

2) Sie haben diese Aussage schon einmal gemacht, vor ein paar Tagen, aber ich habe damals vergessen, die Informationen zu überprüfen.

Jetzt habe ich ein einfaches Skript erstellt:

Und es stellte sich heraus, dass Sie sich geirrt hatten: KEIN ALERT !!!

int start(){
 if (3>3)
 if (5>3)
 if (5>3){Alert ("AAAAAAAAAAAAAAAAAAAAAAA");}
} 

Nun, ich stimme zu. In diesem Fall war ich etwas voreilig, als ich vorhin schrieb, was und wie die verschachtelten Bedingungen ohne geschweifte Klammern durchgesetzt werden würden. Sie haben in dieser Situation Recht. Wissen Sie, warum?

Versuchen Sie, else in Ihrem Code ausführen zu lassen.

 
artmedia70:

Nun, ich stimme zu. In diesem Fall war ich etwas voreilig, als ich vorhin schrieb, was und wie die verschachtelten Bedingungen ohne geschweifte Klammern durchgesetzt werden würden. Sie haben in dieser Situation Recht. Wissen Sie, warum?

Versuchen Sie, else in Ihrem Code ausführen zu lassen.


int start(){
 int a=0;
 if (3>3)
 if (5>3)
 if (5>3){Alert ("AAAAAAAAAAAAAAAAAAAAAAA"); a=5;}
 else Alert ("a=", a);
}

Dieses Skript gibt keinen Alarm aus. Else bezieht sich auf die Bedingung " if (5>3){Alert ("AAAAAAAAAAAAAAAAAAAAAAAAAAAA"); a=5;} "

Danksagungen :

int start(){
 int a=0;
 if (5>3)
 if (5>3)
 if (3>3){Alert ("AAAAAAAAAAAAAAAAAAAAAAA"); a=5;}
 else Alert ("a=", a);
}

haben anAlert: "a=0".

Ergebnis - die Behandlung von fehlgeschlagenen Bedingungen ist nur für die letzte Bedingung möglich, wenn die geschweiften Klammern "{" bei der Aufzählung einer bestimmten Reihe von Bedingungen nicht verwendet werden.

 
ALXIMIKS:

kein Alert von diesem Skript. Else bezieht sich auf die Bedingung " if (5>3){Alert ("AAAAAAAAAAAAAAAAAAAAAAAAAA"); a=5;} "

Danksagungen :

haben anAlert: "a=0".

Das Ergebnis ist, dass die Behandlung von Nicht-Bedingungen nur für die letzte Bedingung möglich ist, wenn die geschweiften Klammern "{" während der Aufzählung einer bestimmten Reihe von Bedingungen nicht verwendet werden.


D.h. Klammern werden benötigt, um logische Verzweigungen zu organisieren. Ohne sie ist die erste Bedingung erfüllt. Wenn sie nicht wahr ist, werden die anderen Bedingungen nicht ausgeführt.

Versuchen Sie, es herauszufinden:

 if (a>b)
    if (b>c) 
        Alert(" условие if (a>b && b>c) выполнено ");
if (d>e) 
    if (e>f) 
         Alert(" условие if (d>e && e>f) выполнено");

Und dann finden Sie heraus, worauf er sich sonst noch bezieht:

if (a>b)
    if (b>c) 
        Alert(" условие if (a>b && b>c) выполнено ");
else if (d>e) 
    if (e>f) 
         Alert(" условие if (d>e && e>f) выполнено");