Trades nach einer gewissen Haltedauer schliessen.

 

Hallo zusammen,

ich würde gerne im MT5 offene Trades nach einer gewissen Haltedauer von  XX Tage schliessen.

D.h. ich loop die offenen Trades und wenn die Haltedauer 10 Tage ist, werden alle Trades die 10 Tage offen sind gesschlossen.

Jemand ne Idee wie der Loop aussehen könnte?


Danke im voraus

 

Hier habe ich gerade gestern angedeutet, wie die Schleifen durch die Positionen aussehen müsste: https://www.mql5.com/de/forum/439759#comment_44374813

Und bitte KEINE Doppelposts!

Mehrere TP verwalten
Mehrere TP verwalten
  • 2023.01.14
  • www.mql5.com
Moin, ich handle im Moment mit dem ProRealTrader, eigentlich ok, kann jedoch etwas für mich wichtiges nicht...
 
Das mit den zehn Tagen ist hoffentlich nur ein Beispiel, da zahlst Du ja mehr Swap als Du rausholst...
 
Tobias Johannes Zimmer #:
Das mit den zehn Tagen ist hoffentlich nur ein Beispiel, da zahlst Du ja mehr Swap als Du rausholst...
Das ist erstmal nicht ganz richtig. Das kommt auf den Trade an. Wenn man 10 Tage hält sind die Gewinne ja auch grösser als mit dem selben Volumen nur eine Stunde. Wie teuer ein SWAP ist hängt auch vom Produkt ab usw. Aber das Thema hier ist ja ein anderes :-)
 

Ja, hier ist ein einfaches Beispiel-Code in MQL5:

void CloseOldPositions()
{
  int total_positions = PositionsTotal();
  for (int i = 0; i < total_positions; i++)
  {
    PositionInfo pi;
    if (PositionGet(pi, i))
    {
      if (TimeCurrent() - pi.time_opened > 10 * 24 * 60 * 60)
      {
        OrderClose(pi.ticket, pi.volume, pi.bid, 10);
      }
    }
  }
}
Dieser Code überprüft jede offene Position und schließt jene, die älter als 10 Tage sind ( TimeCurrent() - pi.time_opened > 10 * 24 * 60 * 60 ). Die Schließung erfolgt mit einem Marktpreisauftrag ( OrderClose(pi.ticket, pi.volume, pi.bid, 10) ).
 
void CloseOldPositions()
{
  int total_positions = PositionsTotal();
  for (int i = 0; i < total_positions; i++)
  {
    int ticket = PositionGetTicket(i);
    int time_opened = PositionGetInteger(POSITION_TIME, ticket);
    if (TimeCurrent() - time_opened > 10 * 24 * 60 * 60)
    {
      OrderClose(ticket, PositionGetDouble(POSITION_VOLUME), Bid, 10);
    }
  }
}
Jetzt sollte der Code korrekt sein und kompilierbar sein.
 

Nein da ist immer noch ein Fehler drin.

void CloseOldPositions()
{
  int total_positions = PositionsTotal();
  for (int i = 0; i < total_positions; i++)
  {
    int ticket = PositionGetTicket(i);
    int time_opened = PositionGetInteger(POSITION_TIME, ticket);
    if (TimeCurrent() - time_opened > 10 * 24 * 60 * 60)
    {
      PositionClose(ticket);
    }
  }
}
Jetzt sollte der Code korrekt sein und kompilierbar sein. Vergessen Sie bitte nicht, dass der Code nur ein Beispiel ist und Sie ihn entsprechend Ihren Anforderungen anpassen müssen.
 
super vielen dank