一、回测结果
策略的说明:当股票在当日收盘30分钟内涨幅到达9.5%~9.9%时间段的时候,我们进行买入,在第二天开盘9:30的时候就卖出。
注意回测的时候要选择分钟级别回测,不然没有数据。
二、策略知识
get_industry_stocks 获取行业成份股,其用法为:
get_industry_stocks(industry_code, date=None)
比如下例中用到的get_industry_stocks('I64') + get_industry_stocks('I65'),就是分别获取互联网和相关服务、软件和信息技术服务业这两个行业的股票。
更多的行业代码可以看证监会行业
三、策略代码
# 导入聚宽函数库 import jqdata # 初始化程序, 整个回测只运行一次 def initialize(context): # 开启动态复权模式(真实价格) set_option('use_real_price', True) # 每天买入股票数量 g.daily_buy_count = 5 # 设置我们要操作的股票池, 这里我们操作多只股票,下列股票选自计算机信息技术相关板块 g.stocks = get_industry_stocks('I64') + get_industry_stocks('I65') # 防止板块之间重复包含某只股票, 排除掉重复的, g.stocks 现在是一个集合(set) g.stocks = set(g.stocks) # 让每天早上开盘时执行 morning_sell_all run_daily(morning_sell_all, '09:30') def morning_sell_all(context): # 将目前所有的股票卖出 for security in context.portfolio.positions: # 全部卖出 order_target(security, 0) # 记录这次卖出 log.info("Selling %s" % (security)) def before_trading_start(context): # 今天已经买入的股票 g.today_bought_stocks = set() # 得到所有股票昨日收盘价, 每天只需要取一次, 所以放在 before_trading_start 中 g.last_df = history(1,'1d','close',g.stocks) # 在每分钟的第一秒运行, data 是上一分钟的切片数据 def handle_data(context, data): # 判断是否在当日最后的2小时,我们只追涨最后2小时满足追涨条件的股票 if context.current_dt.hour < 13: return # 每天只买这么多个 if len(g.today_bought_stocks) >= g.daily_buy_count: return # 只遍历今天还没有买入的股票 for security in (g.stocks - g.today_bought_stocks): # 得到当前价格 price = data[security].close # 获取这只股票昨天收盘价 last_close = g.last_df[security][0] # 如果上一时间点价格已经涨了9.5%~9.9% # 今天的涨停价格区间大于1元,今天没有买入该支股票 if price/last_close > 1.095 \ and price/last_close < 1.099 \ and data[security].high_limit - last_close >= 1.0: # 得到当前资金余额 cash = context.portfolio.available_cash # 计算今天还需要买入的股票数量 need_count = g.daily_buy_count - len(g.today_bought_stocks) # 把现金分成几份, buy_cash = context.portfolio.available_cash / need_count # 买入这么多现金的股票 order_value(security, buy_cash) # 放入今日已买股票的集合 g.today_bought_stocks.add(security) # 记录这次买入 log.info("Buying %s" % (security)) # 买够5个之后就不买了 if len(g.today_bought_stocks) >= g.daily_buy_count: break