vn.py量化社区
By Traders, For Traders.
Member
avatar
加入于:
帖子: 6
声望: 1

请教个问题,辛苦大佬帮忙看下:)

场景如下:
假设只做ma5均线上做多的情况,每次价格突破ma5后,买入,然后设置止损止盈单,等待行情触发止损或者止盈。

伪代码:
def on_bar(…)
Self.cancelAll() #取消所有未成交委托
If bar.price > ma5 #k线收盘价超过5日均线
Self.buy( bar.price+5, 1) # 买1手开仓
self.sell( bar.price-5, 1, True) #设置止损的停止单
Self.sell(bar.price+20, 1) #设置止盈的限价单

**问题:

  1. 每次进入onbar回调函数中cancelAll()的方法会把未成交的 止损和止盈单取消掉吗? 如果取消了,是不是要设置全局变量,每次cancelall()后,在重新设置止损止盈单
  2. 在On_bar()的开仓单后立刻下止损止盈单,存在订单延迟,不成交的风险,可以放在on_trade(),如果在on_trade()中,如何精确的管理订单的状态,比如开仓后获取到orderid, 在触发该orderid的止损后,通过代码自动清除orderid对应的止盈单,确保没有残存的未成交挂单,从而实现不用cancelall()的目的
    **
Member
avatar
加入于:
帖子: 6
声望: 1

在on_trade()中设置止盈止损的伪代码如下:
def on_bar(…)
Self.cancelAll() #取消所有未成交委托
If bar.price > ma5 #k线收盘价超过5日均线
Self.buy( bar.price+5, 1) # 买1收开仓

def on_trade(…):
If pos>0: #收到成交回报,持仓>0
self.sell( bar.price-5, 1, True) #设置止损的停止单
Self.sell(bar.price+20, 1) #设置止盈的限价单

Administrator
avatar
加入于:
帖子: 4220
声望: 241
  1. 会每次都清除
  2. 所以在用cancel_all的情况下,建议把挂停止单的逻辑放到on_bar里面
Member
avatar
加入于:
帖子: 6
声望: 1

收到,谢谢老师:)

© 2015-2019 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号-3