Bitte sagen Sie mir, warum die Funktion OrdersTotal() bei der Suche nach Bestellungen -1 schreibt.
Beispiel: for (i=OrdersTotal()-1 ;i>=0; i--)
warum nicht einfach OrdersTotal()?
Beginnt die Zählung der Aufträge in dieser Funktion bei 0 oder bei 1? Das heißt, wenn es eine Bestellung gibt, ist OrdersTotal() gleich 0 oder 1?
Die FunktionOrdersTotal() zeigt die Menge an, d.h. wenn es eine Bestellung gibt,ist die Funktion OrdersTotal() gleich 1, aber in der Liste der Bestellungen beginnt der Bericht mit 0
0 - erste Ordnung
1 - zweiter Ordnung
2 - dritte
und so weiter.
Wenn wir also die Suche am Ende der Liste beginnen, müssen wir von der Gesamtzahl vonOrdersTotal() eins abziehen.
OrdersTotal() zeigt die Menge an, d.h. wenn es eine Bestellung gibt, dannist OrdersTotal() eins, aber in der Liste der Bestellungen beginnt der Bericht bei null
0 - erste Ordnung
1 - zweiter Ordnung
2 - dritte
und so weiter.
Wenn wir also die Suche am Ende der Liste beginnen, müssen wir von der Gesamtzahl vonOrdersTotal() eins abziehen.
Wenn wir aber nicht eins vom ersten Ausdruck subtrahieren, ist das kein Fehler, denn wenn wir eine Reihenfolge haben, gibt es zwei Iterationen. Es sei denn, wir brauchen nicht zwei Iterationen, wenn wir alles, was wir brauchen, in einer einzigen machen können, also -1, richtig?
wishmast: Aber wenn der erste Ausdruck nicht eins subtrahiert, ist es kein Fehler, wenn wir eine Reihenfolge haben, werden zwei Iterationen stattfinden. Es sei denn, es besteht keine Notwendigkeit, zwei Iterationen durchzuführen, wenn alles, was wir brauchen, in einer erledigt werden kann, also -1, richtig?
trader781: Da wir einen Stapel von Aufträgen haben, warum können wir nicht einfach einen herausnehmen, den wir brauchen? (Die richtigen) und mit ihnen machen, was wir wollen? z.B. Bestellung (i-4)
Denn es funktioniert nur im MT4-Tester. Oder beim Handel mit nur einem Symbol und nur einem EA.
Wenn Sie darüber nachdenken, ist der EA für jedes Paar derselbe, nur der Kontostand ist gemeinsam (der Wechsel wird der letzte sein)
der Filter geht auf alle Orders, die die Bedingung market-open durch den EA erfüllen, wenn die Simulation passt
Was ist los?
Nun, es wurde Ihnen oben bereits erklärt, was falsch ist. Wir können die Bestellungen nur als unsere zählen und die Array-Indizes nach der Gesamtmenge nehmen - wir erhalten ein Array mit leeren Zellen. Und wofür ist das gut? Und wenn das Array nicht leer war, enthalten die "unnötigen" Felder unnötigen Müll, der zu Fehlern führt, und wir reden hier von Geld.
Vitalie Postolache: Nun, es wurde Ihnen bereits oben erklärt, was falsch ist. Aufträge zählen nur ihre eigenen, und nehmen Sie die Array-Indizes für die Gesamtzahl - Sie erhalten ein Array mit leeren Zellen. Und wofür ist das gut? Und wenn das Array nicht leer war, werden die "unnötigen" Felder unnötigen Müll enthalten, der zu Fehlern führt, und wir reden hier von Geld.
OK, so funktioniert es.
struct myorder { int Ticket; double orderopenprice; int ordertype; double profit; double stoploss; double lot; };
Bitte sagen Sie mir, warum die Funktion OrdersTotal() bei der Suche nach Bestellungen -1 schreibt.
Beispiel: for (i=OrdersTotal()-1 ;i>=0; i--)
warum nicht einfach OrdersTotal()?
Beginnt die Anzahl der Aufträge in dieser Funktion bei 0 oder bei 1? Das heißt, wenn es eine Bestellung gibt, ist OrdersTotal() gleich 0 oder 1?
Bitte sagen Sie mir, warum die Funktion OrdersTotal() bei der Suche nach Bestellungen -1 schreibt.
Beispiel: for (i=OrdersTotal()-1 ;i>=0; i--)
warum nicht einfach OrdersTotal()?
Beginnt die Zählung der Aufträge in dieser Funktion bei 0 oder bei 1? Das heißt, wenn es eine Bestellung gibt, ist OrdersTotal() gleich 0 oder 1?
Die FunktionOrdersTotal() zeigt die Menge an, d.h. wenn es eine Bestellung gibt,ist die Funktion OrdersTotal() gleich 1, aber in der Liste der Bestellungen beginnt der Bericht mit 0
0 - erste Ordnung
1 - zweiter Ordnung
2 - dritte
und so weiter.
Wenn wir also die Suche am Ende der Liste beginnen, müssen wir von der Gesamtzahl vonOrdersTotal() eins abziehen.
OrdersTotal() zeigt die Menge an, d.h. wenn es eine Bestellung gibt, dannist OrdersTotal() eins, aber in der Liste der Bestellungen beginnt der Bericht bei null
0 - erste Ordnung
1 - zweiter Ordnung
2 - dritte
und so weiter.
Wenn wir also die Suche am Ende der Liste beginnen, müssen wir von der Gesamtzahl vonOrdersTotal() eins abziehen.
Aber wenn der erste Ausdruck nicht eins subtrahiert, ist es kein Fehler, wenn wir eine Reihenfolge haben, werden zwei Iterationen stattfinden. Es sei denn, es besteht keine Notwendigkeit, zwei Iterationen durchzuführen, wenn alles, was wir brauchen, in einer erledigt werden kann, also -1, richtig?
Ja, richtig
Nicht ganz richtig.
Sie können das Präfix Dekrement verwenden.
Da wir einen Stapel von Aufträgen haben, warum können wir nicht einfach einen herausnehmen, den wir brauchen? (Die richtigen) und mit ihnen machen, was wir wollen? z.B. Bestellung (i-4)
Denn das funktioniert nur im MT4-Tester. Oder beim Handel mit nur einem Symbol und nur einem EA.
Wenn Sie darüber nachdenken, ist der EA für jedes Paar derselbe, nur der Kontostand ist gemeinsam (der Wechsel wird der letzte sein)
der Filter geht auf alle Aufträge, die die Bedingung market-open des Expert Advisors erfüllen, wenn das Symbol übereinstimmt
Was ist los?
Wenn Sie darüber nachdenken, ist der EA für jedes Paar derselbe, nur der Kontostand ist gemeinsam (der Wechsel wird der letzte sein)
der Filter geht auf alle Orders, die die Bedingung market-open durch den EA erfüllen, wenn die Simulation passt
Was ist los?
Nun, es wurde Ihnen bereits oben erklärt, was falsch ist. Aufträge zählen nur ihre eigenen, und nehmen Sie die Array-Indizes für die Gesamtzahl - Sie erhalten ein Array mit leeren Zellen. Und wofür ist das gut? Und wenn das Array nicht leer war, werden die "unnötigen" Felder unnötigen Müll enthalten, der zu Fehlern führt, und wir reden hier von Geld.
OK, so funktioniert es.
{
int Ticket;
double orderopenprice;
int ordertype;
double profit;
double stoploss;
double lot;
};
myorder orders[];
int i;
int count1=0;
void CalcOrders()
{
for(i=OrdersTotal()-1; i>=0; i--)
{
if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && (OrderSymbol()==Symbol())
&& (OrderMagicNumber()==Magic) && (OrderType()<2))
orders[count1].Ticket=OrderTicket();
orders[count1].lot=OrderLots();
orders[count1].orderopenprice=OrderOpenPrice();
orders[count1].ordertype=OrderType();
orders[count1].profit=OrderProfit();
orders[count1].stoploss=OrderStopLoss();
count1++;
}
}
oder?