Samstag, 20. Februar 2010

NinjaTrader spezifische Order-Handling-Methoden

In diesem Artikel dieser Serie möchte ich gerne auf Methoden von NinjaTrader eingehen, die Event-Gesteuert von der NT-API beim Abarbeiten einer Order aufgerufen werden. Konkret handelt es sich dabei um die Methoden ...
  • OnExecution (IExecution execution)
  • OnPositionUpdate (IPosition position)
  • OnOrderUpdate (IOrder order)
Die Methoden Initialize() sowie OnBarUpdate() werde ich nicht näher erläutern. Diese sollten zur Standardausrüstung einer jeden Strategie gehören. Interessant an dieser Stelle ist vielleicht, dass ich meine Entries und Exits in eigenen Methoden ausgelagert habe, um den Code lesbarer und pflegbarer zu gestalten. Beiden Methoden werden entsprechend der Bedingungen, ob ein Signal vorliegt oder bereits ein Trade eingegangen wurde aus OnBarUpdate() heraus aufgerufen.

Aber zurück zu den Event-Methoden, die ich in jeder Strategie überschrieben habe, um die eigenen Bedürfnisse meiner Strategien besser umsetzen zu können. Ich werde wieder den entscheidenden Code posten und bei Bedarf noch weitere Erklärungen hinzufügen:















OnExecution
ist die zentrale Methode, wenn ich Stops oder Limits setzen möchte. Erst hier kann ich 100%ig sicher sein, dass die Order ausgeführt wurde. Wie groß die Position ist, kann ich über execution.Order.Filled herausfinden, denn auch ein Partial-Fill wird hier mit behandelt. Entsprechend muss ich das im Order-Objekt prüfen. Da ich mir zu jeder Order ein entsprechendes Order-Objekt im Code halte, sind diese Prüfungen recht trivial gehalten. Im NinjTrader Helpguide oder im Forum gibt es weitere Beispiele hierzu.












Nach jedem Positionswechsel können hier Variablen zurückgesetzt oder entsprechend initialisiert werden. So kann hier bspw. auch recht einfach ein Wechsel der Entries erfolgen. Möchte ich nach einem Long-Signal nur noch Short handeln, kann ich hier im Long-Fall eine bool'sche Variable mit true belegen und die entsprechende Short-Variable mit false. Der umgekehrte Fall gilt analog. Als kleines 'Schmankerl', lasse ich mir hier die aktuelle Position noch im Chart als Textstring mit ausgeben.



























Dieser, vielleicht interessantesten und wahrscheinlich auch wichtigsten Methode ist sehr viel Beachtung zu schenken. Ich muss gestehen, anfangs habe ich sie schlicht ignoriert, bis wiederholt Fehler bei meinen Stops und Limits aufgetreten sind und unerwünschte Orders abgesetzt wurden. Woran lag das? Nun, wenn ich mit eigenen Exit-Triggern per Market-Order aus dem Trade gehe, aber zusätzlich noch Stop-Orders aktiviert im Markt habe, muss ich diese erste Canceln. Das kann ich zwar über CancelOrder(IOrder) mit Hilfe der API hinbekommen, aber ob und wann mein Stop-Order wirklich gecancelt ist, weiß ich erst, wenn ich es in OnOrderUpdate prüfe. Erst wenn die Prüfung Erfolg hatte (siehe kommentierten Code), sollte ich wirklich per Market-Order rausgehen. Im Normalfall merke ich davon nichts und meine Strategie funktioniert auch ohne obige Implementierung. Allerdings hatte ich ab und zu den Fall das ich in schnellen Marktphasen einen TimedExit ausgeführt hatte und anschließend durch meine Stop-Order wieder in der Gegenrichtung im Markt war. Dies kommt selten vor, führt aber zu unerwünschten Ergebnissen.


Weiterhin kann ich in OnOrderUpdate noch ein Rejection-Handling für Orders einbauen, dazu aber in weiteren Artikeln mehr.

Beste Grüße
DarthTrader

hbreuer-trading.de - NinjaTrader Programmierung, Seminare und automatische Handelssysteme

Keine Kommentare:

Kommentar veröffentlichen

Hinweis: Nur ein Mitglied dieses Blogs kann Kommentare posten.