[ARCHIV]Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Ohne dich kann ich nirgendwo hingehen - 5. - Seite 47

 
Tiken123:

Wenn Sie die Funktion kennen, mit der Sie den Gesamtsaldo des Verlusts der geschlossenen Positionen durch SL und den Gesamtsaldo der offenen gewinnbringenden Geschäfte berechnen können, schreiben Sie bitte.

Die Berechnung des Verlustsaldos sollte mit dem letzten maximalen Einzahlungswert beginnen.

Ihre Frage ist der vorherigen etwas ähnlich, deshalb habe ich die Funktion aus der vorherigen Antwort ein wenig abgeändert. Ich gebe zu, dass ich es nicht getestet habe, aber es sollte funktionieren. Die Variablen Gewinn und Verlust, die auf globaler Ebene angegeben werden, sollten den Gesamtgewinn bzw. -verlust für die geschlossenen Positionen anzeigen.

Wenn Sie dies auch für offene Aufträge tun müssen, fügen Sie eine zweite for-Schleife hinzu, um diese nicht nach der Historie, sondern nach dem Kriterium OrdersTotal() auszuwählen: for(int n=1; n<=OrdersTotal(); n++)

Und addieren Sie die erhaltenen Werte zu den gleichen Variablen Gewinn und Verlust.

//+----------------------------------------------------------------------------+
// Прибыльно или убыточно закрылся последний ордер, и возврат типа такого ордера
int fHistory(){
  profit = 0; loss = 0;
  for(int i=OrdersHistoryTotal(); i >= 0; i--){               // Выборка в истории
     if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true){    // Если есть следующий в истории
        if(OrderMagicNumber()!=magN) continue;                // Ордера не нашего эксперта

        if(OrderProfit() > 0 ) profit = profit+OrderProfit(); // Если прибыль по посл.ордеру - суммируем

        if(OrderProfit() < 0 ) loss = loss + OrderProfit();   // Если убыток по посл.ордеру - суммируем

     }
  }
  return(-1);
}
 
Twilight:

Ich muss zum Beispiel wissen, ob ein ausstehendes Kauflimit ausgelöst wurde und wenn ja, zu welchem Preis, und dann ein neues setzen.

Wenn bei jedem Tick mit der Funktion OrderType() ein Auftrag vom Typ OP_BUYLIMIT vorhanden ist, bedeutet das Verschwinden dieses Typs, dass der Auftrag geöffnet und zu OP_BUY geworden ist. Alle 6 Typen sindhier aufgeführt. Mit der Funktion OrderOpenPrice() können Sie herausfinden, zu welchem Preis der Auftrag eröffnet wurde.
 
Twilight:

Wie erkenne ich, ob ein Auftrag einen Trailing-Stop ausgelöst hat, und wie kann ich neue Aufträge platzieren, wenn der Trailing-Stop ausgelöst wurde?

Wollten Sie den Auftrag schließen oder ändern?
Wenn geschlossen, müssen Sie wissen, ob sie gerade geschlossen wurde? Oder wurde er mit einem StopLoss geschlossen? (Er kann bei TakeProfit und OrderClose() oder OrderCloseBy() schließen)
 

Hier ist meine neue Balkenkontrollfunktion:

bool IsNewBar()
{
  if(bartime != iTime(Symbol(),i_trading_TF,0))
  {
    bartime = iTime(Symbol(),i_trading_TF,0);
    return(true);
  }
  
  return(false);
}

wobei i_trading_TF eine global als extern deklarierte Variable ist. Wenn ich also meinen Expert Advisor auf einem Chart einstelle, kann ich den Wert dieser Variable im Pop-up-Fenster einstellen und so den Zeitrahmen der Balkenöffnung festlegen, den ich kontrollieren möchte.

Ich habe eine ähnliche Funktion in einem Expert Advisor gesehen, allerdings mit einem formalen Parameter im Funktionskopf. Hier ist sie:

bool IsNewBar(int i_trading_TF)
{
  if(bartime != iTime(Symbol(),i_trading_TF,0))
  {
    bartime = iTime(Symbol(),i_trading_TF,0);
    return(true);
  }
  
  return(false);
}

Der Zeitrahmen wird über den Funktionsparameter übergeben. Wenn die Variablei_trading_TF jedochauf globaler Ebene deklariert ist, macht es meines Erachtens keinen Sinn, sie über einen formalen Parameter zu übergeben, da ihre Sichtbarkeit nicht eingeschränkt ist.

Bitte äußern Sie sich zu diesem Punkt.

