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 Mindset, 04-21-2026, 06:46 AM
    0 responses
    88 views
    0 likes
    Last Post Mindset
    by Mindset
     
    Started by M4ndoo, 04-20-2026, 05:21 PM
    0 responses
    135 views
    0 likes
    Last Post M4ndoo
    by M4ndoo
     
    Started by M4ndoo, 04-19-2026, 05:54 PM
    0 responses
    68 views
    0 likes
    Last Post M4ndoo
    by M4ndoo
     
    Started by cmoran13, 04-16-2026, 01:02 PM
    0 responses
    119 views
    0 likes
    Last Post cmoran13  
    Started by PaulMohn, 04-10-2026, 11:11 AM
    0 responses
    69 views
    0 likes
    Last Post PaulMohn  
    Working...
    X