Announcement

Collapse
No announcement yet.

Partner 728x90

Collapse

Exit Trade if unprofitable after N days

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

    #16
    Hello Sweet&Sour,

    Thank you for your response.

    You have already detailed that information and that would not provide the needed behavior. Please refer to my notes below as you will need to implement more logic to correctly exit the trade as needed.

    First, your exit condition needs to be the following and only the following.
    Code:
    if (BarsSinceEntryExecution() >= 4 && Position.MarketPosition != MarketPosition.Flat && Position.GetUnrealizedProfitLoss(PerformanceUnit.Currency, Close[0]) <= 0)
    You then need to actually exit the position. Cancelling an order does not exit a position. Please see the full condition and action together here.
    Code:
                    if (BarsSinceEntryExecution() >= 4 && Position.MarketPosition != MarketPosition.Flat && Position.GetUnrealizedProfitLoss(PerformanceUnit.Currency, Close[0]) <= 0)
                    {
                        BackBrush = Brushes.LightSalmon;                
    					SubmitOrderUnmanaged(0, OrderAction.Sell, OrderType.Market, Position.Quantity, 0, 0, "", "Close After Loss");
                    }
    Now that your OnBarUpdate is properly set up let's tackle OnOrderUpdate(). Each of your Order objects you create needs to have logic to properly set them to null. For example:
    Code:
            protected override void OnOrderUpdate(Order order, double limitPrice, double stopPrice, int quantity, int filled, double averageFillPrice, OrderState orderState, DateTime time, ErrorCode error, string comment)
            {          
                if (order.Name == "LongMarket" && entryOrder == null)
                    entryOrder = order;
                if (entryOrder != null && entryOrder.OrderState == OrderState.Cancelled)
                    entryOrder = null;
    			
    			if (order.Name == "Profit Taker" && profitTakerOrder == null)
                    profitTakerOrder = order;
    			if (profitTakerOrder != null && profitTakerOrder.OrderState == OrderState.Cancelled)
                    profitTakerOrder = null;
    			if (order.Name == "Stop Loss" && stopLossOrder == null)
                    stopLossOrder = order;
    			if (stopLossOrder != null && stopLossOrder.OrderState == OrderState.Cancelled)
                    stopLossOrder = null;
            }
    Next we take on the OnExecutionUpdate(). Here you only need to implement the following code in BOLD.
    Code:
            protected override void OnExecutionUpdate(Execution execution, string executionId, double price, int quantity, MarketPosition marketPosition, string orderId, DateTime time)
            {
                if (execution.Order.OrderState != OrderState.Filled)
                    return;
    			
    [B]			if (execution.Order.Name == "Close After Loss")
    			{
    				CancelOrder(profitTakerOrder);
    				CancelOrder(stopLossOrder);
    			}[/B]
    Now your exit will work as needed. Please see my attach screenshot proving this resolves the matter.

    I highly recommend reviewing the documentation on Order objects, OnOrderUpdate(),
    OnExecutionUpdate(), and Unmanaged Order Approach.

    Please let me know if you have any questions.
    Attached Files

    Comment

    Latest Posts

    Collapse

    Topics Statistics Last Post
    Started by argusthome, 03-08-2026, 10:06 AM
    0 responses
    116 views
    0 likes
    Last Post argusthome  
    Started by NabilKhattabi, 03-06-2026, 11:18 AM
    0 responses
    61 views
    0 likes
    Last Post NabilKhattabi  
    Started by Deep42, 03-06-2026, 12:28 AM
    0 responses
    40 views
    0 likes
    Last Post Deep42
    by Deep42
     
    Started by TheRealMorford, 03-05-2026, 06:15 PM
    0 responses
    43 views
    0 likes
    Last Post TheRealMorford  
    Started by Mindset, 02-28-2026, 06:16 AM
    0 responses
    82 views
    0 likes
    Last Post Mindset
    by Mindset
     
    Working...
    X