__ Comment puis-je créer l'indicateur moi-même? __
Création d'indicateurs -Créer une classe qui hérite de la classe bt.indicator -Définir l'objet Lignes à tracer ・ Définissez des paramètres tels que la période de la ligne moyenne mobile -Ajouter les paramètres d'affichage du tracé si nécessaire ・ Ecrire une expression Je vais le créer dans le flux.
À titre d'exemple, faisons une stocastique et jetons un œil à son contenu.
sto1.py
import backtrader as bt
class MyStochastic1(bt.Indicator): #bt.Indicateur d'héritage
lines = ('k', 'd', ) #Objet Lignes à afficher sur le tracé
params = (
('k_period', 14), #Spécifiez les paramètres avec des tapples
('d_period', 3), #Virgule à la fin du taple(、)Mettre en
)
plotinfo = dict(plot =True,
subplot=True,
plotname='',
)
def __init__(self):
highest = bt.indicators.Highest(self.datas[0], period=self.params.k_period)
lowest = bt.indicators.Lowest(self.datas[0], period=self.params.k_period)
self.lines.k = k = (self.datas[0] - lowest) / (highest - lowest)
self.lines.d = bt.ind.SimpleMovingAverage(k, period=self.params.d_period)
def next(self):
pass
Voici la vue d'ensemble de la classe d'indicateurs. Un prix haut / bas de 14 jours est nécessaire pour calculer les stocastiques. Combinez-les avec le cours de clôture pour calculer le montant de la variation et lissez-le avec une moyenne mobile simple sur 3 jours.
class MyStochastic1(bt.Indicator):
Commencez par déclarer la classe "MyStochastic1" qui hérite de la classe Backtrader Indicator.
lines=('k','d')
Il y a deux lignes dans Stocastics, K et D. Je mets donc en place deux objets Lignes à afficher dans le tracé. Cet objet Lines est comme "Index buffer" dans MQL4, et est un ** tableau itérable ** dans lequel les valeurs numériques et les axes de temps sont connectés. Cerebro trace cet objet Lines sur le graphique.
Dans MQL4, la dernière barre est représentée par [0]. À partir de la dernière barre, le nombre augmente avec l'âge, 1, 2, 3, .... Même dans le backtrader, le dernier objet Bar / Lines est représenté par [0]. C'est la même chose que MQL4. Cependant, à mesure que la barre vieillit en fonction de 0, des symboles moins tels que -1, -2, -3 ... sont ajoutés.
À cet égard, les objets Lines ne peuvent pas effectuer les opérations de découpage Python d'origine. Si vous souhaitez utiliser des tranches, utilisez la méthode get ().
myslice = self.lines.my_sma.get (il y a = 0, taille = 1)
[-1] Un seul tableau sauf [0]
myslice = self.lines.my_sma.get (il y a = 0, taille = 10)
10 tableaux de [-1] à [-10] sauf [0]
myslice = self.lines.my_sma.get (ago = -1, size = 5)
Séquences de [-2] à [-6] sauf [-1]
** * L'opérateur [] peut être utilisé pour les objets Lignes uniquement dans la méthode suivante. Je résumerai la méthode suivante à une date ultérieure. ** **
params = (
('k_period', 14),
('d_period', 3),
* # Ajouter une virgule à la fin *
)
Stocastics calcule sur une période de 14 jours et adoucit les résultats avec une moyenne mobile simple de 3 jours. (K_period, d_period) C'est ce paramètre qui le définit. Spécifiez par taple de taple ou dict (). (Référence 1)
Il est exprimé en écrivant "self.params.name" comme self.params.k_period. Pour les taples, veillez à ne pas oublier de mettre la dernière virgule.
plotinfo = dict(plot =True, subplot=True, plotname='', )
Vous pouvez modifier les paramètres lors du traçage.
plot: affichage du tracé activé / désactivé subplot: changer l'affichage de la sous-fenêtre plotname: nom d'affichage de la note de bas de page (le nom de la classe est affiché s'il est vide)
Il existe d'autres éléments de réglage.
highest = bt.indicators.Highest(self.datas[0],period=self.params.k_period)
lowest = bt.indicators.Lowest(self.datas[0],period=self.params.k_period)
Décrivez le calcul de stockatics dans la méthode init.
Tout d'abord, calculez les prix hauts et bas pour 14 jours. Heureusement, backtrader a un indicateur qui calcule les prix hauts et bas pour une période spécifique.
Les indicateurs intégrés peuvent être appelés avec bt.indicators.XXXX (). (Notez s à la fin!) Ici, nous appelons le plus haut et le plus bas pour trouver les valeurs les plus élevées et les plus basses pendant la période k_period. Je mets le résultat dans les objets Lines le plus haut et le plus bas.
self.lines.k = k = (self.datas[0] - lowest) / (highest - lowest)
self.lines.d = bt.ind.SimpleMovingAverage(k,period=self.params.d_period)
L'objet Lines à tracer est représenté par "self.lines.name". k est «self.lines.k» et d est «self.lines.d». L'objet Lines résultant peut également être utilisé pour les calculs. Ici, afin de simplifier la notation du calcul sur la ligne suivante, il est affecté à "k" et passé à l'indicateur de moyenne mobile simple.
self.datas[0]
Self.datas [0] dans la formule représente "les premières données CSV". Sauf indication contraire, le cours de clôture est utilisé. Étant donné que plusieurs données peuvent être transmises, par exemple, lors de la transmission de deux données CSV telles que quotidienne et hebdomadaire, la période la plus petite doit être spécifiée en premier et la période la plus longue doit être spécifiée ultérieurement. En d'autres termes, les données [0] doivent être des données quotidiennes et les données [1] doivent être des données hebdomadaires. Cette fois, seules les données quotidiennes sont transmises.
--- | Officiel | réduction |
---|---|---|
lines | self.lines.XXX | self.l.XXX |
params | self.params.XXX | self.p.XXX |
datas | self.datas[0].close | self.data.fermer ou soi.data |
indicators | bt.indicators.XXX | bt.ind.XXX |
Alias | SimpleMovingAverage | SMA |
Backtrader peut être abrégé. C'est pratique, mais cela peut être déroutant jusqu'à ce que vous vous y habituiez. Et en fait, vous pouvez omettre toutes les informations de parcelle cette fois. Si plot, subplot, plotname sont omis, les paramètres par défaut seront utilisés.
Je ne l'ai pas utilisé cette fois, mais si vous voulez juger des conditions ou effectuer un traitement pour chaque barre, décrivez le contenu dans la méthode suivante.
__ Comment afficher l'indicateur? __
Tous les réglages sont terminés. Si vous instanciez cette classe d'indicateur dans la méthode init de la classe de stratégie, Cerebro la tracera sur le graphique. Vous pouvez nommer librement l'instance.
self.myind1 = MyStochastic1(self.data)
(Des commentaires explicatifs ont été ajoutés à divers endroits et sont abrégés autant que possible.)
sto12.py
%matplotlib notebook
from __future__ import (absolute_import, division, print_function,
unicode_literals)
import datetime
import os.path
import sys
import backtrader as bt
class MyStochastic1(bt.Indicator):
lines = ('k', 'd', ) #Objet Lignes à afficher sur le tracé
params = (
('k_period', 14), #Spécifiez les paramètres avec des tapples
('d_period', 3), #Virgule à la fin du taple(、)Mettre en
)
#réduction
#plotinfo = dict()
def __init__(self):
#Pour être exact, moi.datas[0]Peut être omis
# self.params.k_omettre période et soi.p.k_period
highest = bt.ind.Highest(self.data, period=self.p.k_period)
lowest = bt.ind.Lowest(self.data, period=self.p.k_period)
self.lines.k = k = (self.data - lowest) / (highest - lowest)
self.lines.d = bt.ind.SMA(k, period=self.p.d_period)
class TestStrategy(bt.Strategy):
def __init__(self):
#La partie du nom d'instance myind1 peut être n'importe quel nom
self.myind1 = MyStochastic1(self.data)
if __name__ == '__main__':
cerebro = bt.Cerebro()
cerebro.addstrategy(TestStrategy)
datapath = 'C:\\Users\\XXXX\\orcl-1995-2014.txt'
# Create a Data Feed
data = bt.feeds.YahooFinanceCSVData(
dataname=datapath,
fromdate=datetime.datetime(2000, 1, 1),
todate=datetime.datetime(2000, 12, 31),
reverse=False)
cerebro.adddata(data)
cerebro.run(stdstats=False)
cerebro.plot(style='candle')
Les stocastiques sont affichés en toute sécurité.
__ Qu'est-ce que Cerebro? __
C'est la fonction principale de Backtrader. Si vous démarrez ce Cerebro après avoir défini divers paramètres, il achètera et vendra automatiquement, analysera et optimisera et tracera automatiquement les résultats. Je vais passer en revue le flux jusqu'au début de Cerebro dans le script précédent.
cerebro = bt. Cerebro ()
cerebro.adddata (data)
cerebro.addstrategy (TestStrategy)
cerebro.run ()
cerebro.plot ()
Si vous créez une classe de stratégie "TestStrategy" que vous pensez à vous-même, spécifiez des données CSV, puis exécutez Cerebro, le contenu de cette classe "TestStrategy" sera exécuté automatiquement. Je n'ai pas fait de trading automatique cette fois, mais Cerebro le tracera car Stocastics est utilisé dans "Test Strategy".
Qu'as-tu pensé? Pour utiliser des indicateurs personnalisés avec Backtrader, créez votre propre classe d'indicateurs personnalisés et instanciez-la dans la classe de stratégie.
Référence 1
Référence 2 2.Gold vs SP500 https://www.backtrader.com/blog/posts/2016-12-13-gold-vs-sp500/gold-vs-sp500/
Recommended Posts