Я пытаюсь объединить два источника кода, но безрезультатно. Я использую пример matplotlib Finance2.py по умолчанию (указанный ниже) с файлами JSON (также перечисленными ниже). раздел кода «finance.fetch_historical_yahoo» извлекает данные из .csv через Yahoo и помещает их в массив numpy. Проблема в том, что мне не нужно переводить данные Yahoo, мне нужно, чтобы данные JSON были переведены таким образом, чтобы их могла читать библиотека matplotlib.
Я пытаюсь объединить два источника кода, но безрезультатно. Я использую пример matplotlib Finance2.py по умолчанию (указанный ниже) с файлами JSON (также перечисленными ниже). раздел кода «finance.fetch_historical_yahoo» извлекает данные из .csv через Yahoo и помещает их в массив numpy. Проблема в том, что мне не нужно переводить данные Yahoo, мне нужно, чтобы данные JSON были переведены таким образом, чтобы их могла читать библиотека matplotlib.
finance2.py:
[code]import datetime import numpy as np import matplotlib.colors as colors import matplotlib.finance as finance import matplotlib.dates as mdates import matplotlib.ticker as mticker import matplotlib.mlab as mlab import matplotlib.pyplot as plt import matplotlib.font_manager as font_manager import json #to load json libraries for json data
fh = finance.fetch_historical_yahoo(ticker, startdate, enddate) #would like this call to be json # a numpy record array with fields: date, open, high, low, close, volume, adj_close)
r = mlab.csv2rec(fh); fh.close() r.sort()
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
def relative_strength(prices, n=14): """ compute the n period relative strength indicator http://stockcharts.com/school/doku.php?id=chart_school:glossary_r#relativestrengthindex http://www.investopedia.com/terms/r/rsi.asp """
up = (up*(n-1) + upval)/n down = (down*(n-1) + downval)/n
rs = up/down rsi[i] = 100. - 100./(1.+rs)
return rsi
def moving_average_convergence(x, nslow=26, nfast=12): """ compute the MACD (Moving Average Convergence/Divergence) using a fast and slow exponential moving avg' return value is emaslow, emafast, macd which are len(x) arrays """ emaslow = moving_average(x, nslow, type='exponential') emafast = moving_average(x, nfast, type='exponential') return emaslow, emafast, emafast - emaslow
#ax3.set_yticks([]) # turn off upper axis tick labels, rotate the lower ones, etc for ax in ax1, ax2, ax2t, ax3: if ax!=ax3: for label in ax.get_xticklabels(): label.set_visible(False) else: for label in ax.get_xticklabels(): label.set_rotation(30) label.set_horizontalalignment('right')
ax.fmt_xdata = mdates.DateFormatter('%Y-%m-%d')
class MyLocator(mticker.MaxNLocator): def __init__(self, *args, **kwargs): mticker.MaxNLocator.__init__(self, *args, **kwargs)
# at most 5 ticks, pruning the upper and lower so they don't overlap # with other ticks #ax2.yaxis.set_major_locator(mticker.MaxNLocator(5, prune='both')) #ax3.yaxis.set_major_locator(mticker.MaxNLocator(5, prune='both'))