Frage zur Funktion OnTradeTransaction - Seite 4

 
Mikalas:

Das liegt daran, dass die Börse keine Küche hat (nur Provisionen) und FOREX Millionen von MMM-Anhängern hat,

Es mag 100 Dollar geben, aber JEDER hat sie! Riesiges Geld, da gibt es etwas zu zählen! :)

Ich verstehe MetaQuotes nicht )

Für Forex-Küchen gibt es ein tolles MT4-Terminal.

Viele Forex-Küchen bieten nie einen Zugang über MT5 an, sie brauchen ihn nicht, verdammt noch mal.

Ist es nach so vielen Jahren unmöglich, ein Terminal in der Nähe der Börsen zu bauen?

Wenn sie ein gutes Terminal haben, werden sie viele Kunden haben, die MT5-Dienste anbieten wollen.

 
Serj_Che:

Ich verstehe MetaQuotes nicht )

Für Forex-Küchen gibt es ein tolles MT4-Terminal.

Viele Forex-Küchen bieten nie einen Zugang über MT5 an, sie brauchen ihn nicht, verdammt noch mal.

Ist es nach so vielen Jahren unmöglich, ein Terminal in der Nähe der Börsen zu bauen?

Wenn wir ein gutes Terminal haben, wird es eine Menge Kunden geben, die MT5-Dienste anbieten wollen.

Es geht nicht um MQ, es geht um Makler.

Makler profitieren davon, dass ihre Kunden Geschäfte machen - mehr Geschäfte - mehr Provision.

Der Roboter wird nur "korrekte Geschäfte" machen, und durch die Platzierung von Aufträgen "von Hand" sind die Menschen sehr

Der Roboter wird nur "richtige" Geschäfte machen, und bei der manuellen Bestellung machen Menschen sehr oft Fehler (ich habe diesen Fehler selbst schon oft gemacht),

Man wird erwischt, flucht, schließt den Auftrag mit Verlust ab, will ihn zurückholen, hat ihn wieder falsch eingestellt usw.

Und der Makler und die Börse erhielten eine Provision :)

Für die Börse und insbesondere für den Makler ist QUIK also das Mutterland.

 
Mikalas:

Wassili, wird es eine Antwort geben?

Das glaube ich nicht.

Habe ich gewonnen?

Ich werde Ihnen heute Abend eine Antwort geben. Ich kann im Moment nicht.
 
C-4:

Verkomplizieren Sie die Dinge nicht. Es ist nicht notwendig, Asynchronität zu verwenden, um auf FORTS zu handeln. Werfen Sie zunächst einen Blick auf diesen Artikel, Kapitel 3: "Die Grundlagen der asynchronen Operationen". Es ist nicht viel, es ist sehr grundlegend, aber es ist genug, um mit dem Studium zu beginnen. Der dort beschriebene Code ist zu 100 % asynchron, aber das hindert ihn nicht daran, im synchronen Modus zu arbeiten, ohne alle Arten von OnTradeTransaction und anderen Ereignissen zu erhalten.

Die Lösung muss sich an Ihrer Aufgabe orientieren. In MetaTrader 5 haben Sie zu jedem Zeitpunkt nur eine aktive Position, und die müssen Sie überwachen. Es besteht keine Notwendigkeit, die Bestellhistorie einzusehen. Wenn Sie die Auftragshistorie noch benötigen, sollten Sie Ihr Ziel klären.

Nein, Wassili, du hast mein Ziel nicht ganz verstanden. Ich werde nichts schreiben oder mit FORTS handeln, ich habe gerade erst begonnen, mql5 zu lernen. Ich habe vorhin angefangen, diesen Artikel zu lesen. Aber ich habe nicht mehr als 2 Seiten gelesen und aufgegeben. Ich glaube nicht, dass ich das brauche, ich bin selbst ein NT. Aber eine klare Erklärung des Unterschieds zwischen OrderSend und OrderSendAsync ist nützlich. Das ist so ziemlich das, was ich erwartet habe.

Wenn wir die asynchrone Auftragsübermittlung überspringen und OnTradeTransaction verwenden, um zu verfolgen, was auf dem Konto passiert, würde dies die Leistung des EAs nicht verbessern?

Es ist eine Sache, bei jedem Tick eine Kontrolle durchzuführen, und eine ganz andere, nur dann zu prüfen, wenn sich etwas auf dem Konto geändert hat. Liege ich falsch? Der ausstehende Auftrag wurde aktiviert, wir haben Informationen darüber. Wenn eine Position geschlossen ist, können wir das Ergebnis der Schließung analysieren. In der Zeit von der Eröffnung bis zur Schließung einer Position gibt es nur wenige Kontrollen. Und im Gegensatz dazu gibt es Kontrollen auf jeder Zecke...

