我正在创建一个基于类的信号发生器,给出一个价格列表和一个平均值列表,如果当天的价格高于平均值,它会在给定的一天创建“买入”卖出信号。在它没有更大的前一天,所以基本上当价格超过平均值时,它会在价格低于平均价格时给出卖出信号和买入信号(它低于一天的平均价格,但是它的前一天不是' t)这是我的代码,但它只返回一个包含第三种情况的空字符串的列表。
class Simplemovingaverage_signals():
def __init__(self, list_of_prices, list_of_averages):
self.list_of_prices = list_of_prices
self.list_of_averages = list_of_averages
def calculate(self):
signals = []
for i, j in zip(self.list_of_prices, self.list_of_averages):
if i > j and not i-1 > j-1:
signals.append('Sell')
elif i < j and not i-1 < j-1:
signals.append('Buy')
else:
signals.append('')
return signals
答案 0 :(得分:2)
您在your earlier question中有完全相同的问题:
if i > j and not i-1 > j-1:
这怎么可能True
?如果i
大于j
,则i-1
将大于j-1
。
我认为您一直在尝试使用列表中的项目作为索引,尝试将每个值与之前的值进行比较。因此你可能想要:
for i1, i2, j1, j2 in zip(prices, prices[1:], aves, aves[1:]):
if i2 > j2 and i1 <= j1:
即。检查价格是否从低于或等于平均值高于平均值。