Skip to content

CMO 策略模仿练习 1

来源:https://uqer.io/community/share/55b4c44ef9f06c91f818c5ea

import numpy as np

start='2010-01-01'
end='2015-06-20'
benchmark='sh50'
universe=set_universe('SH50')
capital_base=1000000
window=35   # 参数,CMO指标计算周期
def initialize(account):
    pass
def handle_data(account):
    clp=account.get_attribute_history("closeprice",window)
    prc=account.get_attribute_history("precloseprice",window)
    p=account.referenceprice
    # 计算CMO
    CMO= {}
    for s in account.universe:
        diff=clp(s)-prc(s)
        u=sum(n for n in diff if n>0)
        d=sum(-n for n in diff if n<0)
        if u+d==0: continue
        CMO[s]=(u-d)/(u+d)*100
    # 根据CMO卖出目前持有股票 
    v=account.cash
    for s,a in account.valid_secpos.items():
        if cmo.get(s,0)<0 and s in account.universe:
            order_to(s,0)
            v+=a*p[s]
    # 根据CMO确定买入列表
    buylist= []
    for s in account_universe:
        if cmo.get(s,0)<0 and not np.isnan(p[s]) and s not in account.valid_secpos:
            buylist.append(s) 
    if v > account.referencePortfolioValue * 0.33: # 为了避免调仓过于频繁,仅当可用现金超过账户市值1/3时买入
        for s in buylist:
            order(s, v/len(buylist)/ p[s])

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<mercury-input-8-189e24327e9d> in <module>()
     54                             slippage        = slippage,
     55                             refresh_rate    = refresh_rate,
---> 56                             freq            = freq)
     57     perf = quartz.perf_parse(bt, quartz_acct)
     58     perf_temp = {}

python2.7/site-packages/quartz/backtest.py in backtest_generator(start, end, benchmark, universe, capital_base, initialize, handle_data, csvs, security_base, commission, slippage, refresh_rate, freq, *args, **kwargs)
    279         sim_params = env.SimulationParameters(start, end, benchmark, universe, capital_base, security_base, csvs)
    280 
--> 281         idxmap_all, data_all = data_generator.get_daily_data(sim_params)
    282         data_gen = data_generator.get_daily_data_generator(data_all)
    283         account = env.Account(sim_params, strg, idxmap_all, data_all, commission, slippage)

python2.7/site-packages/quartz/sim_condition/data_generator.py in get_daily_data(sim_params, fq)
     26     trading_days = sim_params.trading_days
     27     idxmap_date = dict(zip(trading_days, range(len(trading_days))))
---> 28     idxmap_bm, data_bm = load_benchmark_data(sim_params.benchmark, trading_days)
     29 
     30     stocks, funds = univ_divide(sim_params.universe)

python2.7/site-packages/quartz/data/benchmarks.py in load_benchmark_data(symbol, trading_days)
    135                 data.append(line)
    136     else:
--> 137         raise ValueError("Please verify your benchmark ID!")
    138 
    139     # 数据缺失

ValueError: Please verify your benchmark ID!


回到顶部