6 releases

0.2.3 Mar 11, 2023
0.2.2 Dec 21, 2022
0.1.1 Dec 15, 2022

#1246 in Command line utilities

45 downloads per month

MIT license

244 lines

GitHub release (latest SemVer including pre-releases) GitHub Latest Version
Lib.rs Docs.rs CI Changelog Star


Library and CLI utility for parsing bi5 tick files.

Bi5 is a simple file format for storing tick data (see below). The format is used by the swiss broker dukascopy, for example.


read_bi5_file reads a single file and returns Vec<Tick> or Error.

use bi5::*;
let ticks = read_bi5_file("test/test.bi5", None).expect("Read failed");
    Some(&Tick { millisecs: 1860002, ask: 133153, bid: 133117, askvol: 0.015, bidvol: 0.02 })

Bi5 files and directories can also be read using an iterator:

use bi5::*;
let bi5 = Bi5::new("test/test.bi5", None);
for (date_time, tick) in bi5.iter().expect("File error") {
     println!("{},{}", date_time, tick);

Bi5 files only contain a time offset. If the base date/time is known it can be passed to the constructor

let bi5 = Bi5::new("test/test.bi5", Some(date_time));

catbi5 utility

The catbi5 utility dumps a bi5 tick file to stdout.

Usage: catbi5 [OPTIONS] <FILE>

  <FILE>  Filename

  -d, --date <DATE_TIME>  Date in yyyy-mm-ddTHH:MM:SS format
  -s, --sep <SEP>         Separator [default: "\t"]
  -c, --count             Count ticks
  -h, --help              Print help information
  -V, --version           Print version information

When no date is provided the base is 0000-01-01T00:00:00. Otherwise the proper datetime is calculated from the date input.

The output of catbi5 test/test.bi5 -d2022-12-16T14:00:00 -s, | head -4, for example, looks like this

2022-12-16 14:31:00.002,133117,133153,0.02,0.015
2022-12-16 14:31:00.124,133128,133133,0.000043,0.0075
2022-12-16 14:31:00.174,133067,133103,0.02,0.015

bi5 Format

A bi5 file is a lzma encoded sequence of ticks, where each tick is encoded as follows:

Field Format Description
millisecs u32 Milliseconds since epoch start
ask u32 Ask price
bid u32 Bid price
askvol f32 Ask size
bidvol f32 Bid size

All fields are big-endian encoded.


~76K SLoC