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

收到,谢谢。

有道理,谢谢。

如何保证先更新15分钟的,在策略的哪个程序下做处理?
是在init下,
还是在在 on_bar下,先update15分钟,在updte5分钟,
还把on_5min_bar程序放在on_15min_bar后面?
有劳老师指点,谢谢。

在CTA策略中,我要在5分钟的bar上引用15分钟的数据,但遇到9:30、45、10:00等时点,需要15分钟也更新完数据在引用,否则引用15分钟数据就是上一根Bar的,但是在回溯程序的回放中发现,程序中发现5分钟都走到9:50了,15分钟9:45那一根Bar才打出来,也就导致9:45分我计算指标时,应用的15分钟的数据是9:30的,请问如何解决这个问题,才能让我在9:45的5分钟bar中引用9:45分的15分钟数据?
time=2015-06-25 09:40:00,op=9991.0,close=9973.0 ,minute=5
time=2015-06-25 09:45:00,op=9975.8,close=9903.2 ,minute=5
time=2015-06-25 09:50:00,op=9905.0,close=9857.8 ,minute=5
time=2015-06-25 09:45:00,close=9841.0 ,minute=15

谢谢,但策略中怎么引用多周期呢?感觉还是要通过1分钟合成。BarGenerator不单单是60分钟有问题,30分钟也有问题,比如9:15开盘的,9:15-9:30分着一根没有合成。
经过测试,下面的程序可以解决30分钟、60分钟合成的问题。但大于60分钟的就不行了。

def update_bar(self, bar: BarData):
    """
    Update 1 minute bar into generator
    """
    if self.xmin_bar: 
        if bar.datetime.hour != self.xmin_bar.datetime.hour :
            self.xmin_bar.datetime = self.xmin_bar.datetime.replace(
            second=0, microsecond=0
            )
            self.on_xmin_bar(self.xmin_bar)

            self.xmin_bar = None

    if not self.xmin_bar:
        self.xmin_bar = BarData(
            symbol=bar.symbol,
            exchange=bar.exchange,
            datetime=bar.datetime,
            gateway_name=bar.gateway_name,
            open_price=bar.open_price,
            high_price=bar.high_price,
            low_price=bar.low_price
        )
    else:
        self.xmin_bar.high_price = max(
            self.xmin_bar.high_price, bar.high_price)
        self.xmin_bar.low_price = min(
            self.xmin_bar.low_price, bar.low_price)

    self.xmin_bar.close_price = bar.close_price
    self.xmin_bar.volume += int(bar.volume)

    if not (bar.datetime.minute + 1) % self.xmin :
        self.xmin_bar.datetime = self.xmin_bar.datetime.replace(
            second=0, microsecond=0
        )
        self.on_xmin_bar(self.xmin_bar)

        self.xmin_bar = None

BarGenerator下的update_bar函数如下,举个例子,我要形成1个小时的bar,以股指期货IC为例,中午是11:29收盘,下午是13:00开盘,形成的60分钟bar,从11:00开始,下一个bar是从14:00开始,中间缺失了13:00这根Bar。

def update_bar(self, bar: BarData):
    """
    Update 1 minute bar into generator
    """
    if not self.xmin_bar:
        self.xmin_bar = BarData(
            symbol=bar.symbol,
            exchange=bar.exchange,
            datetime=bar.datetime,
            gateway_name=bar.gateway_name,
            open_price=bar.open_price,
            high_price=bar.high_price,
            low_price=bar.low_price
        )
    else:
        self.xmin_bar.high_price = max(
            self.xmin_bar.high_price, bar.high_price)
        self.xmin_bar.low_price = min(
            self.xmin_bar.low_price, bar.low_price)

    self.xmin_bar.close_price = bar.close_price
    self.xmin_bar.volume += int(bar.volume)

    if not (bar.datetime.minute + 1) % self.xmin:
        self.xmin_bar.datetime = self.xmin_bar.datetime.replace(
            second=0, microsecond=0
        )
        self.on_xmin_bar(self.xmin_bar)

        self.xmin_bar = None

