企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# CMO 策略模仿练习 1 > 来源:https://uqer.io/community/share/55b4c44ef9f06c91f818c5ea ```py 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! ```