Einzelnen Beitrag anzeigen
  #9 (permalink)  
Alt 05.03.18
next user next user ist offline
Premium Mitglied
 
Registriert seit: May 2015
Beiträge: 367
next user befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von dundale Beitrag anzeigen
Ich habe eine fertige Funktion, welche mir die Anzahl der offenen Trades liefert: TotalOpenOrders().
Ich nehme mal an, du hast OrdersTotal() nicht übersehen und nutzt TotalOpenOrders(), um die Pendings auszuschließen...

Zitat:
Zitat von dundale Beitrag anzeigen
Ich hole mir also den Wert der offenen Orders und versuche hier zu prüfen, ob dieser Wert größer ist als num_LotSize (Positionsnummer im Array), wenn ja wird num_LotSize erhöht, wenn nicht soll der erste Wert im Array verwendet werden.

Code:
double LotSize_Berechnung()
  {
   int num_lotsize=0;
   if(OrdersTotal()>0)
      for(int i=OrdersTotal()-1; i>=0; i--)
      {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {
         if(OrderSymbol() == Symbol())
            {
            if(TotalOpenOrders() > num_lotsize)
            num_lotsize++;
            }     
            if(TotalOpenOrders() < num_lotsize)
            num_lotsize=1;
         }   
      }
   return (num_lotsize);
  }
  • Um die "num_lotsize" mit deiner totalen Orderanzahl (TotalOpenOrders()) zu vergleichen, brauchst du doch nicht
    jede einzelne Order in einer Schleife anzusprechen. Die Orders spielen hier auch überhaupt keine Rolle.
  • Du filterst hier die Orders nach Symbol, vergleichst im nächsten Schritt aber die TotalOpenOrders(), da kann doch was nicht stimmen.
  • Deine Filterung bzgl. Symbol schließt mit ihren Klammern nur den ersten Vergleich ein. Der zweite (if(TotalOpenOrders() < num_lotsize)) wird
    unabhängig vom Symbol behandelt.
  • Ist es wirklich so gewollt, bei geringerer Orderanzahl als "num_lotsize" auf die erste (bzw. wenn Array auf die zweite) Lotgröße zu setzen?
    Nicht das sich da ein (Denk)Fehler eingeschlichen hat.

Zitat:
Zitat von pascalper Beitrag anzeigen
Auf die Schnelle (Fehler garantiert):

double lots=0.01;
if(TotalOpenOrders() = 2 {lots=0.06};
if(TotalOpenOrders() = 3 {lots=0.09};
if(TotalOpenOrders() = 4 {lots=0.12};
usw.

Wozu Array?
Bei so einer Abfrage, wozu if's?
Code:
switch(TotalOpenOrders())
{
   case 1: ... break;
   case 2: ... break;
   ect. ...
}
Dann spart er sich auch doppelte Aufrufe von TotalOpenOrders()

Zitat:
Zitat von pascalper Beitrag anzeigen
...(Fehler garantiert)...
Hab ihn gefunden (die fehlende, schließende Klammer bei den if's mal abgesehen). Zuweisung im Vergleich (nur ein Gleichheitszeichen im if)

============================================

@dundale
Wenn ich es richtig gesehen habe, so liefert dir TotalOpenOrders() NUR die aktiven und NICHT auch noch die Pending Orders.
Den Sinn dahinter verstehe ich nicht, aber dann hättest du doch sicherlich OrdersTotal() genutzt, oder?

Du könntest dann einfach einen Zähler beim Öffnen einer Order inkrementieren und diesen, um auch manuelle Trades zu integrieren,
z.B. in der OnTick() mit der aktuellen Anzahl vergleichen. Stimmen sie nicht überein, so anpassen.

Ein Beispiel könnte so aussehen:
Code:
double   lotArray[4] = {0.03, 0.12, 0.18, 0.24};
double   lotSize = lotArray[0];
int      count_lotSize = 0;

// Bei Ordereröffnung einfach die Lots vom Array holen...
OrderSend(...,lotArray[count_lotSize],...);
count_lotSize++;

// In der OnTick()
if(TotalOpenOrders() > count_lotSize)
   // Totale Anzahl größer als count_lotSize. Anpassen...
else if(TotalOpenOrders() < count_lotSize)
   // Totale Anzahl kleiner als count_lotSize...