金叉死叉策略思想金叉死叉策略其实就是双均线策略。策略思想是:当短期均线上穿长期均线时,形成金叉,此时买入股票。当短期均线下穿长期均线时,形成死叉,此时卖出股票。研究表明,双均线系统虽然简单,但只要严格执行,也能长期盈利。
金叉死叉策略实现选择股票池首先,我们选择要交易的股票,用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,
- )
如果执行代码,策略就跑起来了,测试结果很快就显示在你的眼前了。


雷达卡





京公网安备 11010802022788号







