水晶球APP 高手云集的股票社区
下载、打开
X

推荐关注更多

柴孝伟

买进就值,越来越值,时享价...


邢星

邢 星 党员,国...


石建军

笔名:石天方。中国第一代投...


揭幕者

名博


洪榕

原上海大智慧执行总裁


小黎飞刀

黎仕禹,名博


启明

私募基金经理,职业投资人


李大霄

前券商首席经济学家


桂浩明

申万证券研究所首席分析师


宋清辉

著名经济学家宋清辉官方账号...


banner

banner

金融小课堂 _ 零基础30天API量化速成_第12讲

Coinsuper官方   / 2020-01-06 14:36 发布

在量化世界,有一些不得不提一些知名broker。

 

 01 InteractiveBrokers

 

想必InteractiveBrokers的中文名大家已经很熟悉了:盈透证券,是面向活跃交易者的在线经纪交易商。

他们自1978年以来就进入了交易市场。算法交易不是IB的重点,但是多个引擎通过与他们的Trader Workstation集成提供实时交易。

我们已经在前几篇文章中多次提到IB了-它的确非常棒。

图片1.png 

 

 02 Alpaca

 

Alpaca成立于2015年,是一家新兴的免佣金经纪商,专为算法交易而设计。

图片2.png 

Alpaca还具有交易API以及多个开源工具,其中包括针对时间序列财务数据进行了优化的数据库,称为MarketStore。您可以将MarketStore视为可扩展的DataFrame服务,该服务可从系统中的任何位置以更高的可伸缩性进行访问。

如果您想立即开始使用,可以使用最新的docker映像来引导marketstore数据库实例。 

该映像已预加载了默认的mkts.yml文件,并声明VOLUME / data作为其根目录。要使用默认值运行容器:

docker run -i -p 5993:5993 alpacamarkets/marketstore:latest

如果要对实例运行自定义mkts.yml,则可以创建一个新容器,将mkts.yml文件加载到其中,然后运行:

docker create --name mktsdb -p 5993:5993 alpacamarkets/marketstore:latest

docker cp mkts.yml mktsdb:/etc/mkts.yml

docker start -i mktsdb

使用正在运行的docker实例打开会话:

marketstore connect --url localhost:5993

MarketStore是在Go(带有某些CGO)中实现的,因此您可以很轻松地从源代码构建它。您需要Go 1.11+,因为它使用go mod来管理依赖项:

go get -u github.com/alpacahq/marketstore

然后在repo目录中,使用:

make vendor

然后使用以下命令编译并安装项目二进制文件:

make install

您可以通过运行列出可用命令:

$GOPATH/bin/marketstore

您可以创建一个名为mkts.yml的新配置文件,并通过运行以下命令填充默认值:

$GOPATH/bin/marketstore init

然后使用以下命令启动marketstore:

$GOPATH/bin/marketstore start

输出大概长这样:

example@alpaca:~/go/bin/src/github.com/alpacahq/marketstore$ marketstore

I0619 16:29:30.102101    7835 log.go:14] Disabling "enable_last_known" feature until it is fixed...

I0619 16:29:30.102980    7835 log.go:14] Initializing MarketStore...

I0619 16:29:30.103092    7835 log.go:14] WAL Setup: initCatalog true, initWALCache true, backgroundSync true, WALBypass false:

I0619 16:29:30.103179    7835 log.go:14] Root Directory: /example/go/bin/src/github.com/alpacahq/marketstore/project/data/mktsdb

I0619 16:29:30.144461    7835 log.go:14] My WALFILE: WALFile.1529450970104303654.walfile

I0619 16:29:30.144486    7835 log.go:14] Found a WALFILE: WALFile.1529450306968096708.walfile, entering replay...

I0619 16:29:30.244778    7835 log.go:14] Beginning WAL Replay

I0619 16:29:30.244861    7835 log.go:14] Partial Read

I0619 16:29:30.244882    7835 log.go:14] Entering replay of TGData

I0619 16:29:30.244903    7835 log.go:14] Replay of WAL file /example/go/bin/src/github.com/alpacahq/marketstore/project/data/mktsdb/WALFile.1529450306968096708.walfile finished

I0619 16:29:30.289401    7835 log.go:14] Finished replay of TGData

I0619 16:29:30.340760    7835 log.go:14] Launching rpc data server...

I0619 16:29:30.340792    7835 log.go:14] Initializing websocket...

I0619 16:29:30.340814    7835 plugins.go:14] InitializeTriggers

I0619 16:29:30.340824    7835 plugins.go:42] InitializeBgWorkers

为了运行MarketStore,需要一个YAML配置文件。可以使用marketstore初始化来创建默认文件(mkts.yml)。该文件的路径通过--config标志传递给start命令,或者默认情况下,它将在运行该目录的目录中找到一个名为mkts.yml的文件,默认的mkts.yml长这样:

root_directory: data

listen_port: 5993

log_level: info

queryable: true

stop_grace_period: 0

wal_rotate_interval: 5

stale_threshold: 5

enable_add: true

enable_remove: false

在计算机上启动MarketStore实例后,就可以读取和写入报价数据了。

pymarketstore是标准的python客户端。请确保在另一个终端中,您正在运行marketstore。

数据查询:

import pymarketstore as pymkts

param = pymkts.Params('BTC', '1Min', 'OHLCV', limit=10)

cli = pymkts.Client()

reply = cli.query(param)

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

写入数据:

import numpy as np

import pandas as pd

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

cli.write(data, 'TEST/1Min/Tick')

# Out[10]: {'responses': None}

cli.query(pymkts.Params('TEST', '1Min', 'Tick')).first().df()

展示:

                           Ask

Epoch

2017-01-01 00:00:00+00:00  10.0

MarketStore是专为解决可扩展性问题而设计的,该可扩展性问题涉及处理算法交易回测,图表绘制和分析价格历史中使用的大量金融市场数据,这些数据跨越时间横截面,并且粒度降低到包含所有美国股票或爆发的加密货币领域。

如果您正在努力管理大量HDF5文件,那么这是解决您问题的完美解决方案。MarketStore使您可以通过网络查询DataFrame内容,而延迟时间与磁盘上的本地HDF5文件一样低,并且将新数据追加到末尾的速度比DataFrame快两个数量级。这是因为存储格式针对数据类型和用例以及现代文件系统/硬件特性进行了优化。

 

“声明:作者对以提及的任何产品都没有既得利益,也未提供投资建议”