量化交易入门笔记-多股票追涨策略

'''
股票在当日收盘30分钟内涨幅达到9.5%~9.9%时间段,进行买入操作,在第二天开盘卖出
需要注意的是,该策略需要按分钟进行回测
'''

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)
    # 每天早上开盘时执行
    run_daily(morning_sell_all, 'open')
    
    
def morning_sell_all(context):
    """每天早上开盘时执行函数"""
    for security in context.portfolio.positions:
        # 全部卖出
        order_target(security, 0)
        # 记录这次卖出
        log.info('卖出股票 %s' % (security))
        
        
def before_trading_start(context):
    """开始交易前被调用函数"""
    # 今天已经买入的股票
    g.today_bought_stocks = set()
    # 得到所有股票昨日收盘价,每天只需要取一次,所以放在before_trading_start中
    g.last_df = history(1, '1d', 'close', g.stocks)
    
    
def handle_data(context, data):
    """单位时间调用的函数,在每分钟的第一秒运行,data是上一分钟的切片数据"""
    # 判断是否在当日最后的2小时,这里只追涨最后2小时满足条件的股票
    if context.current_dt.hour < 15 and context.current_dt.minute < 30:
        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.cash
                # 计算今天还需要买入的股票数量
                need_count = g.daily_buy_count - len(g.today_bought_stocks)
                # 把现金分成几价
                buy_cash = cash/need_count
                # 买入这么多现金的股票
                order_value(security, buy_cash)
                # 放入今天已买股票的集合
                g.today_bought_stocks.add(security)
                # 记录这次买入
                log.info('买入股票 %s' % (security))
                # 买够5只之后就不再买入
                if len(g.today_bought_stocks) >= g.daily_buy_count:
                    break

回测结果:

注:本文章为个人学习笔记,参考了一些书籍与官方教程,不作任何商业用途!

猜你喜欢

转载自blog.csdn.net/weixin_38486884/article/details/83180791
今日推荐