Hallo,
welche Möglichkeit gibt es, um bei mehreren offenen Positionen, nur die x Positionen mit dem größten Gewinn zu schließen?
So wie ich es sehe, muss ich den Orderpool 2x durchlaufen und beim ersten Durchlauf ein Array erstellen indem die Ordernummern nach Gewinn geordnet sind.
Ein Durchlauf reicht. Einfach ein mehrdimensionales Array (1. Dimension: Order Profit, 2. Dimension: Orderticket) erstellen, welches Du nach der 1. Dimension sortierst. Dann hast Du Deine zwei Trades und ihre Ticketnummer.
das geht auch in einem durchlauf, ganz ohne Array, du musst ja nur schauen, ob die Position einen größeren gewinn hat als die andere, wenn ja, verwirf die vorherige und nimm die aktuelle.
am Ende der schleife hast du die mit dem größten Gewinn
das geht auch in einem durchlauf, ganz ohne Array, du musst ja nur schauen, ob die Position einen größeren gewinn hat als die andere, wenn ja, verwirf die vorherige und nimm die aktuelle.
am Ende der schleife hast du die mit dem größten Gewinn
Er möchte aber die x größten haben (und nicht nur eine!). Da ist in meinen Augen ein zweidimensionales Array die einfachste Variante.
ja eh, aber deswegen muss ich nicht ein array bemühen, wenn ich das auch aus einer schleife abfragen kann
ich lass alle Positionen durchlaufen und wenn der gewinn der einen höher ist als der der anderen, dann nehme ich die neue position
einfach eine if abfrage in die schleife und fertig
ja eh, aber deswegen muss ich nicht ein array bemühen, wenn ich das auch aus einer schleife abfragen kann
ich lass alle Positionen durchlaufen und wenn der gewinn der einen höher ist als der der anderen, dann nehme ich die neue position
einfach eine if abfrage in die schleife und fertig
10 aus 100 war nicht die Frage (da und bei einer variablen Anzahl wäre ein Array schon richtig), sondern nur 2 aus x
Nein, er will (mittlerweile) x aus mehreren (siehe Eingangspost). Und das will amando mit der if Abfrage lösen. Das mag ja sein, dass das geht - ich könnte das nicht. Lerne aber gerne dazu und bin deswegen auf amado's Quelltext gespannt.
Schönheitspreis gewinnt es keinen, das lasst einfach so oft durchlaufen, bis du die Anzahl der Tickets die du schliessen willst. Die Anzahl der Tickets musst du ja vorher definieren
ungerüstet und nicht kompiliert
ulong HighestProfit(const string symbol, const int MagicNumber) //Gewinn der Gesamtposition { double profit = DBL_MIN; ulong Ticket = 0; //--- in allen offenen Positionen suchen int i = PositionsTotal(); while(i-->0) { //--- Parameter der Order ulong position_ticket=PositionGetTicket(i);// das Ticket der Position PositionSelectByTicket(position_ticket); string position_symbol=PositionGetString(POSITION_SYMBOL); // Symbol ulong magic=PositionGetInteger(POSITION_MAGIC); // MagicNumber der Position ENUM_POSITION_TYPE type = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); datetime opentime = (datetime)PositionGetInteger(POSITION_TIME); double PositionProfit = PositionGetDouble(POSITION_PROFIT); //--- wenn die MagicNumber übereinstimmt, sind Stop Loss und Take Profit nicht gesetzt if(position_symbol==symbol && MagicNumber==magic && PositionProfit > Profit ) { Ticket=position_ticket; } } return(Ticket); }
Das ist natürlich eine Alternative. Aber es ist - wie Du schon selber geschrieben hast - dann eben mehr als ein Durchlauf. Du musst quasi für jede zu schließende Position immer alle offenen Trades durchlaufen (und Dir dabei merken, wie viele Du schon geschlossen hast).
Da finde ich ein Array doch eleganter ;).
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Hallo,
welche Möglichkeit gibt es, um bei mehreren offenen Positionen, nur die x Positionen mit dem größten Gewinn zu schließen?
So wie ich es sehe, muss ich den Orderpool 2x durchlaufen und beim ersten Durchlauf ein Array erstellen indem die Ordernummern nach Gewinn geordnet sind.