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

连接的是TTS接口

description

可以看到,在1点31分的时候,合约信息查询成功。 但是当我早上9点33分看vnpy时,此时已经没有了行情数据,因此我试图重新登录TTS, 但是提示我交易服务器登录失败,因为已经重复登录了。

description

可以看到,行情里面什么也没有
但是,在查询合约里面,却可以查询得到合约。

description

真是令人感到困惑。另外,原定于在今早上开盘要交易的策略,也毫无动静。

另外想请教大神一个问题

def process_tick_event(self,event:Event):
    """ 对原始tick进行过滤 """
    tick:TickData = event.data

    # 检查tick合约的经验状态是否位有效交易状态
    status:StatusData = self.statuses.get(tick.vt_symbol,None)
    if not status:
        vt_instrument = get_vt_instrument(tick.vt_symbol)
        status = self.statuses.get(vt_instrument,None)
        if not status:
            # 未收到交易状态,返回
            return

这段代码我看了很久,如果我的理解没错的话, 判断一个tick是否有效,是用的上一个该品种的tick的 StatusData, 为什么要这样做呢?为什么不能直接用这个tick的状态信息呢?

vnpy真的应该把这个功能整合到正式版本里头去,因为不这样做的话,必须收盘后关闭vnpy,防止接受错误数据。

但是这根本是做不到的,因为每个品种的收盘时间不一样。你运行一个portfolio strategy,这个品种已经收盘了,那个品种还没结束呢,这就导致这个策略停不了。但是已经收盘了的品种是可能这个时候发错误tick过来的。。。。所以所谓的“收盘后立刻停止策略”,这根本就是做不到的事

TradeStatusManager是被弃用了吗? 现在的代码是完全用TickFilter来过滤tick数据了。

但是在新代码里,好像少了DbContractData类的定义, 是下面这个定义吗:

description

因为想在vnpy种过滤CTP产生的数据,研究了一下,发现CTP在推送数据的时候,是有推送每个品种交易状态的。

但我不懂CTP推送的具体状态是什么,想要研究CTP的API, 但却发现CTP的API所在的网站无法打开?

郭易燔 wrote:

通过pythonpath环境变量的方式使用veighna_studio里的包的确可行,但是ctp、tts这类c++接口都是需要根据python版本来编译pyd的。veighna_studio使用的是python3.10所以编译好的pyd也是3.10的,你的anaconda使用的python不是3.10的,所以找不到。

好的,非常感谢您的解答。
那我还有一个问题想问一下,安装vnpy的时候似乎是会自带一个python环境的对吗? 我看了下vnpy的文件夹,里面是有一个python.exe的文件的。

如果我不想使用我自己的anaconda环境了,我想使用vnpy 自带的这个python环境,那这样我就无需将vnpy的包的路径添加到环境变量中了对吧。可是我的问题是,我该怎么区分打开的是哪个python呢?我在cmd输入jupyter notebook,自动运行的不是vnpy的python啊。。。

郭易燔 wrote:

你贴的回答是vnpy2.x版本的了,不适用于目前最新的veighna。首先确定使用的是最新的veighna_studio,如果有界面的情况下可以正确运行的话,就说明你的脚本或者python环境有问题,你再贴一下你的no_ui脚本吧
我非常非常非常确定我用的是3.2版本,这是我当时迅雷下载的记录

description

我当时就用的这个安装包安装的vnpy。

我使用的脚本是这样的:

description

因为在下载vnpy之前,我就已经在用anaconda环境了,所以我将vnpy的路径添加到了sys.path中

xiaohe wrote:

不知道vnpy_studio哪里来的了,以前是vnstudio
建议安装veighna_studio最新版本试试

这就是最新版本,只不过我安装的时候自己选定了文件夹

from vnpy_tts import TtsGateway

也是相同的问题,完全加载不了。。。
description

看了一下知乎上的回答,还是弄不懂该怎么做
description

运行 build.sh。。。可是这个文件夹根本就没有build.sh文件啊? 编译vnctp, 是指编译vnctpmd.cpp这个文件吗? install.bat又是哪里的文件?

