Библиотеки: MathTicker - генератор тиков в математическом режиме - страница 6

 

Обновил.

Оставил нормализацию всех тиков без отключения.

Проверил сжатие до 2 байт. Получил ускорение процентов на 10, число байт уменьшилось, но размер  ZIP архивов увеличился процента на 3.

Сжатие до 3 байт: Сжатие до  2 байт
2025.11.18 22:46:34.162    1 (EURUSD,H1)    Ticks: 47707712
2025.11.18 22:46:38.542    1 (EURUSD,H1)    Compressed size: 169378137
2025.11.18 22:46:38.542    1 (EURUSD,H1)    Compressed 2862462720 bytes into 169378137 bytes ==> 5.92%
2025.11.18 22:46:38.542    1 (EURUSD,H1)    Compress performance: 623 MB/s
2025.11.18 22:46:38.542    1 (EURUSD,H1)    Compress performance: 10.9 Ticks (millions)/sec.
2025.11.18 22:46:38.542    1 (EURUSD,H1)    Compress performance criterion: 183.9
2025.11.18 22:46:39.402    1 (EURUSD,H1)    Decompress performance: 3225 MB/s
2025.11.18 22:46:39.402    1 (EURUSD,H1)    Decompress performance: 56.4 Ticks (millions)/sec.
2025.11.18 22:46:39.402    1 (EURUSD,H1)    Decompress performance criterion: 952.6
2025.11.18 22:46:41.112    1 (EURUSD,H1)    Correct = true

для BTCUSDT

2023.12.31 23:59:58   -------------------- Statistics: --------------------
2023.12.31 23:59:58   3 bytes: 86.6%, 62644158 ticks
2023.12.31 23:59:58   4 bytes: 0.6%, 412167 ticks
2023.12.31 23:59:58   5 bytes: 12.7%, 9185484 ticks
2023.12.31 23:59:58   6 bytes: 0.0%, 15274 ticks
2023.12.31 23:59:58   11 bytes: 0.1%, 46214 ticks
2023.12.31 23:59:58   12 bytes: 0.0%, 1 ticks
2023.12.31 23:59:58   24 bytes: 0.0%, 1 ticks
2023.12.31 23:59:58   Total: 72303299 ticks, 236108596 bytes.
2023.12.31 23:59:58   Average: 3.266 bytes per tick
2023.12.31 23:59:58   UnZipped size: 236108596. Zipped size: 105802525. ZIP compression: 44.8 %
2023.12.31 23:59:58   Average: 1.463 bytes per tick

Для EURUSD

2023.12.29 23:54:58   3 bytes: 66.5%, 29801633 ticks
2023.12.29 23:54:58   4 bytes: 2.0%, 916083 ticks
2023.12.29 23:54:58   5 bytes: 31.5%, 14106637 ticks
2023.12.29 23:54:58   6 bytes: 0.0%, 25 ticks
2023.12.29 23:54:58   7 bytes: 0.0%, 8 ticks
2023.12.29 23:54:58   11 bytes: 0.0%, 800 ticks
2023.12.29 23:54:58   12 bytes: 0.0%, 3 ticks
2023.12.29 23:54:58   13 bytes: 0.0%, 4 ticks
2023.12.29 23:54:58   24 bytes: 0.0%, 1 ticks
2023.12.29 23:54:58   Total: 44825194 ticks, 163611534 bytes.
2023.12.29 23:54:58   Average: 3.65 bytes per tick
2023.12.29 23:54:58   UnZipped size: 163611534. Zipped size: 96541155. ZIP compression: 59.0 %
2023.12.29 23:54:58   Average: 2.154 bytes per tick
2025.11.18 23:27:25.777    1 (EURUSD,H1)    Compressed size: 135718404
2025.11.18 23:27:25.777    1 (EURUSD,H1)    Compressed 2862666420 bytes into 135718404 bytes ==> 4.74%
2025.11.18 23:27:25.777    1 (EURUSD,H1)    Compress performance: 764 MB/s
2025.11.18 23:27:25.777    1 (EURUSD,H1)    Compress performance: 13.4 Ticks (millions)/sec.
2025.11.18 23:27:25.777    1 (EURUSD,H1)    Compress performance criterion: 281.7
2025.11.18 23:27:26.557    1 (EURUSD,H1)    Decompress performance: 3550 MB/s
2025.11.18 23:27:26.557    1 (EURUSD,H1)    Decompress performance: 62.0 Ticks (millions)/sec.
2025.11.18 23:27:26.557    1 (EURUSD,H1)    Decompress performance criterion: 1308.8

