Skip to main content

Slait python driver

Project description

pymarketstore

Python driver for MarketStore

Build Status: build status

Pymarketstore can query and write financial timeseries data from MarketStore

Tested with 2.7, 3.3+

How to install

$ pip install pymarketstore

Examples

In [1]: import pymarketstore as pymkts

## query data

In [2]: param = pymkts.Params('BTC', '1Min', 'OHLCV', limit=10)

In [3]: cli = pymkts.Client()

In [4]: reply = cli.query(param)

In [5]: reply.first().df()
Out[5]:
                               Open      High       Low     Close     Volume
Epoch
2018-01-17 17:19:00+00:00  10400.00  10400.25  10315.00  10337.25   7.772154
2018-01-17 17:20:00+00:00  10328.22  10359.00  10328.22  10337.00  14.206040
2018-01-17 17:21:00+00:00  10337.01  10337.01  10180.01  10192.15   7.906481
2018-01-17 17:22:00+00:00  10199.99  10200.00  10129.88  10160.08  28.119562
2018-01-17 17:23:00+00:00  10140.01  10161.00  10115.00  10115.01  11.283704
2018-01-17 17:24:00+00:00  10115.00  10194.99  10102.35  10194.99  10.617131
2018-01-17 17:25:00+00:00  10194.99  10240.00  10194.98  10220.00   8.586766
2018-01-17 17:26:00+00:00  10210.02  10210.02  10101.00  10138.00   6.616969
2018-01-17 17:27:00+00:00  10137.99  10138.00  10108.76  10124.94   9.962978
2018-01-17 17:28:00+00:00  10124.95  10142.39  10124.94  10142.39   2.262249

## write data

In [7]: import numpy as np

In [8]: import pandas as pd

In [9]: data = np.array([(pd.Timestamp('2017-01-01 00:00').value / 10**9, 10.0)], dtype=[('Epoch', 'i8'), ('Ask', 'f4')])

In [10]: cli.write(data, 'TEST/1Min/Tick')
Out[10]: {'responses': None}

In [11]: cli.query(pymkts.Params('TEST', '1Min', 'Tick')).first().df()
Out[11]:
                            Ask
Epoch
2017-01-01 00:00:00+00:00  10.0

Client

pymkts.Client(endpoint='http://localhost:5993/rpc')

Construct a client object with endpoint.

Query

pymkts.Client#query(symbols, timeframe, attrgroup, start=None, end=None, limit=None, limit_from_start=False)

You can build parameters using pymkts.Params.

  • symbols: string for a single symbol or a list of symbol string for multi-symbol query
  • timeframe: timeframe string
  • attrgroup: attribute group string. symbols, timeframe and attrgroup compose a bucket key to query in the server
  • start: unix epoch second (int), datetime object or timestamp string. The result will include only data timestamped equal to or after this time.
  • end: unix epoch second (int), datetime object or timestamp string. The result will include only data timestamped equal to or before this time.
  • limit: the number of records to be returned, counting from either start or end boundary.
  • limit_from_start: boolean to indicate limit is from the start boundary. Defaults to False.

Pass one or multiple instances of Params to Client.query(). It will return QueryReply object which holds internal numpy array data returned from the server.

Write

pymkts.Client#write(data, tbk)

You can write a numpy array to the server via Client.write() method. The data parameter must be numpy's recarray type with a column named Epoch in int64 type at the first column. tbk is the bucket key of the data records.

List Symbols

pymkts.Client#list_symbols()

The list of all symbols stored in the server are returned.

Server version

pymkts.Client#server_version()

Returns a string of Marketstore-Version header from a server response.

Streaming

If the server supports WebSocket streaming, you can connect to it using pymkts.StreamConn class. For convenience, you can call pymkts.Client#stream() to obtain the instance with the same server information as REST client.

Once you have this instance, you will set up some event handles by either register() method or @on() decorator. These methods accept regular expressions to filter which stream to act on.

To actually connect and start receiving the messages from the server, you will call run() with the stream names. By default, it subscribes to all by */*/*.

pymkts.Client#stream()

Return a StreamConn which is a websocket connection to the server.

pymkts.StreamConn#(endpoint)

Create a connection instance to the endpoint server. The endpoint string is a full URL with "ws" or "wss" scheme with the port and path.

pymkts.StreamConn#register(stream_path, func) @pymkts.StreamConn#on(stream_path)

Add a new message handler to the connection. The function will be called with handler(StreamConn, {"key": "...", "data": {...,}}) if the key (time bucket key) matches with the stream_path regular expression. The on method is a decorator version of register.

pymkts.StreamConn#run([stream1, stream2, ...])

Start communication with the server and go into an indefinite loop. It does not return until unhandled exception is raised, in which case the connection is closed so you need to implement retry. Also, since this is a blocking method, you may need to run it in a background thread.

An example code is as follows.

import pymarketstore as pymkts

conn = pymkts.StreamConn('ws://localhost:5993/ws')

@conn.on(r'^BTC/')
def on_btc(conn, msg):
    print('received btc', msg['data'])

conn.run(['BTC/*/*'])  # runs until exception

-> received btc {'Open': 4370.0, 'High': 4372.93, 'Low': 4370.0, 'Close': 4371.74, 'Volume': 3.3880948699999993, 'Epoch': 1507299600}

Project details


Release history Release notifications | RSS feed

This version

0.1

Download files

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

Source Distribution

pyslait-0.1.tar.gz (14.5 kB view details)

Uploaded Source

Built Distribution

pyslait-0.1-py3-none-any.whl (13.0 kB view details)

Uploaded Python 3

File details

Details for the file pyslait-0.1.tar.gz.

File metadata

  • Download URL: pyslait-0.1.tar.gz
  • Upload date:
  • Size: 14.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.5.0.1 requests/2.19.1 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.30.0 CPython/3.5.0

File hashes

Hashes for pyslait-0.1.tar.gz
Algorithm Hash digest
SHA256 2b15a9b2126524fb699b9ee9ccf7c03032f7972e7dc29bf837a113dde2e71041
MD5 5b3706dbbb9436b7179c96d89ed19851
BLAKE2b-256 4a63d7455c125ed5c9f283f893dde14aa78f264e5d135c20d86d911b89b56262

See more details on using hashes here.

File details

Details for the file pyslait-0.1-py3-none-any.whl.

File metadata

  • Download URL: pyslait-0.1-py3-none-any.whl
  • Upload date:
  • Size: 13.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.5.0.1 requests/2.19.1 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.30.0 CPython/3.5.0

File hashes

Hashes for pyslait-0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 d11f45b6a1d9db5cb15854d012406f092c64f8ef5832b9d4f2011723a213e4ea
MD5 4e8847d56152f69174ee2dac9918ef1a
BLAKE2b-256 d2a0bf02ef8ab353885c07158f60b2ab4e6565bb4d0e7ba0c77e752700400d20

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