Verlustpositionen in Folge

 

Hallo,


kann mir jemand sagen, warum er im Demokonto die Verlustorders in Folge richtig zählt, er es aber im Backtester nicht schafft?

Ich zähle die Deals mal 2 damit ich immer die orders zusammenfasse. 

im Backtester bekomme ich, das er die orders nicht selektieren kann


double Verlustorder_in_Folge(const string symbol,const int magicnumber)
  {
// --- determine the time intervals of the required trading history
   datetime end=TimeCurrent();                 // current server time
   datetime start=end-PeriodSeconds(PERIOD_H1)*Hours_Order_loockback;// set the beginning time to 24 hours ago

//--- request in the cache of the program the needed interval of the trading history
   HistorySelect(start,end);
//--- obtain the number of deals in the history
   int deals=HistoryDealsTotal();

   int Deal_Reason=-1;
   int count=0;

//--- scan through all of the deals in the history
   for(int i=deals-1;i>deals-(max_Verlustorders*2);i--)
     {
      ulong deal_ticket=HistoryDealGetTicket(i);
      if(deal_ticket>0) // obtain into the cache the deal, and work with it
        {
         string deal_symbol        =HistoryDealGetString(deal_ticket,DEAL_SYMBOL);
         long order_magic          =HistoryDealGetInteger(deal_ticket,DEAL_MAGIC);
         int  deal_reason          =(int)HistoryDealGetInteger(deal_ticket,DEAL_REASON);

         // Print(deal_reason);
         //--- process the deals with the indicated DEAL_MAGIC
         if(order_magic==magicnumber && deal_symbol==symbol && deal_reason==4)
           {
            count+=1;
           }
        }
      else // unsuccessful attempt to obtain a deal
        {
         PrintFormat("We couldn't select a deal, with the index %d. Error %d",
                     i,GetLastError());
        }
     }
//--- output the results of the calculations

   return((int)count);
  }
 

Ich hab jetzt noch keine Erfahrung mit Mt5, aber dort gibt es - anders als bei MT4 - Auftrag (Dein Auftrag), Transaktion oder Deal (Abwicklungsabfolge zwischen Terminal und Server) und Position (was dann am Konto ist) und für alle drei gibt es eigene Funktionen.

Ich vermute Du brauchst HistoryDealGetTicket() gar nicht(?) sondern 'nur' HistorySelectByPosition(). Außerdem kann es sein, dass die Reihenfolge der Liste nicht zeitlich (oder 'falsch rum') sortiert ist - ich würde das einmal überprüfen.

 
Carl Schreiber:

Ich hab jetzt noch keine Erfahrung mit Mt5, aber dort gibt es - anders als bei MT4 - Auftrag (Dein Auftrag), Transaktion oder Deal (Abwicklungsabfolge zwischen Terminal und Server) und Position (was dann am Konto ist) und für alle drei gibt es eigene Funktionen.

Ich vermute Du brauchst HistoryDealGetTicket() gar nicht(?) sondern 'nur' HistorySelectByPosition(). Außerdem kann es sein, dass die Reihenfolge der Liste nicht zeitlich (oder 'falsch rum') sortiert ist - ich würde das einmal überprüfen.

das ist ja was ich nicht verstehe, ich hab das ganze am Demokonto ja getestet ob er die Deals richtig zählt, es geht ja nur im Backtester nicht.


das mit HistorySelectByPosition muss ich mal testen

 

Passt zwar nicht ganz dazu aber ich sag es mal.


Die Request_ID die man zurückbekommt wenn man eine Order per OrderSendAsync sendet startet im Tester bei 0 und zählt dann aufwärts.

Im Live Modus startet die bei 2 und zählt dann aufwärst.


Vielleicht ist es bei Deals in der History auch so.

Sprich du suchst eine "0" die aber erst bei 2 beginnt. 

Prüf das mal nach



Gruß

 
amando:

das ist ja was ich nicht verstehe, ich hab das ganze am Demokonto ja getestet ob er die Deals richtig zählt, es geht ja nur im Backtester nicht.

das mit HistorySelectByPosition muss ich mal testen

Überleg mal, bei Backtests gibt es keinen Server mit dem der Auftrag geregelt werden muss - vielleicht gibt es gar keine Deals oder nur einen Pseudodeal. Wichtig ist da doch nur Auftrag und die Position danach.