没有做已持仓股票中已存在于待购股票池的筛选条件
def initialize(context):
run_daily(period,time='every_bar')
# 代码:设定好要交易的股票数量stocksnum
g.stocksnum=5
g.period=4
g.days=0
def period(context):
# 代码:找出市值排名最小的前stocksnum只股票作为要买入的股票
if g.days== g.period:
scu= get_index_stocks('000001.XSHG')+get_index_stocks('399106.XSHE')
r=query(valuation.code).filter(valuation.code.in_(scu)).order_by(valuation.market_cap.asc()).limit(g.stocksnum)
w=get_fundamentals(r)
buylist=list(w.code)
# 代码:若已持有的股票的市值已经不够小而不在要买入的股票中,则卖出这些股票。
for i in context.portfolio.positions:
if i not in buylist:
order_target(i, 0)
# 代码:买入要买入的股票,买入金额为可用资金的stocksnum分之一
for i in buylist:
order_value(i, context.portfolio.cash/g.stocksnum)
g.days=0
else:
g.days+=1
def initialize(context):
run_daily(period,time='every_bar')
g.security=get_index_stocks('000001.XSHG')+get_index_stocks(
'399106.XSHE') #建立搜索范围
g.stocknum=10 #股票池大小
g.circle=10
g.day=0
def period(context):
if g.day%g.circle == 0:
q=query(valuation.code).filter(
valuation.code.in_(g.security)).order_by(
valuation.market_cap.asc()).limit(g.stocknum)
#市值从小到大排名,筛选stocknum支股票
df=get_fundamentals(q)
gfind=list(df['code']) #获取股票代码,返回代码列表
for i in context.portfolio.positions:
if i not in gfind: #若前一天的股票池没有入选今天的备选股,则卖出
order_value(i,0)
if g.stocknum-len(context.portfolio.positions) != 0:
for i in gfind:
if i not in context.portfolio.positions: #买入新的备选股,并且以剩余交易股票种类确定金额分配
order_value(i,context.portfolio.cash/(g.stocknum
-len(context.portfolio.positions)))
g.day+=1

请教大神,为何会在回测区间中出现除零错误呢??