Python - Финансовый Matplotlib связанных - PullRequest
1 голос
/ 28 февраля 2011

Я новичок в python, и я тестирую финансовый модуль matploblib.

Мне нужно получить значения цены и даты, когда 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()

1 Ответ

3 голосов
/ 28 февраля 2011

Поскольку вы используете numpy, вы можете использовать логическое индексирование numpy для массивов:

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

'equal' - это логический массив такой же длины, что и даты и цены.Затем Numpy выбирает из дат и цен только те записи, которые равны == True или, что эквивалентно, ma20 == ma50.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...