Hier eine weitere Frage: Um den Gewinn einer Position zu ermitteln, gibt es die Funktion PositionGetDouble(POSITION_PROFIT), aber um den Gewinn einer geschlossenen Position zu ermitteln, hatnur OrderCalcProfit() einen Haufen Parameter, die erst aus diesem Handel gewonnen werden müssen. Oder bin ich vielleicht so neu in mql5, dass ich keine richtige Lösung finden kann?

Wenn es Ihnen nichts ausmacht...

 
AlexeyVik:

Nein, Wassili, du hast mein Ziel falsch verstanden. Ich werde noch nichts schreiben oder auf FORTS handeln, ich habe gerade angefangen, mql5 zu lernen. Ich habe vorhin angefangen, diesen Artikel zu lesen. Aber ich habe nicht mehr als 2 Seiten gelesen und aufgegeben. Ich glaube nicht, dass ich das brauche, ich bin selbst ein NT. Aber eine klare Erklärung des Unterschieds zwischen OrderSend und OrderSendAsync ist nützlich. Das ist so ziemlich das, was ich erwartet habe.

Wenn wir die asynchrone Übermittlung von Aufträgen verwerfen und trotzdem OnTradeTransaction verwenden, um zu verfolgen, was auf dem Konto passiert, wird das nicht die Leistung des EA verbessern?

Es ist eine Sache, bei jedem Tick eine Kontrolle durchzuführen, und eine ganz andere, nur dann zu kontrollieren, wenn sich etwas auf dem Konto ändert. Liege ich falsch? Der ausstehende Auftrag wurde aktiviert, wir haben Informationen darüber. Wenn eine Position geschlossen ist, können wir das Ergebnis der Schließung analysieren. In der Zeit von der Eröffnung bis zur Schließung einer Position gibt es nur wenige Kontrollen. Und im Gegensatz dazu gibt es Kontrollen auf jeder Zecke...

Hier eine weitere Frage: Um den Gewinn einer Position zu ermitteln, gibt es die Funktion PositionGetDouble(POSITION_PROFIT), aber um den Gewinn einer geschlossenen Position zu ermitteln, hatnur OrderCalcProfit() einen Haufen Parameter, die erst aus diesem Handel gewonnen werden müssen. Oder bin ich vielleicht so neu in mql5, dass ich keine richtige Lösung finden kann?

Wenn es nicht zu viel Mühe macht...

OrderCalcProfit wird nicht helfen.

Sie müssen den Durchschnittspreis aller Aufträge (in) und den Durchschnittspreis aller Aufträge (out) berechnen,

dann kann der Gewinn einer geschlossenen Position berechnet werden.

Wir werden uns die Geschichte ansehen müssen.

 
Mikalas:

OrderCalcProfit wird nicht helfen.

Sie müssen den Durchschnittspreis aller Aufträge (in) und den Durchschnittspreis aller Aufträge (out) berechnen,

Dann können wir den Gewinn einer geschlossenen Position berechnen.

Wir werden die Geschichte untersuchen müssen.

Im Prinzip verstehe ich das (auch wenn ich noch nicht weiß, wie man es macht), aber in diesem Fall ist für mich nur die letzte geschlossene Position wichtig. Offensichtlich ist dies für den Fall, dass die Stelle besetzt wurde, besser geeignet. Aber meine Aufgabe ist eine andere.

Ich habe beschlossen, meine mql5-Eulen mit martin neu zu schreiben. Er ist kontinuierlich auf dem Markt und eröffnet den nächsten Handel in Richtung der letzten Position...

Hoppla... So nützlich ist es, im Forum zu kommunizieren. Denn wenn die Position nur umschlagen kann, wenn der schwebende Auftrag aktiviert wird, oder beim Take geschlossen wird, dann ist mir die Höhe des Gewinns oder Verlusts egal. Nun, wenn das letzte Knie ein Minus ergibt, dann brauche ich nichts... Es reicht aus, den Typ einer geschlossenen Position zu kennen... Und dies kann in eine Variable auf globaler Ebene im OnTradeTransaction-Handler mit dem Transaktionstyp TRADE_TRANSACTION_DEAL_ADD und mit dem Transaktionstyp TRADE_TRANSACTION_HISTORY_ADD oder mit der Bedingung, dass PositionsTotal gleich Null ist, geschrieben werden, um die nächste erste Order der Serie zu setzen... Ich habe das für mich aufgeschrieben, damit ich es nicht vergesse :)))



 
papaklass:

...Das heißt, die Logik Ihres Algorithmus sollte auf der Änderung des Handelsumfelds basieren und nicht auf der Verarbeitung von Funktionen oder Ereignissen.

3 Die Häufigkeit der Überprüfung der Handelsumgebung (auf den Tick, auf den Balken, auf den Timer, usw.) muss der Logik Ihres TS entsprechen. Das heißt, wie schnell sollte die Änderung des Handelsumfelds verarbeitet werden? Wenn die Logik Ihres TS es erfordert, die Änderung so schnell wie möglich zu verarbeiten, dann kommen Sie nicht umhin, sie bei jedem Tick zu überprüfen...

