本文向大家详细介绍如何在BigQuant平台开发传统的择时策略,旨在帮助大家对BigQuant平台回测有初步印象。
金叉死叉策略其实就是双均线策略。策略思想是:当短期均线上穿长期均线时,形成金叉,此时买入股票。当短期均线下穿长期均线时,形成死叉,此时卖出股票。研究表明,双均线系统虽然简单,但只要严格执行,也能长期盈利。
首先,我们选择要交易的股票,用instruments表示,然后确定回测的开始时间和结束时间。记住,如果是单只股票,那么instruments就是含有一个元素的列表,如果是多只股票,instruments就是含有多个元素的列表。
# 选择投资标的
instruments = ['600519.SHA']
# 设置回测开始时间
start_date = '2012-05-28'
# 设置回测结束时间
end_date = '2017-07-18'
然后,编写策略初始化部分。
# initialize函数只会运行一次,在第一个日期运行,因此可以把策略一些参数放在该函数定义
def initialize(context):# 设置手续费,买入时万3,卖出是千分之1.3,不足5元以五元计context.set_commission(PerOrder(buy_cost=0.0003, sell_cost=0.0013, min_cost=5))# 短均线参数context.short_period = 5# 长均线参数context.long_period = 50
接着,编写策略主体部分。
# handle_data函数会每个日期运行一次,可以把行情数据理解成K线,然后handle_data函数会在每个K
# 线上依次运行
def handle_data(context, data):# 当运行的K线数量还达不到长均线时直接返回if context.trading_day_index < context.long_period:return # 投资标的k = instruments[0]sid = context.symbol(k)# 最新价格price = data.current(sid, 'price') # 短周期均线值short_mavg = data.history(sid, 'price',context.short_period, '1d').mean() # 长周期均线值long_mavg = data.history(sid, 'price',context.long_period, '1d').mean() # 账户现金 cash = context.portfolio.cash # 账户持仓cur_position = context.portfolio.positions[sid].amount # 策略逻辑部分# 空仓状态下,短周期均线上穿长周期均线,买入股票if short_mavg > long_mavg and cur_position == 0 and data.can_trade(sid): context.order(sid, int(cash/price/100)*100) # 持仓状态下,短周期均线下穿长周期均线,卖出股票elif short_mavg < long_mavg and cur_position > 0 and data.can_trade(sid): context.order_target_percent(sid, 0)
最后,编写策略回测接口。
m=M.trade.v2(instruments=instruments,start_date=start_date,end_date=end_date,initialize=initialize,handle_data=handle_data,# 股票买入的时候,假设以次日开盘价成交order_price_field_buy='open',# 股票卖出的时候,假设以次日开盘价成交order_price_field_sell='open',capital_base=100000,)
如果执行代码,策略就跑起来了,测试结果很快就显示在你的眼前了,是不是很神奇。点击 克隆策略按钮就可以把完整策略复制到你的个人账户里啦。宽客们快去试试吧:
源码链接:《量化投资策略——金叉死叉策略》
BigQuant——人工智能量化投资平台