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 benmarkal, Yesterday, 12:52 PM
    3 responses
    22 views
    0 likes
    Last Post NinjaTrader_Gaby  
    Started by helpwanted, Today, 03:06 AM
    1 response
    18 views
    0 likes
    Last Post sarafuenonly123  
    Started by Brevo, Today, 01:45 AM
    0 responses
    11 views
    0 likes
    Last Post Brevo
    by Brevo
     
    Started by aussugardefender, Today, 01:07 AM
    0 responses
    6 views
    0 likes
    Last Post aussugardefender  
    Started by pvincent, 06-23-2022, 12:53 PM
    14 responses
    244 views
    0 likes
    Last Post Nyman
    by Nyman
     
    Working...
    X