За какой показатель не возьмись, возникает несоответствие

 

Выяснили, что MT5 транслирует стакан не полностью. Решил тогда проверить другие показатели.

Оказалось, что SYMBOL_SESSION_VOLUME и SYMBOL_SESSION_DEALS тоже возвращают что-то не то.

Скрипт, который считает количество сделок и объем за текущую сессию

int CopyTicks( const string Symb, const datetime FirstTime, MqlTick &Ticks[], const uint Flags = COPY_TICKS_ALL, const uint From = 0 )
{
  int Pos = -1;
  
  for (uint i = 1; i < INT_MAX; i <<= 1)
    if (::CopyTicks(Symb, Ticks, Flags, From, i) > 0)
      if (Ticks[0].time <= FirstTime)
      {
        const int Amount = ::ArraySize(Ticks);
        
        for (Pos = 0; Pos < Amount; Pos++)
          if (Ticks[Pos].time >= FirstTime)
            break;
          
        break;
      }
  
  return(Pos);
}

#define DAY_SECONDS (24 * 60 * 60)

ulong SessionTurnOver( int &AmountDeals, const string Symb = NULL )
{
  const datetime BeginCurrentDay = ::TimeCurrent() / DAY_SECONDS * DAY_SECONDS;
  
  MqlTick Ticks[];
  const int BeginPos = ::CopyTicks(Symb, BeginCurrentDay, Ticks, COPY_TICKS_TRADE);  

  const int Amount = ::ArraySize(Ticks);

  AmountDeals = Amount - BeginPos;
    
  ulong TurnOver = 0;
  
  for (int i = BeginPos; i < Amount; i++)
    TurnOver += Ticks[i].volume;    
    
  return(TurnOver);
}

#define PRINT(A) Print(#A + " = " + (string)A);


void OnStart( void )
{  
  int AmountDeals;
  
  PRINT(SessionTurnOver(AmountDeals))
  PRINT(::SymbolInfoDouble(_Symbol, SYMBOL_SESSION_VOLUME))
  PRINT(AmountDeals)
  PRINT(::SymbolInfoInteger(_Symbol, SYMBOL_SESSION_DEALS))

  return;
}

Результат

2016.09.05 17:47:59.878 Test (RTS-9.16,M1)      ::SymbolInfoInteger(_Symbol,SYMBOL_SESSION_DEALS) = 235005
2016.09.05 17:47:59.878 Test (RTS-9.16,M1)      AmountDeals = 210928
2016.09.05 17:47:59.878 Test (RTS-9.16,M1)      ::SymbolInfoDouble(_Symbol,SYMBOL_SESSION_VOLUME) = 642336.0
2016.09.05 17:47:59.878 Test (RTS-9.16,M1)      SessionTurnOver(AmountDeals) = 579778

Полное несоответствие. 

 
если скрипт занят и пришел тик, он его пропустит, считать надо с помощью индикатора
 
Alexander Bereznyak:
если скрипт занят и пришел тик, он его пропустит, считать надо с помощью индикатора
В даном случае это не имеет значения.
 
fxsaber:

Выяснили, что MT5 транслирует стакан не полностью. Решил тогда проверить другие показатели.

Оказалось, что SYMBOL_SESSION_VOLUME и SYMBOL_SESSION_DEALS тоже возвращают что-то не то.

Скрипт, который считает количество сделок и объем за текущую сессию

Результат

Полное несоответствие. 

У Вас каша в голове.

Прежде чем спамить, изучите что такое сессии на ФОРТС и их времена. 

 
prostotrader:

У Вас каша в голове.

Прежде чем спамить, изучите что такое сессии на ФОРТС и их времена. 

http://moex.com/s96

Продолжительность торговой сессии на рынке фьючерсов и опционов  с 10:00-18:45, 19:00-23:50 МСК.

Расписание работы:

10.00 - 14.00Основная торговая сессия (дневной Расчетный период)
14.00 - 14.05Дневная клиринговая сессия (промежуточный клиринг)
14.05 - 18.45Основная торговая сессия (вечерний Расчетный период)
18.45 - 19.00Вечерняя клиринговая сессия (основной клиринг)
19.00 - 23.50Вечерняя дополнительная торговая сессия

 

Где каша?

Московская Биржа - Рынки - О рынке
  • www.moex.com
Рынок фьючерсов и опционов – ведущая площадка по торговле производными финансовыми инструментами в России и странах Восточной Европы. Срочный рынок сочетает в себе развитую инфраструктуру, надежность и гарантии ПАО Московская Биржа, а также самые современные технологии торговли фьючерсами и опционами, проверенные в течение более чем десяти лет...
 
fxsaber:

http://moex.com/s96

Где каша?

 
prostotrader:
Давайте вы посмотрите сначала значение
Ticks[BeginPos].time
 
fxsaber:
Давайте вы посмотрите сначала значение

SYMBOL_SESSION_DEALS

Количество сделок в текущей сессии 

А Вы считаете объём в сделках (не кол-во сделок)

TurnOver += Ticks[i].volume;

 

struct MqlTick 
  { 
   datetime     time;          // Время последнего обновления цен 
   double       bid;           // Текущая цена Bid 
   double       ask;           // Текущая цена Ask 
   double       last;          // Текущая цена последней сделки (Last) 
   ulong        volume;        // Объем для текущей цены Last 
   long         time_msc;      // Время последнего обновления цен в миллисекундах 
   uint         flag           // Флаги тиков 
  };
 
prostotrader:

SYMBOL_SESSION_DEALS

Количество сделок в текущей сессии 

А Вы считаете объём в сделках (не кол-во сделок)

 

Сравниваются между собой эти два значения

PRINT(SessionTurnOver(AmountDeals))
PRINT(::SymbolInfoDouble(_Symbol, SYMBOL_SESSION_VOLUME))

и вот эти

PRINT(AmountDeals)
PRINT(::SymbolInfoInteger(_Symbol, SYMBOL_SESSION_DEALS))

Оба сравнения дают отрицательный результат - нет совпадений.

Занудство - это хорошо. Но желательно сначала прочесть код не по-диагонали. 

 
fxsaber:

Сравниваются между собой эти два значения

и вот эти

Оба сравнения дают отрицательный результат - нет совпадений.

Занудство - это хорошо. Но желательно сначала прочесть код не по-диагонали. 

:)
 
fxsaber:

Сравниваются между собой эти два значения

и вот эти

Оба сравнения дают отрицательный результат - нет совпадений.

Занудство - это хорошо. Но желательно сначала прочесть код не по-диагонали. 

Да, по диагонали, а Вы торопыга... :)

Quik

 

 

MT5


Причина обращения: