美文网首页简书面面观
量化交易入门笔记-小市值股票策略

量化交易入门笔记-小市值股票策略

作者: 东南有大树 | 来源:发表于2018-10-19 21:06 被阅读13次
    '''
    筛选出市值介于20亿~30亿的股票
    选取其中市值最小的三只股票
    然后每天开盘买入,持有5个交易日,然后调仓
    '''
    
    import jqdata
    
    def initialize(context):
        """初始化函数"""
        # 设定参考基准
        set_benchmark('000300.XSHG')
        # 使用真实价格
        set_option('use_real_price', True)
        # 设定成效比例 
        set_option('order_volume_ratio', 1)
        # 股票类每笔交易时的手续费是:买入时佣金万分之三,卖出时佣金万分之三加千分之一印花税, 每笔交易佣金最低扣5块钱
        set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock')
        # 持仓数量
        g.stocknum = 3
        # 交易计时器
        g.days = 0
        # 调仓频率
        g.refresh_rate = 5
        # 运行函数
        run_daily(trade, 'every_bar')
        
        
    def check_stocks(context):
        """股票筛选"""
        # 设定条件 
        q = query(
            valuation.code,
            valuation.market_cap
            ).filter(
                valuation.market_cap.between(20, 30)
                ).order_by(
                    valuation.market_cap.asc()
                    )
        # 选出低市值的股票,构成buy_list
        df = get_fundamentals(q)
        buy_list = list(df['code'])
        # 过滤掉停牌
        buy_list = filter_paused_stock(buy_list)
        return buy_list[:g.stocknum]
        
        
    def filter_paused_stock(stock_list):
        """过滤掉停牌"""
        current_data = get_current_data()
        return [stock for stock in stock_list if not current_data[stock].paused]
        
        
    def trade(context):
        """交易函数"""
        if g.days % g.refresh_rate == 0:
            # 获取持仓列表
            sell_list = list(context.portfolio.positions.keys())
            # 如果有持仓,则卖出
            if len(sell_list) > 0:
                for stock in sell_list:
                    order_target(stock, 0)
            # 分配资金
            if len(context.portfolio.positions) < g.stocknum:
                Num = g.stocknum - len(context.portfolio.positions)
                Cash = context.portfolio.cash/Num
            else:
                Cash = 0
            # 选股
            stock_list = check_stocks(context)
            # 买入股票
            for stock in stock_list:
                if len(context.portfolio.positions.keys()) < g.stocknum:
                    order_value(stock, Cash)
            # 天计数加1
            g.days = 1
        else:
            g.days += 1
    

    回测结果:

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

    相关文章

      网友评论

        本文标题:量化交易入门笔记-小市值股票策略

        本文链接:https://www.haomeiwen.com/subject/rfwuzftx.html