0. 问题
我们可以通过敲命令行zipline run ...
来运行我们的策略程序,那么我们可以通过代码运行我们的策略程序吗?
1. 解释
当然可以!命令行也是通过配置参数,然后通过某个入口函数把参数传进去,最终得到某个结果。因此我们要做的就是找到入口函数。查看源代码后,发现文件__main__.py
里面有我们想要的东西:
那么问题就简单了,我们只要配置好要传的参数就好了,发现其中很多都有默认值,于是我们和它保持类似就OK了。
2. 代码示例
from zipline.api import order, record, symbol
def initialize(context):
pass
def handle_data(context, data):
order(symbol('AAPL'), 10)
record(AAPL=data.current(symbol('AAPL'), 'price'))
if __name__ == '__main__':
from zipline.utils.run_algo import _run
import pandas as pd
from zipline.utils.calendars import get_calendar
import os
with open('buy_apple.py', 'r') as f:
algotext = f.read()
trading_calendar = get_calendar('NYSE')
perf = _run(
initialize=None,
handle_data=None,
before_trading_start=None,
analyze=None,
algofile=None,
algotext=algotext,
defines=[],
data_frequency='daily',
capital_base=10e6,
data=None,
bundle='quandl',
bundle_timestamp=pd.Timestamp.utcnow(),
start=pd.Timestamp('2017-1-1', tz='UTC'),
end=pd.Timestamp('2017-1-3', tz='UTC'),
output='test.pickle',
trading_calendar=trading_calendar,
print_algo=False,
metrics_set='default',
local_namespace=None,
environ=os.environ,
)
print perf代码片
运行后就可以看到我们之前通过命令行看到的东西了!