Skip to main content

OpenTick SDK

Project description

OpenTick

OpenTrade Logo

OpenTick is a fast tick database for financial timeseries data, built on FoundationDB with simplified SQL layer. Here is the Python binding for OpenTick Database. For more information, please check OpenTradeSolutions website.

Features:

  • Built-in price adjustment support

  • Nanosecond support

  • Python, C++ and Go SDK

  • Both sync and async query

  • Implicit SQL statement prepare

Installation on Ubuntu

You need to use Go >=1.11 which has module support.

sudo apt install -y python
wget https://www.foundationdb.org/downloads/6.0.18/ubuntu/installers/foundationdb-server_6.0.18-1_amd64.deb
wget https://www.foundationdb.org/downloads/6.0.18/ubuntu/installers/foundationdb-clients_6.0.18-1_amd64.deb
sudo dpkg -i foundationdb-clients_6.0.18-1_amd64.deb foundationdb-server_6.0.18-1_amd64.deb
git clone https://github.com/opentradesolutions/opentick
make build
sudo apt install nodejs
sudo npm install -g pm2
pm2 start ./opentick

Note: FoundationDB runs in memory storage mode and only one process by default. You can change it to disk storage as belows:

user@host$ fdbcli
fdb> configure ssd

Fore more configuration on FoundationDB, please check FoundationDB Configuration

Usage

Python

C++

Go

Performance

100k ohlcv bar inserted in 1 second.

user@host:~/opentick/bindings/go$ go run test.go
2018/11/27 21:27:23 4.500470184s 5.500314708s 0 100000 all insert futures get done
2018/11/27 21:27:25 861.306778ms 1.139363333s 0 10 all batch insert futures get done
2018/11/27 21:27:26 805.542584ms 100000 retrieved with ranges
2018/11/27 21:27:27 1.782497936s 100000 retrieved with async
2018/11/27 21:27:29 1.424262818s 100000 retrieved with one sync
user@host:~/opentick/bindings/python$ ./test.py
2018-11-27 21:29:10.168138 0:00:00.200577 0:00:06.724991 0 100000 all insert futures get done
2018-11-27 21:29:12.192570 0:00:00.176540 0:00:00.959563 0 10 all batch insert futures get done
2018-11-27 21:29:13.460025 0:00:01.267462 100000 retrieved with ranges
2018-11-27 21:29:15.077686 0:00:01.617666 100000 retrieved with async
2018-11-27 21:29:16.777043 0:00:01.699361 100000 retrieved with one sync
user@host:~/opentick/bindings/cpp$ make test
21:33:19.231156889: 4.22207s 4.84954s 0 100000 all insert futures get done
21:33:20.172744180: 0.447708s 0.934337s 0 10 all batch insert futures get done
21:33:21.677161076: 1.49497s 100000 retrieved with async

Sample Code (C++)

  • Create database and table

    auto conn = Connection::Create("127.0.0.1", 1116);
    conn->Start();
    conn->Execute("create database if not exists test");
    conn->Use("test");
    conn->Execute(R"(
        create table if not exists test(sec int, interval int, tm timestamp,
        open double, high double, low double, close double, v double, vwap
        double, primary key(sec, interval, tm))
    )");
  • Execute

    // opentick prepares the sql statement automatically, no need to prepare explicitly
    auto fut = conn->ExecuteAsync(
            "select * from test where sec=1 and interval=?", Args{1}));
    auto res = fut->Get(); // blocked wait until execution done
    // Get last 2 rows ordering by primary key
    auto res = conn->Execute(
          "select tm from test where sec=1 and interval=? limit -2", Args{1});
  • Insert

    static const std::string kInsert =
      "insert into test(sec, interval, tm, open, high, low, close, vol, vwap) "
      "values(?, ?, ?, ?, ?, ?, ?, ?, ?)";
    std::vector<Future> futs;
    for (auto i = 0; i < 1000; ++i) {
    futs.push_back(conn->ExecuteAsync(kInsert, Args{1, 1, system_clock::now(), 2.2, 2.4, 2.1, 2.3, 1000000, 2.25}));
    }
    // wait for all insertion done
    for (auto fut : futs) fut->Get();
  • Batch Insert

    Argss argss;
    for (auto i = 0; i < 1000; ++i) {
    argss.push_back(Args{1, i, system_clock::now(), 2.2, 2.4, 2.1, 2.3, 1000000, 2.25});
    }
    conn->BatchInsert(kInsert, argss);
  • Price Adjustments

auto res = conn->Execute(
        "select tm, adj(open), adj(high), adj(low), adj(close), adj(vol) from test where sec=1 and interval=? limit -2", Args{1});

For more details, please checkout adj_test.go

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

opentick-1.0.4.tar.gz (6.5 kB view details)

Uploaded Source

Built Distribution

opentick-1.0.4-py3-none-any.whl (9.1 kB view details)

Uploaded Python 3

File details

Details for the file opentick-1.0.4.tar.gz.

File metadata

  • Download URL: opentick-1.0.4.tar.gz
  • Upload date:
  • Size: 6.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.6.8

File hashes

Hashes for opentick-1.0.4.tar.gz
Algorithm Hash digest
SHA256 e87605325272d8c39eebebf5fd4247a59b51f660f078902af53e753c0d8aa2f0
MD5 62cf608c3136f858ccc0167bcedcda3c
BLAKE2b-256 ac6c88ac285220d2541aa5f178754822393b3b938ad37d9f74bad0a4dff958e8

See more details on using hashes here.

File details

Details for the file opentick-1.0.4-py3-none-any.whl.

File metadata

  • Download URL: opentick-1.0.4-py3-none-any.whl
  • Upload date:
  • Size: 9.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.6.8

File hashes

Hashes for opentick-1.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 d7594dd9df9e60a7ce1faec3d20c053c35cfbcb64c5ab37b978c25777719db85
MD5 ec69fca748ab99bb64e30cb8afd5975a
BLAKE2b-256 24aee331f5bec10e5bea7e9b3a2b25fb4112a7a0ea59ef66dfa71babace4224e

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page