Библиотеки: TicksShort - страница 7

amrali #:
All of these libraries provide general-purpose compression similar to zip compression (with variable performance).

For specific compression of time-series data (like MQL rates/ticks), delta-encoding (+/- VLQ encoding) achieves even higher compression ratios and speeds than those libraries above.

The author's library achieves 14000 MB/s for compression (and ratio = 10.0) in my tests.

Где-нибудь считался теоретический предел сжатия тиков?

Приращения тиков распределены примерно по экспоненте, средняя получается 2 пипса.

1 бит на +-1 пипс

2 бита на +-2,3 пипса

3 бита на +-4, 5, 6, 7 пипс

...

50%*1бит+25%*2бит+12%*2бит+6%*3бит+3%*3бит+...

3 бита на ask+bid?

struct UNIT_TICKS_POS : public TICKS_SHORT
'UNIT_TICKS_POS' - struct cannot be inherited from class or interface UnitTicks.mqh 6 10        (b5699)



hini #:
'UNIT_TICKS_POS' - struct cannot be inherited from class or interface UnitTicks.mqh 6 10        (b5699)
b5716 - не воспроизводится.
// Конвертация биржевого символа в Forex-символ.
// https://www.mql5.com/ru/forum/516827/page16#comment_60590261

#property script_show_inputs

#include <fxsaber\TicksShort\Last2BidAsk.mqh> // https://www.mql5.com/ru/code/61126

input datetime inFrom = D'2026.01.01';
input string inPostFix = "_BidAsk";

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

void OnStart()
{
  const string Name = _Symbol + inPostFix;
  
  MqlTick Ticks[];

  PRINT(CopyTicksRange(_Symbol, Ticks, COPY_TICKS_ALL, inFrom * 1000));  
  PRINT(LAST2BIDASK::Convert(Ticks));

  CustomSymbolCreate(Name, NULL, _Symbol);
  SymbolSelect(Name, true);

  CustomSymbolSetInteger(Name, SYMBOL_TRADE_CALC_MODE, SYMBOL_CALC_MODE_FOREX);
  CustomSymbolSetInteger(Name, SYMBOL_TRADE_EXEMODE, SYMBOL_TRADE_EXECUTION_MARKET);  
  CustomSymbolSetInteger(Name, SYMBOL_CHART_MODE, SYMBOL_CHART_MODE_BID);  

  PRINT(CustomTicksReplace(Name, 0, LONG_MAX, Ticks));
  
  ChartOpen(Name, PERIOD_CURRENT);  
}
fxsaber #:
Спасибо. Думаю, что завтра смогу сравнить с реальной торговлей.

Если нужно игнорировать оригинальные bid/ask (строить только по last-данным), то надо добавить следующее условие в Last2BidAsk.mqh.

    for (int i = 0; i < Size; i++)
      if ((Ticks[i].bid < Ticks[i].ask) && !(Ticks[i].flags & (TICK_FLAG_BID | TICK_FLAG_ASK)))