Schön, dann wollen wir mal:
Prinzipiell bei allen Schleifen, wo Orders geöffnet aber v.a. geschlossen werden, sollte:
for (int i = OrdersTotal()-1; i>= 0; i--)
stehen und nicht
for(i = 0; i < total; i++)
oder eben
for(i = 0; i < OrdersTotal(); i++)
D.h. Dekrementierung verwenden und nicht Inkrementierung!
int TotalOrders =OrdersTotal();
völlig ohne Funktion!?
Den Teil
Code:
double TotalOrder()
{
double GetTotalOrder =0;
for ( int cnt=0;cnt<OrdersTotal();cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if ( OrderMagicNumber() == MagicNumber)
{
GetTotalOrder +=(OrdersTotal() );
}
}
return (GetTotalOrder);
}
habe ich überhaupt nicht verstanden. Würde z.B. OrdersTotal() = 3 sein, dann stünde in der Variablen GetTotalOrder entweder 0, 3, 6 oder 9, je nachdem, ob die MagicNumber jeweils stimmte.
Aber auch egal, weil die Funktion TotalOrder() nirgendwo im Programm aufgerufen wird, also nutzlos und überflüssig.
In Summe wird OrdersTotal() sinnvollerweise vom EA nur 4 Mal aufgerufen, davon 1 Mal in einer dekrementierenden und 3 Mal in einer inkrementierenden Schleife.
Das würde ich zuerst ändern.
traderdoc