我对Python很新,所以请原谅这个可能微不足道的问题。
考虑到我为特定期货合约计算的RSI
值的变化,我试图生成买入和卖出信号。在我的DataFrame
中,我创建了一个名为R S
I的列,其中包含我引用的值,我想要做的是根据预定的逻辑检查每个进程值,如果是符合标准,生成"购买"或者"销售"然后增加每个生成的信号的计数。即我想象一个使用[i]
循环比较[i+1]
和for
的解决方案,但是我得到的错误是 -
TypeError: cannot do label indexing on class'pandas.indexes.range.RangeIndex with these indexers [25.714285714285722] of class 'numpy.float64'
这是我的代码
for i in es.RSI:
Buy = 0
Sell = 0
if es.RSI[i] < 30.0 and es.RSI[i+1] >30.0:
es.RSI[i] = "Buy"
Buy = Buy +1
if es.RSI[i] >70.0 and es.RSI[i+1] < 70.0 :
es.RSI[i] = "Sell"
Sell = Sell +1
答案 0 :(得分:0)
根据错误,看起来你正在使用float作为数组索引值。也许尝试替换
的每个索引es.RSI[i]
与
es.RSI[int(i)]
(与es.RSI [i + 1]相同,将其替换为es.RSI [int(i)+1]。)
答案 1 :(得分:0)
你的循环
for i in es.RSI:
迭代来自er.RSI
数组的项目,因此您的i
包含RSI的值,而不是数组的索引。这就是你看到这个错误的原因
TypeError: cannot do label indexing on class'pandas.indexes.range.RangeIndex with these indexers [25.714285714285722] of class 'numpy.float64'
要迭代数组索引,您应该使用
for i in range(len(es.RSI)-1):