VeighNa量化社区
你的开源社区量化交易平台
Member
avatar
加入于:
帖子: 9
声望: 0

description
疑问:
为什么 self.load_bar(10) 要设计成“用最前面的(10)天的历史数据来初始化策略”,
而没有设计成“用最前面的(10)【周期】的历史数据来初始化策略”,
比如,用1分钟线回测,就加载前10根1分钟线数据,我认为不应该是:用1分钟线回测,加载前10天的1分钟线,
话又说回来,假如vnpy里的K线周期选择了周线,self.load_bar(5)要加载前5天的数据,也就加载了1根周线,

注:
https://www.vnpy.com/forum/topic/250-ti-wen-qian-qing-xian-kan-:vn-pyshi-yong-faq
里面有这个问答:
Q:初始化策略,默认initDays=10,改成初始一定数量的分钟数是不是更加合理?
A:若载入充足的历史数据,就可以立刻交易了。

这个回答里的意思,是不是在说:
函数 load_bar(10) 不是给回测用的,是给实盘交易用的。如果实盘运行时,载入了充足的历史数据,就可以立刻进行实盘交易了。
回测时,为了让回测和实盘的程序的行为一致,回测时,也支持了 load_bar(10) 函数。

综上,两个问题:
①load_bar函数为什么设计成加载xx天而不是加载xx周期的数据?
②问答里的回答到底是什么意思?

Member
avatar
加入于:
帖子: 9
声望: 0

右键图像=>在新标签页中打开图像,可以查看清晰图像,

Member
avatar
加入于:
帖子: 4622
声望: 284

arraymanager的默认size是100,10根分钟线是不够am初始化的,且10只是示例策略的长度,可以根据自身需求进行调整。

Member
avatar
加入于:
帖子: 9
声望: 0

xiaohe wrote:

arraymanager的默认size是100,10根分钟线是不够am初始化的,且10只是示例策略的长度,可以根据自身需求进行调整。
你是不是这个意思:
回测1分钟线时,函数load_bar(10)设置预先加载10天而不是10个1分钟周期的数据是合理的,
因为ArrayManager(size=100)就要求用100个数据初始化,10天的1分钟K线数据用来初始化它绰绰有余,
且10只是示例策略的长度,你也可以自己调整它,比如调整成1,load_bar(1)函数只加载1天的1分钟数据,至少也二三百条数据了,也足够初始化的,

Member
avatar
加入于:
帖子: 9
声望: 0

其实我问这个问题的初衷是这样的:
我想尝试分钟线策略,就准备了2022年10月的数据期货1分钟线,感觉好几千条数据了,先跑一下学一学vnpy咋用的吧,
然后示例策略一跑,直接报错误提示,大概是"历史数据不足,回测终止",
调试之后发现是load_bar(20)的问题,预先加载了前20天的1分钟线,把1个月的1分钟K线全预先加载完了,没有数据可回放了,
我认为load_bar的参数,应该定义成回测周期比较合理,
想改又不敢改,怕有坑,本来程序好好地,我改动了这个模块的一个参数的含义,导致另一个模块出问题了,得不偿失,
就想问问,为啥这样设计,load_bar的参数的单位固定为日,而不是周期,有什么特殊原因吗?

Member
avatar
加入于:
帖子: 124
声望: 4

因为在策略当中,load_bar通常用来进行初始化,每load一根K线都会调用一次on_bar,把K线传到Array_management里面,直到时间序列数据准备充分,再进行策略的回测和交易(因为交易信号的计算需要用到Array_management)。至于你说的参数固定为日而不是周期这个设计,vnpy 对于K线都是先合成分钟级别,再用分钟合成其他,所以下载数据的过程都是从底层数据库先把分钟级别下载出来,然后调用on_bar,根据自己的策略逻辑再合成其他的周期

© 2015-2022 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

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