Eddy Posted December 1, 2010 Report Share Posted December 1, 2010 Ich arbeite mich gerade in das Orderhandlimg anhand der Beispielstrategie "SampleOnOrderUpdate" ein. Hier wird eine Order angelegt mit 'entryOrder = EnterLong(1, "MyEntry"); Eine Stop- und Target-Order werden angelegt mit: protected override void OnExecution(IExecution execution) { /* We advise monitoring OnExecution to trigger submission of stop/target orders instead of OnOrderUpdate() since OnExecution() is called after OnOrderUpdate() which ensures your strategy has received the execution which is used for internal signal tracking. */ if (entryOrder != null && entryOrder.Token == execution.Order.Token) { if (execution.Order.OrderState == OrderState.Filled || execution.Order.OrderState == OrderState.PartFilled || (execution.Order.OrderState == OrderState.Cancelled && execution.Order.Filled > 0)) { // Stop-Loss order 4 ticks below our entry price stopOrder = ExitLongStop(0, true, execution.Order.Filled, execution.Order.AvgFillPrice - 4 * TickSize, "MyStop", "MyEntry"); // Target order 8 ticks above our entry price targetOrder = ExitLongLimit(0, true, execution.Order.Filled, execution.Order.AvgFillPrice + 8 * TickSize, "MyTarget", "MyEntry"); // Resets the entryOrder object to null after the order has been filled or partially filled if (execution.Order.OrderState != OrderState.PartFilled) { entryOrder = null; } } } // Reset our stop order and target orders' IOrder objects after our position is closed. if ((stopOrder != null && stopOrder.Token == execution.Order.Token) || (targetOrder != null && targetOrder.Token == execution.Order.Token)) { if (execution.Order.OrderState == OrderState.Filled || execution.Order.OrderState == OrderState.PartFilled) { stopOrder = null; targetOrder = null; } } } Wenn die Entry-Order ausgeführt wird, erscheint im NT-ControlCenter unter State der Status 'Filled' und kurz danach die Stop- und die Target Order. Die Stop-Order hat den Status 'Accepted',die Target-Order den Status 'Working'. Soweit habe ich das verstanden. Unklar ist mir aber noch: 1. Wenn jetzt eine der beiden Orders ausgeführt wird, wird die andere automatisch gelöscht, obwohl sie nicht als OCO-Order (im NT-ControlCenter) markiert wurden. Ist das immer so (im 'Advanced Order Handling') oder passiert das nur unter bestimmten Bedingungen? Wenn man eine SetStopLoss-Order (entspricht ExitLongStop) und eine SetProfitTarget-Order (entspricht ExitLongLimit) auf die gleiche Entry-Order absetzt, werden sie als OCO-Order ins System gestellt. 2. Kann man im 'Advanced Order Handling' überhaupt OCO-Orders erzeugen? Eddy Quote Link to comment Share on other sites More sharing options...
DarthTrader Posted December 2, 2010 Report Share Posted December 2, 2010 Ich arbeite mich gerade in das Orderhandlimg anhand der Beispielstrategie "SampleOnOrderUpdate" ein. Hier wird eine Order angelegt mit 'entryOrder = EnterLong(1, "MyEntry"); Eine Stop- und Target-Order werden angelegt mit: stopOrder = ExitLongStop(0, true, execution.Order.Filled, execution.Order.AvgFillPrice - 4 * TickSize, "MyStop", "MyEntry"); targetOrder = ExitLongLimit(0, true, execution.Order.Filled, execution.Order.AvgFillPrice + 8 * TickSize, "MyTarget", "MyEntry"); Hi Eddy, schau Dir mal die Orders genau an. Sobald Du dasselbe Entrysignal verwendest, werden die Orders intern gemanaged.Soll heißen, wird der Stop erreicht, wird das Target aus dem Markt genommen. Allerdings musst Du aufpassen, wenn Du mit ExitLong oder ExitShort aus dem Markt gehst. Hierbei musst Du selbstfür das löschen der anderen Order(s) sorgen, bspw. mit CancelOrder(targetOrder). In der OnOrderUpdate-Methodekann man diesen Status dann abfragen. Beste GrüßeDarthTrader Quote Link to comment Share on other sites More sharing options...
Eddy Posted December 2, 2010 Author Report Share Posted December 2, 2010 Hi Eddy, schau Dir mal die Orders genau an. Sobald Du dasselbe Entrysignal verwendest, werden die Orders intern gemanaged.Soll heißen, wird der Stop erreicht, wird das Target aus dem Markt genommen. Allerdings musst Du aufpassen, wenn Du mit ExitLong oder ExitShort aus dem Markt gehst. Hierbei musst Du selbstfür das löschen der anderen Order(s) sorgen, bspw. mit CancelOrder(targetOrder). In der OnOrderUpdate-Methodekann man diesen Status dann abfragen. Beste GrüßeDarthTrader Das verstehe ich nicht ganz. Warum muss ich mit CancelOrder(targetOrder) die Order löschen, wenn doch das System die Orders intern managed? Quote Link to comment Share on other sites More sharing options...
DarthTrader Posted December 2, 2010 Report Share Posted December 2, 2010 Nur wenn Du mit ExitLong() direkt rausgehst, musst Du Dich selbst drum kümmern.Bei ExitLongLimit (...., 'FromEntrySignal') zum Beispiel funktioniert das interne Handling,wegen der Entry-Name Verlinkung. Aber es kann bspw. sein, dass Du einen Time-Stop einbaust ... sagen wir um 20:00 sollen alle Orders geschlossen werden. Dann musst Du vorher alle noch im Markt befindlichenOrders selber canceln mit CancelOrder(Order1), usw. Stell Dir vor Du handelst im M15 und hast CalculateOnBarClose = true gesetzt, das bedeutet,das nur zum Ende der Bar, also alle 15 Minuten der Code durchlaufen wird. Gehst Du jetzt um20:00 raus, weil dein Time-Stop erreicht wurde und in den selben 15 Minuten wird Dein im Marktbefindlicher Exit getriggert, so bist Du wieder Markt, mit einer gegensätzlichen Position. Hast Du weder Time-Stop noch andere Exits, die bei jedem Bar geprüft werden, so kannst Duauch sicher nur mit ExitLongLimit / ExitLongStop arbeiten. NT übernimmt dann das komplette Orderhandling für Dich. In meinem Blog (über tom-next verlinkt) habe ich auch einige wichtige Punkte dazu in Artikeln verfasst. Beste GrüßeDT Quote Link to comment Share on other sites More sharing options...
Eddy Posted December 2, 2010 Author Report Share Posted December 2, 2010 Vielen Dank für die Info. Dein Blog ist auch sehr interessant. Eddy Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.