zipline替换命令行运行

时间:2022-03-28 14:43:14
0. 问题

我们可以通过敲命令行zipline run ...来运行我们的策略程序,那么我们可以通过代码运行我们的策略程序吗?

1. 解释

当然可以!命令行也是通过配置参数,然后通过某个入口函数把参数传进去,最终得到某个结果。因此我们要做的就是找到入口函数。查看源代码后,发现文件__main__.py里面有我们想要的东西:
zipline替换命令行运行
zipline替换命令行运行
那么问题就简单了,我们只要配置好要传的参数就好了,发现其中很多都有默认值,于是我们和它保持类似就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代码片

运行后就可以看到我们之前通过命令行看到的东西了!