2011-02-28 5 views
1

Je suis nouveau sur python et je suis en train de tester le module financier matploblib.Python - Finance Matplotlib related

J'ai besoin pour obtenir les valeurs de prix et date à laquelle le MA20 = MA50

Donnez-moi une idée sur la façon de le faire.

Voici mon code:

# Modules 
import datetime 
import numpy as np 
import matplotlib.finance as finance 
import matplotlib.mlab as mlab 
import matplotlib.pyplot as plot 

# Define quote 
startdate = datetime.date(2005,1,1) 
today = enddate = datetime.date.today() 
ticker = 'nvda' 

# Catch CSV 
fh = finance.fetch_historical_yahoo(ticker, startdate, enddate) 

# From CSV to REACARRAY 
r = mlab.csv2rec(fh); fh.close() 
# Order by Desc 
r.sort() 


### Methods Begin 
def moving_average(x, n, type='simple'): 
    """ 
    compute an n period moving average. 

    type is 'simple' | 'exponential' 

    """ 
    x = np.asarray(x) 
    if type=='simple': 
     weights = np.ones(n) 
    else: 
     weights = np.exp(np.linspace(-1., 0., n)) 

    weights /= weights.sum() 


    a = np.convolve(x, weights, mode='full')[:len(x)] 
    a[:n] = a[n] 
    return a 
### Methods End 


prices = r.adj_close 
dates = r.date 
ma20 = moving_average(prices, 20, type='simple') 
ma50 = moving_average(prices, 50, type='simple') 


plot.plot(prices) 
plot.plot(ma20) 
plot.plot(ma50) 
plot.show() 

Répondre

3

Puisque vous utilisez numpy, vous pouvez utiliser l'indexation booléenne de numpy pour les tableaux:

equal = ma20==ma50 
print(dates[equal]) 
print(prices[equal]) 

« égal » est un tableau booléen de la même longueur que dates et prix. Numpy sélectionne alors à partir des dates et des prix uniquement les entrées où égal == True, ou, de manière équivalente, ma20 == ma50.

+0

Ceci est l'une des caractéristiques les plus cool des tableaux numériques. –

+0

Merci pour la réponse. Cela fonctionne, mais attrape seulement une occurrence, il est possible d'attraper toutes les occurrences? Cordialement, –

+1

Le problème était les décimales, égal = np.round (ma20,2) == np.round (ma50,2) –