Login Page - Create Account

Support Board


Date/Time: Tue, 26 Nov 2024 12:43:57 +0000



Post From: Problem with market depth desapearing

[2015-03-30 22:20:49]
Sierra Chart Engineering - Posts: 104368
Post #19 has been updated. You cannot have any definite knowledge of the problem without looking at the Sierra Chart code which is actually quite simple.

Please explain to me how this is an IB problem when everyone else's DOM is working exactly as it should be.
This is a very vague and indirect, and impossible to directly defend against. What counts is the data being transmitted by TWS, and the logical processing of the data according to the TWS documentation.

Seriously, are you trying to tell me that even in the workaround case (false) that totals drawing on top of other DOM levels is an IB issue?
Yes of course. And we will say it again, the problem is on the Interactive Brokers side. It is caused by out of order data because of faulty transmission of market depth data from TWS.

If there is a problem/bug on our side, do you see it below. This is how the market depth with Interactive Brokers is handled when not clearing out of order prices:

UpdateDOMByCommand(BuySellEnum Side, int Level, int Operation, float Price, t_Volume Size, bool ClearOutOfOrderPrices)
{
  if (Level < 0 || Level >= MAX_NUM_DOM_LEVELS)
  {
    _ASSERT(0);
    return;
  }
  
  s_SCDomStructure* DomToUpdate;
  
  if (Side == BSE_BUY)
    DomToUpdate = m_BasicData.BidDOM;
  else if (Side == BSE_SELL)
    DomToUpdate = m_BasicData.AskDOM;
  else
    return;
  
  switch (Operation)
  {
  case INSERT_DOM:
    {
      s_SCDomStructure TempDomStructure = DomToUpdate[Level];
      for (int UpdateLevel = Level; UpdateLevel < MAX_NUM_DOM_LEVELS - 1;
        UpdateLevel++)
      {
        if (TempDomStructure.Price == 0)
          break; // no more DOM Levels
        
        Swap(DomToUpdate[UpdateLevel + 1], TempDomStructure);
      }
      
      DomToUpdate[Level].Price = Price;
      DomToUpdate[Level].Volume = Size;
    }
    break;
    
  case UPDATE_DOM:
    {
      DomToUpdate[Level].Price = Price;
      DomToUpdate[Level].Volume = Size;
    }
    break;
    
  case DELETE_DOM:
    {
      // Clear the single level
      memset(&DomToUpdate[Level], 0, sizeof(s_SCDomStructure));
      
      for (int UpdateLevel = Level; UpdateLevel < MAX_NUM_DOM_LEVELS - 1; ++UpdateLevel)
      {
        DomToUpdate[UpdateLevel] = DomToUpdate[UpdateLevel+1];
        //
        //if (DomToUpdate[UpdateLevel + 1].Price == 0)
        //  break; // no more DOM Levels
      }
      
      //if (DomToUpdate[MAX_NUM_DOM_LEVELS - 1].Price != 0)
      {
        DomToUpdate[MAX_NUM_DOM_LEVELS - 1].Price = 0;
        DomToUpdate[MAX_NUM_DOM_LEVELS - 1].Volume = 0;
      }
    }
    break;
    }
}

Sierra Chart Support - Engineering Level

Your definitive source for support. Other responses are from users. Try to keep your questions brief and to the point. Be aware of support policy:
https://www.sierrachart.com/index.php?l=PostingInformation.php#GeneralInformation

For the most reliable, advanced, and zero cost futures order routing, *change* to the Teton service:
Sierra Chart Teton Futures Order Routing
Date Time Of Last Edit: 2015-03-30 22:22:58