均线窗口是1也有可能报错,比如:
import talib, numpy
talib.SMA(numpy.array([i * 0.1 for i in range(1, 9)]), 1)
然后会报错:
Exception: TA_SMA function failed with error code 2: Bad Parameter (TA_BAD_PARAM)
其实我问这个问题的初衷是这样的:
我想尝试分钟线策略,就准备了2022年10月的数据期货1分钟线,感觉好几千条数据了,先跑一下学一学vnpy咋用的吧,
然后示例策略一跑,直接报错误提示,大概是"历史数据不足,回测终止",
调试之后发现是load_bar(20)的问题,预先加载了前20天的1分钟线,把1个月的1分钟K线全预先加载完了,没有数据可回放了,
我认为load_bar的参数,应该定义成回测周期比较合理,
想改又不敢改,怕有坑,本来程序好好地,我改动了这个模块的一个参数的含义,导致另一个模块出问题了,得不偿失,
就想问问,为啥这样设计,load_bar的参数的单位固定为日,而不是周期,有什么特殊原因吗?
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分钟数据,至少也二三百条数据了,也足够初始化的,
好吧,有多了一个原因:写代码方便,用tick数据合成bar数据的代码相对简洁,
右键图像=>在新标签页中打开图像,可以查看清晰图像,
疑问:
为什么 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周期的数据?
②问答里的回答到底是什么意思?
我也想知道为什么这么设计。
同时想一想日线,2022-11-22日的日线,一般表示的是 [2022-11-22, 2022-11-23)时间段,或许可以认为这么设计是合理的,
回个帖把你顶到第一排,希望能有大佬详细解释原因,
云中居士 wrote:
同样的,我用VScode也遇到了这样的问题,断点调试无论如何都不能step into库代码
但是编辑界面可以通过Ctrl+对应类名进入文件中现在都折腾一个多星期了还是不行!!