Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 24

 
Alexey Viktorov:
Was wird sich dadurch ändern?
Die Erklärung zu den Handelsereignissen steht voll und ganz im Einklang mit dem Thema des Threads.
 

Ein einfacher kurzfristiger Netzwerkausfall macht die Handelslogik, die NUR auf der Beobachtung von Handelsereignissen basiert, zunichte.

Daher gehen die OnTradeTransaction-Adepten in ihrer Argumentation ein wenig zu weit.

Dies ist der Mechanismus der Handelslogik, der auf jeder Plattform treu funktioniert

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Gutes Beispiel für die Arbeit mit Limit-Orders in einem EA

fxsaber, 2017.01.02 23:12

Ich handele meistens nur mit schwebenden Aufträgen. Es findet überhaupt keine Verarbeitung statt. OrderSend gab -1 zurück (MT4 oder MT5+MT4Orders) - es hat nicht funktioniert und das ist auch gut so, denn der nächste Schritt ist immer noch die komplette Betrachtung der Handelsumgebung. Und wenn kein Auftrag vorliegt, aber einer vorliegen sollte, synchronisieren wir ihn mit dem Zustand, in dem er sich befinden sollte - der entsprechende OrderSend wird gesendet.

Bei diesem Ansatz werden alle Nuancen von Regressionen, Teilausführungen usw. berücksichtigt. Und die Umsetzung ist sehr einfach und effizient. Sie hat noch nie versagt.

Ich habe asynchrone Methoden nicht ausprobiert, und hier ist es nicht viel schwieriger, aber ich bin mir nicht sicher.

 
fxsaber:

Ein einfacher kurzfristiger Netzwerkausfall macht die Handelslogik, die NUR auf der Beobachtung von Handelsereignissen basiert, zunichte.

Daher sind die OnTradeTransaction-Adepten in ihrer Argumentation ein wenig überzogen.

Dies ist der Mechanismus der Handelslogik, der auf jeder Plattform treu funktioniert

Ja, der einzige zuverlässige Weg ist die Überprüfung des Status des Handelskontos. Alle OnTrade*-Ereignisse bieten keinen zuverlässigen Mechanismus für die Verwaltung von Handelsaufträgen.

Was die asynchronen Operationen anbelangt, so besteht ihr einziger Vorteil darin, dass Sie Handelsaufträge nacheinander senden können, ohne auf die Ergebnisse früherer Aufträge zu warten. Aber auch die Kontrolle ihrer Ausführung kann sich nicht auf Ereignisse stützen, in dieser Hinsicht gibt es keinen Unterschied zur Kontrolle der Ergebnisse synchroner Aufträge.

Der Stand des Handelskontos ist der, den wir zum Zeitpunkt der Anfrage haben (wir stellen die Anfrage selbst), wenn es Probleme mit dem Netzwerk gibt - keine große Sache, wir können Anfragen stellen, bis sich das Netzwerk erholt. Sich auf Ereignisse zu verlassen, macht uns dagegen völlig abhängig von äußeren Faktoren.

 

fxsaber:
Diese Situation bei den Handelsereignissen entspricht voll und ganz dem Thema dieses Zweigs.

Ich widerspreche dem keineswegs, ich sage nur, dass nicht viele Menschen solche Feinheiten erkennen müssen.

fxsaber:

Ein einfacher kurzfristiger Netzwerkausfall macht die Handelslogik, die NUR auf der Beobachtung von Handelsereignissen basiert, zunichte.

Deshalb gehen die OnTradeTransaction-Adepten in ihrer Argumentation ein wenig zu weit.

Dies ist der Mechanismus der Handelslogik, der auf jeder Plattform treu funktioniert

Und ich werde niemanden davon abhalten. Zumal ich es für sehr notwendig halte, die Rückkehr vom Server zu kontrollieren. Nur gibt es unterschiedliche Ansätze. Was Sie vorschlagen, ist richtig, aber kein Allheilmittel.

Vielleicht ist es mein Lebensprinzip: "Ich kann es schlechter machen, aber auf meine Weise. Wenn irgendetwas passiert, gibt es niemanden, der dafür verantwortlich ist.

 

Ich habe mich daran gewöhnt, die Funktion MarketInfo(_Symbol, MODE_TICKVALUE) für den Punktwert eines Symbols in 4 zu verwenden. Ich habe noch keine Probleme festgestellt.

Es ist nicht so einheitlich bei verschiedenen Brokern von MT5. Ich habe ein kleines Skript für EURUSD und USDJPY auf zwei verschiedenen Konten ausgeführt. Beachten Sie den Punktwert und die Vertragsgröße.

Dies ist ein Demokonto von MQ.

Dies ist einDemokonto von Just2Trade:

Hat jemand eine universelle Funktion, die den Punktwert gleich aussehen lässt?
Ich verstehe, dass die Größe eines Ticks und die Kontraktgröße berücksichtigt werden sollten, aber vielleicht auch etwas anderes?

D.h. wenn es sich um EURUSD handelt und die Einlage auf Dollar lautet - dann 1 fünfstelliger Punkt, damit es 1 Dol entspricht.

