Alexandr 0 Опубликовано: 2 февраля Здравствуйте, у меня не получается подобный этому график с биржи Bittrex. Помогите разобраться. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
admin 22 Опубликовано: 3 февраля Добрый день! Для биттрекса нужно немного изменить код, вот так: import numpy import talib import requests import json import time from matplotlib.finance import candlestick2_ohlc import matplotlib.animation as animation import matplotlib.pyplot as plt import matplotlib.ticker as ticker from datetime import datetime BEAR_PERC = 70 BULL_PERC = 30 PAIR = 'USD-BTC' fig, ax = plt.subplots(3, sharex=True) fig.comment = plt.figtext(.7,.05, '') def update_graph(interval): data = requests.get("https://international.bittrex.com/Api/v2.0/pub/market/GetTicks?_=1500915289433&marketName={pair}&tickInterval=fiveMin".format(pair=PAIR)).json()['result'][-200:] quotes = {} quotes['open']=numpy.asarray([item['O'] for item in data]) quotes['close']=numpy.asarray([item['C'] for item in data]) quotes['high']=numpy.asarray([item['H'] for item in data]) quotes['low']=numpy.asarray([item['L'] for item in data]) xdate=[datetime.strptime(item['T'], '%Y-%m-%dT%H:%M:%S') for item in data] ax[0].xaxis.set_major_locator(ticker.MaxNLocator(6)) def chart_date(x,pos): try: return xdate[int(x)] except IndexError: return '' ax[0].clear() ax[0].xaxis.set_major_formatter(ticker.FuncFormatter(chart_date)) candlestick2_ohlc(ax[0], quotes['open'],quotes['high'],quotes['low'],quotes['close'],width=0.6) # print(ax[0].get_xdata()) fig.autofmt_xdate() fig.tight_layout() macd, macdsignal, macdhist = talib.MACD(quotes['close'], fastperiod=12, slowperiod=26, signalperiod=9) ax[1].clear() ax[1].plot(macd, color="y") ax[1].plot(macdsignal) idx = numpy.argwhere(numpy.diff(numpy.sign(macd - macdsignal)) != 0).reshape(-1) + 0 inters = [] for offset, elem in enumerate(macd): if offset in idx: inters.append(elem) else: inters.append(numpy.nan) ax[1].plot(inters, 'ro') #ax[1].scatter(x=ax[0].get_xdata(), y=inters, c='b') hist_data = [] max_v = 0 for offset, elem in enumerate(macdhist): activity_time = False curr_v = macd[offset] - macdsignal[offset] if abs(curr_v) > abs(max_v): max_v = curr_v perc = curr_v/max_v if ( (macd[offset] > macdsignal[offset] and perc*100 > BULL_PERC) # восходящий тренд or ( macd[offset] < macdsignal[offset] and perc*100 < (100-BEAR_PERC) ) ): v = 1 activity_time = True else: v = 0 if offset in idx and not numpy.isnan(elem): # тренд изменился max_v = curr_v = 0 # обнуляем пик спреда между линиями hist_data.append(v*1000) ax[2].clear() ax[2].fill_between([x for x in range(len(macdhist))], 0, hist_data, facecolor='green', interpolate=True) plt.gcf().texts.remove(fig.comment) fig.comment = plt.figtext(.7,.05, '%s %s%s' % (PAIR, time.ctime(), ' ТОРГУЕМ!!!! ' if activity_time else ''), style='italic', bbox={'facecolor':'red' if activity_time else 'green', 'alpha':0.5, 'pad':10}) ani = animation.FuncAnimation(fig, update_graph, interval=1000) plt.show() и всё получится Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Alexandr 0 Опубликовано: 15 часов назад Всё круто, график отрисовывается. Но есть но - толи из-за интернета, толи сам bittrex обрывает связь. Какой-нибудь restart бы добавить надо бы. А то приходится закрывать график и снова открывать каждый раз. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах