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

Getting bid and ask from execution update

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

    Getting bid and ask from execution update

    Is there an easy way to get the current Bid and Ask price from the Account_ExecutionUpdate callback without requiring an open MarketData connection?

    When the ExecutionUpdate callback is fired, I need to know what the spread is in order to determine the appropriate price for my Stop and Target orders.....

    It seems wasteful to be holding a MarketData connection open the whole time my entry order is working just so that I've got up-to-date spread/bid/ask info when the entry fills and I need to Submit the stop and target. Is there a better way to get this info ?

    #2
    Hello reach4thelasers,


    As the Tick Replay feature nearly does what you are describing, I have submitted a feature request to the product management team for the following feature :

    This customer would like checkboxes for the Tick Replay feature to access Bid and Ask data along with the Last data
    I will follow up with more information as soon as it's available. If the feature requests already exists, a vote will be added to it.


    Please let us know if there are any other ways we can help.
    Jessica P.NinjaTrader Customer Service

    Comment


      #3
      Hey Jessica,

      I'm not sure I understand where TickReplay comes into this.... I'm working with an Addon. One which can submit orders. And when the ExecutionUpdate callback returns I need to submit my stops and targets - so need to know the Bid/Ask at that point so I can determine the spread.

      Not sure if you misunderstood me or if I'm misunderstanding you but I thought I would clarify!

      Thanks

      Kevin.

      Comment


        #4
        The misunderstanding was on my end, I thought you were describing a strategy. I will leave the feature request in place in case a similar request comes in from our user base; the vote will be coming from myself instead of you.

        Would it be possible to provide a stripped down copy of the add-on you are using to retrieve market data?
        Jessica P.NinjaTrader Customer Service

        Comment


          #5
          Hey Jessica,

          I've attached an example addon of what i'm on about.

          It adds a button to chart trader, which submits an order on GBPNZD. So put the chart on this instrument.

          The Execution update handler adds a target of 2 pips and a stop of 2 pips.

          Since the spread on this Forex pair is usually 3 pips, I need to add the spread on to the stop and subtract from the target at this point, otherwise the stop would be below the current bid price and my target would make a -1 pip loss if hit.

          You'll see on SIM101 they fill immediately on the next tick (on a live account the orders would be rejected as invalid).

          So my question is: Is there an easy way to get the Current Bid and Ask Price at this stage, so that I can determine the spread? In my implementation, I am using a MarketData connection, which I am keeping open and is constantly updating fields in my class with the bid and ask just so that I have up-to-date spread info available for when the ExecutionUpdate callback fires and its time to submit the stop and target. However, it seems inefficient and wasteful to do this - especially because its happening for every entry order I have waiting to be filled, and I'm wondering if there's any easier way to get this info from the context of an addon in the ExecutionUpdate handler.
          Attached Files

          Comment


            #6
            Thank you for this added information. Since you seem to know your way around add-on codes and WPF from the code sample you provided, the AutomationIDs for the Chart Trader ask and bid prices are

            ChartTraderControlAskPriceText

            ChartTraderControlBidPriceText

            Each is a WPF textblock, linked publicly available documentation.

            The above information was discovered using this advice, http://ninjatrader.com/support/forum...44&postcount=7 .

            Please let us know if there are any other ways we can help.
            Jessica P.NinjaTrader Customer Service

            Comment


              #7
              Thanks Jessica,

              However I don't think that will work, because I might submit an order then switch to another instrument - so although the chart trader instance will be the same, the data it is displaying is for the new instrument.

              I am stumped on this - seems like such a waste holding open a MarketData connection the whole time just so I have the bid and ask available when I finally need it. but if there's no other way I might need to live with that.

              Comment


                #8
                Thank you for helping me fully understand the situation. All the work-arounds I can imagine would require their own market data connections kept open as well.
                Jessica P.NinjaTrader Customer Service

                Comment


                  #9
                  I made an asynchronous proxy to wrap up market data access. It subscribes to the MarketData feed when it first gets accessed, and leaves the feed open for a few second after the last time it was accessed then closes it. It will start up again when it gets accessed again.

                  Might be a bit overkill but I feel happier with this approach rather than having MarketData updates ticking away constantly just waiting for an order to be filled so that I can get the spread.

                  Used as follows:

                  Code:
                  private MarketDataProxy _marketDataProxy;
                  
                  ......
                  
                  var marketDataProxy = new MarketDataProxy(instrument);
                  
                  var bid = await marketDataProxy.GetCurrentBid();
                  var ask = await marketDataProxy.GetCurrentAsk();
                  var spread = await marketDataProxy.GetSpread();
                  The await calls return instantly pretty much instantly so there's no delay in getting the data either.
                  Attached Files

                  Comment

                  Latest Posts

                  Collapse

                  Topics Statistics Last Post
                  Started by Christopher_R, Today, 12:29 AM
                  0 responses
                  9 views
                  0 likes
                  Last Post Christopher_R  
                  Started by sidlercom80, 10-28-2023, 08:49 AM
                  166 responses
                  2,235 views
                  0 likes
                  Last Post sidlercom80  
                  Started by thread, Yesterday, 11:58 PM
                  0 responses
                  3 views
                  0 likes
                  Last Post thread
                  by thread
                   
                  Started by jclose, Yesterday, 09:37 PM
                  0 responses
                  8 views
                  0 likes
                  Last Post jclose
                  by jclose
                   
                  Started by WeyldFalcon, 08-07-2020, 06:13 AM
                  10 responses
                  1,415 views
                  0 likes
                  Last Post Traderontheroad  
                  Working...
                  X