金融小課堂 | 零基礎(chǔ)30天API量化速成_第12講

“聲明:作者對(duì)以下提及的任何產(chǎn)品都沒(méi)有既得利益,也未提供投資建議”

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

?01?

InteractiveBrokers

想必InteractiveBrokers的中文名大家已經(jīng)很熟悉了:盈透證券,是面向活躍交易者的在線經(jīng)紀(jì)交易商。

他們自1978年以來(lái)就進(jìn)入了交易市場(chǎng)。算法交易不是IB的重點(diǎn),但是多個(gè)引擎通過(guò)與他們的Trader Workstation集成提供實(shí)時(shí)交易。

我們已經(jīng)在前幾篇文章中多次提到IB了-它的確非常棒。

?02?

Alpaca

Alpaca成立于2015年,是一家新興的免傭金經(jīng)紀(jì)商,專(zhuān)為算法交易而設(shè)計(jì)。

Alpaca還具有交易API以及多個(gè)開(kāi)源工具,其中包括針對(duì)時(shí)間序列財(cái)務(wù)數(shù)據(jù)進(jìn)行了優(yōu)化的數(shù)據(jù)庫(kù),稱為MarketStore。您可以將MarketStore視為可擴(kuò)展的DataFrame服務(wù),該服務(wù)可從系統(tǒng)中的任何位置以更高的可伸縮性進(jìn)行訪問(wèn)。

如果您想立即開(kāi)始使用,可以使用最新的docker映像來(lái)引導(dǎo)marketstore數(shù)據(jù)庫(kù)實(shí)例。?

該映像已預(yù)加載了默認(rèn)的mkts.yml文件,并聲明VOLUME / data作為其根目錄。要使用默認(rèn)值運(yùn)行容器:

dockerrun?-i?-p5993:5993alpacamarkets/marketstore:latest

如果要對(duì)實(shí)例運(yùn)行自定義mkts.yml,則可以創(chuàng)建一個(gè)新容器,將mkts.yml文件加載到其中,然后運(yùn)行:

dockercreate --name mktsdb -p 5993:5993 alpacamarkets/marketstore:latestdockercp mkts.yml mktsdb:/etc/mkts.ymldockerstart -i mktsdb

使用正在運(yùn)行的docker實(shí)例打開(kāi)會(huì)話:

marketstoreconnect--urllocalhost:5993

MarketStore是在Go(帶有某些CGO)中實(shí)現(xiàn)的,因此您可以很輕松地從源代碼構(gòu)建它。您需要Go 1.11+,因?yàn)樗褂胓o mod來(lái)管理依賴項(xiàng):

goget-u?github.com/alpacahq/marketstore

然后在repo目錄中,使用:

makevendor

然后使用以下命令編譯并安裝項(xiàng)目二進(jìn)制文件:

makeinstall

您可以通過(guò)運(yùn)行列出可用命令:

$GOPATH/bin/marketstore

您可以創(chuàng)建一個(gè)名為mkts.yml的新配置文件,并通過(guò)運(yùn)行以下命令填充默認(rèn)值:

$GOPATH/bin/marketstore?init

然后使用以下命令啟動(dòng)marketstore:

$GOPATH/bin/marketstore?start

輸出大概長(zhǎng)這樣:

example@alpaca:~/go/bin/src/github.com/alpacahq/marketstore$ marketstoreI061916:29:30.1021017835log.go:14] Disabling"enable_last_known"feature until it is fixed...I061916:29:30.1029807835log.go:14] Initializing MarketStore...I061916:29:30.1030927835log.go:14] WAL Setup: initCatalogtrue, initWALCachetrue, backgroundSynctrue, WALBypassfalse:I061916:29:30.1031797835log.go:14] Root Directory: /example/go/bin/src/github.com/alpacahq/marketstore/project/data/mktsdbI061916:29:30.1444617835log.go:14] My WALFILE: WALFile.1529450970104303654.walfileI061916:29:30.1444867835log.go:14] Found a WALFILE: WALFile.1529450306968096708.walfile, entering replay...I061916:29:30.2447787835log.go:14] Beginning WAL ReplayI061916:29:30.2448617835log.go:14] Partial ReadI061916:29:30.2448827835log.go:14] Entering replay of TGDataI061916:29:30.2449037835log.go:14] Replay of WAL file /example/go/bin/src/github.com/alpacahq/marketstore/project/data/mktsdb/WALFile.1529450306968096708.walfile finishedI061916:29:30.2894017835log.go:14] Finished replay of TGDataI061916:29:30.3407607835log.go:14] Launching rpc data server...I061916:29:30.3407927835log.go:14] Initializing websocket...I061916:29:30.3408147835plugins.go:14] InitializeTriggersI061916:29:30.3408247835plugins.go:42]?InitializeBgWorkers

