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

'''
股票在当日收盘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

回测结果:

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 文| 花间醉 寸铁学号:73 2018年5月6日,期待已久由公子主讲,关于《非专业怎样写出一篇好看又赚...
    花间醉_ba4b阅读 605评论 5 8
  • 最近一直在找个话题,一个有自我深度理解的话题。其实开始写作时,我每天都会记录下很多话题。但是一深究,发现自己逻辑漏...
    钱程浩瀚阅读 320评论 2 1
  • 天有些冷,和了妈一路走去中坞感觉暖和了点。今天上课收获很大,在了妈的勤学苦问下,海亮老师透露了不少练功密法,按要领...
    王悦yue阅读 105评论 0 5