2011-02-28 11 views
1

私はPythonを初めて使い、finance matploblibモジュールをテストしています。Python - Finance Matplotlib related

私はMA20 MA50 =

は私にこれを行う方法の手がかりを与える際の価格や日付の値を取得する必要があります。ここで

は私のコードです:

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

答えて

3

あなたがnumpyのを使用しているので、あなたは配列のためにnumpyののブールインデックスを使用することができます。

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

「等しい」と同じ長さのブール配列です日付と価格。 Numpyは日付と価格から、等しい== True、または同等にma20 == ma50のエントリのみを選択します。

+0

これはnumpy配列の最もクールな機能の1つです。 –

+0

返事をありがとう。それは動作しますが、1つのオカレンスだけをキャッチします。すべてのオカレンスをキャッチすることは可能ですか?よろしく、 –

+1

問題は小数だった、等しい= np.round(ma20,2)== np.round(ma50,2) –