vnpy的converter里面,在update_trade中,是针对上期所优先平昨仓,再平今仓。但是calculate_frozen里面对仓位冻结都是优先冻结今仓,不足再冻结昨仓。如果是多头昨仓5手,多头今仓2手。平5手的时候下单手数会变成{多头平今2手,多头平昨3手},但是处理仓位冻结的时候,变成{多头昨仓冻结5手,多头今仓冻结0手}?
def calculate_frozen(self) -> None:
""""""
self.long_pos_frozen = 0
self.long_yd_frozen = 0
self.long_td_frozen = 0
self.short_pos_frozen = 0
self.short_yd_frozen = 0
self.short_td_frozen = 0
for order in self.active_orders.values():
# Ignore position open orders
if order.offset == Offset.OPEN:
continue
frozen: float = order.volume - order.traded
if order.direction == Direction.LONG:
if order.offset == Offset.CLOSETODAY:
self.short_td_frozen += frozen
elif order.offset == Offset.CLOSEYESTERDAY:
self.short_yd_frozen += frozen
elif order.offset == Offset.CLOSE:
self.short_td_frozen += frozen # 冻结时先冻结今仓,再冻结昨仓,不再匹配上期所模式?
if self.short_td_frozen > self.short_td:
self.short_yd_frozen += (self.short_td_frozen
- self.short_td)
self.short_td_frozen = self.short_td
On_stop_order里面分成两步骤做了一些处理,但是感觉第一个步骤处理完的变量并没有被缓存下来,第二个步骤条件不可能被满足。能否解答?
`
def on_stop_order(self, stop_order: StopOrder):
# 只处理撤销或者触发的停止单委托
if stop_order.status == StopOrderStatus.WAITING:
return
# 移除已经结束的停止单委托号
for buf_orderids in [
self.buy_vt_orderids,
self.sell_vt_orderids,
self.short_vt_orderids,
self.cover_vt_orderids
]:
if stop_order.stop_orderid in buf_orderids:
buf_orderids.remove(stop_order.stop_orderid) # 为什么是在这个临时list中remove,没有去各个orderids的list中remove?
# 发出新的委托
# Q:这部分代码真的会被执行吗?
if self.pos == 0:
if not self.buy_vt_orderids:
if self.buy_price:
self.buy_vt_orderids = self.buy(self.buy_price, self.fixed_size, True)
self.buy_price = 0
# 没有再做遍历撤单了,因为锁仓交易可能把一笔拆成好几笔,不做额外的撤单操作
if not self.short_vt_orderids:
if self.short_price:
self.short_vt_orderids = self.short(self.short_price, self.fixed_size, True)
self.short_price = 0
elif self.pos > 0:
if not self.sell_vt_orderids:
if self.sell_price:
self.sell_vt_orderids = self.sell(self.sell_price, abs(self.pos), True)
self.sell_price = 0
else:
if not self.cover_vt_orderids:
if self.cover_price:
self.cover_vt_orderids = self.cover(self.cover_price, abs(self.pos), True)
self.cover_price = 0`
看《海龟交易法则》的过程中,觉得作者提到的检验策略信号和回测稳定性/可靠性的几个方法案例都很有有意思,不知道大佬们能不能补充到课程中呢?
比如书里提的E-比率,用来衡量特定策略入场信号对应的趋势周期,其实对匹配合适的止盈止损方法非常有帮助。
又比如作者提到了部分“稳健”的回测指标,通过对原始数据的收益率进行resample或者分段resample生成虚拟价格序列进行模拟回测,可以大幅提高回测结果的统计可靠性。
也不知道这些问题之前论坛里有没有大佬已经解决过了,有知道的也欢迎甩链接