для BTCUSDT

2023.12.31 23:59:58   -------------------- Statistics: --------------------
2023.12.31 23:59:58   2 bytes: 70.1%, 50705359 ticks
2023.12.31 23:59:58   4 bytes: 17.1%, 12350966 ticks
2023.12.31 23:59:58   5 bytes: 12.7%, 9185484 ticks
2023.12.31 23:59:58   6 bytes: 0.0%, 15274 ticks
2023.12.31 23:59:58   11 bytes: 0.1%, 46214 ticks
2023.12.31 23:59:58   12 bytes: 0.0%, 1 ticks
2023.12.31 23:59:58   24 bytes: 0.0%, 1 ticks
2023.12.31 23:59:58   Total: 72303299 ticks, 197342036 bytes.
2023.12.31 23:59:58   Average: 2.729 bytes per tick
2023.12.31 23:59:58   UnZipped size: 197342036. Zipped size: 108302550. ZIP compression: 54.9 %
2023.12.31 23:59:58   Average: 1.498 bytes per tick

Для EURUSD

2023.12.29 23:54:58   -------------------- Statistics: --------------------
2023.12.29 23:54:58   2 bytes: 66.2%, 29694779 ticks
2023.12.29 23:54:58   4 bytes: 2.3%, 1022937 ticks
2023.12.29 23:54:58   5 bytes: 31.5%, 14106637 ticks
2023.12.29 23:54:58   6 bytes: 0.0%, 25 ticks
2023.12.29 23:54:58   7 bytes: 0.0%, 8 ticks
2023.12.29 23:54:58   11 bytes: 0.0%, 800 ticks
2023.12.29 23:54:58   12 bytes: 0.0%, 3 ticks
2023.12.29 23:54:58   13 bytes: 0.0%, 4 ticks
2023.12.29 23:54:58   24 bytes: 0.0%, 1 ticks
2023.12.29 23:54:58   Total: 44825194 ticks, 134023609 bytes.
2023.12.29 23:54:58   Average: 2.99 bytes per tick
2023.12.29 23:54:58   UnZipped size: 134023609. Zipped size: 95495454. ZIP compression: 71.3 %
2023.12.29 23:54:58   Average: 2.13 bytes per tick
Попробовал разные размеры блоков с тиками.
Самое компактное при 1млн. Но не намного улучшилось
1000000
2023.12.31 23:59:58   UnZipped size: 197342036. Zipped size: 107392883. ZIP compression: 54.4 %

Проверил сжатие программой 7Zip - сжал до 104 512 642 байт нормальным сжатием - возможно лучше внешним упаковщиком пользоваться, и тестировать более быстрым тестом по не сжатому в ZIP файлом.


Решил оставить 2 байта основной версией. Вариант на 3 байта закоментировал.

 
Суть сжатия до 2 байт: время как и раньше 1 байт. Дельты Ask и Bid (от -8 до 7) беру по 4 бита и объединяю в 1 байт. Таких тиков оказалось 70% для BTCUSDT и 66% для EURUSD.
 
fxsaber #:

Вы, вроде, говорили, что увеличение файлов-клонов в RAM-диске поднимает производительность на определенных конфигурациях. В EAToMath это вынес в input-параметры. В блоге описывал.

Отказался от RAM совсем и на том 2х процессорном и на основном компе для кодинга. SSD незначительно уступает.
 
Forester #:

