2011-03-01 6 views
1

J'essaye d'obtenir une certaine traction avec Matplotlib et Numpy mais ce n'est pas très facile.Matplotlib et Numpy Math

Je fais un mini-projet pour commencer à traiter avec Matplotlib et Numpy mais je suis coincé ...

Voici le 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(2010,10,1) 
today = enddate = datetime.date.today() 
ticker = 'uso' 

# 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') 

# Get when ma20 crosses ma50 
equal = np.round(ma20,1)==np.round(ma50,1) 
dates_cross = (dates[equal]) 
prices_cross = (prices[equal]) 

# Get when ma20 > ma50 
ma20_greater_than_ma50 = np.round(ma20,1) > np.round(ma50,1) 
dates_ma20_greater_than_ma50 = (dates[ma20_greater_than_ma50]) 
prices_ma20_greater_than_ma50 = (prices[ma20_greater_than_ma50]) 

print dates_ma20_greater_than_ma50 
print prices_ma20_greater_than_ma50 

Maintenant, je dois faire quelque chose comme ça :

store the price of the "price_cross" 
see if one day after the "ma20_greater_than_ma50" statment is true, if true store the price as "price of the one day after" 
now do "next price_cross" - "price of the one day after" (price2 - price1) for all occurences 

Comment puis-je faire ce calcul et plus important. Comment puis-je obtenir une traction avec Matplotlib et Numpy. Quels livres devrais-je acheter?

Donnez-moi quelques indices.

Cordialement,

Répondre

5

Je suis d'accord avec Josh, mais voulait ajouter la galerie de matplotlib:

http://matplotlib.sourceforge.net/gallery.html

La plupart de mes parcelles Commençons copier directement quelque chose à ce que je veux, puis modifier pour l'adapter à mes besoins. La galerie matplotlib a de nombreux exemples.

3

Je dirais que vous ne devez pas nécessairement sortir et acheter des livres. Le meilleur (et moins cher) solution est de jeter un oeil à des tutoriels en ligne comme:

http://www.scipy.org/Tentative_NumPy_Tutorial

http://matplotlib.sourceforge.net/examples/index.html

et essayer de rassembler les choses de la documentation et la recherche des mots-clés pertinents. À partir du code que vous avez présenté (en supposant que vous l'ayez écrit), vous avez une certaine compréhension de numpy. Vous aurez besoin d'être un peu plus spécifique avec les problèmes que vous rencontrez pour obtenir une aide plus spécifique/détaillée.

2

Voici une liste pour commencer, vous trouverez probablement les pièces les plus importantes pour vous après la navigation à travers eux:

  1. Python tutoriel http://docs.python.org/tutorial/
  2. guide utilisateur Numpy de http://docs.scipy.org/doc/
  3. guide utilisateur Matplotlib http://matplotlib.sourceforge.net/users/index.html
  4. Numpy/scipy sources de documentation supplémentaires http://www.scipy.org/Additional_Documentation

Vous pouvez vous abonner aux listes de remplissage pour numpy et/ou matplotlib.

1

matplotlib et numpy ont une énorme liste de fonctions utiles, vous devriez toujours google avant d'implémenter. Par exemple, voir la fonction movplg de matplotlib.

Questions connexes