Commit Grafiği mql5-tick-compression/MQL5/Include
Yazar SHA1 Mesaj Tarih
Claude Claude
851808e478 Extend the golden self-test to all arithmetic paths
The reference stream now has three chunks: forex-like data, negative
prices on a decimal sub-grid with crossed quotes, escapes and backward
time steps, and a 250 ms time step with a 25-point price step. This
covers negative operands of division, modulo and shifts, so any
compiler difference shows up as a golden mismatch in MetaTrader.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 17:12:45 -08:00
Claude Claude
7b1a9c4271 Reject corrupt chunks early, add fuzz test
A valid payload is consumed exactly, so reading past its end or leaving
bytes unread now fails the decode immediately instead of producing
garbage until the checksum check. Headers with an impossible tick count
for their payload size or a table larger than 2^24 are rejected before
any allocation. The fuzz test mutates header and payload bytes, sizes
and lengths and requires every accepted chunk to decode to the original
ticks. The format and encoder output are unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 16:40:14 -08:00
Claude Claude
9643bc4198 Move large lookup tables to the heap, tidy MQL5 typing
Stretch, squash and rate tables become dynamic arrays so codec objects
stay small on the MQL5 stack; initialise variables the MQL5 compiler
cannot prove assigned and keep ternary branches the same type. Output
is byte-identical.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 16:25:46 -08:00
Claude Claude
5409a8d316 Use a squash lookup table, add golden-output self-test
The hot path now reads Squash() from a precomputed table (byte-identical
output). The self-test encodes a deterministic data set and compares
size and FNV-1a hash with the reference C++ build, which catches any
MQL5 compiler difference that would make archives non-portable.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 16:21:50 -08:00
Claude Claude
eab93a6655 Add MetaTrader scripts and in-terminal self-test
TkzExport writes the tick history of a symbol into a .tkz archive
(day/week/month chunks, optional per-chunk verification), TkzVerify
decodes an archive and compares it with the terminal history,
TkzToCustom loads an archive into a custom symbol, and TkzSelfTest runs
CTkzSelfTest (synthetic edge cases, real ticks, archive I/O). The
self-test class is also compiled and run by the C++ harness.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 16:16:49 -08:00
Claude Claude
b35aa8473a Harden MQL5 typing, add writer verification and append test
Make ternary branches and compound assignments type-exact for the MQL5
compiler, avoid names that clash with built-in functions (Symbol,
Digits), store min/max tick time per chunk for range queries, and let
CTkzWriter decode each chunk again and compare it with its input.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 16:11:33 -08:00
Claude Claude
56d7e4910f Add TKZ tick codec and .tkz archive classes (MQL5)
Context-mixing compressor for time_msc/bid/ask tick history:
nibble-block hashed counters, two-layer logistic mixer, two APMs and a
32-bit binary arithmetic coder. Prices are mapped to exact integers
(auto-detected digits, common price step, optional decimal sub-grid),
irregular doubles are escaped and stored raw, so the round trip is
bit-exact. Each chunk is self-contained and carries a checksum.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 16:07:23 -08:00