是否这样修改可以?
。。。
if not (bar.datetime.minute + 1) % self.xmin or bar.datetime.hour != self.xmin_bar.datetiem.hour:
。。。

2.0.2CSV载入,Close和Hihg会反过来,因此还没更新到2.0.3之前,可以把收盘价命名为Hihg,最高价命名为Close,这样载入就没问题了。

同标题,登录后,CTP交易连接成功、行情服务器连接成功、交易登录成功、行情服务器登录成功、结算信息确认成功。但就是不显示资金账号信息,也没有持仓信息。提示错过如下:
通过Pro登录没问题,
Exception in thread Thread-1:
Traceback (most recent call last):
File "C:\Users\jacky\VNConda\lib\threading.py", line 917, in _bootstrap_inner
self.run()
File "C:\Users\jacky\VNConda\lib\threading.py", line 865, in run
self._target(*self._args, **self._kwargs)
File "C:\Users\jacky\VNConda\lib\site-packages\vnpy\event\engine.py", line 60, in _run
self._process(event)
File "C:\Users\jacky\VNConda\lib\site-packages\vnpy\event\engine.py", line 73, in _process
[handler(event) for handler in self._handlers[event.type]]
File "C:\Users\jacky\VNConda\lib\site-packages\vnpy\event\engine.py", line 73, in <listcomp>
[handler(event) for handler in self._handlers[event.type]]
AttributeError: 'LogMonitor' does not have a signal with the signature signal(PyQt_PyObject)

但通过PRO登录没有该问题,然后点击功能选项中的CTA策略,提示如下错误:
Traceback (most recent call last):
File "C:\Users\jacky\VNConda\lib\site-packages\vnpy\trader\ui\mainwindow.py", line 178, in connect
dialog = self.connect_dialogs.get(gateway_name, None)
AttributeError: 'MainWindow' object has no attribute 'connect_dialogs'

用的就是2.0版本的。通过vnconda界面启动进入的。

提示错误如下:
Traceback (most recent call last):
File "C:\Users\jacky\VNConda\lib\threading.py", line 917, in _bootstrap_inner
self.run()
File "C:\Users\jacky\VNConda\lib\threading.py", line 865, in run
self._target(*self._args, **self._kwargs)
File "C:\Users\jacky\VNConda\lib\site-packages\vnpy\event\engine.py", line 60, in _run
self._process(event)
File "C:\Users\jacky\VNConda\lib\site-packages\vnpy\event\engine.py", line 73, in _process
[handler(event) for handler in self._handlers[event.type]]
File "C:\Users\jacky\VNConda\lib\site-packages\vnpy\event\engine.py", line 73, in <listcomp>
[handler(event) for handler in self._handlers[event.type]]
AttributeError: 'BacktesterManager' does not have a signal with the signature signal_log(PyQt_PyObject)

RQDATA连接成功,点击下载数据,开始下载,等了一会出现闪退,然后想继续打开其他任何模块(回撤、策略等),出现“ 'mainwindow' object has no attribute 'widgets' ”错误报告,请帮忙看看是怎么回事,谢谢。

原来的策略买入了1手IC1905,第二天重新启动VNPY进入,点击策初始化、策略启动后,POS显示为0,导致了策略重新开了一手新的仓位。这个怎么处理呢,如果每天都重新启动,岂不是原来的仓位和重新启动的策略之间没有关联? 要是遇到不小新机器重启等情况,感觉悲剧了。有劳老师回答,谢谢!

同问,坐等答案

策略没有冻结挂单呀,我又试了下,再手工开一手fu1909,然后改仓位变成2手,结果手动新开的这一手,我也平不掉,还是显示拒单。。。

模拟跑量化程序,策略开的单子,用交易界面无法手动平仓,状态是“拒单”,如何处理呢? 如何才能平仓呀?

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

沪公网安备 31011502017034号

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