Перейти к публикации
Форум ботоводов

Отрисовка графика для MACD


Рекомендованные сообщения

Добрый день!

Для биттрекса нужно немного изменить код, вот так:

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):
    try:
      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})
    except:
      pass

ani = animation.FuncAnimation(fig, update_graph, interval=1000)
plt.show()

и всё получится

image.thumb.png.bcca5d8e411538472191bab30536ad38.png

Ссылка на сообщение
Поделиться на других сайтах
  • 3 weeks later...

Всё круто, график отрисовывается. Но есть но - толи из-за интернета, толи сам bittrex обрывает связь. Какой-нибудь restart бы добавить надо бы. А то приходится закрывать график и снова открывать каждый раз.

Снимок43.PNG

Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...