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

ctaTemplate 模板构造函数中,self.am = ArrayManager(21); 然后on_day_bar中判断am初始化完成后,self.atr_value = round(self.am.atr(20,array= False),2),并打印输出self.write_log(f"atr的值是:{self.am.atr(20,array= True)}"),结果[nan,nan ……nan 120](长度21);但如果把ArrayManager(26),参数换成26,打印的结果【nan,nan……nan,89,99,98,102,108】,最后一个atr【-1】本应该是120的,为啥改变了Arraymanager的参数,atr的值会跟着变化?

Member
avatar
加入于:
帖子: 4713
声望: 287

因为传的是am的size长度的array给talib算的,而且你传的window还不同

Member
avatar
加入于:
帖子: 104
声望: 5

xiaohe wrote:

因为传的是am的size长度的array给talib算的,而且你传的window还不同

atr(20)的参数是20,而arraymanager()参数只是存储k线序列的长度,只要大于20(我的例子中,参数21,变成26),不就应该能计算出atr,而且应该是一样的结果吗?
比如同一个arraymanager,需要计算atr(20),sma(25),那么arraymanager(n)只要n >25就应该算出atr,sma,但实际过程传入的n(n>25)改变,atr值就改变了

Member
avatar
加入于:
帖子: 4713
声望: 287

我把size看成入参了,入参不同结果肯定不同。size不同结果导致的不同可以自己创建不同长度的array传进talib试试看

Member
avatar
加入于:
帖子: 104
声望: 5

arraymanager(size),传入不同size,atr(20)也不同,这个应该是atr用talib计算有问题了;我是创建了一个arraymanager(26),需要计算atr(20),sma(25),因为sma需要25根,传入了arraymanager的size26,发现atr(20)不对了,然后把size变成20,atr(20)才对,但sma就没法计算sma(25),不会要创建两个不同arraymanager去分别计算指标吧
sma(n)在size变动时,并不会发生变化(size>n条件下),而atr(n)在size变动时候,发生了变化,这个就不对了;

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

沪公网安备 31011502017034号

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