[][src]Crate pikmin

An extensible downloader for obtaining trade data simultaneously from exchanges' API.

pikmin is a trade (execution) data downloader for crypto-currency exchanges, such as BitMex, bitFlyer, Liquid, etc. This library provides not only some pre-composed downloaders, but also ability to build a custom downloader for users' demand.

A downloader is composed of ID and Writer. An ID specifies the point where to start downloading, and a Writer outputs trade data to external storage.

There are some pre-composed downloaders in downloader module.


A simple downloader for Liquid with writing to stdout. This program creates /tmp/qn-progress.txt for recording progress, so delete it if you want to run again from the starting point.

use std::path::PathBuf;
use std::thread;
use std::time::Duration;

use chrono::offset::TimeZone;
use chrono::Utc;

use pikmin::downloader::Downloader;
use pikmin::FileRecorder;
use pikmin::LiquidDownloader;
use pikmin::StdOutWriter;

fn main() {
    // by using thread, you can run multiple downloaders
    let liquid = thread::spawn(move || {
        while {
            // download data from 2019-01-01T01:01:01Z to 2019-01-01T01:03:01Z
            // output the downloaded data to standard out (println!)
            let downloader = LiquidDownloader::new(
                Utc.ymd(2019, 1, 1).and_hms(1, 1, 1),
                Utc.ymd(2019, 1, 1).and_hms(1, 3, 1),

            // Locate progress file to `/tmp/qn-progress.txt`.
            // You can control the starting point of downloading
            // by preparing this file before you run.
            let mut recorder = FileRecorder::new(PathBuf::from("/tmp/qn-progress.txt"));

            // write out to standard out. simple writer for debugging
            let mut writer = StdOutWriter::default();

            println!("start QnDownloader");

            // run!
            match downloader.run(&mut writer, &mut recorder) {
                Ok(_) => {
                Err(e) => {
                    println!("error: {}", e);
        } {}

    match liquid
            Ok(_) => println!("finish all"),
            Err(_) => println!("threading error"),


pub use self::downloader::bf::BfDownloader;
pub use self::downloader::bitmex::MexDownloader;
pub use self::downloader::liquid::LiquidDownloader;
pub use self::recorder::file::FileRecorder;
pub use self::writer::db_mysql::MySQLWriter;
pub use self::writer::stdout::StdOutWriter;



Composed downloaders.


Error utilities.


Recorders to record the progress on external storage to resume.


Writers to output the trade data into external storage.