```
def period(context):
if g.days % g.period == 0:
scu = get_index_stocks('000001.XSHG')+get_index_stocks('399106.XSHE')
w = query(valuation.code
).filter(valuation.code.in_(scu)
).order_by(valuation.circulating_market_cap.desc()
).limit(g.stocksnum)
a = get_fundamentals(w)
g.stocklist = list(a['code'])
for stk in context.portfolio.positions:
if stk not in g.stocklist:
order_target(stk,0)
positions_per_stk = context.portfolio.cash/g.stocksnum
for stock in g.stocklist:
order_value(stock,positions_per_stk)
g.days = g.days + 1
for stok in g.stocklist:
cost = context.portfolio.positions[stok].avg_cost
price = context.portfolio.positions[stok].price
ret = price/cost - 1
if ret > 0.2:
order_target(stok, 0)
if ret <= -0.2:
order_target(stok, 0)
会报错分母为零
```
@薛定谔の喵 for stok in g.stocklist:
if stok in context.portfolio.positions.keys():
cost = context.portfolio.positions[stok].avg_cost
谢谢!这样就没有报错了,也没有结果。那这个程序的问题出在哪里呢?是因为没有先买这些股票吗?拜托能不能帮忙解答一下!
综上,我用else和continue,将个别ret指标分母为0得情况剔除,仍然可以执行绝大部分。我认为只是其中得某些时间点cost为0,并不妨碍后面的ret计算。
for stock in g.stocklist:
order_value(stock,positions_per_stk)
if stock in context.portfolio.positions:
cost = context.portfolio.positions[stock].avg_cost
price = context.portfolio.positions[stock].price
ret = price/cost - 1
print(ret)
if ret > 0.2:
order_target(stock, 0)
if ret <= -0.2:
order_target(stock, 0)
else:
continue