[PYTHON] Diagramme de bougie avec tracé

Préparation

Créer des exemples de données

np.random.seed(9)
from randomwalk import randomwalk
df = randomwalk(60 * 24 * 90, freq='T', tick=0.01, start=pd.datetime(2017, 3, 20)
                ).resample('B').ohlc() + 115  #Convertir l'équivalent de 90 jours d'une minute en un jour

Créer une marche aléatoire. Pour plus de détails, voir Dessiner un diagramme en bougies avec python.

Convertir le type pd.DataFrame en type StockDataFrame

from stockstats import StockDataFrame
sdf = StockDataFrame(df.copy())

Comment utiliser la classe StockPlot

Importer stockplot.py

from stockplot import StockPlot
#Instanciation de la classe StockPlot
x = StockPlot(sdf)
#Diagramme de bougie
x.candle_plot()

graph1.png

Un tableau de bougies a été dessiné.

complotement crache essentiellement des images au format html. Lorsque vous passez la souris sur, la valeur s'affiche et vous pouvez effectuer un zoom avant / arrière. Comme il était difficile de créer un fichier gif, je le colle au format png ici.

Si vous voulez voir un graphique qui peut être déplacé avec tracé, veuillez voir ici pour référence.

Qiita --inoory-- [Python] Créez un graphique qui peut être déplacé avec Plotly

indice

Ajout d'indicateurs

Pour ajouter un index, utilisez la méthode ʻappend` comme dans le type de liste.

#Cours de clôture ligne de moyenne mobile 25 jours ajoutée
x.append('close_25_sma')
2017-03-20    114.850000
2017-03-21    114.805000
2017-03-22    114.886667
2017-03-23    114.912500
2017-03-24    114.912000
2017-03-27    114.940000
2017-03-28    115.010000
2017-03-29    115.016250
2017-03-30    115.062222
2017-03-31    115.063000
2017-04-03    115.066364
2017-04-04    115.082500
2017-04-05    115.093846
2017-04-06    115.075714
2017-04-07    115.093333
2017-04-10    115.111250
2017-04-11    115.097059
2017-04-12    115.071111
2017-04-13    115.041579
2017-04-14    115.037000
2017-04-17    115.039048
2017-04-18    115.047273
2017-04-19    115.042609
2017-04-20    115.075417
2017-04-21    115.117200
2017-04-24    115.165600
2017-04-25    115.194000
2017-04-26    115.216800
2017-04-27    115.247600
2017-04-28    115.262800
                 ...    
2017-05-08    115.319600
2017-05-09    115.306800
2017-05-10    115.313600
2017-05-11    115.328400
2017-05-12    115.315600
2017-05-15    115.297600
2017-05-16    115.297600
2017-05-17    115.314800
2017-05-18    115.337600
2017-05-19    115.330000
2017-05-22    115.317200
2017-05-23    115.296000
2017-05-24    115.308800
2017-05-25    115.302000
2017-05-26    115.282800
2017-05-29    115.256800
2017-05-30    115.254000
2017-05-31    115.238000
2017-06-01    115.245200
2017-06-02    115.272800
2017-06-05    115.289600
2017-06-06    115.318400
2017-06-07    115.366000
2017-06-08    115.425600
2017-06-09    115.508400
2017-06-12    115.579200
2017-06-13    115.636800
2017-06-14    115.686800
2017-06-15    115.736000
2017-06-16    115.798000
Freq: B, Name: close_25_sma, dtype: float64

ʻLa valeur de retour de la fonction add_indicator est la même que lors de l'utilisation de la méthode getdans la classeStockDataFrame`.

Dans les coulisses, il est converti au format tracé et ajouté à la variable d'instance self._fig.

#Bougie graphique et graphique des indicateurs ajoutés
x.candle_plot()

graph2.png

Une moyenne mobile du cours de clôture sur 25 jours a été ajoutée.

#Cours de clôture à 25 jours Ajout et tracé de la ligne moyenne mobile exponentielle
x.append('close_25_ema')
x.candle_plot()

graph3.png

En plus de la ligne de moyenne mobile du cours de clôture à 25 jours ajoutée plus tôt, la ligne de moyenne mobile de l'indice de clôture à 25 jours a été ajoutée.

