@小兵哥,对于组合二,我根据你的描述,实现如下:
```
#1. 根据最小方差计算子组合多标的的配仓
equity_ratio = __fun_cal_Weight_by_minvar(context.equity)
....
#2. 子组合的 VaR 和 ES。risk_money/ VaR,maxrisk_money/ES
# 求得两种风险控制下可以购买的市值,min 取最小
equity_position = __fun_getEquity_value(equity_ratio,context.portfolio.portfolio_value,context.confidencelevel)
....
#3.根据可购买的市值,做风险平价
total_position = equity_position + commodities_position + bonds_position + moneyfund_position
context.pool = context.equity + context.commodities + context.bonds + context.moneyfund
__ratio = {}
__ratio = __fun_caltraderatio(__ratio, context.equity, equity_ratio, equity_position, total_position)
....
#4 重新计算大组合的VAR和ES,得到最终购买市值
total_equity = __fun_getEquity_value(__ratio,context.portfolio.portfolio_value,context.confidencelevel)
#5. 根据最终购买市值,重新进行各组合标的的权重计算,同时进行现金管理。
total_value = context.portfolio.portfolio_value
if total_equity > total_value:
value_ratio = 1.0
bonds_value = 0
else:
value_ratio = total_equity / total_value
bonds_val = total_value - total_equity
print value_ratio
trade_ratio = {}
for stock in context.pool:
if stock in trade_ratio:
trade_ratio[stock] += round((__ratio[stock] * value_ratio), 3)
else:
trade_ratio[stock] = round((__ratio[stock] * value_ratio), 3)
#对剩余的现金进行管理
if context.moneyfund_2:
stock = '511880.XSHG'
if stock in trade_ratio:
trade_ratio[stock] += round((bonds_value * 1.0 / total_value), 3)
else:
trade_ratio[stock] = round((bonds_value * 1.0 / total_value), 3)
```
不知道这样的实现哪个地方出问题了,回撤保持在3%左右,但是收益始终没有上不去40%
2018-03-21