Announcement

Collapse
No announcement yet.

Partner 728x90

Collapse

Finding out what the current stops / targets

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

    Finding out what the current stops / targets

    Hi,

    Let's imagine I have used the SetStopLoss() method at some stage to enter a stop loss level.

    Later, I want to retrieve the price of that stop loss for some task such as the idea illustrated in the following pseudo code:

    if ( market position is long )

    if ( current market price is greater than (current stop loss level + 50 ticks) )

    then set stop loss 25 ticks higher than it is now.

    Performing this would require knowledge of the value of the currently active stop loss order. How can I get it?

    cheers / Ben

    #2

    Comment


      #3
      Thanks Dierk,
      That's perfect for storing the the Order Tokens.
      How can I retrieve the price of the order at any time? eg, I would expect to be able to code something like:

      string token = profitTargetOrders[0].ToString();
      double currentOrderPrice = this.Orders[token].LimitPrice;

      Or were you expecting me to take some initiative and store the extra information from within the OrderUpdate() function?

      cheers / Ben

      Comment


        #4
        Anyway, I came up with something like this in order to store the actual order prices as well. Is the idea ok?

        Code:
            public abstract class MyStrategyBase : Strategy
            {
                public event OrderUpdateEventHandler OrderUpdate;
                
                protected override void OnOrderUpdate(IOrder order)
                {                    
                    if (OrderUpdate != null)
                        OrderUpdate(this, new OrderUpdateEventArgs(order));
                }
                
                public delegate void OrderUpdateEventHandler(object sender, OrderUpdateEventArgs e);
                public class OrderUpdateEventArgs : EventArgs
                {
                    IOrder order;
                    public OrderUpdateEventArgs(IOrder order)
                    {
                        this.order = order;
                    }
                    public IOrder Order
                    {
                        get { return order; }
                    }
                }
            }
            
            public class StopAndTargetWatcher
            {
                public Dictionary<string, IOrder> stopLossOrders = new Dictionary<string, IOrder>();
                public Dictionary<string, IOrder> profitTargetOrders = new Dictionary<string, IOrder>();
                
                public StopAndTargetWatcher(MyStrategyBase s)
                {
                    s.OrderUpdate += new MyStrategyBase.OrderUpdateEventHandler(OnOrderUpdate);
                }
                protected virtual void OnOrderUpdate(object sender, MyStrategyBase.OrderUpdateEventArgs e)
                {
                    if (e.Order.OrderState == OrderState.PendingSubmit)
                        if (e.Order.Name == "Stop Loss")
                            stopLossOrders.Add(e.Order.Token, e.Order);
                        else if (e.Order.Name == "Profit Target")
                            profitTargetOrders.Add(e.Order.Token, e.Order);
                
                    if ((e.Order.OrderState == OrderState.Cancelled)
                        || (e.Order.OrderState == OrderState.Filled)
                        || (e.Order.OrderState == OrderState.Rejected))
                    {
                        if (stopLossOrders.ContainsKey(e.Order.Token))
                            stopLossOrders.Remove(e.Order.Token);
                        if (profitTargetOrders.ContainsKey(e.Order.Token))
                            profitTargetOrders.Remove(e.Order.Token);
                    }
                }
            }

        Comment


          #5
          >> Or were you expecting me to take some initiative and store the extra information from within the OrderUpdate() function?
          correct

          Comment


            #6
            I would advise that your class replace any IOrder object held in the dictionary with each call for to OnOrderUpdate(). IOrder objects passed in are static and based on how you have coded it, any order price changes can occur but the reference you hold and check against will not necessarily represent the latest data on this order.
            RayNinjaTrader Customer Service

            Comment


              #7
              Oh yes! So glad you pointed it out.

              Comment

              Latest Posts

              Collapse

              Topics Statistics Last Post
              Started by Geovanny Suaza, 02-11-2026, 06:32 PM
              0 responses
              648 views
              0 likes
              Last Post Geovanny Suaza  
              Started by Geovanny Suaza, 02-11-2026, 05:51 PM
              0 responses
              369 views
              1 like
              Last Post Geovanny Suaza  
              Started by Mindset, 02-09-2026, 11:44 AM
              0 responses
              108 views
              0 likes
              Last Post Mindset
              by Mindset
               
              Started by Geovanny Suaza, 02-02-2026, 12:30 PM
              0 responses
              572 views
              1 like
              Last Post Geovanny Suaza  
              Started by RFrosty, 01-28-2026, 06:49 PM
              0 responses
              574 views
              1 like
              Last Post RFrosty
              by RFrosty
               
              Working...
              X