Essayez de tracer des graphiques en bougies Bitcoin et des indicateurs techniques en Python

table des matières

  1. Vue d'ensemble
  2. Installez mpl-finance
  3. Essayez de tracer avec mpl-finance
  4. Résumé

1. Vue d'ensemble

[Qiita] Créer des indicateurs techniques pour Bitcoin à l'aide de TA-LIB pour générer des indicateurs techniques pour le trading système dans l'environnement Anaconda suite est. Maintenant que j'ai les indicateurs techniques pour Bitcoin, j'aimerais tracer le graphique en bougies et les indicateurs créés ensemble.

Les informations du graphique Bitcoin sont décrites en supposant qu'elles ont déjà été acquises, donc si vous ne l'avez pas fait, veuillez vous référer à l'article Qiita ci-dessus et le créer.

Objectif: créer un graphique comme celui-ci
Screen Shot 2020-03-03 at 18.22.09.png

2. Installez mpl-finance

Activez l'environnement conda dans lequel vous souhaitez installer mpl-finance

Terminal


conda activate <Nom de l'environnement CONDA cible>
Exemple d'exécution: <nom de l'environnement CONDA cible> est "trading"
Screen Shot 2020-03-03 at 17.36.52.png

Installez mpl-finance avec pip

Je voulais vraiment faire l'installation de conda, mais je n'avais pas le package conda pour l'environnement cible, je vais donc l'installer avec pip.

Terminal


pip install mpl-finance
Exemple d'exécution
Screen Shot 2020-03-03 at 17.40.07.png

Démarrez jupyter lab. Les locaux exécutent jupyter lab sans aucune option

Terminal


jupyter lab --ip=0.0.0.0 --no-browser
Exemple d'exécution
Screen Shot 2020-03-03 at 17.44.53.png

Accédez à jupyter lab avec un navigateur. Les personnes de l'environnement local démarreront automatiquement jupyter lab avec un navigateur.

Notez l'adresse IP externe entourée d'un cadre rouge Screen Shot 2020-03-03 at 17.47.02.png

Accédez à «: 8888» avec un navigateur Screen Shot 2020-03-03 at 17.50.19.png

Screen Shot 2020-03-03 at 17.52.06.png

3. Essayez de tracer avec mpl-finance

Obtenir des données Bitcoin OHLC

OHLC signifie Open (prix ouvert), Haut (prix élevé), Bas (prix bas), Fermer (prix de clôture) Puisque le contenu est le même que celui de l'article précédent, ceux qui l'ont déjà fait peuvent l'ignorer.

import requests
import pandas as pd
import numpy as np
import talib as ta

#1 jour de Cryptowatch à l'OHLC de BTC(14400 minutes)Créer une fonction qui obtient et retourne dans un DataFrame
def get_btc_ohlc(period=14400):

    #Demande à Cryptowatch
    response_data = requests.get("https://api.cryptowat.ch/markets/bitflyer/btcfxjpy/ohlc",params = { "periods" : period , "after" : 1})
    response_data = response_data.json()

    #Transformé en DataFrame
    df_tmp = pd.DataFrame(pd.DataFrame(response_data)[:1]['result'][0],
                        columns=['date', 'open', 'high', 'low', 'close', 'tmp1', 'tmp2']).drop(columns=['tmp1', 'tmp2'])

    #Puisque la date est int, convertir en datetime
    df_tmp['date'] = pd.to_datetime(df_tmp['date'].astype(int), unit='s')
    return df_tmp

#En fait, obtenez des informations BTC OHLC
df_btc = get_btc_ohlc()

# TA-Converti en type tableau afin qu'il puisse être traité par LIB
btc_open = np.array(df_btc['open'])
btc_close = np.array(df_btc['close'])
btc_high = np.array(df_btc['high'])
btc_low = np.array(df_btc['low'])

#Calculer la bande de Bollinger
upperband, middleband, lowerband = ta.BBANDS(btc_close, timeperiod=5, nbdevup=2, nbdevdn=2, matype=0)

#Calculer l'élan
momentum=ta.MOM(btc_close,timeperiod=10)

#Calculer le RSI
rsi = ta.RSI(btc_close, timeperiod=14)

