• 量化交易——PEG策略


    一、PEG指标介绍

      PEG指标:市盈率相对盈利增长比率,上市公司的市盈率除以盈利增长速度得到的数值。该指标既通过市盈率考察公司目前的财务状况,又通过盈利增长率考察了未来一段时期内公司的增长预期。

    1、市盈率

      市盈率(PE) = 股价(P) / 每股收益(EPS)

      市盈率 ≈ 市值 / 净收益

      例如:有一家包子铺,每年净利润为50万元,收购价格(市值)为100万元;有一家家具店,每年净利润为100万元,收购价格(市值)为1000万元。

      包子铺市盈率为:100/50 = 2;家具店市盈率:1000 /100 = 10;可以得出若投资包子铺2年回本,投资家具店10年回本。

    2、PEG策略

      彼得·林奇:任何一家公司股票如果定价合理的话,市盈率就会与收益增长率相等。

      市盈率(PE) = 股价(P) / 每股收益(EPS)

      收益增长率(G) = (现在每股收益(EPS1) - 之前每股收益(EPS0)) / 之前每股收益(EPS0)

      PEG = 市盈率PE / (收益增长率G*100)   除以100是转化为百分数

      PEG越低,代表股价被低估的可能性越大,股价会涨的可能性越大。

      PEG是一个综合指标,既考察价值,又兼顾成长性。PEG估值法适合应用于成长型的公司。

    3、PEG策略选股

      1)计算股票池中所有股票的PEG指标。

      2)选择PEG最小的N只股票调仓。

      3)过滤掉市盈率或收益增长率为的股票。

    二、PEG策略实现

    # 初始化函数,设定基准等等
    def initialize(context):
        # 设定沪深300作为基准
        set_benchmark('000300.XSHG')
        # 开启动态复权模式(真实价格)
        set_option('use_real_price', True)
        # 股票类每笔交易时的手续费是:买入时佣金万分之三,卖出时佣金万分之三加千分之一印花税, 每笔交易佣金最低扣5块钱
        set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock')
        g.security = get_index_stocks('000300.XSHG')
        g.N = 20
        # pe_ratio:市盈率
        # inc_net_profit_year_on_year:净利润同比增长率
        g.q = query(valuation.code, valuation.pe_ratio, indicator.inc_net_profit_year_on_year).filter(valuation.code.in_(g.security))
        run_monthly(handle, 1)
        
    def handle(context):
        df = get_fundamentals(g.q)
        df = df[(df["pe_ratio"] > 0) & (df["inc_net_profit_year_on_year"] > 0)]
        # 计算peg
        df['peg'] = df['pe_ratio'] / df['inc_net_profit_year_on_year'] / 100
        # 找到最小的peg值对应的股票
        df = df.sort_values('peg')
        to_hold = df['code'][:g.N].values     # 取出前20个,并变成一个列表
        # print(to_hold)    # [600485.XSHG 601872.XSHG 600688.XSHG...]
        
        for stock in context.portfolio.positions:
            if stock not in to_hold:
                # 目标股数下单,卖出非标的的股票
                order_target(stock, 0)
        
        # 期待持有且还未持仓的股票
        to_buy = [stock for stock in to_hold if stock not in context.portfolio.positions]
        if len(to_buy) > 0:  # 需要调仓
            # 每只股票预计投入的资金
            cash_per_stock = context.portfolio.available_cash / len(to_buy)
            for stock in to_buy:
                # 按价值下单,买入需买入的股票
                order_value(stock, cash_per_stock)

    1、获取到股票代码、PE、G

    # 初始化函数,设定基准等等
    def initialize(context):
        # 设定沪深300作为基准
        set_benchmark('000300.XSHG')
        # 开启动态复权模式(真实价格)
        set_option('use_real_price', True)
        # 股票类每笔交易时的手续费是:买入时佣金万分之三,卖出时佣金万分之三加千分之一印花税, 每笔交易佣金最低扣5块钱
        set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock')
        g.security = get_index_stocks('000300.XSHG')
        g.N = 20
        # pe_ratio:市盈率
        # inc_net_profit_year_on_year:净利润同比增长率
        g.q = query(valuation.code, valuation.pe_ratio, indicator.inc_net_profit_year_on_year).filter(valuation.code.in_(g.security))
        run_monthly(handle, 1)
        
    def handle(context):
        df = get_fundamentals(g.q)
        print(df)

      执行显示:

      

    2、过滤掉市盈率或收益增长率为负的股票

    def handle(context):
        df = get_fundamentals(g.q)
        print(df)
        df = df[(df["pe_ratio"] > 0) & (df["inc_net_profit_year_on_year"] > 0)]

      这样就将为负的值都过滤掉了。

    3、执行显示效果

      

  • 相关阅读:
    UDP通信网络编程
    多线程:购票小案例
    多线程:线程池异步计算,2个线程,1个计算10的阶乘,一个计算20的阶乘并返回
    Kong入门指南
    5分钟完成App后端API开发
    Docker安装Kong
    React Native如何用调用RestFul API
    Flutter如何用调用RestFul API
    如何用Flutter调用生成的RestFul API
    自动化API之一 生成开源ERP Odoo App 的RestFul API
  • 原文地址:https://www.cnblogs.com/xiugeng/p/12919384.html
Copyright © 2020-2023  润新知