量化投资策略——金叉死叉策略
本文向大家详细介绍如何在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——人工智能量化投资平台