OpenTick SDK
Project description
OpenTick
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
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file opentick-1.1.0.tar.gz
.
File metadata
- Download URL: opentick-1.1.0.tar.gz
- Upload date:
- Size: 7.4 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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 57ce3c7894f8c803d9cc960c0ab4bff18a9e6361995db7b5561b7351a5859cce |
|
MD5 | b371d963d391f06bb7997316dd0e0cd6 |
|
BLAKE2b-256 | 8fbc4e79707d146d9b362ad7dd490fbfd2422b9d5715a18fab899eded773aa47 |
File details
Details for the file opentick-1.1.0-py3-none-any.whl
.
File metadata
- Download URL: opentick-1.1.0-py3-none-any.whl
- Upload date:
- Size: 11.4 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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0df9697b14becc4dbcfc7024eba6c925f1c9df02a3b409c6cd7f0e1f62a6be99 |
|
MD5 | 6cfb259a468eed38fc38cbbfd25eef99 |
|
BLAKE2b-256 | 18074dab8dfb6949b85905934020cefff0f5e33966e2e8c0c8b1a1258ad078f1 |