[PYTHON] Kerzendiagrammplot mit Plotly

Vorbereitung

Beispieldaten erstellen

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  #Konvertieren Sie 1 Minute im Wert von 90 Tagen in täglich

Erstellen eines zufälligen Spaziergangs. Weitere Informationen finden Sie unter Zeichnen eines Kerzendiagramms mit Python.

Konvertieren Sie den Typ pd.DataFrame in den Typ StockDataFrame

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

Verwendung der StockPlot-Klasse

Importiere stockplot.py

from stockplot import StockPlot
#Instanziierung der StockPlot-Klasse
x = StockPlot(sdf)
#Kerzendiagrammplot
x.candle_plot()

graph1.png

Ein Kerzendiagramm wurde gezeichnet.

Plotly spuckt im Grunde Bilder im HTML-Format aus. Wenn Sie mit der Maus darüber fahren, wird der Wert angezeigt und Sie können hinein- / herauszoomen. Da es schwierig war, eine GIF-Datei zu erstellen, füge ich sie hier im PNG-Format ein.

Wenn Sie ein Diagramm sehen möchten, das mit Plotly verschoben werden kann, finden Sie hier eine Referenz.

Qiita --inoory-- [Python] Erstellen Sie ein Diagramm, das mit Plotly verschoben werden kann

Index

Hinzufügung von Indikatoren

Verwenden Sie zum Hinzufügen eines Index die Methode "Anhängen" wie beim Listentyp.

#Schlusskurs 25 Tage gleitende durchschnittliche Linie hinzugefügt
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

Der Rückgabewert der Funktion "add_indicator" ist der gleiche wie bei Verwendung der Methode "get" in der Klasse "StockDataFrame".

Hinter den Kulissen wird es in ein Plotformat konvertiert und der Instanzvariablen self._fig hinzugefügt.

#Kerzendiagramm und Diagramm der hinzugefügten Indikatoren
x.candle_plot()

graph2.png

Ein gleitender Durchschnitt von 25 Tagen zum Schlusskurs wurde hinzugefügt.

#25-Tage-Schlusskurs Addition und Darstellung der exponentiellen Linie des gleitenden Durchschnitts
x.append('close_25_ema')
x.candle_plot()

graph3.png

Zusätzlich zu der zuvor hinzugefügten gleitenden Durchschnittslinie für den 25-Tage-Schlusskurs wurde die gleitende Durchschnittslinie für den 25-Tage-Schlussindex hinzugefügt.

Anzeige löschen

Verwenden Sie zum Entfernen eines Indikators die Methode "Entfernen" wie zum Entfernen einer Liste.

y = StockPlot(sdf)
# 10,11,12,13-beinige gleitende Durchschnittslinie
for i in range(10, 14):
    y.append('close_{}_sma'.format(i))
y.candle_plot()

graph4.png

Erstellt eine neue Instanz und fügt 10, 11, 12, 13 Fuß gleitende Durchschnitte hinzu.

Obwohl hier weggelassen, ist der Rückgabewert "remove" die Spalte des entfernten StockDataFrame.

# 10,Löschen Sie die 12-beinige gleitende Durchschnittslinie
for i in (10, 12):
    y.remove('close_{}_sma'.format(i))
y.candle_plot()

graph5.png

Nur die gleitenden Durchschnittslinien mit 10 und 12 Beinen wurden angegeben und gelöscht.

In Datei exportieren

Die StockPlot-Klasse spuckt Zahlen in Plotlys HTML-Export plotly.offline.iplot (Jupyter Notebook-Format) aus. Das heißt, es wird nicht in eine Datei exportiert.

Wenn Sie es als Datei ausspucken möchten, verwenden Sie die folgende Methode.

import plotly.offline as pyo
pyo.plot(y._fig, filename='candle_y.html', validate=False)  #Öffnen Sie eine neue Registerkarte und zeigen Sie HTML an
pyo.plot(y._fig, image='png', image_filename='candle_y')
#Öffnen Sie eine neue Registerkarte tmp
#Als für das Bild angegebene Erweiterung
#Speichern Sie im Standard-Download-Verzeichnis

Paket Einführung

Plotly

Lassen Sie Plotly den Graphen zeichnen. Wenn es einfach ist, können Sie es kostenlos verwenden.

Installation ist

conda install plotly

Oder

pip install plotly

Ich erwähne es hier nicht, weil ich denke, dass es berühmt ist.

stockstats Datenoperationen verwenden ein Paket namens stockstats.

Installation ist

pip install stockstats

stockstats ist eine modifizierte pandas.DataFrame-Klasse, mit der sich Finanzindikatoren leicht abrufen lassen.

#Wie benutzt man
np.random.seed(2)
df = pd.DataFrame(np.random.randn(10,4), columns=['open', 'high', 'low', 'close'])
from stockstats import StockDataFrame
sdf = StockDataFrame(df)  #Fügen Sie den Pandas-Datenrahmen in StockDataFrame ein
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

Das Erscheinungsbild ändert sich nicht. Wenn Sie den Finanzindex jedoch nach der Methode oder dem Wörterbuch "get" gemäß der Syntax von "stockstats" abrufen, wird die Spalte "Financial Index" hinzugefügt.

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: Ein gleitender 5-Bein-Durchschnitt des Schlusskurses wurde hinzugefügt.

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

Genau das gleiche wie "sdf.get (" close_5_sma "). Wenn Sie einen Index eingeben, der mit get nicht möglich ist, tritt kein Fehler auf. Welches besser ist, hängt von der Anwendung ab.

Die Indikatoren, die als Indikatoren verwendet werden können, sind wie folgt.

Bitte wenden Sie sich an den Beamten für Details.

stockplot

Dies ist der, den ich gemacht habe. Ich habe eine Klasse StockPlot erstellt, um Stockstats einfach zu zeichnen.

Quellcode für 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:
    """StockDataFrame-Visualisierungstool
    # 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'):
        """Konvertieren Sie StockDataFrame in ein Kerzendiagramm
Streit: dfs: StockDataFrame
Rückgabewert: 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('_', ' '))  #Formatkonvertierung zum Hinzufügen zum Diagramm
        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 Erstellen Sie ein Währungsdiagramm, das mit Plotly (1) verschoben werden kann

Recommended Posts

Kerzendiagrammplot mit Plotly
Kerzenbeine mit Plot + Jupyter
2-Achsen-Plot mit Matplotlib
3D-Plot mit Matplotlib
Plotly Erstellen Sie ein Diagramm mit einer Schaltfläche
3D-Streudiagramm mit PyQtGraph
Stapelbares Barplot mit Matplotlib
Erstellen Sie ein Währungsdiagramm, das mit Plotly (2) verschoben werden kann.
Erstellen Sie ein Währungsdiagramm, das mit Plotly (1) verschoben werden kann.
Erstellen Sie eine Plotanimation mit Python + Matplotlib
Veröffentlichen Sie schöne Grafiken online mit plotly
Kerzenbalkendiagramm und gleitender Durchschnittsliniendiagramm
Kontinuierliche Farbe mit Matplotlib-Streudiagramm
Machen Sie eine schöne Grafik mit Plotly
Führen Sie mit Python, matplotlib, einen logarithmischen Normalwahrscheinlichkeitsplot durch
Plotten Anwenden von Diagrammen mit Schiebereglern