Die erste Option funktioniert auch bei mir, aber es ist seltsam, dass manche Programmierer die Angewohnheit haben, auch Funktionen mit formalen Parametern vollzustopfen, bei denen ich es selbst nicht tun würde.

 
pu6ka:
Überwachen Sie bei jedem Tick das Vorhandensein eines Auftrags vom Typ OP_BUYLIMIT mit der Funktion OrderType(). Wenn dieser Typ verschwindet, bedeutet dies, dass der Auftrag geöffnet und zum Typ OP_BUY geworden ist. Alle 6 Typen sindhier aufgeführt. Mit der Funktion OrderOpenPrice() können Sie herausfinden, zu welchem Preis der Auftrag eröffnet wurde.
Das muss nicht sein. Er kann manuell getötet werden. Vielmehr ist es notwendig, sich das Ticket des Auftrags zu merken; sobald wir das Fehlen des Auftrags mit diesem Ticket und das Auftreten einer Marktposition mit demselben Ticket feststellen - dann ja, wird es ausgelöst...
 
hoz:

Hier ist meine neue Balkenkontrollfunktion:

wobei i_trading_TF eine global als extern deklarierte Variable ist. Wenn ich also meinen Expert Advisor auf einem Chart einstelle, kann ich den Wert dieser Variable im Pop-up-Fenster einstellen und so den Zeitrahmen der Balkenöffnung festlegen, den ich kontrollieren möchte.

Ich habe eine ähnliche Funktion in einem Expert Advisor gesehen, allerdings mit einem formalen Parameter im Funktionskopf. Hier ist sie:

Der Zeitrahmen wird über den Funktionsparameter übergeben. Wenn die Variablei_trading_TF jedochauf globaler Ebene deklariert ist, macht es meines Erachtens keinen Sinn, sie über einen formalen Parameter zu übergeben, da ihre Sichtbarkeit nicht eingeschränkt ist.

Bitte äußern Sie sich zu diesem Punkt.

Die erste Option funktioniert auch bei mir, aber es ist seltsam, dass manche Programmierer die Angewohnheit haben, auch Funktionen mit formalen Parametern vollzustopfen, bei denen ich es selbst nicht tun würde.

Es macht Sinn, wenn der EA mehrere Frames analysiert und bei jedem Frame ein neuer Bar gebildet werden muss.

Das ist noch nicht alles, fügen wir den Namen des Instruments zu den übergebenen Parametern hinzu

bool IsNewBar(string Symb,int i_trading_TF)
{
  if(bartime != iTime(Symb,i_trading_TF,0))
  {
    bartime = iTime(Symb,i_trading_TF,0);
    return(true);
  }
  
  return(false);
}
und die Tatsache zu analysieren, dass sich ein neuer Balken bildet, egal bei welchem Instrument und in welchem Zeitraum.
 
artmedia70:
Nicht unbedingt. Er kann auch manuell getötet werden. Vielmehr müssen Sie sich das Ticket der schwebenden Order merken; sobald eine schwebende Order mit diesem Ticket fehlt und eine Marktposition mit demselben Ticket auftaucht, wird sie ausgelöst...

Ja, das ist eher richtig. Aber wir können die Idee im Tester so überprüfen. Um vier Arten von Pending Orders zu verfolgen, benötigen wir 4 zusätzliche Variablen, um die Ticks zu verfolgen. Wenn jedoch für einen Typ mehrere ausstehen, sollten Sie auf jeden Fall eine Variable für Tickets eingeben.
 
r772ra:

Es macht Sinn, wenn der EA mehrere Frames analysiert und jeder Frame die Tatsache benötigt, einen neuen Balken zu bilden.

Das ist noch nicht alles, fügen wir den Namen des Instruments zu den Parametern hinzu

und analysieren Sie die Tatsache, dass sich ein neuer Balken bildet, ein beliebiges Symbol, einen Zeitraum.

Halten Sie es für sinnvoll, ein Symbol in den "Mechanismus der Suche nach einem neuen Balken" einzubinden? :)))
 
TarasBY:
Halten Sie es für angemessen, ein Symbol in den "Mechanismus zum Auffinden eines neuen Balkens" "einzubeziehen"? :)))

Es wäre interessant, eine universelle Kontrolle der neuen Leiste zu schaffen. Übrigens - dafür ist alles da
 
Vinin:

Es wäre interessant, eine universelle Kontrolle der neuen Leiste durchzuführen. Übrigens - dafür ist alles da
Sprechen Sie von "berücksichtigen" und DC?! ;)
Grund der Beschwerde: