傻瓜策略-PE中位数ETF投资法

回测平台为聚宽 https://www.joinquant.com/

基准指数选择为沪深300指数,交易标的为510310(沪深300ETF)
策略内容:
每个月5日计算沪深300指数的成分股PE,如果PE中位数低于25则满仓买入沪深300ETF,如果PE中位数超过40,则清仓。
测试时间:2013-04-01至2018-03-05
(由于沪深300ETF上市日期为2013年3月29日,固此策略无法追溯的更早)

回测结果:

基准收益 61.04%
策略收益 110.70%
策略年化收益 16.81%
最大回撤 18.637%
Alpha 0.104
Beta 0.373

策略代码:

def initialize(context):
    g.__mycash=1000000
    g.__mysecurity = '510310.XSHG'
    #获取沪深300成分股
    g.security = get_index_stocks('000300.XSHG')
    set_universe(g.security)
    #设置基准收益
    set_benchmark('000300.XSHG')
    set_order_cost(OrderCost(open_tax=0,
    close_tax=0.001, open_commission=0.0003,
    close_commission=0.0003, close_today_commission=0,
    min_commission=5), type='stock')
    run_monthly(Deal,5)
    
    
def Deal(context):
    security=g.security
    #g.__mycash+=5000
    PE = get_fundamentals(query(
            valuation.pe_ratio_lyr
        ).filter(
            valuation.code.in_(g.security)
        ))
    PE_list=PE.pe_ratio_lyr.tolist()
    templist=[]
    for x in PE_list:
        if x >= 0:
            templist.append(x)
    PE_list=templist[:]
    PE_list.sort()
    pe_mean = int(PE_list[len(PE_list)/2])
    #"""
    log.info("PE %s" % (pe_mean))
    if (pe_mean <= 25):
        order_target_value(g.__mysecurity, g.__mycash)
    elif (pe_mean > 25 and pe_mean <= 35):
        pass
    else:
        order_target_value(g.__mysecurity,0)
    #elif (pe_mean > 35 and pe_mean <= 35):
    #    order_target_value(g.__mysecurity, g.__mycash*0.85) 

    
def handle_data(context,data):
    pass

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据