Ceci est une suite de Qiita --u1and0 / Création d'un graphique de devises qui peut être déplacé avec Plotly (1). Vous pouvez maintenant ajouter / supprimer / initialiser des indicateurs.
Importez les modules requis.
# ----------General Module----------
import numpy as np
import pandas as pd
# ----------User Module----------
from randomwalk import randomwalk
import stockplot as sp
# ----------Hide General Module----------
import stockstats
import plotly
stock plot
.conda install plotly
pip install stockstats
# Make sample data
np.random.seed(10)
df = randomwalk(60 * 60 * 24 * 90, freq='S', tick=0.01, start=pd.datetime(2017, 3, 20))\
.resample('T').ohlc() + 115 #1 minute pendant 90 jours,La valeur initiale est 115
Créez un graphique d'échange aléatoire. Utilisez la fonction Randonnée aléatoire pour créer une barre d'une minute à partir du 20 mars 2017 pendant 90 jours **.
# Convert DataFrame as StockPlot
fx = sp.StockPlot(df)
Instanciez avec la classe StockPlot.
Convertissez la période une fois instanciée avec fig = sp.StockPlot (sdf)
.
Utilisez la méthode resample
lors de la conversion.
fx.resample('4H').head()
close | open | high | low | |
---|---|---|---|---|
2017-03-20 00:00:00 | 115.34 | 115.00 | 115.98 | 114.79 |
2017-03-20 04:00:00 | 116.03 | 115.34 | 116.48 | 115.16 |
2017-03-20 08:00:00 | 116.31 | 116.03 | 116.75 | 115.76 |
2017-03-20 12:00:00 | 115.92 | 116.32 | 116.87 | 115.62 |
2017-03-20 16:00:00 | 114.36 | 115.92 | 116.12 | 113.85 |
Après avoir défini la période, essayez de tracer.
fx.plot(start_view='first', end_view='last')
fx.show('png', filebasename='png1')
Ceci est la revue de article précédent.
Tracons l'indice. Tracez la moyenne mobile simple la plus populaire. Utilisez la méthode ʻappend` pour ajouter.
fx.append('close_25_sma')
fx.stock_dataframe.head()
close | open | high | low | close_25_sma | |
---|---|---|---|---|---|
2017-03-20 00:00:00 | 115.34 | 115.00 | 115.98 | 114.79 | 115.340000 |
2017-03-20 04:00:00 | 116.03 | 115.34 | 116.48 | 115.16 | 115.685000 |
2017-03-20 08:00:00 | 116.31 | 116.03 | 116.75 | 115.76 | 115.893333 |
2017-03-20 12:00:00 | 115.92 | 116.32 | 116.87 | 115.62 | 115.900000 |
2017-03-20 16:00:00 | 114.36 | 115.92 | 116.12 | 113.85 | 115.592000 |
fx.plot(start_view='first', end_view='last')
fx.show('png', filebasename='png2')
close_25_sma (ligne moyenne mobile simple à 25 pattes) a été ajoutée. Si vous exécutez la méthode ʻappend` seule sur Jupyter Notebook ou Ipython, la valeur de close_25_sma sera affichée comme valeur de retour.
Même si vous modifiez la période, l'index ajouté changera la valeur en fonction de la période.
fx.resample('15T')
fx.plot(start_view='first', end_view='last')
fx.show('png', filebasename='png3')
Après être passé à 15 minutes avec la méthode resample
, close_25_sma
est toujours ajouté sans utiliser la méthode ʻappend`.
Ceci est dû au fait que l'index est ajouté au graphe lorsque la méthode plot
est exécutée, pas lorsque la méthode ʻappend` est exécutée.
La méthode ʻappend stocke uniquement les valeurs dans
self._indicators`.
self.append()
# ========self._Stocker les indicateurs dans l'indicateur==========
def append(self, indicator):
indicator_value = self.stock_dataframe[indicator]
self._indicators[indicator] = indicator_value # self._Au format indicateurs au format dictionnaire
return indicator_value
self.plot()
# =======self lors de l'exécution de la méthode de tracé._L'indicateur stocké dans l'indicateur_append_Passer au graphique==========
def plot(self, (Abréviation)):
# (Omission)
# ---------Append indicators----------
for indicator in self._indicators.keys():
self._append_graph(indicator, start_plot, end_plot) # Re-append indicator in graph
# (Omission)
return self._fig
self._append_graph()
# =======self._L'indicateur stocké dans l'indicateur est auto._Ajouter à la partie données de la fig==========
def _append_graph(self, indicator, start, end):
graph_value = self._indicators[indicator].loc[start:end]
plotter = go.Scatter(x=graph_value.index, y=graph_value,
name=indicator.upper().replace('_', ' ')) #Conversion de format à ajouter au graphique
self._fig['data'].append(plotter)
Utilisez la méthode pop
pour supprimer la métrique.
fx.pop('close_25_sma')
fx.stock_dataframe.head()
open | high | low | close | |
---|---|---|---|---|
2017-03-20 00:00:00 | 115.00 | 115.26 | 114.87 | 115.11 |
2017-03-20 00:15:00 | 115.11 | 115.21 | 114.85 | 115.01 |
2017-03-20 00:30:00 | 115.01 | 115.49 | 114.90 | 115.47 |
2017-03-20 00:45:00 | 115.47 | 115.50 | 115.24 | 115.26 |
2017-03-20 01:00:00 | 115.25 | 115.49 | 115.10 | 115.27 |
fx.plot(start_view='first', end_view='last')
fx.show('png', filebasename='png3_1')
close_25_sma a été supprimé.
Je dessinerai également des indicateurs autres que la simple moyenne mobile.
fx.append('close_20_ema') #Moyenne mobile exponentielle du cours de clôture
fx.append('boll') #Bande de Bollinger au milieu(close_20_Identique à sma)
fx.append('boll_ub') #Sur le groupe de Bollinger
fx.append('boll_lb') #Sous le groupe Bollinger
fx.append('high_0~20_max') #La valeur de mouvement la plus élevée avant 20 pieds
fx.append('low_0~20_min') #Le prix le plus bas pour se déplacer il y a 20 pieds
fx.plot(start_view='first', end_view='last')
fx.show('png', filebasename='png4')
A été tracé.
Si vous ne connaissez pas le nom de l'index que vous avez ajouté, vous pouvez y accéder à partir de la variable d'instance.
fx._indicators.keys()
dict_keys(['low_0~20_min', 'boll', 'high_0~20_max', 'boll_ub', 'close_20_ema', 'boll_lb'])
ʻLorsque la méthode appendest utilisée, l'argument est key et la valeur de retour est value, et il est enregistré dans
_indicatorsau format dictionnaire. Par conséquent, vous pouvez appeler le nom d'index ajouté par la méthode
keys`.
Vous pouvez également l'afficher avec
fx.stock_dataframe.columns
, mais ce n'est pas recommandé.stockstats.StockDataFrame
soulève également des colonnes auxiliaires lors de la génération de métriques. Par conséquent, les indicateurs auxiliaires (données non représentées dans le graphique) sont également mélangés et il est difficile de distinguer lequel est représenté.
fx.stock_dataframe.columns
Index(['open', 'high', 'low', 'close', 'close_20_ema', 'close_20_sma',
'close_20_mstd', 'boll', 'boll_ub', 'boll_lb', 'high_0_s', 'high_1_s',
'high_2_s', 'high_3_s', 'high_4_s', 'high_5_s', 'high_6_s', 'high_7_s',
'high_8_s', 'high_9_s', 'high_10_s', 'high_11_s', 'high_12_s',
'high_13_s', 'high_14_s', 'high_15_s', 'high_16_s', 'high_17_s',
'high_18_s', 'high_19_s', 'high_20_s', 'high_0~20_max', 'low_0_s',
'low_1_s', 'low_2_s', 'low_3_s', 'low_4_s', 'low_5_s', 'low_6_s',
'low_7_s', 'low_8_s', 'low_9_s', 'low_10_s', 'low_11_s', 'low_12_s',
'low_13_s', 'low_14_s', 'low_15_s', 'low_16_s', 'low_17_s', 'low_18_s',
'low_19_s', 'low_20_s', 'low_0~20_min'],
dtype='object')
Lors de l'affichage des indicateurs par fx.stock_dataframe.columns
, les noms des indicateurs qui n'ont pas été ajoutés sont également affichés.
Puisqu'il a été foiré, supprimez high_20_max et low_20_min.
fx.pop('high_0~20_max')
fx.pop('low_0~20_min')
fx.plot(start_view='first', end_view='last')
fx.show('png', filebasename='png5')
Seuls high_20_max et low_20_min ont été supprimés du graphique.
La méthode «pop» se déroule comme suit.
self._indicators
.self.pop()
def pop(self, indicator):
popper = self._indicators.pop(indicator) # (1)
self.stock_dataframe = reset_dataframe(self.stock_dataframe) # (2)
for reindicator in self._indicators.keys():
self.stock_dataframe.get(reindicator) # (3)
return popper
Les indicateurs contenus dans self.stock_dataframe
sont un mélange de colonnes auxiliaires en fonction des indicateurs ajoutés.
Par conséquent, il est difficile d'identifier "uniquement les colonnes créées par un certain index" et de les supprimer de self.stock_dataframe
.
Par conséquent, une fois que self.stock_dataframe
est retourné à l'état où resample
est appliqué (2), l'index est ajouté à nouveau (3).
(3) est presque le même que la méthode ʻappend, mais il n'ajoute pas à
self._indicators. Puisque les indicateurs supplémentaires n'ont pas été supprimés de
self._indicators à l'étape (1), il n'est pas nécessaire de les ajouter à nouveau à
self._indicators`.
Utilisez la méthode «clear» pour effacer tous les indicateurs ajoutés.
fx.clear()
fx.stock_dataframe.head()
open | high | low | close | |
---|---|---|---|---|
2017-03-20 00:00:00 | 115.00 | 115.26 | 114.87 | 115.11 |
2017-03-20 00:15:00 | 115.11 | 115.21 | 114.85 | 115.01 |
2017-03-20 00:30:00 | 115.01 | 115.49 | 114.90 | 115.47 |
2017-03-20 00:45:00 | 115.47 | 115.50 | 115.24 | 115.26 |
2017-03-20 01:00:00 | 115.25 | 115.49 | 115.10 | 115.27 |
fx.plot(start_view='first', end_view='last')
fx.show('png', filebasename='png6')
self.stock_dataframe
).self._fig
).self._indicators
).fx.clear (hard = True)
) (hard reset).self.stock_dataframe
revient à None
.resample
.self.clear()
def clear(self, hard=False):
self._fig = None # <-- plotly.graph_objs
self._indicators = {}
if hard:
self.stock_dataframe = None
self.freq = None #Largeur du temps du pied
else:
self.stock_dataframe = reset_dataframe(self.stock_dataframe)
La méthode clear
est presque la même que la méthode __init __
,
Autrement dit, il n'est pas nécessaire d'utiliser la méthode
resample
lors du repérage
Est différent de «init».
L'ordre d'utilisation de chaque méthode est indiqué dans l'organigramme ci-dessous.
Le côté gauche montre Ajouter et Afficher, et le côté droit montre Supprimer et Réinitialiser.
Dans stockstats
, l'intervalle de mouvement utilisé dans la bande de Bollinger et $ \ sigma $ sont définis comme des variables de classe.
BOLL_PERIOD = 20
BOLL_STD_TIMES = 2
Maintenant, essayez de changer la section de voyage en 5, $ \ sigma $ en 1.
sp.ss.StockDataFrame.BOLL_PERIOD = 5 #Réglage de la section de mouvement de la bande de Bollinger
sp.ss.StockDataFrame.BOLL_STD_TIMES = 1 #Réglage de la bande de Bollinger σ
boll = sp.StockPlot(df)
boll.resample('4H')
boll.append('boll') #Bande de Bollinger au milieu(close_5_Identique à sma)
boll.append('boll_ub') #Sur le groupe de Bollinger
boll.append('boll_lb') #Sous le groupe Bollinger
boll.plot(start_view='first', end_view='last')
boll.show('png', filebasename='png7')
C'est dommage que $ \ sigma_1 $ et $ \ sigma_2 $ ne puissent pas être tirés en même temps.
Puisque BOLL_PERIOD
et BOLL_STD_TIMES
sont des variables de classe de stockstats
,
Il doit être redéfini comme stockplot.stockstats.BOLL_STD_TIMES = 2
.
Cependant, lorsque stockstats
ajoute une métrique, il utilise la méthode _get
, donc la métrique une fois ajoutée sera écrasée.
Si vous le dessinez simplement sur un graphique, il semble que vous puissiez le faire d'une manière ou d'une autre, mais ce sera une tâche future.
stockstats prend en charge la sortie de nombreux indicateurs, mais de nombreux indicateurs nécessitent des sous-graphiques. (MACD, RSI, ADX ...) Les sous-graphiques n'ont pas été touchés dans cette version. Quand j'essaye d'utiliser Cufflinks, je pense que les sous-graphiques peuvent être facilement réalisés.
La première image gif montre le graphique généré de manière interactive au format HTML depuis ipython.
. / Bin / stockplot_quickset.py
, qui va de l'importation de modules au changement quotidien./bin/stockplot_quickset.py
# ----------General Module----------
import numpy as np
import pandas as pd
# ----------User Module----------
from randomwalk import randomwalk
import stockplot as sp
# ----------Plotly Module----------
import plotly.offline as pyo
pyo.init_notebook_mode(connected=True)
# Make sample data
np.random.seed(1)
#Changer 1 seconde tick pendant 90 jours en 1 minute
df = randomwalk(60 * 60 * 24 * 90, freq='S', tick=0.01, start=pd.datetime(2017, 3, 20)).resample('T').ohlc() + 115
# Convert StockDataFrame as StockPlot
fx = sp.StockPlot(df)
# Resample as Day OHLC
fx.resample('H')
Le code source a été téléchargé sur github. github - u1and0/stockplot
Recommended Posts