Wykresy cenowe na jednym widoku – Python

W tym wpisie podzielę się z wami kodem za pomocą którego w łatwy sposób będziesz w stanie wyświetlić wykresy cenowe w formie świec japońskich na jednym ekranie przy użyciu języka programowania python. Zakres czasu możesz modyfikować dowolnie w zależności od potrzeb.

Biblioteki jakie będą potrzebne do prawidłowego działania kodu.

import requests
import pandas as pd
import matplotlib.pyplot as plt
import mplfinance as mpf
Python

Jeżeli nie masz tych bibliotek zainstalowanych to polecam użyć w wierszu poleceń pip install

pip install requests
pip install pandas
pip install matplotlib
pip install mplfinance
Python

Parametryzowanie naszego kodu python i pobieranie danych

Kolejna część kodu służy nam do wybrania symboli kryptowalut oraz interwału z jakiego chcemy skorzystać.

Uwaga!

Nasz kod będzie rysował siatkę 3×3 co oznacza że potrzebujemy podać 9 różnych kryptowalut do uzyskania zamierzonego efektu.

Podczas korzystania z kodu polecam wybrać interwał dniowy a datę zapisaną w zmiennej end_date najlepiej datę bieżącego dnia. Jako zmienną start_date określamy ilość dni wstecz w tym wypadku 14 od zmiennej end_date.

# Parametry do pobierania danych z Binance, forma symboli musi zostać zachowana
symbols = ['BTCUSDT', 'ADAUSDT', 'AAVEUSDT', 'ETHUSDT','LTCUSDT','ALGOUSDT','BNBUSDT','FILUSDT','FTMUSDT']  # Pary walutowe
interval_api = '1d'  # Interwał czasowy w API (1 dzień)

# Określenie daty początkowej i końcowej
end_date = pd.to_datetime('2023-11-18 00:00:00')
start_date = end_date - pd.DateOffset(days=14)  # Ostatnie 2 tygodnie (14 dni)
Python

Dochodzimy praktycznie do najważniejszej części naszego kodu czyli fragmentu za pomocą którego pobierzemy potrzebne dane do narysowania wykresów. Dane będziemy pobierać z giełdy BINANCE zgodnie z ich dokumentacją. W tej części tworzymy definicję o nazwie get_binance_data która przyjmuje cztery argumenty:

  • symbol: wcześniej określiłem w liście o nazwie “symbols”
  • interval: Interwał czasowy zdefiniowany powyżej jako “interval_api”
  • start_date: zdefiniowany powyżej jako “start_date”
  • end_date: zdefiniowany powyżej jako “end_date”
