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.
from stockstats import StockDataFrame
sdf = StockDataFrame(df.copy())
from stockplot import StockPlot
#Instanciation de la classe StockPlot
x = StockPlot(sdf)
#Diagramme de bougie
x.candle_plot()
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
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 classe
StockDataFrame`.
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()
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()
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.
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()
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()
Supprimé en spécifiant uniquement les lignes de moyenne mobile à 10 et 12 branches.
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.
plotly.offline.plot (figure_or_data, filename = <avertissement si vous ne définissez pas l'extension sur html>,)
plotly.offline.plot(figure_or_data, image=<png|svg|jpeg|webp>, imagefilename=<Nom de fichier sans extension>)
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
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