Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 70
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
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?