# MACD
macd, macdsignal, macdhist = ta.MACD(btc_close, fastperiod=12, slowperiod=26, signalperiod=9)

# Stochastic
slowk, slowd = ta.STOCH(btc_high, btc_low, btc_close, fastk_period=5, slowk_period=3, slowk_matype=0, slowd_period=3, slowd_matype=0)

# ATR
real = ta.ATR(btc_high, btc_low, btc_close, timeperiod=14)

# EMA
ema25 = ta.EMA(btc_close, timeperiod=25)
ema75 = ta.EMA(btc_close, timeperiod=75)


#Combinez les tableaux d'index techniques créés dans un DataFrame à combiner avec le DataFrame d'origine
array_tmp = np.c_[upperband, middleband, lowerband, momentum, rsi, macd, macdsignal, macdhist, slowk, slowd, real, ema25, ema75]
df_tmp = pd.DataFrame(data=array_tmp, columns=['upperband', 'middleband', 'lowerband', 'momentum', 'rsi', 'macd', 'macdsignal', 'macdhist', 'slowk', 'slowd', 'real', 'ema25', 'ema75'])


#Rejoindre par Dataframe,Guy basé sur un index
df_btc = df_btc.merge(df_tmp, left_index=True, right_index=True)

Prétraitement pour tracé: minuté et tableau

import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import mpl_finance

#Spécifiez la période à afficher.Si vous voulez tout voir, "df_btc.copy()Est OK
df_w = df_btc.query('"2020-02-01" <= date <= "2020-02-29"').copy()

#Trier par ordre chronologique
df_w.sort_values(by='date', ascending=True, inplace=True)

#Temps d'index
df_w.set_index('date', inplace=True)

#Dans matplotlib, l'heure n'est pas traitée à moins qu'elle ne soit définie sur l'heure Unix, alors convertissez-vous de datatime en heure Unix
df_w.index = mdates.date2num(df_w.index)

# mpl_Terrain utilisant la finance.Passez simplement le tableau OHLC et il écrira un graphique en bougies
data_w = df_w[['open', 'high', 'low', 'close']].copy().reset_index().values

Terrain: Tableau des bougies, Bande de Bollinger, EMA, RSI, MACD

#Afficher le graphique sur 3 lignes et 1 colonne. sharex=Véritable partage de l'axe X. gridspec_Ajustez le rapport de chaque graphique avec kw
fig, axes = plt.subplots(nrows=3, ncols=1, figsize=(20, 10), sharex=True, gridspec_kw={'height_ratios': [3, 1, 1]})

# mpl_finance.candlestick_Dans ohlc, passez les données OHLC du tableau et affichez le graphique de la bougie
mpl_finance.candlestick_ohlc(axes[0], data_w, width=0.1, alpha=0.8, colorup='limegreen', colordown='red')

#Bande de Bollinger superposée sur le graphique de la bougie
axes[0].plot(df_w.index, df_w['upperband'], color='green', alpha=0.9)
axes[0].plot(df_w.index, df_w['lowerband'], color='green', alpha=0.9)

#EMA superposé sur le graphique de la bougie
axes[0].plot(df_w.index, df_w['ema25'], color='red', alpha=0.8)
axes[0].plot(df_w.index, df_w['ema75'], color='orange', alpha=0.8)

#Afficher le graphique RSI
axes[1].plot(df_w.index, df_w['rsi'], color='deepskyblue')

#Afficher le graphique MACD
axes[2].bar(df_w.index, df_w['macdhist'], color='skyblue')

#Ajouter une grille au graphique
axes[0].grid()
axes[1].grid()
axes[2].grid()

#Ajouter une légende
axes[0].legend(['upperband', 'lowerband', 'ema25', 'ema75'])
axes[1].legend(['RSI'])
axes[2].legend(['MACD'])

locator = mdates.AutoDateLocator()
axes[0].xaxis.set_major_locator(locator)
axes[0].xaxis.set_major_formatter(mdates.AutoDateFormatter(locator))

#Étant donné que la notation de l'axe des x est couverte, faites une rotation de 70 °
plt.xticks(rotation=70)

