[ARCHIV!] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen - 4. - Seite 604

 
lottamer:

aber wie verwenden Sie dies in der Praxis, wenn Sie die Bedingung "wenn die letzten beiden Trades Verlierer waren....." codieren müssen? ??


In der Praxis wird dies bei allen Operationen, die mit Aufträgen arbeiten, verwendet. Sie müssen zuerst den Auftrag auswählen und dann etwas mit ihm tun (Auftragsinformationen anzeigen, einen Handelsauftrag an den Server senden, um ihn zu ändern oder zu schließen). Es gibt zwei Möglichkeiten, Aufträge im Terminal auszuwählen: nach Ticket, d. h. nach der Nummer, die dem Auftrag auf dem Server zugewiesen ist und die sich für einen bestimmten Auftrag nicht ändert, oder nach der Auftragsnummer (Index), unter der der Auftrag im Terminal gespeichert ist. Diese Zahl kann sich bei jedem Tick ändern, je nachdem, welche und wie viele Aufträge eröffnet, eingestellt, geschlossen oder gelöscht werden.

Es gibt Auftragszyklen, um mit Aufträgen zu arbeiten.

 
rigonich:


Es kommt nicht auf die Zeit selbst an, sondern darauf, ob etwas innerhalb eines bestimmten Zeitraums getan wurde, das sollten Sie überprüfen.

P.S. Und Sie brauchen N nicht zu definieren, sondern führen einfach Ihre Prüfungif(TimeCurrent() >= iTime(Symbol(),1440,0) ) durch, bis die gewünschte Aktion ausgeführt wird (Setzen einer Bestellung).


Aber wenn man es so einstellt:

if(TimeCurrent() >= iTime(Symbol(),1440,0)

Auf diese Weise wird das Signal die ganze Zeit nach der Eröffnung des Balkens gültig sein und . Bis ins Unendliche. Warum brauche ich es? Die Hauptsache ist, eine Bestellung bei der Eröffnung einer Bar zu öffnen, nicht eine Packung.

 
hoz:

Aber wenn Sie es so ausdrücken:

Auf diese Weise bleibt das Signal nach der Eröffnung des Balkens dauerhaft gültig und ... Bis zur Unendlichkeit. Wozu brauche ich es? Die Hauptsache ist, eine Bestellung bei der Öffnung der Bar zu öffnen, anstatt die Packung zu öffnen.


И ... Bis unendlich - das ist ein Sonderfall, wenn Ihre notwendige Bedingung - die Auftragserteilung - heute oder morgen nicht erfüllt wird...

Und um das Öffnen einer Packung zu vermeiden, sollte man einfach vor jedem Öffnen prüfen, ob die Bestellung geöffnet ist oder in dem von Ihnen benötigten Zeitraum geöffnet wurde.

 
rigonich:


In der Praxis wird dies bei allen Operationen, die mit Aufträgen arbeiten, verwendet. Sie müssen zuerst den Auftrag auswählen und dann etwas mit ihm tun (Auftragsinformationen anzeigen, einen Handelsauftrag an den Server senden, um ihn zu ändern oder zu schließen). Es gibt zwei Möglichkeiten, Aufträge im Terminal auszuwählen: nach Ticket, d. h. nach der Nummer, die dem Auftrag auf dem Server zugewiesen ist und die sich für einen bestimmten Auftrag nicht ändert, oder nach der Auftragsnummer (Index), unter der der Auftrag im Terminal gespeichert ist. Diese Zahl kann sich bei jedem Tick ändern, je nachdem, welche und wie viele Aufträge eröffnet, eingestellt, geschlossen oder gelöscht werden.

Um mit Aufträgen zu arbeiten, werden Zyklen der Auftragsauswertung implementiert.


Ich weiß, wie man eine solche Schleife beginnt.

for(int i=0; i<Gesamt; i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

Wie kann ich eine Variable so einstellen, dass sie TRUE liefert, wenn die letzten beiden Trades Verluste gemacht haben, und FALSE, wenn sie Gewinne gemacht haben?

ODER auf diese Weise.

wenn Geschäfte durch Stop geschlossen werden - irgendwo sollte das Kontrollkästchen counter.... aktiviert sein aber wie erkenne ich den Moment der Schließung?

 
rigonich:


Dies ist der Index, der die Position des Auftrags im Array angibt, in dem die Daten über die im Terminal vorhandenen Aufträge gespeichert sind.

Das heißt,was unterstrichen ist (unter SELECT_BY_POS) bool OrderSelect(int index, int select, int pool=MODE_TRADES)



Ich habe richtig verstanden, dass der letzte von mir abgeschlossene Auftrag den Index 1 hat. Und nach dem Schließen der nächsten Position, Index 2...und so weiter mit jeder neuen geschlossenen Position? Wie sieht es mit den Tagessummen aus? Zählen auch die gestrigen Abschlüsse? oder beginnt das System jeden Tag von vorne?
 
lottamer:


Ich weiß, wie man eine solche Schleife startet...

for(int i=0; i<Gesamt; i++)

{

if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

Wie kann ich eine Variable so einstellen, dass sie TRUE liefert, wenn die letzten beiden Trades verloren sind, und FALSE, wenn sie profitabel sind?

ODER auf diese Weise.

wenn Geschäfte durch Stop geschlossen werden - irgendwo sollte das Kontrollkästchen counter.... aktiviert sein aber wie erkenne ich den Moment der Schließung?


Es gibt mehrere Lösungen für diese Probleme: Die einfachste ist, alle Aufträge in der Schleife durchzugehen und den zuletzt geschlossenen Auftrag zu suchen, zu sehen, ob Ihr Auftrag mit einem Stop oder Gewinn geschlossen wurde, sein Ticket auszuwählen, die Schleife erneut zu starten, wenn der Auftrag mit dem gespeicherten Ticket gespeichert wurde, ihn zu überspringen, den vorletzten zu suchen...

P.S. Und nichtMODE_TRADES, sondern MODE_HISTORY.

 
aber eine andere Frage ...SecondsAfterOpenLastPos() Funktion. Wenn der EA deaktiviert wurde, gibt diese Funktion den Wert des letzten GESCHLOSSENEN Handels von gestern zurück? (kann nicht überprüft werden - der Markt stagniert)
 
rigonich:


Es gibt mehrere Lösungen für diese Probleme. Die einfachste ist wahrscheinlich die folgende: Gehen Sie alle Aufträge in der Schleife durch, suchen Sie denjenigen, der zuletzt geschlossen wurde, verwenden Sie Stop oder Profit, um den Auftrag zu finden, speichern Sie sein Ticket, starten Sie die Schleife erneut, wenn der Auftrag mit dem gespeicherten Ticket ausgewählt wurde, überspringen Sie ihn,suchen Sie denjenigen, der als vorletzter geschlossen wurde...

P.S. Und nichtMODE_TRADES, sondern MODE_HISTORY.


die Logik ist klar.... aber für mich ist es unmöglich, es in meinen Code zu schreiben... es ist zu kompliziert... ich habe noch nie mit Brute-Force-Schleifen gearbeitet... ich habe es einfach nicht gebraucht... es ist also ein dunkler Wald :))) und die Schleifen, die ich gesehen habe, sind für mich nicht sehr klar... es ist klar, dass sie etwas versuchen... und das war's.

Könnten Sie mir das einfachste Beispiel geben... aber mit Erklärungen, damit ich verstehe, was in der Schleife passiert und wo?

 
lottamer:

vielleicht können Sie zwei Optionen von hier aus erneut aufrufen https://forum.mql4.com/ru/38949/page5#434244

Funktion TimeOpenLastPos().

Diese Funktion gibt den Zeitpunkt der letzten geöffneten Position zurück.

Wir brauchen eine offene Zeit der letzten GESCHLOSSENEN Position.

oder

Funktion SecondsAfterOpenLastPos().

Diese Funktion gibt die Anzahl der Sekunden seit dem letzten Öffnen der Position zurück.

Und sie MUSS in Stunden.... statt in Sekunden angegeben werden.

dieser ist näher.

Die erste Option kann mit minimalen Änderungen verwendet werden (suchen Sie nach der Historie und dem, was Sie brauchen). Möchten Sie, dass es nicht mehr als einen Handel pro Tag eröffnet?
 
lottamer:
Aber eine andere Frage ... die FunktionSecondsAfterOpenLastPos() . Wenn der EA deaktiviert wurde, gibt diese Funktion den Wert des letzten GESCHLOSSENEN Handels von gestern zurück? (kann nicht überprüft werden - der Markt stagniert)


Das wird sie.

Genauer gesagt, sie wird nicht geschlossen, sondern offen sein.