# Funkcja do pobierania danych począwszy od konkretnej daty i godziny
def get_binance_data(symbol, interval_api, start_date, end_date):
    api_url = f"https://api.binance.com/api/v1/klines?symbol={symbol}&interval={interval_api}"
    start_time = int(start_date.timestamp() * 1000)
    end_time = int(end_date.timestamp() * 1000)
    api_url_with_time = f"{api_url}&startTime={start_time}&endTime={end_time}"
    
    response = requests.get(api_url_with_time)
    data = response.json()
    df = pd.DataFrame(data, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume', 'close_time', 'quote_asset_volume', 'number_of_trades', 'taker_buy_base_asset_volume', 'taker_buy_quote_asset_volume', 'ignore'])
    df = df.set_index('timestamp')
    df.index = pd.to_datetime(df.index, unit='ms')
    df = df.astype(float)
    return df
Python

Definicja nazwana get_binance_data przyjmuje cztery argumenty:

  1. Tworzenie adresu URL do API Binance:
    api_url = f"https://api.binance.com/api/v1/klines?symbol={symbol}&interval={interval}"
    Definiujemy adres URL, który jest używany do pobierania danych z giełdy Binance. Adres zawiera symbol instrumentu (symbol) i interwał czasowy (interval). Generalnie ten fragment kodu po prostu trzeba skopiować.
  2. Przetwarzanie daty i godziny na timestampy w milisekundach:
    start_time = int(start_date.timestamp() * 1000) end_time = int(end_date.timestamp() * 1000)
    Przywołuje tutaj zmienną daty i godziny (start_date i end_date) w formie timestamp przekształcając wartość na milisekundy, które są używane w zapytaniu do API.
  3. Rozszerzenie adresu URL o daty początkową i końcową:
    api_url_with_time = f"{api_url}&startTime={start_time}&endTime={end_time}" Dodaje się timestampy do adresu URL, aby określić zakres czasowy, z którego pobierane są dane.
  4. Wysłanie zapytania do API Binance:
    W kolejnej linijce kodu wykorzystuje się bibliotekę request do wysłania zapytania GET do API Binance.
    response = requests.get(api_url_with_time)
  5. Przetworzenie danych JSON na ramkę danych (DataFrame):
    Dane pobierane z Binance do dalszej pracy trzeba zapisać w ramkę danych. Każda ramka danych musi mieć odpowiednie nagłówki kolumn, które odpowiednio nazywam w poniższym kodzie:
    data = response.json() df = pd.DataFrame(data, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume', 'close_time', 'quote_asset_volume', 'number_of_trades', 'taker_buy_base_asset_volume', 'taker_buy_quote_asset_volume', 'ignore'])
    Do utworzenia ramki danych oczywiście z pomocą przychodzi biblioteka pandas.
  6. Ustawienie indeksu na kolumnie czasowej i konwersja typów danych:
    df = df.set_index('timestamp')
    df.index = pd.to_datetime(df.index, unit='ms')
    df = df.astype(float)
    Ostatnie linijki kodu to już praktycznie kosmetyka. W ramce danych ustawiam nowy indeks w tym wypadku chce aby docelowo indeksem była data. W tym celu zamieniam otrzymane wartości z Binance pobrane jako timestamp wyrażone w milisekundach na datę .

Wykresy cenowe – wizualizacja za pomocą Matplotlib

W tej sekcji zajmiemy się wizualizowaniem pobranych danych z giełdy Binance.

# ustawienie odpowiedniego stylu do prezentowania wykresów
plt.style.use('ggplot')

# Tworzenie figury i osi
fig, axes = plt.subplots(3, 3, figsize=(12, 8))
fig.suptitle('Wykresy świecowe dla różnych par walutowych')

# # Inicjalizacja pustych wykresów
axs = axes.ravel()
plots = []

for i, symbol in enumerate(symbols):
    data = get_binance_data(symbol, interval_api, start_date, end_date)
    ax = axs[i]
    plot = mpf.plot(data, type='candle', ax=ax)
    ax.set_title(symbol)
    plots.append(plot)

plt.tight_layout()
plt.show()
Python

Pierwsza część kodu ustawia odpowiedni styl wykresów. Więcej tego typu styli znajdziesz bezpośrednio na stronie matplotlib. Kolejny fragment określa nam siatkę wykresów w tym wypadku 3×3 co oznacza, że będziemy mieli możliwość wyświetlenia aż 9 wykresów. Na samym końcu tworzymy prostą pętle for za pomocą której narysujemy wszystkie 9 wykresów.

Zwieńczenie naszych działań

Za pomocą prostego kodu payton oraz przy użyciu kilku bibliotek otrzymujemy tablicę składającą się z 9 wykresów cenowych na podstawie danych zaczytanych z giełdy Binance. Dzięki takiemu rozwiązaniu w bardzo przejrzysty sposób możemy obserwować korelację pomiędzy poszczególnymi aktywami.

wykresy cenowe python, sferamanagera

Warto wspomnieć o tym, że wyświetlenie dowolnej ilości wykresów zależy tylko i wyłącznie od naszej wyobraźni a w przypadku takich narzędzi jak tradingview od zasobności naszego portfela. Na dzień dzisiejszy, żeby wyświetlić na platformie tradingview 8 wykresów na jednym widoku musielibyśmy wykupić pakiet premium kosztujący 50 $ miesięcznie.

Więcej przydatnych kodów do lepszej interpretacji rynku znajdziesz: tutaj