Go Back   NinjaTrader Support Forum > Application Technical Support > Automated Trading

Automated Trading Support for automated trading systems using NinjaScript. Support for our ATI (Automated Trading Interface) used to link an external application such as TradeStation and eSignal to NinjaTrader.

Reply
 
Thread Tools Display Modes
Old 02-08-2009, 03:28 PM   #1
unSane
Junior Member
 
Join Date: Sep 2008
Posts: 7
Thanks: 0
Thanked 0 times in 0 posts
Default Using EnterLongStop() with existing short position

Forgive me if I'm being dense, but how do you do this elegantly?

Let's say I have a short position with a stop loss and profit target.

I get a buy signal on the current bar and want to go long if price rises above a certain trigger price.

However if I use EnterLongStop() the order is ignored because of the internal rules (since I have existing buy orders -- the stop loss and profit target -- in the same direction).

It works if I buy at market but I don't want to buy at market.

Clearly, I can submit an order to close the short position, and then submit my EnterLongStop() order on the next bar, but this means there's a delay in submitting it.

What is the cleanest way of exiting a short position with a stoploss and entering a buy stop order on the same bar?
unSane is offline  
Reply With Quote
Old 02-09-2009, 02:18 AM   #2
NinjaTrader_Ben
NinjaTrader Customer Service
 
NinjaTrader_Ben's Avatar
 
Join Date: May 2008
Location: Denver, CO
Posts: 3,157
Thanks: 0
Thanked 3 times in 3 posts
Default

Hello,

Try submitting an opposing order, like you are doing already, then enter a new order immediately.

If you post your code I can help you more.
NinjaTrader_Ben is offline  
Reply With Quote
Old 02-09-2009, 06:57 AM   #3
unSane
Junior Member
 
Join Date: Sep 2008
Posts: 7
Thanks: 0
Thanked 0 times in 0 posts
Default

OK, here's a very simplified version of the code which exhibits the behavior.

Let's say the strategy is short, with a stop loss and profit target and I am working on 15m bars.

On bar N I get a long signal.

The strategy closes the short position via ExitShort().

However, EnterLongStop() is ignored because of the existing pending stop/profit target orders to close the short position and which will not be cancelled until the next bar. Of course EnterLong() works fine because it is a market order.

In order to EnterLongStop() I have to set a flag and wait until the next bar to enter, which delays entry by 15 mins to bar N+1.

I coded a workaround using ExitShortStop() and ExitShortLimit() orders to manually run the profit target and stop loss routines, but as you guys are no doubt aware it gets complicated as you have to make sure they cancel each other and so on. I would much rather use the built-in code for this.

What is the cleanest way to submit the EnterLongStop() order and close the existing short position on the same bar?

Code:
        protected override void Initialize()
        {
            CalculateOnBarClose = true;
			
			Add( AcmeSwing( SwingPercent ));
			
			SetProfitTarget( CalculationMode.Percent, profitTarget );
			SetStopLoss( CalculationMode.Percent, stopLoss );
			
			TraceOrders = true;
        }

        /// <summary>
        /// Called on each bar update event (incoming tick)
        /// </summary>
        protected override void OnBarUpdate()
        {
			thisPivotType  = (int) AcmeSwing( SwingPercent ).AcmePivotType[0];
			thisPivotPrice = AcmeSwing( SwingPercent ).AcmePivotPrice[0];
						
			// Entries
			if( thisPivotType == pivotTypeHigherLow || thisPivotType == pivotTypeLowerLow )
			{
				ExitShort();
				EnterLongStop( High[0], "Bullish reversal" );
			}
			
			if( thisPivotType == pivotTypeLowerHigh || thisPivotType == pivotTypeHigherHigh )
			{
				ExitLong();
				EnterShortStop( Low[0], "Bearish reversal" );
			}			
        }
unSane is offline  
Reply With Quote
Old 02-09-2009, 08:15 AM   #4
NinjaTrader_Josh
NinjaTrader Product Manager
 
NinjaTrader_Josh's Avatar
 
Join Date: May 2007
Location: Denver, CO
Posts: 17,460
Thanks: 1
Thanked 171 times in 82 posts
Default

The flexibility you are seeking is done through manually controlling stop/target orders. This is done through the use of IOrders and monitoring ExitShortStop() and ExitShortLimit() not through Set() methods.

In terms of the delay, run with CalculateOnBarClose = false. In backtesting, this will always be the case. You need to wait for the bar close before you can do anything.
NinjaTrader_Josh is offline  
Reply With Quote
Old 02-10-2009, 12:18 AM   #5
Newshues
Member
 
Join Date: Jan 2009
Posts: 40
Thanks: 0
Thanked 0 times in 0 posts
Default

I think the cleanest way to do what you want is to move the SetProfitTarget() and SetStopLoss() from the Initialize section to the OnBarUpdate section.

This will allow you to tie the same signal name to all the orders - your position and the corresponding stop and profit orders.

SetProfitTarget(string fromEntrySignal, CalculationMode mode, double value)

fromEntrySignal
The entry signal name. This ties the profit target exit to the entry and exits the position quantity represented by the actual entry.



Basically you need to tie the all the orders together so they are identified as a group rather than individual orders. You do that in ninja with the signal names.

As far as I understand things that should do what you want it to do.
Newshues is offline  
Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
..."And close any open short/long position" behealed Automated Trading 11 02-23-2009 11:52 AM
Long ? short when flat vs. position ju1234 Strategy Development 1 11-21-2008 08:16 AM
Check if last position was long or short!? whitegun Automated Trading 1 02-07-2008 04:30 PM
Strange Behaviour with EnterLongLimit and Short Position simone Strategy Development 21 12-01-2007 01:48 AM
Problems adding contracts to existing position/strategy Ouiji Miscellaneous Support 1 05-10-2007 02:10 PM


All times are GMT -6. The time now is 07:40 AM.

FULL RISK DISCLOSURE: Futures trading contains substantial risk and is not for every investor. An investor could potentially lose all or more than the initial investment. Risk capital is money that can be lost without jeopardizing ones financial security or lifestyle. Only risk capital should be used for trading and only those with sufficient risk capital should consider trading. Past performance is not necessarily indicative of future results. View Full Risk Disclosure.