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
Ich muss ein Thema wie dieses übersehen haben. Wo kann ich die Auftragsprüfungsfunktion von KimV sehen?
Es ist für die 4. Version, aber Sie können es sich ansehen, es könnte nützlich sein. Sie können sie auf seiner Website in der Rubrik "Freie Bibliotheken", der Bibliothek für Bestellungen, durchsehen.
aus einer Vier funktioniert nicht. Ich benutze
PositionSelect
Wählt eine offene Position zur weiteren Bearbeitung aus. Gibt true zurück, wenn die Funktion erfolgreich abgeschlossen wurde. Gibt false zurück, wenn die Funktion fehlschlägt. Um die Informationen über den Fehler zu erhalten, rufen Sie die Funktion GetLastError() auf.
boolPositionSelect(
String-Symbol//Werkzeugname
);
Parameter
Symbol
[Bezeichnung des Finanzinstruments.
Zurückgegebener Wert
Wert vom Typ bool.
Hinweis
Für jedes Symbol kann zu einem bestimmten Zeitpunkt nur eine Position eröffnet werden, die das Ergebnis eines oder mehrerer Geschäfte ist. Positionen und aktive schwebende Aufträge, die auch auf der Registerkarte "Handel" des "Toolbox"-Panels des Kundenterminals angezeigt werden, sollten nicht verwechselt werden.
Die Funktion PositionSelect() kopiert die Daten zur Position in die Programmumgebung, und die nachfolgenden Aufrufe PositionGetDouble(), PositionGetInteger() und PositionGetString() geben die zuvor kopierten Daten zurück. Das bedeutet, dass die Position selbst vielleicht nicht mehr existiert (oder sich im Umfang, in der Richtung usw. geändert hat), aber die Daten dieser Position können immer noch abgerufen werden. Um die Erfassung frischer Positionsdaten zu gewährleisten, empfiehlt es sich, die Funktion PositionSelect() unmittelbar vor deren Beantragung aufzurufen.
von einem Vierling nicht funktionieren wird. Ich verwende PositionSelect, um die Position zu definieren
Analysieren Sie diese Situationen in den Voralternationen eines Ticks oder auf verschiedenen Ticks?
OK, ich gehe von Folgendem aus:
Ein Tick ist eine Veränderung des Preises eines Instruments. Die Häufigkeit solcher Änderungen ist unvorhersehbar: von einigen pro Sekunde bis zu einigen pro Stunde. Dementsprechend dürfen die Funktionen OrderSend() und PositionSelect() nicht von der Aktivität der Ticks abhängen. Und da es so ist, denke ich, dass wir prüfen sollten, um die Duplizierung von Aufträgen zu vermeiden (und die entsprechenden Situationen zu analysieren), ohne Bezug auf das Verhalten (Häufigkeit) von Ticks.
Daher finde ich es schwierig, die Frage genau zu beantworten :/.
Das habe ich nicht gemeint, als ich meine Frage stellte. Der OnTick()-Ereignishandler wird ausgelöst, wenn der nächste Tick eintrifft. Aus diesem Grund formuliere ich meine Frage neu:
Analysieren Sie diese Situationen innerhalb eines OnTick()-Aufrufs oder in verschiedenen Aufrufen?
Nun, ich kann immer noch nicht eine Antwort auf einen Tick erhalten Sie OrderSend() und PositionSelect() ausführen?
Ich möchte Ihnen vorschlagen, diese Abfragen nicht innerhalb eines Ticks (Auslösen von OnTick()), sondern bei zwei Ticks durchzuführen:
- beim ersten Ticken
d.h. wenn die Anfrage erfolgreich beantwortet wird, setzen Sie das Flag der Positionseröffnung auf buy=true und unterbrechen die Ausführung von OnTick() bis zum nächsten Tick (Auslösung des OnTick()) Operator Return.
- Beim zweiten Tick - PositionSelect().
In diesem Fall gibt es keine doppelte Positionseröffnung.
Keine Garantie, dass die Position bereits beim nächsten Tick eröffnet wird. Messen Sie, wie viel Zeit es dauert, eine Position zu eröffnen, wenn Sie eine Order manuell einstellen,
Ich empfehle Ihnen, die Auftragsausführungssteuerung nach OnTrade() zu verschieben, da dieses Ereignis nur als Serverantwort auf eine Handelsoperation erzeugt wird.
Allerdings ist mir nicht ganz klar, warum es 4 OnTrade()-Ereignisse pro Auftrag gibt?
Nun, ich kann immer noch nicht eine Antwort auf einen Tick erhalten Sie OrderSend() und PositionSelect() ausführen?
Ihrer Terminologie zufolge werden meine Funktionen OrderSend() und PositionSelect() "innerhalb eines Ticks" ausgeführt.
...Ich möchte vorschlagen, dass diese Abfragen nicht innerhalb eines einzigen Ticks (Auslösen von OnTick()), sondern innerhalb von zwei Ticks ausgeführt werden:
- beim ersten Ticken
d.h. wenn die Anfrage erfolgreich beantwortet wird, setzen Sie das Flag zum Öffnen der Position in buy=true, und unterbrechen die Ausführung von OnTick() bis zum nächsten Tick (Auslösung des OnTick()) Operator Return.
- Beim zweiten Tick - PositionSelect().
Bei dieser Variante gibt es keine doppelte Eröffnung von Positionen.
Etwas früher habe ich geschrieben, dass die Ausführung der Funktionen OrderSend() und PositionSelect() nichts mit dem Kommen/Nichtkommen von Ticks zu tun hat . Und ich habe kurz erklärt, warum. Daher sollte die Prüfung "beim zweiten Tick - PositionSelect()" uns nicht in jedem möglichen Fall vor einer Verdoppelung der Aufträge bewahren.
Obwohl es mir nicht ganz klar ist, warum es 4 OnTrade()-Ereignisse pro Auftrag gibt?
Es gab in der Vergangenheit einen Artikel darüber über OnTrade().
Es gibt keine Garantie, dass die Position bereits beim nächsten Tick geöffnet wird...
Nun, ich kann immer noch nicht eine Antwort auf einen Tick erhalten Sie OrderSend() und PositionSelect() ausführen?
Ich möchte Ihnen vorschlagen, diese Abfragen nicht innerhalb eines Ticks (Auslösen von OnTick()), sondern bei zwei Ticks durchzuführen:
- beim ersten Ticken
d.h. wenn die Anfrage erfolgreich beantwortet wird, setzen Sie das Flag der Positionseröffnung auf buy=true und unterbrechen die Ausführung von OnTick() bis zum nächsten Tick (Auslösung des OnTick()) Operator Return.
- Beim zweiten Tick - PositionSelect().
In diesem Fall gibt es keine doppelte Positionseröffnung.
Nein - nicht in einer Zecke. In der 1. Sekunde.
Hier ist eine Vereinfachung:
Wenn also keine Pause gemacht wird, werden 2 Aufträge hintereinander eröffnet. Aber ich habe es auf 3 Sekunden eingestellt - und ich bereue es nicht )))) Dennoch ist es die Eröffnung der Bestellung.
Die Abrechnung von Aufträgen im MT5 ist eine Wissenschaft für sich:Behandlung von Handelsereignissen im Expert Advisor mit der Funktion OnTrade()
Keine Pause bewahrt Sie vor dem erneuten Öffnen, es kann immer eine Situation eintreten, in der der Auftrag 1 Sekunde länger zur Ausführung benötigt.
ps: Und vergessen Sie nicht die Magie.