版本v1.0
以"交割单模板.csv"为例,展示了成交单分析功能, 具体的csv文件格式可以参考帖子'交割单模板.csv'
输入:交割单模板.csv 指定:
此模块会将每日的交易记录读取至DataFrame,并将信号时间前移1天来实现模拟当日成交,输出股票代码列表、起止时间和前移1日后的交易信号数据(包括日期、代码、买卖方向、成交价格和数量)。
在主函数中,首先获取当日的交易信号数据trade_data,然后针对每行交易信号数据执行买卖动作:
context.order(context.symbol(trade_data['instrument'].iloc[i]), volume, limit_price=trade_data['trade_price'].iloc[i])
即实现了对指定的一行交易记录的股票trade_data['instrument'].iloc[i],使用指定的价格trade_data['trade_price'].iloc[i],执行买入/卖出volume股的操作
# 本代码由可视化策略环境自动生成 2021年12月31日 15:44
# 本代码单元只能在可视化模式下编辑。您也可以拷贝代码,粘贴到新建的代码单元或者策略,然后修改。
# 回测引擎:初始化函数,只执行一次
def m2_initialize_bigquant_run(context):
context.trade_data = context.options['data'].read_df()
context.set_long_only()
# 设置按制定价格交易
from zipline.finance.slippage import SlippageModel
class FixedPriceSlippage(SlippageModel):
def process_order(self, data, order, bar_volume=0, trigger_check_price=0):
if order.limit is None:
price_field = self._price_field_buy if order.amount > 0 else self._price_field_sell
price = data.current(order.asset, price_field)
else:
price = order.limit
return (price, order.amount)
fix_slippage = FixedPriceSlippage()
fix_slippage._price_field_buy = 'low'
fix_slippage._price_field_sell = 'high'
fix_slippage = FixedPriceSlippage(price_field_buy='low', price_field_sell='high')
context.set_slippage(us_equities=fix_slippage)
context.set_commission(PerOrder(buy_cost=0.0003, sell_cost=0.0013, min_cost=5))
# 回测引擎:每日数据处理函数,每天执行一次
def m2_handle_data_bigquant_run(context, data):
# 按日期过滤得到今日收盘后的下单股票
trade_data = context.trade_data[context.trade_data.date == data.current_dt.strftime('%Y-%m-%d')]
for i in range(0, len(trade_data)):
volume = trade_data['trade_volume'].iloc[i]
if trade_data['side'].iloc[i] in ['BUY', '配售中签', '新股入帐']:
pass
elif trade_data['side'].iloc[i] == 'SELL':
volume = -volume
else:
print('警告:未知的买卖标志 %s' % (trade_data['side'].iloc[i]))
try:
context.order(context.symbol(trade_data['instrument'].iloc[i]), volume, limit_price=trade_data['trade_price'].iloc[i])
except Exception as e:
#print('警告:%s' % (e))
pass
# 回测引擎:准备数据,只执行一次
def m2_prepare_bigquant_run(context):
pass
# 回测引擎:每个单位时间开始前调用一次,即每日开盘前调用一次。
def m2_before_trading_start_bigquant_run(context, data):
pass
m4 = M.order_record_input.v5(
trading_records_filename='模板策略/股票/常用工具/交割单模板.csv',
date_col='成交日期',
instrument_col='证券代码',
side_col='买卖标志',
trade_price_col='成交价格',
trade_volume_col='成交数量',
m_cached=False
)
m2 = M.trade.v4(
instruments=m4.instruments_ds,
options_data=m4.trading_records_ds,
start_date='',
end_date='',
initialize=m2_initialize_bigquant_run,
handle_data=m2_handle_data_bigquant_run,
prepare=m2_prepare_bigquant_run,
before_trading_start=m2_before_trading_start_bigquant_run,
volume_limit=0,
order_price_field_buy='open',
order_price_field_sell='close',
capital_base=1000000,
auto_cancel_non_tradable_orders=True,
data_frequency='daily',
price_type='后复权',
product_type='股票',
plot_charts=True,
backtest_only=False,
benchmark='000300.HIX'
)
m5 = M.N_days_performance_statistics.v5(
backtest_ds=m2.raw_perf,
N=5
)
[2021-12-31 15:43:26.598690] INFO: moduleinvoker: order_record_input.v5 开始运行..
[2021-12-31 15:43:27.067995] INFO: moduleinvoker: order_record_input.v5 运行完成[0.469299s].
[2021-12-31 15:43:28.956159] INFO: moduleinvoker: backtest.v8 开始运行..
[2021-12-31 15:43:28.961271] INFO: backtest: biglearning backtest:V8.6.1
[2021-12-31 15:43:28.962759] INFO: backtest: product_type:stock by specified
[2021-12-31 15:43:29.040719] INFO: moduleinvoker: cached.v2 开始运行..
[2021-12-31 15:43:29.828823] INFO: backtest: 读取股票行情完成:118871
[2021-12-31 15:43:30.086147] INFO: moduleinvoker: cached.v2 运行完成[1.045433s].
[2021-12-31 15:43:30.262990] INFO: algo: TradingAlgorithm V1.8.6
[2021-12-31 15:43:30.380360] INFO: algo: trading transform...
[2021-12-31 15:43:31.186528] INFO: Performance: Simulated 45 trading days out of 45.
[2021-12-31 15:43:31.188056] INFO: Performance: first open: 2018-07-02 09:30:00+00:00
[2021-12-31 15:43:31.189213] INFO: Performance: last close: 2018-08-31 15:00:00+00:00
[2021-12-31 15:43:32.222931] INFO: moduleinvoker: backtest.v8 运行完成[3.266762s].
[2021-12-31 15:43:32.225165] INFO: moduleinvoker: trade.v4 运行完成[5.139956s].
[2021-12-31 15:43:32.242086] INFO: moduleinvoker: N_days_performance_statistics.v5 开始运行..
[2021-12-31 15:43:32.464719] INFO: moduleinvoker: N_days_performance_statistics.v5 运行完成[0.222635s].
m2.pyfolio_full_tear_sheet()
m2.risk_analyze()