Announcement

Collapse

Looking for a User App or Add-On built by the NinjaTrader community?

Visit NinjaTrader EcoSystem and our free User App Share!

Have a question for the NinjaScript developer community? Open a new thread in our NinjaScript File Sharing Discussion Forum!
See more
See less

Partner 728x90

Collapse

ExitShortStopMarket after limit order, Position.MarketPosition incorrect

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    ExitShortStopMarket after limit order, Position.MarketPosition incorrect

    I have a problem in which I would like to wait until the limit entry order is filled before placing a stop exit order (since the NT8 documentation says the stop exit order will be ignored if no position exists). Assuming this documentation is accurate, it really complicates entering the stop exit order. The reason is because even though the EnterShortLimit has executed, and filled, somehow Position.MarketPosition == MarketPosition.Short still reads out as false, and my ExitShortStopMarket "if" statement never executes.

    So I see three possibilities:
    1) I execute the ExitShortStopMarket immediately after the entry. However, the entry may not have filled, so in this case it will be ignored, and this "if" Entry statement will never be entered again as shown below, because I don't want it to.
    2) I execute the ExitShortStopMarket in the "if" statement as shown in my code below, but this fails to enter because MarketPosition.Short is never turning true (even though my account reflects a successful entry).
    3) I execute the ExitShortStopMarket on every bar update after entry. I don't want to try this, because I don't know if it will repeat these stop orders throughout the rest of the bar. Is there some description of what the behavior would be if I am short 100 shares, then this executes repeatedly (multiple hundreds of times) to Exit those 100 shares in a stop order?

    Please advise how to get around this problem and get my Stop Exit orders to work! Thanks

    Code:
    protected override void OnBarUpdate()
    {
    
    if (BarsInProgress != 0) 
    	return;
    
    if (CurrentBars[0] < 1)
    	return;
    			
    			
    if (State == State.Realtime) 
    {
    	if (IsFirstTickOfBar)
    	{
    		TradeCounter = 0;	
    	}
            if (TradeCounter < 1 && Position.MarketPosition == MarketPosition.Flat) 
    	{
    		TriggerPrice = Close[0];
    		NumShares = Convert.ToInt32(PosSize/TriggerPrice);
    		TradeCounter++;
    		EnterShortLimit(NumShares, TriggerPrice);
            }
            if (TradeCounter == 1 && Position.MarketPosition == MarketPosition.Short)
    	{
    		TradeCounter++;
    		ExitShortStopMarket(NumShares, TriggerPrice*1.2);
    	}
    }
    }

    #2
    Hello dcschultz,

    You are correct. When calling an entry order the order has not been submitted, accepted, become working, filled, and then the position updated. This does take time and it is not instant.

    I would recommend placing the exit orders after the entry has filled in OnExecutionUpdate() or in OnPositionUpdate

    Below is a link to an example.


    As well as publicly available links to the help guide.

    Chelsea B.NinjaTrader Customer Service

    Comment

    Latest Posts

    Collapse

    Topics Statistics Last Post
    Started by josh18955, 03-25-2023, 11:16 AM
    6 responses
    436 views
    0 likes
    Last Post Delerium  
    Started by FAQtrader, Today, 03:35 PM
    0 responses
    5 views
    0 likes
    Last Post FAQtrader  
    Started by rocketman7, Today, 09:41 AM
    5 responses
    18 views
    0 likes
    Last Post NinjaTrader_Jesse  
    Started by frslvr, 04-11-2024, 07:26 AM
    9 responses
    127 views
    1 like
    Last Post caryc123  
    Started by selu72, Today, 02:01 PM
    1 response
    14 views
    0 likes
    Last Post NinjaTrader_Zachary  
    Working...
    X