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

xiaohe wrote:

因为rqdata升级了,可以用2.9.33版本的rqdatac
我升级到最新的rqdatac 为什么还是不行呢

arnego wrote:

hxxjava wrote:

arnego wrote:

为什么合成比如5分钟,有的时候是在5分钟最后,有的时候是在下一分钟开始?
有的时候收盘最后扔了单子,然后被拒了,然后有时候开盘会补回,有时候补回?
我的理解是有时候开盘那一瞬间才完成上一根bar?

因为:
1)tick推动1分钟合成bar的生成,然后1分钟合成bar推到5分钟合成bar的生成。
2)这导致你在5分钟合成bar的on_5min_bar()【加入你策略中就叫着个名字】中做的交易不是由时间来触发的,而是取决于新的5分钟合成K线的第一个tick数据是何时出现的。
3)如果新的5分钟合成bar的第一个tick数据来的早,你的策略就会结束旧的5分钟合成bar,然后使用它作为参数早执行交易,如果来的晚就晚执行。道理就是如此。

感谢回复,请问这个有办法标准化到第二天开盘再执行吗?
没有处理结果了?

用Python的交易员 wrote:

  1. 理论上可以,但是不推荐,RQData是查询接口所以延时会比较大,用于初始化没问题,但是实盘中每根K线都去查就不合适了
  2. 不会开单,因为已经收盘了,可以自己在on_bar函数下加个判断,时间大于14:59则缓存委托指令,第二天开盘发出

请问陈总,时间大于14:59 缓存交易指令,代码层面这个怎么操作?

xiaohe wrote:

为了避免信号闪烁的问题,策略都是默认访问的是最近一根已经走完的K线数据

请问何老师,如何实现buy/sell at next bar at market price 这样的逻辑?因为在实盘的实际场景中,onbar结束后才开始计算逻辑,计算完的下单肯定就是第二根K bar 刚开始的时候,实现on_bar_open 这样的方式下单呢?

在做组合策略的时候,启动策略后的第一次交易,所有的商品开仓都是一个方向,同时做多或者同时做空,第一次开仓被平仓有以后,好像各自的开平才算正常的策略逻辑的开平,请问这个大概是一个什么样的问题?

xiaohe wrote:

可以参考微信公众号里进阶课程-CTA策略里的08课(K线的自定义合成)把一分钟合成逻辑改成从上一分钟的51秒到这一分钟的50秒试试

正常的策略逻辑应该不能这样操作的,个人最好自己写个on_baropen的事件或者类似的功能

青青子荆 wrote:

我用的就是官方的示例模板,你看下是不是不小心修改了这里

我也使用官方的模板 还是报错

青青子荆 wrote:

description
请确认一下你的on_bar函数有没有多传入self参数,如果有的话把self参数去掉即可

可以给我一个你的模板吗,你把策略逻辑全部删除就好,感谢!!!!

用Python的交易员 wrote:

Chiang wrote:

环境:vnpy-2.1.9/pyhton=3.7.9/rq数据
从报错中看应该是bar没有数据,导致获取不到bar的相关属性。
不知道这应该如何处理?

description

请在调用bg.update_bar之前,判断下bar对象是否为None,不是再推送给bg

另外我不是直接从rq 拉的数据吗,会为空?

用Python的交易员 wrote:

Chiang wrote:

环境:vnpy-2.1.9/pyhton=3.7.9/rq数据
从报错中看应该是bar没有数据,导致获取不到bar的相关属性。
不知道这应该如何处理?

description

请在调用bg.update_bar之前,判断下bar对象是否为None,不是再推送给bg

我是用官方的demo 也出现这样的问题
: 触发异常已停止
Traceback (most recent call last):
File "C:\vnpy\vnpy\app\portfolio_strategy\engine.py", line 325, in call_strategy_func
func(params)
File "C:\vnpy\vnpy\app\portfolio_strategy\strategies\demo_strategy.py", line 211, in on_tick
self.on_bars(bars)
File "C:\vnpy\vnpy\app\portfolio_strategy\strategies\demo_strategy.py", line 222, in on_bars
bg.update_bar(bar)
File "C:\vnpy\vnpy\trader\utility.py", line 264, in update_bar
self.update_bar_minute_window(bar)
File "C:\vnpy\vnpy\trader\utility.py", line 272, in update_bar_minute_window
dt = bar.datetime.replace(second=0, microsecond=0)
AttributeError: 'NoneType' object has no attribute 'datetime'

xiaohe wrote:

对比一下你的策略和示例策略吧,重点比较一下on_bar函数

我就是在示例策略上之修改了策略逻辑,其他的都没有修改

环境:vnpy-2.1.9/pyhton=3.7.9/rq数据
从报错中看应该是bar没有数据,导致获取不到bar的相关属性。
不知道这应该如何处理?

description

xiaohe wrote:

可以参考4楼

这样简单的问题,我肯定早就核查过了

xiaohe wrote:

可以参考4楼

都是模板策略默认的参数,size=100,load_bars = 10

另外又做了其他条件的的测试,测试方法:
在一个固定周期的情况下(例如30min),分别加载2-3个商品,和加载12-14个商品的情况下,按照常理来说,后者的情况会比较容易出现交易信号,因为有更多的商品,然而实际情况却相反,我加载2-3个商品的时候,30天天有交易信号,而加载12-14个商品的时候,半年以后才有交易信号,这个是为什么呢?

description
加载个30分钟就是这样了

description

description

使用demo_strategy,5分钟周期,都要20号左右才有交易信号,这个正常吗?这个是官方提供的策略

kingmo888 wrote:

肯定哪里整错了。
bg的bar类型,是day还是hour还是min,区分清楚。

毕竟我已经实盘的玩意,有类似问题早就应该遇到了。
首先感谢你的回复。bg的bar类型是min,我的策略都没使用过除min以外的其他类型

问题的产生:
我在做组合策略的时候,选择的周期为1小时,按照指标计算需求bar的长度,至多一个月以内就会产生交易信号,然而实际结果是一年也就最后两个月有交易(加载一年时间的数据做回测),一年中绝大部分时间是没有交易的。问题就此产生,开始怀疑自己是不是那儿代码写错了。

验证:
1、代码问题:把已有的vnpy 官方模板策略的逻辑线路和自己的策略逻辑做了多次对比,没有发现自己策略有关于这方面的逻辑漏洞。
2、vnpy官方策略加载数据做回测验证。
①、加载trendfollowingstrategy,该策略是1分钟周期,我的测试结果下来是,除开周末,也大概需要两个礼拜才能产生交易信号。
②、加载策略组合7天课程给的demostrategy策略,我加载了近一年的多个商品的数据,基本在数据日期起点6个月以后才有交易信号。

在实盘的交易过程中,假如我使用到30m 或者60m,我是不可能等半年一年才开始有交易信号的。所以的觉得这是一个比较严重的问题,希望官方能帮忙解答。

vnpy的项目文件包里面有丰富的代码示例策略

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

沪公网安备 31011502017034号

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