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

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

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

Здравствуйте, у меня не получается подобный этому график с биржи Bittrex. Помогите разобраться.

Снимок40.PNG

Поделиться сообщением


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

Добрый день!

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

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

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

image.thumb.png.bcca5d8e411538472191bab30536ad38.png

Поделиться сообщением


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

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

Снимок43.PNG

Поделиться сообщением


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

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×