為了運(yùn)行MarketStore,需要一個(gè)YAML配置文件??梢允褂胢arketstore初始化來(lái)創(chuàng)建默認(rèn)文件(mkts.yml)。該文件的路徑通過(guò)--config標(biāo)志傳遞給start命令,或者默認(rèn)情況下,它將在運(yùn)行該目錄的目錄中找到一個(gè)名為mkts.yml的文件,默認(rèn)的mkts.yml長(zhǎng)這樣:

root_directory: datalisten_port: 5993log_level: infoqueryable: truestop_grace_period: 0wal_rotate_interval: 5stale_threshold: 5enable_add: trueenable_remove: false

在計(jì)算機(jī)上啟動(dòng)MarketStore實(shí)例后,就可以讀取和寫(xiě)入報(bào)價(jià)數(shù)據(jù)了。

pymarketstore是標(biāo)準(zhǔn)的python客戶端。請(qǐng)確保在另一個(gè)終端中,您正在運(yùn)行marketstore。

數(shù)據(jù)查詢:

import pymarketstore as pymktsparam = pymkts.Params('BTC', '1Min', 'OHLCV', limit=10)cli = pymkts.Client()reply = cli.query(param)reply.first().df()

數(shù)據(jù)展示:

Out[5]:OpenHighLowCloseVolumeEpoch2018-01-1717:19:00+00:0010400.0010400.2510315.0010337.257.7721542018-01-1717:20:00+00:0010328.2210359.0010328.2210337.0014.2060402018-01-1717:21:00+00:0010337.0110337.0110180.0110192.157.9064812018-01-1717:22:00+00:0010199.9910200.0010129.8810160.0828.1195622018-01-1717:23:00+00:0010140.0110161.0010115.0010115.0111.2837042018-01-1717:24:00+00:0010115.0010194.9910102.3510194.9910.6171312018-01-1717:25:00+00:0010194.9910240.0010194.9810220.008.5867662018-01-1717:26:00+00:0010210.0210210.0210101.0010138.006.6169692018-01-1717:27:00+00:0010137.9910138.0010108.7610124.949.9629782018-01-1717:28:00+00:0010124.9510142.3910124.9410142.392.262249

寫(xiě)入數(shù)據(jù):

importnumpyasnpimportpandasaspddata= 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()

展示:

AskEpoch2017-01-0100:00:00+00:0010.0

MarketStore是專(zhuān)為解決可擴(kuò)展性問(wèn)題而設(shè)計(jì)的,該可擴(kuò)展性問(wèn)題涉及處理算法交易回測(cè),圖表繪制和分析價(jià)格歷史中使用的大量金融市場(chǎng)數(shù)據(jù),這些數(shù)據(jù)跨越時(shí)間橫截面,并且粒度降低到包含所有美國(guó)股票或爆發(fā)的加密貨幣領(lǐng)域。

如果您正在努力管理大量HDF5文件,那么這是解決您問(wèn)題的完美解決方案。MarketStore使您可以通過(guò)網(wǎng)絡(luò)查詢DataFrame內(nèi)容,而延遲時(shí)間與磁盤(pán)上的本地HDF5文件一樣低,并且將新數(shù)據(jù)追加到末尾的速度比DataFrame快兩個(gè)數(shù)量級(jí)。這是因?yàn)榇鎯?chǔ)格式針對(duì)數(shù)據(jù)類(lèi)型和用例以及現(xiàn)代文件系統(tǒng)/硬件特性進(jìn)行了優(yōu)化。

以上

作者:修恩

推薦閱讀

金融小課堂 | 零基礎(chǔ)30天API量化速成_第1講

金融小課堂 | 零基礎(chǔ)30天API量化速成_第2講

金融小課堂 | 零基礎(chǔ)30天API量化速成_第3講

金融小課堂 | 零基礎(chǔ)30天API量化速成_第4講

金融小課堂 | 零基礎(chǔ)30天API量化速成_第5講

金融小課堂 | 零基礎(chǔ)30天API量化速成_第6講

金融小課堂 | 零基礎(chǔ)30天API量化速成_第7講

金融小課堂 | 零基礎(chǔ)30天API量化速成_第8講

金融小課堂 | 零基礎(chǔ)30天API量化速成_第9講

金融小課堂 | 零基礎(chǔ)30天API量化速成_第10講

金融小課堂 | 零基礎(chǔ)30天API量化速成_第11講

『聲明:修恩筆記公眾號(hào)所有文章僅供參考,不構(gòu)成任何投資建議策略。

據(jù)說(shuō)長(zhǎng)得好看的人都點(diǎn)了??

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容