“除了好用的web量化交易工具之外,量化世界还有一些超级好用的API进阶工具。作者对以下提及的任何产品都没有既得利益,也未提供投资建议”
上一篇课堂中,我介绍了三款好用的web量化交易工具:QuantConnect,Quantopian,QuantRocket :金融小课堂 | 零基础30天API量化速成_第9讲
当你掌握了Quantopian等web工具之后,你会发现,web工具只是入门级工具,而对高级交易员来说,更方便的使用方法是直接使用IDE。
在当今的量化世界,如果您在以上web工具之外想要进一步学习,您将拥有更多的自由。
话不多说,今天就来为纯技术宅们,介绍3款更好用的API量化工具。
01 :Zipline
Github地址:https://github.com/quantopian/Zipline
Quantopian的IDE基于Zipline建立。Zipline是用于算法交易的开源回测引擎。
Zipline在本地运行,并且可以配置为在虚拟环境和Docker容器中运行。
Zipline具有Quantopian的所有功能,用户可以编写自定义数据进行回测。Zipline还提供来自回测的原始数据,从而允许用于各种用途的可视化。
Zipline在2017年停止了实时交易,但是有一个与Interactive Brokers合作的开源项目Zipline-live。它具有Zipline的许多相同功能,并提供实时交易。
以下一段简单的代码即可实现一个双重移动平均算法:
from zipline.api import order_target, record, symbol
def initialize(context):
context.i = 0
context.asset = symbol('AAPL')
def handle_data(context, data):
# Skip first 300 days to get full windows
context.i += 1
if context.i < 300:
return
# Compute averages
# data.history() has to be called with the same params
# from above and returns a pandas dataframe.
short_mavg = data.history(context.asset, 'price', bar_count=100, frequency="1d").mean()
long_mavg = data.history(context.asset, 'price', bar_count=300, frequency="1d").mean()
# Trading logic
if short_mavg > long_mavg:
# order_target orders as many shares as needed to
# achieve the desired number of shares.
order_target(context.asset, 100)
elif short_mavg < long_mavg:
order_target(context.asset, 0)
# Save values for later inspection
record(AAPL=data.current(context.asset, 'price'),
short_mavg=short_mavg,
long_mavg=long_mavg)
以上代码写好后,您可以直接使用Zipline CLI运行此算法。
从命令行运行以下命令:
$ QUANDL_API_KEY=<yourkey> zipline ingest -b quandl
$ zipline run -f dual_moving_average.py --start 2014-1-1 --end 2018-1-1 -o dma.pickle
执行后,它将会从quandl下载资产定价数据,并在指定的时间范围内通过算法将其流式传输后,将产生的DataFrame保存在dma.pickle中,您可以在Python中对其进行加载和分析。
02 :backtrader
Github地址:https://github.com/backtrader/backtrader
backtrader是一个功能丰富的Python框架,用于回测和交易。Backtrader应该是目前最流行的回测引擎之一。它是使用纯python构建的并具有在本地运行的简单高效的界面(无Web界面)。
要记住的一件事是,backtrader没有任何数据,但是您可以很容易地将自己的市场数据以csv和其他格式导入。
backtrader允许您专注于编写可重用的交易策略,指标和分析器,而不必花费时间来构建基础结构。
使用backtrader来实现SMA的代码如下:
from datetime import datetime
import backtrader as bt
class SmaCross(bt.SignalStrategy):
def __init__(self):
sma1, sma2 = bt.ind.SMA(period=10), bt.ind.SMA(period=30)
crossover = bt.ind.CrossOver(sma1, sma2)
self.signal_add(bt.SIGNAL_LONG, crossover)
cerebro = bt.Cerebro()
cerebro.addstrategy(SmaCross)
data0 = bt.feeds.YahooFinanceData(dataname='MSFT', fromdate=datetime(2011, 1, 1),
todate=datetime(2012, 12, 31))
cerebro.adddata(data0)
cerebro.run()
cerebro.plot()
BackTrader从1.5.0版本之后就具有了实时交易功能。这在算法交易者中是一个受欢迎的选择,尤其是在Zipline停止实时交易之后。
03 :IBPy
Github地址:https://github.com/blampe/IbPy
IBPy是InteractiveBroker的Trade Workstation API中独立的第三方Python Wrapper。
在IB开始为python提供官方API库之前,这是以python编写的算法中连接到TWS的的唯一方式。
目前IB已发布了官方的python SDK,虽然该库正在朝着过时的方向发展(这与python2的大量用户相关),但是仍然有大量的实时交易引擎/工具仍在使用该库。
由于它无处不在,所以最好还是学习一下该库。
如果您是新手,建议您使用IB的官方python SDK。
对于任何想学习实现API的人来说,它都是很好的学习材料。