VeighNa量化社区
你的开源社区量化交易平台
jacobxie's Avatar
Member
离线
7 帖子
声望: 0

冻结和下单转换写反了,重新修正一下。
vnpy的converter里面,在update_trade中,是针对上期所优先平昨仓,再平今仓。但是calculate_frozen里面对仓位冻结都是优先冻结今仓,不足再冻结昨仓。如果是多头昨仓5手,多头今仓2手。平5手的时候,下单手数因为优先平昨,会变成{多头平昨5手,多头平今0手},但是处理仓位冻结的时候,变成{多头今仓冻结2手,多头昨仓冻结3手}?是不是有可能出现超额挂单,导致最终持仓超预期?

是这样一部分条件不会满足。因为我的理解中,4个orderids对象在on_15min_bar被例子中收到的全部是stop order, 收到on_stop_order

if not self.buy_vt_orderids
if not self.short_vt_orderids
if not self.sell_vt_orderids
if not self.cover_vt_orderids
if self.buy_price
if self.sell_price

多头停止单为例,假设信号触发,之前self.buy_vt_orderids为空,那么进入多头停止单下单逻辑,然后self.buy_price = 0。那么往后到on_stop_order所有的if self.buy_price都无法满足,无论是被拒单被撤单,都无法再发新单,因为这个信号归零不是按照是否成交而是是否发单来判断。

而self.buy_vt_orderids对象本身on_15min_bar信号触发之后不为空,回调函数进行成交回报核对的时候也没有再去self.buy_vt_orderids里面删除这个orderid,是去“buf_orderids”这个临时变量里面删,self.buy_vt_orderids本身不变(除非本地变量内存依然指向了它)。那么此时无论被拒单还是被成交,if not self.buy_vt_orderids都是False. 即便内存指针导致self.buy_vt_orderids,应该是用回报的状态来判断是被撤还是被成交,而不是self.buy_price = 0,因为信号触发之后自动就被还原了

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生成虚拟价格序列进行模拟回测,可以大幅提高回测结果的统计可靠性。

也不知道这些问题之前论坛里有没有大佬已经解决过了,有知道的也欢迎甩链接

xiaohe wrote:

我们开发的时候是没有提供的,可能现在加上了,方便的话可以去github开个issue,我们来加加看

联系恒有数客服了,说他们其他平台提供了主连数据,但是恒有数上还没有加期货主连。先提了开发需求,不知道等到啥时候。

官网机器人客服说有当月主连数据,但是实际用vnpy的datamanager下载还是0条,是没法下载主连吗?

description
description

© 2015-2022 微信 18391752892
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】