Проверил сжатие программой 7Zip - сжал до 104 512 642 байт нормальным сжатием - возможно лучше внешним упаковщиком пользоваться, и тестировать более быстрым тестом по не сжатому в ZIP файлом.

Для торрента буду использовать этот упаковщик.

bsc.exe e Ticks.bin Ticks.bsc

На многоядерке должен рвать остальные варианты по скорости (в обе стороны). И по компрессии показывать очень хороший результат.

High performance data compression library
  • libbsc.com
bsc and libbsc is a high-performance program and a library for lossless data compression. This is an open source, portable data compression software written in C.
 
Forester #:
Таких тиков оказалось 70% для BTCUSDT и 66% для EURUSD.

2-х байтовый вариант.

Compressed size: 151893103
Compressed 1686883560 bytes into 151893103 bytes ==> 9.00%


3-х байтовый вариант (#define compressTo3Bytes).

Compressed size: 147159391
Compressed 1686883560 bytes into 147159391 bytes ==> 8.72%


Т.е. на BTCUSD старый вариант лучше.

 
fxsaber #:

2-х байтовый вариант.


3-х байтовый вариант (#define compressTo3Bytes).


Т.е. на BTCUSD старый вариант лучше.

Значит в 4 байта отправилось больше тиков, чем в 2.

Скорость выше? Оставлю переключение по #define compressTo3Bytes

И вынесу класс в отдельную библиотеку, чтобы для других проектов включать только его, без кода и инпутов отMathTicker.

 
Forester #:

Скорость выше?

Одинаково

вынесу класс в отдельную библиотеку

Тогда хорошо бы иметь функции MqlTick[]->uchar[]->MqlTick. Подобие которых здесь. ZIP - сомнительная фича.
 
fxsaber #:

Одинаково

Тогда хорошо бы иметь функции MqlTick[]->uchar[]->MqlTick. Подобие которых здесь. ZIP - сомнительная фича.

Вместо

    int ticks_per_block=600000;
    for(int i=0;i<Amount;i++){
      if(ticks==ticks_per_block){ int l=Compressor2.Compress(Ticks,tmp,src_start,ticks); ZIPpos+=ArrayCopy(Ticks2,tmp,ZIPpos);src_start+=ticks; ticks=0;} 
      ticks++;
    }
    Compressor2.Compress(Ticks,tmp,src_start,ticks)

Используйте

    Compressor2.Compress(Ticks,tmp,0,Amount);

Получите один большой блок, первые 4 байта будут содержать размер в int.
Но это раз в 10 медленнее, чем склейка малых блоков

2025.11.19 12:10:53.236    1 (EURUSD,H1)    Ticks: 47768255
2025.11.19 12:11:28.308    1 (EURUSD,H1)    Compressed size: 135898934
2025.11.19 12:11:28.308    1 (EURUSD,H1)    Compressed 2866095300 bytes into 135898934 bytes ==> 4.74%
2025.11.19 12:11:28.308    1 (EURUSD,H1)    Compress performance: 78 MB/s
2025.11.19 12:11:28.308    1 (EURUSD,H1)    Compress performance: 1.4 Ticks (millions)/sec.
2025.11.19 12:11:28.308    1 (EURUSD,H1)    Compress performance criterion: 28.7

 
Forester #:И вынесу класс в отдельную библиотеку, чтобы для других проектов включать только его, без кода и инпутов отMathTicker.
Сделал https://www.mql5.com/ru/code/66201
TickCompressor - со сжатием 1 тика до 2-3 байт в среднем
TickCompressor - со сжатием 1 тика до 2-3 байт в среднем
  • 2025.11.19
  • www.mql5.com
Сжатие тиковых данных для хранения в компактном виде до 3,5 раз компактнее, чем .tcs файлы MQ. И для быстрой работы с ними, т.к. на чтение 3 байт тратится меньше времени, чем на 60 байт MqlTick структуры.
 
Forester #:

Но это раз в 10 медленнее, чем склейка малых блоков

Не понимаю причины. Альтернативные алгоритмы никак не зависят от размера блока.