列表[-1] 报告索引超出范围错误



我想获取列表的最后一个元素。我使用 list[-1],但它报告索引超出范围。该函数的步骤是针对范围(0,天(中的每个i,首先计算tr,然后让N =平均tr。将当前 N 与前 N 进行比较,如果当前 N>1.5 前一个 N,则生成信号 1,否则生成信号 0。如何解决这个问题?

代码如下:

def cal_N():
if days <= number_days: 
lst = []
for i in range(0,days): #cal tr
h_l = sh600004['high'][i]-sh600004['low'][i]
h_p = sh600004['high'][i]-sh600004['close'][i-1]
p_l = sh600004['close'][i-1]-sh600004['high']
tr = np.max(h_l,h_p,p_l)
lst.append(tr) #append tr
#calculate current N
current_N = np.mean(np.array(lst))
#signals['sys1 add'][date] = np.where( current_N > (N[-1]*0.5), 1.0, 0.0)
if current_N>(N[-1]*0.5):
positions['sh600004'] = 100 * signals['system1'] + 100*signals['system1'][i]
print(positions)
else:
positions['sh600004'] = 100 * signals['system1']
print(positions)
N.append(current_N)
else: 
h_l = sh600004['high'][0]-sh600004['low'][0]
h_p = sh600004['high'][0]-sh600004['close'][0]
p_l = sh600004['close'][0]-sh600004['low'][0]
# Calculate the True Range
tr = max(h_l, h_p, p_l)
current_N = (tr + (number_days -1)*(N))/number_days
#signals['sys1 add'][date] = np.where( current_N > (N[-1]*0.5), 1.0, 0.0)
if current_N>(N[-1]*0.5):
positions['sh600004'] =   100 * signals['system1'] + 100*signals['system1'][i]
print(positions)
else:
positions['sh600004'] = 100 * signals['system1'] 
print(positions)
N.append(current_N)

像这样?

In [1143]: [][-1]
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-1143-aeb23779f804> in <module>()
----> 1 [][-1]
IndexError: list index out of range

我没有看到N在哪里初始化。 但是如果它以[]开头,那么这个测试会有问题:current_N>(N[-1]*0.5). 即使索引有效,结果也是空的,比较也不起作用,current_N > [][]*.5都会引发错误。 因此,您有多种理由在N为空时测试或阻止此操作。

第一次进入循环时出现问题。此时,N 是一个空列表。可以通过添加检查列表是否为空来修复它,或者您可以为 N 提供默认值。

顺便说一下,计算股票的时间序列数据(真实范围或其他分析(,我建议你试试熊猫。它将保存循环并支持数组/矩阵操作。效率也会更高。

当您分析SH股票时,即使是JQK也可以帮助您更快地进行分析。

相关内容

  • 没有找到相关文章

最新更新