Zitat:
Zitat von Ca$hDigger
Hallo,
mit welchem Code kann ich denn die letzten Orderergebnisse die schon geschlossen sind auslesen? Sozusagen EA Zugriff auf die Tradehistory. Will den Gewinn bzw Verlust der letzten x Orders verwenden.
LG
Ca$hDigger
|
Hoi,
versuch es mal so:
Code:
...
int nTickets = GetHistoryOrderByCloseTime();
if (nTickets == 0) int nInARow = 0;
else{ nInARow = 0;
OrderSelect(nTickets, SELECT_BY_TICKET);
double lastProfit = OrderProfit() + OrderSwap() + OrderCommission();
for (int iPos = 1; iPos < nTickets; iPos++){
OrderSelect(iPos, SELECT_BY_TICKET);
double prevProfit = OrderProfit() + OrderSwap() + OrderCommission();
if (prevProfit * lastProfit < 0) break;
nInARow++;
}
}
if (lastProfit < 0) string last="Verluste";
else
{
Print("Letzter Gewinn",lastProfit);
last = "Gewinne";
}
Print("G/V:",last,"in Zeile:",nInARow);
...
//entscheidende Methode
int GetHistoryOrderByCloseTime( int asc=1){ // Rückwärts
int nTickets = 0;
int tickets[100];
for(int iPos=OrdersHistoryTotal()-1; iPos >= 0; iPos--) if (
OrderSelect(iPos, SELECT_BY_POS, MODE_HISTORY)
&& OrderMagicNumber() == Magic
&& OrderSymbol() == Symbol()
){
int nextTicket = OrderTicket(); datetime nextOCT = OrderCloseTime();
ArrayResize(tickets, nTickets+1);
for (int iTicket = nTickets; iTicket > 0; iTicket--){
int prevTicket = tickets[iTicket-1];
OrderSelect(prevTicket, SELECT_BY_TICKET);
datetime prevOCT = OrderCloseTime();
if ((prevOCT - nextOCT) * asc <= 0) break;
tickets[iTicket] = prevTicket;
}
nTickets++; tickets[iTicket] = nextTicket;
}
return(nTickets);
}