有些人认为,当股价突破5日均线时,可以买入;当股价跌破5日均线时,可以卖出。
本策略可以验证这种方法是否无效。
一、策略思想
股价大于五日均价,买入;
股价小于五日均价,卖出。
二、实现代码
# 定义一个全局变量, 保存要操作的证券
security = '600016.XSHG'
# 初始化此策略
# 设置我们要操作的股票池, 这里我们只操作一支股票
set_universe([security])
# 每个单位时间(如果按天回测,则每天调用一次,如果按分钟,则每分钟调用一次)调用一次
def handle_data(context, data):
# 取得过去五天的平均价格
average_price = data[security].mavg(5)
# 取得当前价格
current_price = data[security].price
# 取得当前的现金
cash = context.portfolio.cash
# 如果当前价格高出五天平均价1%, 则全仓买入
if current_price > 1.01 * average_price:
# 计算可以买多少只股票
number_of_shares = int(cash/current_price)
# 购买量大于0时,下单
if number_of_shares > 0:
# 买入股票
order(security, +number_of_shares)
# 记录这次买入
log.info("Buying %s" % (security))
# 如果当前价格低于五天平均价, 则空仓卖出
elif current_price < 0.99 * average_price and context.portfolio.positions[security].amount > 0:
# 卖出所有股票,使这只股票的最终持有量为0
order_target(security, 0)
# 记录这次卖出
log.info("Selling %s" % (security))
# 画出每天的价格
record(stock_price = data[security].price)
三、运行结果
从上图可以看出,将此策略运用于民生银行(600016),策略收益远小于基准收益。
换成中国中铁(601390)、中国联通(600050)、中国铁建(601186)、山东黄金(600547),效果也差不多。
这说明这个策略,是个不好的策略。
更多内容请关注微信公众号