Organisation des Auftragszyklus - Seite 2

 
Andrey Khatimlianskii:

Denn der Preis wird sich bewegen, und bei jedem neuen Aufruf von OnTick wird die Bedingung für eine neue Änderung der gleichen, in der Liste an erster Stelle stehenden, Reihenfolge erfüllt sein. Vor allem, wenn die Änderung nur 5 Sekunden dauert ;)

Auch hier wird die Frage der Relevanz angesprochen. Eine Bestellung ist immer auf dem neuesten Stand. Die anderen werden auf dem neuesten Stand sein. Bei Ihrer Variante hingegen sind alle Aufträge nicht auf dem neuesten Stand.

Ein solches "Backbone" würde die Logik eines EA, der mit mehr als einem Auftrag arbeitet, durchbrechen.

Welchen Sinn hätte es, wenn es den Systemen mit einem Auftrag keinen Vorteil brächte und die anderen verderben würde?

Ich würde gerne verstehen, was Sie meinen, aber ich kann es nicht. Ich sehe kein Problem mit dem Grundsatz "Wenn die Wartezeit abgelaufen ist, aktualisiere die Handelsumgebung".

Es ist richtig, vor der Bearbeitung von Aufträgen nach Volumen und/oder Abstand zum Preis zu sortieren. Wir sollten aber nicht davon ausgehen, dass jeder, der den Code aus dem Forum kopiert, ihn auch umsetzt.
In diesem Sinne ist mein Code sicherer.

Nun, es wurde nicht für Neulinge geschrieben. Sie und ich haben es hier sehr gut besprochen - kein Wasser.

 
fxsaber:

Auch hier stellt sich die Frage der Relevanz. Eine Bestellung ist immer auf dem neuesten Stand. Die anderen werden nach Möglichkeit auf dem neuesten Stand sein. Sie haben die Möglichkeit, dass alle Bestellungen nicht auf dem neuesten Stand sind.

Tatsächlich - um wie viel?

  • 2 Käufe offen, Bid 1,2345, SL von beiden bei 1,2344
  • Nächster Tick: ein Bid liegt bei 1,2350, der SL der ersten Order wird auf 1,2349 verschoben, der zweite bleibt bei 1,2344
  • Ohne einen Tick abzuwarten: Das Bid liegt bei 1,2375, der SL der ersten Order ist auf 1,2374 verschoben, die zweite Order ist noch da
  • Ein weiterer Schritt: Das Bid liegt bei 1,2376, der SL der ersten Order wird auf 1,2375 verschoben, die zweite Order bleibt, wo sie ist
  • Der Kurs ist auf 1,2300 zurückgekehrt, die SL beider Orders (1,2374 und 1,2344) haben ausgelöst [nehmen wir der Einfachheit halber an, dass der Kurs die 1,2300 nicht sprunghaft erreicht hat (dann wären beide Stops auf dieses Niveau gerutscht), sondern der Kurs allmählich gestiegen ist, aber unser EA war zu sehr mit Änderungen beschäftigt und hat es nicht geschafft, zu diesem Zeitpunkt etwas zu tun].
  • Ergebnis: +30 Pips auf den ersten Auftrag und +0 Pips auf den zweiten
In meinem Szenario wären beide SLs bei 1,2375 oder im schlimmsten Fall bei 1,2374 geändert worden. Fazit: +30 Pips bei beiden Aufträgen.


fxsaber:

Ich bin froh, dass ich verstehe, was Sie meinen, aber es funktioniert nicht. Ich sehe kein Problem mit dem Prinzip "Wenn die Wartezeit abgelaufen ist, aktualisiere die Handelsumgebung".

Ihr Algorithmus ist auf die erste Reihenfolge in der Liste fixiert, das ist alles.

In manchen Situationen kann sich dies nachteilig auf das System auswirken (ich habe es in der Praxis erlebt).

 
Andrey Khatimlianskii:

Tatsächlich - um wie viel?

  • 2 Käufe offen, Bid 1,2345, SL von beiden bei 1,2344
  • Nächster Tick: ein Bid liegt bei 1,2350, der SL der ersten Order wird auf 1,2349 verschoben, der zweite bleibt bei 1,2344
  • Ohne einen Tick abzuwarten: Das Bid liegt bei 1,2375, der SL der ersten Order ist auf 1,2374 verschoben, die zweite Order ist noch da
  • Ein weiterer Schritt: Das Bid liegt bei 1,2376, der SL der ersten Order wird auf 1,2375 verschoben, die zweite Order bleibt, wo sie ist
  • Der Kurs ist auf 1,2300 zurückgekehrt, die SL beider Orders (1,2374 und 1,2344) haben ausgelöst [der Einfachheit halber nehmen wir an, dass der Kurs nicht sprunghaft 1,2300 erreicht hat (dann wären beide Stops auf dieses Niveau gerutscht), sondern der Kurs allmählich gestiegen ist, aber unser EA war zu sehr mit Modifikationen beschäftigt und hatte zu diesem Zeitpunkt keine Zeit, etwas zu tun].
  • Ergebnis: +30 Pips auf den ersten Auftrag und +0 Pips auf den zweiten

