2014-02-18 5 views
0

Я создаю генератор сигналов на основе классов, который, учитывая список цен и список средних значений, создает «покупку» сигнала «продавать» в данный день, если цена с этого дня больше, чем в среднем, но за день до того, как он был не таким большим, в основном, когда цена пересекает среднее значение, оно дает сигнал продажи и сигнал покупки, когда цена пересекается по средним значениям (она ниже средней в день, но за день до этого не было) это мой код, но он просто возвращает список с пустыми строками из 3-го случая.Сложность с логикой сравнения индексов

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

Ошибка, которую вы получаете, вероятно, является синтаксической ошибкой и не имеет ничего общего с фактической целью кода. Независимо от того, вы должны опубликовать фактическую трассировку, которую вы получили. – Iguananaut

+0

@Iguananaut Я исправил синтаксис, но он не возвращает правильный результат. –

ответ

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: 

т.е. проверки, является ли цена пошла снизу или равно среднему значению выше среднего.

Смежные вопросы