Und in welchen Fällen sollten wir SYMBOL_TRADE_TICK_VALUE_PROFIT oder SYMBOL_TRADE_TICK_VALUE_LOSS verwenden?
 
Vasiliy Pushkaryov:

Ich habe mich daran gewöhnt, die Funktion MarketInfo(_Symbol, MODE_TICKVALUE) für den Punktwert eines Symbols in 4 zu verwenden. Ich habe noch keine Probleme festgestellt.

Es ist nicht so einheitlich bei verschiedenen Brokern von MT5. Ich habe ein kleines Skript für EURUSD und USDJPY auf zwei verschiedenen Konten ausgeführt. Beachten Sie den Punktwert und die Vertragsgröße.

Dies ist ein Demokonto von MQ.

Dies ist einDemokonto von Just2Trade:

Hat jemand eine universelle Funktion, die den Punktwert gleich aussehen lässt?
Ich verstehe, dass die Größe eines Ticks und die Kontraktgröße berücksichtigt werden sollten, aber vielleicht auch etwas anderes?

D.h. wenn es sich um EURUSD handelt und die Einlage auf Dollar lautet - dann 1 fünfstelliger Pip, damit es 1 Dol entspricht.

Wann ist es richtig, SYMBOL_TRADE_TICK_VALUE_PROFIT oder SYMBOL_TRADE_TICK_VALUE_LOSS zu verwenden?
Wenn das "Nikonor's Office" eine Vertragsgröße wie im Normalfall hat, HUNDERTausende, dann wird der Punktwert wie im Normalfall sein. In der Zwischenzeit können Sie das, was Sie haben, mit 100.000 multiplizieren und bekommen, was Sie wollen.
 
Alexey Viktorov:
Wenn das "nikonor's office" eine Vertragsgröße wie die normalen hat, also hunderttausend, dann wird auch der Punktwert wie bei den normalen sein. In der Zwischenzeit können Sie das, was Sie haben, mit 100.000 multiplizieren und bekommen, was Sie wollen.
Ich habe auch einmal damit zu kämpfen gehabt. MetaQuotes-Demo hat eine Kontraktgröße; Just2Trade hat eine andere. Für Devisen ist es eine, für Aktien usw. - eine weitere für Devisen usw. Was in der Referenz steht, wie man alles berechnet, geht nicht auf, verdammt noch mal. Und der Kunde wartet schon... Wir haben uns also darauf geeinigt, dass er sie nicht automatisch berechnet, sondern einfach mit 100 multipliziert. Und nur auf seinem Just2Trade. Ich verstehe diesen Trick immer noch nicht... :((
 
Artyom Trishkin:
Ich habe auch einmal damit zu kämpfen gehabt. Bei MetaQuotes-Demo ist die Kontraktgröße eine, bei Just2Trade ist sie eine andere. Für Devisen ist es dasselbe, aber für Aktien und andere ist es anders. - für Devisen, eine für Aktien usw. Das ist unterschiedlich. Was in der Referenz steht, wie man alles berechnet, geht nicht auf, verdammt noch mal. Und der Kunde wartet schon... Wir haben uns also darauf geeinigt, dass er sie nicht automatisch berechnet, sondern einfach mit 100 multipliziert. Und nur auf seinem Just2Trade. Ich verstehe diesen Trick immer noch nicht... :((

Was könnte nicht klar sein?

Größe des Standardkontrakts = 1 Gekaufte 1000 Lots erhielten 0,00001*1000/1 = 0,01 für 1 Pip

Eine andere Option, Kontraktgröße = 100000 kaufte 0,01 Lot (100000*0,01=1000) bekam 1 Punkt 1*1000/100000 = 0,01

Dies ist für 5/3 Ziffern.

ps; Und bei Insta betrug die Größe des Standardvertrags 10000.
 
Alexey Viktorov:

Was könnte nicht klar sein?

Standardkontraktgröße = 1, 1000 Lot gekauft, 0,00001*1000/1 = 0,01 für 1 Pip erhalten

Eine andere Option, Kontraktgröße = 100000 kaufte 0,01 Lot (100000*0,01=1000) bekam 1 Punkt 1*1000/100000 = 0,01

Dies ist für 5/3 Ziffern.

ps; Und in Insta war die Standardvertragsgröße 10000.
Verstehe, ich bin einfach nicht an 3000 oder 5000 Lose gewöhnt. Daran muss ich mich gewöhnen.
 
Vasiliy Pushkaryov:
Verstehe, ich bin es einfach nicht gewohnt, 3000 oder 5000 Lose zu verwenden. Sie werden sich daran gewöhnen müssen.

Wenn Sie es nicht gewohnt sind, können Sie es wie folgt schreiben

input double               lot         =  0.1;
input int                  take        =  100;   // TakeProfit

double takePips, contract;

/*******************Expert initialization function*******************/
int OnInit()
{
   contract = 100000/SymbolInfoDouble(_Symbol, SYMBOL_TRADE_CONTRACT_SIZE)*lot;
    takePips = take*_Point;
   return(INIT_SUCCEEDED);
}/*******************************************************************/

Und in der Funktion OrderSend() senden Sie eine Vertragsvariable unabhängig von der Laune des Händlers.