Announcement

Collapse
No announcement yet.

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 NullPointStrategies, 03-13-2026, 05:17 AM
    0 responses
    89 views
    0 likes
    Last Post NullPointStrategies  
    Started by argusthome, 03-08-2026, 10:06 AM
    0 responses
    152 views
    0 likes
    Last Post argusthome  
    Started by NabilKhattabi, 03-06-2026, 11:18 AM
    0 responses
    80 views
    0 likes
    Last Post NabilKhattabi  
    Started by Deep42, 03-06-2026, 12:28 AM
    0 responses
    53 views
    0 likes
    Last Post Deep42
    by Deep42
     
    Started by TheRealMorford, 03-05-2026, 06:15 PM
    0 responses
    63 views
    0 likes
    Last Post TheRealMorford  
    Working...
    X