In meiner Variante wären beide SLs bei 1,2375 oder schlimmstenfalls bei 1,2374 geändert worden. Fazit: +30 Pips bei beiden Aufträgen.

Bei jedem Schritt in Ihrem Beispiel sollte der TS wissen, wo seine Aufträge sein sollten, ohne dass ein Handelsauftrag vorliegt. D.h. der TS kann nicht in irgendeiner Weise daran gebunden werden, wo seine Aufträge jetzt sind. Es geht nur darum, zu berechnen, wo sie stehen sollten, und die Handelsumgebung mit dem zu synchronisieren, was es durch Handelsaufträge berechnet hat.


In Ihrem Beispiel hängt das Ergebnis des TS jedoch davon ab, ob OnTick den Höchstkurs erreicht hat oder nicht. Und die richtige TS sollte genau dem entsprechen. Sie sieht, dass ein solcher Kurs zustande gekommen ist (auch wenn der OnTick mit ihm verpasst wurde), und daher sollten ihre SLs entsprechend platziert werden. Und die Synchronisierung wird zu 100 % funktionieren.

Und ich verstehe nicht, warum Sie immer wieder sagen, dass die zweite stillsteht. Auch ohne Synchronisationslogik wird sie auf dieselbe Weise wie in Ihrer Variante geändert. Es ist nicht so, dass OnTick beim Ereignis NewTick aufgerufen wird, sondern als normale interne Funktion.

 
fxsaber:

Bei jedem Schritt in Ihrem Beispiel muss der TS wissen, wo seine Aufträge ohne einen Handelsauftrag stehen sollen. Das heißt, der TS kann in keiner Weise mit dem aktuellen Stand der Aufträge verknüpft werden. Es geht nur darum, zu berechnen, wo sie stehen sollten, und die Handelsumgebung mit dem zu synchronisieren, was es durch Handelsaufträge berechnet hat.

Ja, sie weiß es. Aber sie hat keine Zeit, sie zu synchronisieren - während eine Änderung durchläuft, bewegt sich der Preis weiter und eine neue berechnete Bedingung sagt ihr, dass sie die erste Bestellung erneut ändern muss. Und das passiert ständig.


fxsaber:

In Ihrem Beispiel hängt das Ergebnis von TC davon ab, ob OnTick den Höchstkurs erreicht hat oder nicht. Und die richtige TS sollte genau davor liegen. Sie sieht, dass ein solcher Preis war (auch wenn der OnTick damit verpasst wurde), was bedeutet, dass ihre SLs entsprechend platziert werden sollten. Und die Synchronisierung wird zu 100 % funktionieren.

Das ist nicht der Fall (in dem Beispiel wurde keine SL-Stufe berechnet).

Und die Synchronisierung wird die Aufgabe nicht erfüllen, da sie keine Zeit hat (siehe oben).


fxsaber:

Und ich verstehe nicht, warum Sie immer wieder sagen, dass die zweite stillsteht. Auch ohne Synchronisationslogik wird sie auf dieselbe Weise wie in Ihrer Variante geändert. Es ist nicht so, dass OnTick beim Ereignis NewTick aufgerufen wird, sondern als normale interne Funktion.

Wie immer habe ich es verstanden.

Der Preis hat sich jedoch bereits geändert, während die Änderung im Gange war, und der erzwungene Aufruf von OnTick arbeitet bereits mit dem neuen Preis, während der zweite Auftrag auf dem ursprünglichen Niveau bleibt.

Es liegt kein Fehler vor. Vielleicht zu spezifisch für Ihre (aber wieder ganz real, aus dem Leben) Situation.

 
Andrey Khatimlianskii:

Sie weiß es, sie weiß es. Aber er hat keine Zeit, sich zu synchronisieren - während eine Änderung durchläuft, bewegt sich der Preis weiter, und die neue berechnete Bedingung veranlasst ihn, den ersten Auftrag erneut zu ändern. Und das passiert ständig.

Das Beispiel, das Sie sich ausgedacht haben, bringt uns in dieser Logik keine zusätzlichen Verluste. Lassen Sie mich Ihnen ein Beispiel geben.


Nehmen wir an, wir verfolgen BuyLimits nach der Aufwärtsbewegung, um beim notwendigen Pullback zu eröffnen. Fast Lucky-TC. Wenn wir jedes Mal einen Berg von Limits mitschleppen, werden wir keinen Pullback mit Ihrer Option erwischen.