Supprimer l'indicateur

Pour supprimer un indicateur, utilisez la méthode "supprimer" de la même manière que pour supprimer une liste.

y = StockPlot(sdf)
# 10,11,12,Ligne moyenne mobile à 13 pattes
for i in range(10, 14):
    y.append('close_{}_sma'.format(i))
y.candle_plot()

graph4.png

Création d'une nouvelle instance et ajout de moyennes mobiles de 10, 11, 12 et 13 pieds.

Bien que omise ici, la valeur de retour remove est la colonne du StockDataFrame supprimé.

# 10,Supprimer la ligne moyenne mobile à 12 pattes
for i in (10, 12):
    y.remove('close_{}_sma'.format(i))
y.candle_plot()

graph5.png

Supprimé en spécifiant uniquement les lignes de moyenne mobile à 10 et 12 branches.

Exporter vers un fichier

La classe StockPlot crache des chiffres dans l'exportation html de Plotly plotly.offline.iplot (format Jupyter Notebook). Autrement dit, il ne sera pas exporté vers un fichier.

Si vous voulez le cracher sous forme de fichier, utilisez la méthode suivante.

import plotly.offline as pyo
pyo.plot(y._fig, filename='candle_y.html', validate=False)  #Ouvrez un nouvel onglet et affichez le HTML
pyo.plot(y._fig, image='png', image_filename='candle_y')
#Ouvrez un nouvel onglet tmp
#En tant qu'extension spécifiée pour l'image
#Enregistrer dans le répertoire de téléchargement par défaut

Présentation du package

Plotly

Laissez Plotly dessiner le graphique. Si c'est facile, vous pouvez l'utiliser gratuitement.

L'installation est

conda install plotly

Ou

pip install plotly

Je ne le mentionne pas ici parce que je pense que c'est célèbre.

stockstats Les opérations sur les données utilisent un package appelé stockstats.

L'installation est

pip install stockstats

stockstats est une classe pandas.DataFrame modifiée qui facilite l'obtention d'indicateurs financiers.

#Comment utiliser
np.random.seed(2)
df = pd.DataFrame(np.random.randn(10,4), columns=['open', 'high', 'low', 'close'])
from stockstats import StockDataFrame
sdf = StockDataFrame(df)  #Mettre le cadre de données pandas dans StockDataFrame
sdf
open high low close
0 -0.416758 -0.056267 -2.136196 1.640271
1 -1.793436 -0.841747 0.502881 -1.245288
2 -1.057952 -0.909008 0.551454 2.292208
3 0.041539 -1.117925 0.539058 -0.596160
4 -0.019130 1.175001 -0.747871 0.009025
5 -0.878108 -0.156434 0.256570 -0.988779
6 -0.338822 -0.236184 -0.637655 -1.187612
7 -1.421217 -0.153495 -0.269057 2.231367
8 -2.434768 0.112727 0.370445 1.359634
9 0.501857 -0.844214 0.000010 0.542353

Il n'y a pas de changement d'apparence, mais si vous obtenez l'indicateur financier par la méthode get ou le dictionnaire selon la syntaxe de stockstats, la colonne de l'indicateur financier sera ajoutée.

sdf.get('close_5_sma'); sdf
open high low close close_5_sma
0 -0.416758 -0.056267 -2.136196 1.640271 1.640271
1 -1.793436 -0.841747 0.502881 -1.245288 0.197491
2 -1.057952 -0.909008 0.551454 2.292208 0.895730
3 0.041539 -1.117925 0.539058 -0.596160 0.522758
4 -0.019130 1.175001 -0.747871 0.009025 0.420011
5 -0.878108 -0.156434 0.256570 -0.988779 -0.105799
6 -0.338822 -0.236184 -0.637655 -1.187612 -0.094264
7 -1.421217 -0.153495 -0.269057 2.231367 -0.106432
8 -2.434768 0.112727 0.370445 1.359634 0.284727
9 0.501857 -0.844214 0.000010 0.542353 0.391392

close_5_sma: Une moyenne mobile à 5 pattes du cours de clôture a été ajoutée.