观察了一下,vnpy_ctp文件夹中只有如下两个pyd文件

description

郭易燔 wrote:

vnpy可以24小时开,但是策略需要再开盘前开启收盘后关闭,因为非交易时间会有垃圾数据扰乱交易逻辑。
停止策略后,会将局部变量保存到本地的json中,BarGenerator里的缓存tick数据会消失,所以尽量不要在盘中随意停止再开启策略。

我有两个问题:

  1. 非交易时间的垃圾数据是什么意思? 也就是说收盘后,仍然会有tick数据不断从交易所传来,是这个意思是吗? 垃圾数据都是什么时候产生的呢? 就延后1分钟关闭策略有影响吗?收盘后需要关闭,也就是说一天需要关闭/开启三次,分别是早盘、下午和夜盘,每一次都需要关闭策略吗? 而且不同品种的夜盘结束时间是不一样的,我使用的是portfolio_strategy模块,虽然我是开盘时发单,但是我晚上到底应该23:00关策略,还是2:30关策略呢? 还是说,我只需要写一个筛选tick数据的程序,就可以直接不关闭策略了吗?
  2. 如果我的策略是依赖十天的数据,在初始化阶段我根据rqdata数据库传入了这些数据。而我每次在收盘后关闭了策略, 此时BarGenerator里的tick数据以及根据tick数据合成的bar都消失;那当我再打开的策略的时候,没有了前十天的bar数据,岂不是这个策略已经无法再运行了?要运行这个策略,只能移除这个策略、再重新初始化,是这样吗?

vnpy需要24小时开着吗?

一个策略,如果停止它、重新编辑变量、对它进行移仓操作、或者关闭vnpy,在这种种情况下, 那这个策略里头的BarGenerator里的数据,以及策略内部的局部变量(variables),还在吗?

郭易燔 wrote:

螺纹钢合约是小写的rb,是可以获取到合约的。要等到日志栏提示合约查询成功之后,才能查询到合约。

现在我可以查询合约了
可是我发现,在日志里显示“交易服务器登录成功” 到 查询合约成功的这个时间间隔,可能长达30分钟,这正常吗?

当连接到TTS之后,点击查询合约

无论大写还是小写都查不到螺纹钢的合约信息
description

description

但是其他品种,例如玻璃,却可以查到
description

在TTS的QQ群询问了群主,群主回答TTS今天的行情没问题,可以正常获取,可是为什么vnpy连合约信息都查不到呢

郭易燔 wrote:

portfolio不支持,需要自己实现

在实现这个功能的时候,我有个问题。
对于两个portfolio_strategy, 他们是初始化自同一个StrategyEngine类的实例,还是说它们用的是两个不同的StrategyEngine类呢?

或者说,我要实现这个功能,我是应该去StrategyEngine类里做,还是应该去别的地方呢?

比如,我先写了一个趋势策略,交易5个品种,其中 要做多螺纹钢7手
然后,我又写了一个反转策略,也交易这5个品种,虽然这个反转策略在完整计算手续费之后的赚钱效果很差,但是它总是产生和趋势策略相反的信号,例如:做空螺纹钢2手

那么,我希望这两个策略能合并起来,开多螺纹钢5手。
但是实际在模拟盘上,第一个策略会做多7手,第二个策略会平今2手。。。不仅没节省手续费,反而“超级加倍”了手续费。

portfolio支持多策略之间的“撮合”吗?

xiaohe wrote:

在策略中调用template里的get_pricetick函数即可获取pricetick数据
CtaTemplate类里__init__函数初始话的时候需要传入cta_engine

除了pricetick, 我还想获取每个合约的size,也就是合约乘数。比如,我打算在品种A上花100000元,那么我需要的下单手数是 100000/(限价单的价格* 合约乘数)。可是好像并没有查询size的功能?

看了一下回测程序,我的订单全都是限价单下单的,经过了cross_limit_order这个函数进行订单的匹配来决定订单是否成交、以什么价格成交。

我想问一下,这种情况下,还需要考虑滑点的带来的亏损吗?

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

沪公网安备 31011502017034号

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