Es ist schon seltsam, Handelsaufträge auf der Grundlage einer veralteten Handelsumgebung zu erteilen. Aber Sie verteidigen (wie ich) hartnäckig eine andere Sichtweise.

 
fxsaber:

Nun, es ist schon seltsam, Handelsaufträge auf der Grundlage eines veralteten Handelsumfelds zu erteilen. Aber Sie verteidigen (wie ich) hartnäckig eine andere Sichtweise.

Man muss sich für das kleinere Übel entscheiden.

Das Beispiel mit dem hinter dem Kurs liegenden Limit ist natürlich besser in der Variante "1 EA = 1 Order in jede Richtung" umzusetzen.

Im Allgemeinen ist es jedoch besser, alle Aufträge unter Kontrolle zu halten.

 
Andrey Khatimlianskii:

Aber im Allgemeinen ist es richtiger, alle Ihre Aufträge unter Kontrolle zu halten.

Das heißt, Sie sind nicht damit einverstanden, dass der TS nur mit dem aktuellen Handelsumfeld arbeiten soll.

 
fxsaber:

Das heißt, Sie sind nicht damit einverstanden, dass der TS nur mit dem aktuellen Handelsumfeld arbeiten soll.

Wenn Sie dafür die Kontrolle über alle TK-Aufträge opfern müssen - unbedingt.

Stellen Sie sich vor: Sie haben eine Flotte von vier Lastwagen. Jeder von ihnen befördert eine wertvolle Fracht von A nach B. Sie müssen die Route überwachen.
Was wäre Ihnen lieber: jede Minute mit einem von ihnen in Kontakt zu sein oder alle 2 Minuten mit allen?

Im zweiten Fall ist die Verspätung etwas größer, und alle vier müssen möglicherweise einen kleinen Umweg nehmen, wenn sie nicht rechtzeitig weitergeleitet werden. Aber insgesamt wird es für das Unternehmen besser sein, als einen Lkw zu behalten und die anderen drei zu verlieren.

 
Andrey Khatimlianskii:

Wenn Sie dafür die Kontrolle über alle TK-Aufträge opfern müssen, unbedingt.

Stellen Sie sich vor: Sie haben eine Flotte von 4 Lastwagen. Jeder von ihnen befördert eine wertvolle Fracht von A nach B. Sie müssen die Route kontrollieren.
Würden Sie lieber jede Minute mit einem von ihnen in Kontakt sein oder alle 2 Minuten mit allen?

Im zweiten Fall ist die Verspätung etwas größer, und alle vier müssen möglicherweise einen kleinen Umweg machen, wenn Sie sie nicht rechtzeitig weiterleiten können. Aber insgesamt ist es für das Geschäft besser, als einen Lkw auszugeben und die anderen drei zu verlieren.

+1.

Vielleicht wäre die neue Idee nicht mit dem OOP-Ansatz entstanden, bei dem eine Schleifenanalogie mit Order Brute Force in einer managerähnlichen Entität versteckt ist, die, anstatt OrderModify direkt aufzurufen, einen Änderungsbefehl (mit allen Parametern) erzeugt und in eine Warteschlange stellt, die dann abgearbeitet wird. Die Idee besteht darin, die Verantwortung (die in diesem Code in eine einzige Schleife gezwängt ist) zwischen einer Entität, die die Umgebung analysiert, und einer Entität, die auf der Grundlage der Analyse Aktionen durchführt, zu teilen.

 
Stanislav Korotky:

Vielleicht würde diese Idee bei einem OOP-Ansatz nicht auftauchen, wenn ein Analogon der Schleife mit der Auftragssuche in einer Entität wie dem Manager verborgen ist, der, anstatt OrderModify direkt aufzurufen, einen Änderungsbefehl (mit allen Parametern) erzeugt und ihn in eine Warteschlange stellt, die dann verarbeitet wird. Die Idee ist, die Verantwortung (die in diesem Code in eine einzige Schleife gezwängt ist) zwischen einem Objekt der Analyse der Umgebung und einem Objekt der Durchführung von Aktionen auf der Grundlage der Analyse zu teilen.

Die einzige Möglichkeit, eine solche Situation zu vermeiden, ist die Verwendung asynchroner Aufträge.

Andernfalls gäbe es immer noch eine Schleife über die Liste der auszuführenden Befehle, die in Wirklichkeit eine Schleife über Aufträge ist.

Nur in einer Warteschlangensituation müssten Sie noch Vorkehrungen treffen, um einen älteren nicht ausgeführten Auftrag, der sich auf einen Auftrag bezieht, durch einen neueren zu ersetzen. Andernfalls könnte die Warteschlange überlaufen, und die Aufträge würden aus der Warteschlange herausgeschickt werden - das wäre überflüssig.