Jump to content
Tom Next - Daytrading Community

Orderhandling


Eddy

Recommended Posts

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

Link to comment
Share on other sites

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 selbst

für das löschen der anderen Order(s) sorgen, bspw. mit CancelOrder(targetOrder). In der OnOrderUpdate-Methode

kann man diesen Status dann abfragen.

 

Beste Grüße

DarthTrader

Link to comment
Share on other sites

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 selbst

für das löschen der anderen Order(s) sorgen, bspw. mit CancelOrder(targetOrder). In der OnOrderUpdate-Methode

kann man diesen Status dann abfragen.

 

Beste Grüße

DarthTrader

 

 

Das verstehe ich nicht ganz. Warum muss ich mit CancelOrder(targetOrder) die Order löschen, wenn doch das System die Orders intern managed?

Link to comment
Share on other sites

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 befindlichen

Orders 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 um

20:00 raus, weil dein Time-Stop erreicht wurde und in den selben 15 Minuten wird Dein im Markt

befindlicher 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 Du

auch 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üße

DT

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...