Und wenn Ihr EA mehrwährungsfähig ist?
 
papaklass:

1. Die Funktion OrderSendAsync() wird verwendet, wenn mehrere Bestellungen EINMAL gesendet werden müssen, eine Art Stapelversand. Wenn Sie beim Stapelversand darauf warten, dass der Server auf jede Bestellung antwortet (mit der Funktion OrderSend()), kommt es zu einer erheblichen Zeitverzögerung beim Versand des gesamten Stapels. Während dieser Zeitspanne kann sich der Markt erheblich verändern! Um diese Verzögerung zu vermeiden, haben wir die Funktion OrderSendAsync() eingeführt. Das sollte Ihnen klar sein.

Wenn Sie keine Batch-Bestellungen senden müssen, ist es nicht sinnvoll, die Funktion OrderSendAsync() zu verwenden.

Die zuverlässigste Methode, um festzustellen, ob ein Auftrag, eine Order usw. ausgelöst wurde, ist die Überwachung Ihrer Handelsumgebung. - ist die Verfolgung Ihrer Handelsumgebung, nicht das Auslösen einer Funktion oder eines Ereignisses. Eine Funktion oder ein Ereignis kann funktionieren, aber das ändert nicht unbedingt Ihr Handelsumfeld. Und warum? Denn ein Fehler kann einfach während der Ausführung der Funktion auftreten.

Die Logik Ihres Algorithmus muss also auf der VARIABLENÄNDERUNG beruhen, nicht aber auf der Verarbeitung von Funktionen oder Ereignissen.

3. die Häufigkeit der Überprüfung der Handelsumgebung (auf Tick, auf Balken, durch Timer, usw.) muss der Logik Ihres TS entsprechen. Das heißt, wie schnell müssen die Veränderungen im Handelsumfeld verarbeitet werden? Wenn die Logik Ihres TS es erfordert, eine Änderung so schnell wie möglich zu verarbeiten, dann kommen Sie nicht umhin, sie bei jedem Tick zu überprüfen.

Alexander, ich danke Ihnen für Ihr Feedback.

Ich verstehe es nur, um zu verstehen, dass ich es bisher nicht brauche. Im Moment reicht mir die Funktion OrderSend aus.

2) Ja, ich stimme zu, dass der genaueste Zustand nur durch die Überwachung der gesamten Umgebung bei jedem Tick ermittelt werden kann. Aber einen solchen Event-Handler zu haben, um ihn zu ignorieren... Nun, ich experimentiere nur. Ich verstehe sehr gut Ihren Wunsch, mir zu helfen, es irgendwie zuverlässiger zu machen, aber mein Ziel ist ein anderes. Ich brauche diesen Expertenratgeber nicht dringend, und ich schreibe ihn nicht auf Bestellung.

3. Vielleicht werde ich in der endgültigen Version des EA zu den Tests auf jedem Tick zurückkehren, aber für jetzt...

Die Frage war, ob wir dem OnTradeTransaction-Ereignishandler vertrauen können, wenn die Dokumentation uns davor warnt

Außerdem können die Transaktionen bei der Übertragung vom Server zum Terminal verloren gehen.

Und in welchen Fällen ist es besser, nicht zu vertrauen, und in welchen Fällen müssen Sie es mit etwas untermauern.

Ich bin allen sehr dankbar, Vasiliy, Michael und dir, Alexander. Ich würde mich sehr freuen und danke Ihnen nochmals, wenn Sie mir weitere Gedanken mitteilen.

 
papaklass:

Das ist genau die Frage, die sowohl Vasily als auch ich selbst beantwortet haben.

Denken Sie darüber nach: Wenn die Arbeit der Funktion OnTradeTransaction() trotzdem überprüft werden muss, ist es vielleicht besser, die Handelsumgebung gleich zu überprüfen als nach der Verarbeitung von OnTradeTransaction(). Aber das ist Geschmackssache.

Und im nächsten Thread hat Renat versprochen, an der Funktion zu arbeiten und vielleicht bekommen wir in den nächsten Builds eine Verbesserung dieser Funktion.

Wir konzentrieren uns jedoch weiterhin auf die asynchrone Auftragserteilung. In diesem Fall haben wir keinen Grund, einen von Hunderten von Aufträgen zu verlieren. Und doch sagt Michael, dass er in sechs Monaten mit einer unglaublich großen Anzahl von Aufträgen nicht eine einzige Transaktion verloren hat. Und wie hoch ist die Wahrscheinlichkeit, eine Transaktion zu verlieren, wenn der Auftrag mit der Funktion OrderSend() erteilt wird?

Und wenn sich eine Verbesserung abzeichnet, ist das ein Grund mehr, sich darüber Sorgen zu machen. Oder liege ich wieder falsch?

 
denkir:
А если советник мультивалютный?


papaklass:

Es ist nicht klar, was Sie von mir hören wollen.

Ein Argument gegen das Ereignismodell...