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.
from stockstats import StockDataFrame
sdf = StockDataFrame(df.copy())
from stockplot import StockPlot
#Instanziierung der StockPlot-Klasse
x = StockPlot(sdf)
#Kerzendiagrammplot
x.candle_plot()
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
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()
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()
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.
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()
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()
Nur die gleitenden Durchschnittslinien mit 10 und 12 Beinen wurden angegeben und gelöscht.
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.
plotly.offline.plot (figure_or_data, filename = <Warnung, wenn Sie die Erweiterung html nicht festlegen (die Erweiterung wird willkürlich hinzugefügt)>,)
plotly.offline.plot(figure_or_data, image=<png|svg|jpeg|webp>, imagefilename=<Dateiname ohne Erweiterung>)
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
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