sdf['close_5_sma']; sdf
open high low close close_5_sma
0 -0.416758 -0.056267 -2.136196 1.640271 1.640271
1 -1.793436 -0.841747 0.502881 -1.245288 0.197491
2 -1.057952 -0.909008 0.551454 2.292208 0.895730
3 0.041539 -1.117925 0.539058 -0.596160 0.522758
4 -0.019130 1.175001 -0.747871 0.009025 0.420011
5 -0.878108 -0.156434 0.256570 -0.988779 -0.105799
6 -0.338822 -0.236184 -0.637655 -1.187612 -0.094264
7 -1.421217 -0.153495 -0.269057 2.231367 -0.106432
8 -2.434768 0.112727 0.370445 1.359634 0.284727
9 0.501857 -0.844214 0.000010 0.542353 0.391392

Exactement la même chose que sdf.get ('close_5_sma'). Aucune erreur ne se produit lorsque vous saisissez un index qui n'est pas possible avec get. Laquelle est la meilleure dépend de l'application.

Les indicateurs qui peuvent être utilisés comme indicateurs sont les suivants.

Veuillez consulter le fonctionnaire pour plus de détails.

stockplot

C'est celui que j'ai fait. J'ai créé une classe StockPlot pour tracer facilement les stocksstats.

Code source pour stockplot.py

import numpy as np
import pandas as pd
# ----------User Module----------
from randomwalk import randomwalk
import stockstats as ss
# ----------Plotly Module----------
from plotly.tools import FigureFactory as FF
import plotly.offline as pyo
import plotly.graph_objs as go
pyo.init_notebook_mode(connected=True)


class StockPlot:
    """Outil de visualisation StockDataFrame
    # TODO
    * heikin_plot
    * pop
    * subplot
    """

    def __init__(self, sdf: ss.StockDataFrame):
        self.StockDataFrame = sdf
        self._fig = FF.create_candlestick(self.StockDataFrame.open,
                                         self.StockDataFrame.high,
                                         self.StockDataFrame.low,
                                         self.StockDataFrame.close,
                                         dates=self.StockDataFrame.index)

    def candle_plot(self, filebasename='candlestick_and_trace'):
        """Convertir StockDataFrame en graphique en bougie
argument: dfs: StockDataFrame
Valeur de retour: plotly plot"""
        self._fig['layout'].update(xaxis={'showgrid': True})
        ax = pyo.iplot(self._fig, filename=filebasename + '.html', validate=False)
        # pyo.plot(self._fig, image='png', image_filename=filebasename, validate=False)
        return ax

    def append(self, indicator):
        indi = self.StockDataFrame.get(indicator)
        plotter = go.Scatter(x=indi.index, y=indi,
                             name=indicator.upper().replace('_', ' '))  #Conversion de format à ajouter au graphique
        self._fig['data'].append(plotter)
        return indi

    def remove(self, indicator):
        indi = indicator.lower().replace(' ', '_')
        INDI = indicator.upper().replace('_', ' ')
        rem = self.StockDataFrame.pop(indi)
        for dicc in self._fig['data']:
            if dicc['name'] == INDI:
                self._fig['data'].remove(dicc)
                return rem

github u1and0/stockplot

NEXT Créez un graphique des devises qui peut être déplacé avec Plotly (1)

Recommended Posts

Diagramme de bougie avec tracé
Bougies avec plotly + Jupyter
Graphique 2 axes avec Matplotlib
Graphique 3D avec matplotlib
tracé Créer un graphique avec un bouton
Nuage de points 3D avec PyQtGraph
Bar plot empilable avec matplotlib
Créez un graphique des devises qui peut être déplacé avec Plotly (2)
Créez un graphique des devises qui peut être déplacé avec Plotly (1)
Créer une animation de tracé avec Python + Matplotlib
Publiez de jolis graphiques en ligne avec plotly
Graphique à barres de bougie et tracé de la moyenne mobile
Couleur en continu avec le diagramme de dispersion matplotlib
Faire un joli graphique avec plotly
Effectuer un tracé de probabilité normale logarithmique avec Python, matplotlib
Application de graphiques avec des curseurs