#terrain
plt.show()
Exemple d'exécution
Screen Shot 2020-03-03 at 18.22.09.png

4. Résumé

Cela peut être bien affiché comme ça, mais si vous voulez juste voir le graphique, il est plus pratique d'utiliser Tradingview lol

Screen Shot 2020-03-03 at 18.27.58.png

Cependant, si vous avez un plan gratuit pour Tradingview, vous ne pouvez utiliser que jusqu'à 3 indicateurs techniques, veuillez donc vous référer à cet article et tracer différents indicateurs gratuitement.

Quand j'ai essayé d'afficher le groupe Bollinger, EMA25, EMA75, RSI, on m'a demandé de faire un plan payant.
Screen Shot 2020-03-03 at 18.29.05.png

Recommended Posts

Essayez de tracer des graphiques en bougies Bitcoin et des indicateurs techniques en Python
Dessin de bougie avec python
Comment tracer l'autocorrélation et l'autocorrélation partielle avec Python
Tracer et comprendre la distribution normale multivariée en Python
Obtenez les cours des actions et créez des graphiques en bougies avec Python
Pile et file d'attente en Python
Unittest et CI en Python
Tracer des informations géographiques en Python
Distribution de Poisson et tracé de distribution cumulative de Poisson via sqlite en Python et Java
Paquets qui gèrent le MIDI avec Python midi et pretty_midi
Différence entre list () et [] en Python
Différence entre == et est en python
Afficher les photos en Python et html
Algorithme de tri et implémentation en Python
Manipuler des fichiers et des dossiers en Python
À propos de Python et Cython dtype
Affectations et modifications des objets Python
Vérifiez et déplacez le répertoire en Python
Chiffrement avec Python: IND-CCA2 et RSA-OAEP
Hashing de données en R et Python
Synthèse de fonctions et application en Python
Exporter et exporter des fichiers en Python
Inverser le pseudonyme plat et le katakana en Python2.7
Lire et écrire du texte en Python
[GUI en Python] Menu PyQt5 et barre d'outils-
Créer et lire des paquets de messages en Python
Chevauchement d'expressions régulières en Python et Java
Différence d'authenticité entre Python et JavaScript
Notes utilisant cChardet et python3-chardet dans Python 3.3.1.
Les modules et packages en Python sont des "espaces de noms"
Évitez les boucles imbriquées en PHP et Python
Affichage du graphique en chandeliers en Python (édition matplotlib)
Différences entre Ruby et Python dans la portée
différence entre les instructions (instructions) et les expressions (expressions) en Python
Valeurs authentiques et vecteurs propres: Algèbre linéaire en Python <7>
Module d'implémentation de file d'attente et Python "deque"
Graphique à lignes pliées et ligne d'échelle en python
Différences entre la syntaxe Python et Java
Vérifier et recevoir le port série en Python (vérification du port)
Rechercher et lire des vidéos YouTube avec Python
Différence entre @classmethod et @staticmethod en Python
Ecrire le fichier O_SYNC en C et Python
Gérer les "années et mois" en Python
Méthodes et champs privés en python [chiffrement]
Rechercher et vérifier la matrice inverse en Python
Indépendance et base linéaires: Algèbre linéaire en Python <6>
Appelez sudo en Python et mot de passe à saisie automatique
Différences de multithreading entre Python et Jython
Affichage du graphique en chandeliers en Python (édition Plotly)
Importation de modules et gestion des exceptions en python
Comment utiliser is et == en Python
Projet Euler # 1 "Multiple de 3 et 5" en Python
traitement (python) Diagramme les coordonnées de la liste Spécifiez le nombre de fois dans draw ()
Evénements techniques et sessions d'étude à Nagoya
Organisez les modules et les packages Python dans le désordre
Qu'est-ce que la «programmation fonctionnelle» et «orientée objet»? Édition Python
DL, valeur d'octet et suppression de fichier en Python3
Variables Python et types de données appris avec la chimio-automatique
Recevoir et afficher les données de formulaire HTML en Python
[python] Différence entre variable et self. Variable dans la classe
Implémenter la récurrence et l'exploration commémoratives dans Python and Go