2014-07-26 2 views
3

J'écris des indicateurs techniques avec Python via Numpy. Dites, pour plus de commodité on a un np.array appelé Prix rempli de stock-prix et veut calculer un indicateur d'exemple comme:Analyse technique index négatif

for i in range (0,len(Price)): 
    Indicator[i]=2*Price[i]+3*Price[i-1]+ .... + 34*Price[i-10] 

Jusqu'à présent, je calcule séparément les 10 premières entrées de l'indicateur depuis Price[-9]=Price[len(Price)-9] et début la boucle for à 10. Y at-il un moyen de simplifier cela, par exemple omettre automatiquement les valeurs avec des indices négatifs comme Price [-5]?

Merci Vous

Répondre

1

Vous pouvez écrire votre transformation en termes numpy.convolve. Par exemple, si

>>> price 
array([-1, 4, 5, 0, -5, 2, -4, 4, 20, 1]) 
>>> coef 
array([10, -2, 1]) 

(où, pour simplifier les choses, je me sers seulement 3 éléments au lieu de 10), puis

coef[0] * price[t] + coef[1] * price[t-1] + coef[2] * price[t-2] 

est ce que np.convolve calcule et il prend également en charge initiale une partie de la série où nous n'avons pas 3 éléments:

>>> np.convolve(coef, price) 
array([-10, 42, 41, -6, -45, 30, -49, 50, 188, -26, 18, 1]) 

comme vous le voyez, pour le 1er élément -10 = 10 * -1 , pour le 2ème élément: 42 = 10 * 4 + -2 * -1, et, disons, le 7ème élément: -49 = 10 * -4 + -2 * 2 + 1 * -5.