def handle_bar(context):
print('新的一天开始了')
portfolio = get_portfolio(context.s1,0)#读取portfolio
print('当前空头持仓为%d'%portfolio.sell_quantity)
print('当前多头持仓为%d'%portfolio.buy_quantity)
if close[-1]>sg[-1] and close[-2]<=sg[-2]:
print('符合平空开多')
if portfolio.sell_quantity>0:
print('有空头持仓,平空')
buy_close(context.s1,"market", volume=portfolio.sell_quantity,serial_id = 1)#空头平仓
portfolio = get_portfolio(context.s1,0)#平空之后读portfolio
print('买平后空头持仓为%d'%portfolio.sell_quantity)#输出显示空头持仓已经变为0
if portfolio.buy_quantity == 0:
print('无多头持仓,开多')
buy_open(context.s1, "market", volume=1,serial_id = 2)#多头开仓
portfolio = get_portfolio(context.s1,0)#开多后读portfolio
print('多开后多头持仓为%d'%portfolio.buy_quantity)#输出显示多头持仓依然为零,不应该为1吗?
if close[-1]<xg[-1] and close[-2]>=xg[-2]:
if portfolio.buy_quantity>0:
print('有多头持仓,平多')
sell_close(context.s1,"market", volume=portfolio.buy_quantity,serial_id = 3)
portfolio = get_portfolio(context.s1,0)
print('平多后多头持仓为%d'%portfolio.buy_quantity)
if portfolio.sell_quantity == 0:
print('无空头持仓,开空')
sell_open(context.s1, "market", volume=1,serial_id = 4)
portfolio = get_portfolio(context.s1,0)
print('开空后空头持仓为%d'%portfolio.sell_quantity)
print('当天结束了')
def after_trading(context):
portfolio = get_portfolio(context.s1,0)
print('收盘空头%d'%portfolio.sell_quantity)
print('收盘多头%d'%portfolio.buy_quantity)#盘后显示多头持仓为1
pass
上文是平仓反手代码片段,在handle_bar(context)中,平仓指令发出,持仓马上归零,但是反手开仓指令发出后,持仓不能正确显示,依然为零,必须要在after_trading(context)中,才能正确显示为1.
请教这是机制问题,还是我的代码有问题?