您现在的位置:程序化交易>> 期货公式>> 金字塔等>> 金字塔知识>>正文内容

portfolio对象的持仓变化问题 [金字塔]

  • 咨询内容: 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.请教这是机制问题,还是我的代码有问题?

     

     来源: CXH99.COM

  • 金字塔客服: 你是回测还是实盘运行?回测时候下单后不是立即成交的,如果你handle_bar只执行了一次,那么那一次下单后持仓是不会变化的

     

  • 用户回复: 无论是回测还是实盘都不可能下单后立马就能在持仓中体现的。 单子总有到交易所撮合交易的过程 [此贴子已经被作者于2020/11/15 19:21:57编辑过]

     

  • 网友回复: 我是日线级别回测,handle_bar每天执行一次我的测试结果,如果是平仓语句,持仓马上就会发生变化,这个似乎是虚拟持仓变化,跟是否成交没关系。但是对于开仓语句,在之后handle_bar中任何位置GET_PORTFOLIO,都不会有持仓变化。只有在当日AFTER_TRADING方法中 GET_PORTFOLIO,持仓才会会发生变化。 所以问题一, PORTFOLIO对象中的持仓是虚拟持仓,还是实际持仓,回测和实盘有何区别? 问题二:无论是虚拟持仓还是实际持仓,开仓和平仓语句之后的持仓变化时机是不同的,如上文所述,这个我反复测试过,难以理解。

     

  • 网友回复: 你日线执行一次自然会有这个问题,因为你日线程序相当于只执行一次那么在执行下单动作后,马上输出持仓这个时候持仓是没有变化的。这个如果实盘你应该能理解回测的话也一样,不同于图表策略那种回测,python这个回测他在下单瞬间是没有持仓的

    你如果实盘的话,用固定间隔一直去执行程序,那么可能第一次执行下单,等后面几秒后执行时候持仓就会发生变化了

 

有思路,想编写各种指标公式,交易模型,选股公式,还原公式的朋友

可联系技术人员 QQ: 262069696  点击在线交流或微信号:cxh99cxh99  进行 有偿收费 编写!

怎么收费,代编流程等详情请点击阅读!

(注:由于人数限制,QQ或微信请选择方便的一个联系我们就行,加好友时请简单备注下您的需求,否则无法通过。谢谢您!)


【字体: 】【打印文章】【查看评论

相关文章

    没有相关内容