当前位置:网站首页>Un des backtraders du cadre de quantification lit l'analyseur
Un des backtraders du cadre de quantification lit l'analyseur
2022-06-13 07:14:00 【Zhuge dit que talk】
Le prix Nobel William Sharp
Introduction
L'évaluation stratégique du rendement est un élément important de la quantification des transactions,L'investissement exige non seulement de connaître le rendement de la stratégie, Il faut également comprendre les risques de la stratégie.backtraderOffre une large gammeanalyzerAnalyseur,Peut produire plusieurs indicateurs de rendement,Utilisé pour analyser les effets des contre - Essais stratégiques.
Mode d'emploi
cerebro.addanalyzer(bt.analyzers.AnnualReturn, _name='AnnualReturn')
cerebro.addanalyzer(bt.analyzers.SharpeRatio, riskfreerate=0.003, annualize=True, _name='SharpeRatio')
cerebro.addanalyzer(bt.analyzers.DrawDown, _name='DrawDown')
strats = cerebro.run()
# Première Stratégie
strat = strats[0]
print("--------------- AnnualReturn -----------------")
print(strat.analyzers.AnnualReturn.get_analysis())
print("--------------- SharpeRatio -----------------")
print(strat.analyzers.SharpeRatio.get_analysis())
print("--------------- DrawDown -----------------")
print(strat.analyzers.DrawDown.get_analysis())
AnnualReturn Analyseur de rendement annualisé représentatif , SharpeRatio Représente l'analyseur de rapport Sharp , DrawDown Représente l'analyseur de rétrotest . Les résultats de chaque analyseur sont généralement les suivants: OrderedDict Retour du dictionnaire ,Comme suit,Peut passer keys Prenez ce dont vous avez besoin. values, Par exemple:strat.analyzers.SharpeRatio.get_analysis()['sharperatio'] .
--------------- AnnualReturn -----------------
OrderedDict([(2010, 0.0055023006637382466), (2011, 0.0015355496623354892), (2012, 0.004218277850025043), (2013, 0.09220659214070048), (2014, 0.05213380413050861), (2015, 0.012115724348371826), (2016, -0.017901621371985033), (2017, 0.06763449420829182), (2018, 0.01391412496311406), (2019, 0.05472002239157425), (2020, 1.8864865026259587), (2021, 0.36892175167157526), (2022, -0.2711252801992251)])
--------------- SharpeRatio -----------------
OrderedDict([('sharperatio', 0.3360518820606975)])
--------------- DrawDown -----------------
AutoOrderedDict([('len', 145), ('drawdown', 35.66222565509548), ('moneydown', 21054.40185546875), ('max', AutoOrderedDict([('len', 648), ('drawdown', 40.770090001923634), ('moneydown', 24070.00244140625)]))])
Ça se voit., Analyzer Les résultats de sortie de l'analyseur sont tous des valeurs numériques , Pas de dessin .ParSharpeRatio
Par exemple, Le rapport Sharp est calculé avec une valeur numérique 0.3360518820606975.En fait,,Analyzers
Ne contient paslinesObjet,Ça veut aussi direanalyzer L'objet est très convivial pour la mémoire , Ça ne prend pas beaucoup de mémoire. .
Autres explications:Unanalyzer L'analyseur analyse le rendement d'une stratégie plutôt que celui de l'ensemble du système. . Adoptionaddanalyzer Classe d'analyseur ajoutée par la fonction ,In
cerebro.run
Exécution, Chaque instance d'analyseur est liée à chaque politique , Si le test de retour contient 3Stratégies, Alors le même analyseur aura 3 Instances créées , Chaque instance est liée à une politique différenteQuelques
Analyzer
L'objet analyseur utilise d'autres analyzers Analyseur pour accomplir la tâche ,Par exemple,SharpeRatio
UtiliséTimeReturn
Sortie de l'analyseur pour d'autres calculs , Mais ces utilisateurs dépendants ne sont pas visibles
backtraderAutoportanteAnalyzersAnalyseur
AnnualReturn:Rendement annualisé
Calmar: Taux de Kama
DrawDown:Repliez - vous
TimeDrawDown: Retrait à la granularité temporelle spécifiée
GrossLeverage: Levier total
PositionsValue: Valeur des positions
PyFolio: Générer des données compatibles pyfolio
LogReturnsRolling: RoulerlogTaux de rendement
PeriodStats: Statistiques de base pour la période de temps
Returns: Calculer le total par la méthode logarithmique 、Moyenne、Composé、Rendement annualisé
SharpeRatio: Ratio Sharp
SharpeRatio_A: Taux annuel de Sharp
SQN: Quantité de qualité du système System Quality Number
TimeReturn: Rendement à différents moments
TradeAnalyzer: Statistiques des transactions , Si vous gagnez 、 Nombre d'échecs, etc.
Transactions: Objet de chaque transaction 、Prix、Quantité, etc.
VWR: variability weighted return, Rendement pondéré par la volatilité
FréquentAnalyzer L'analyseur a :AnnualReturn, DrawDown, PyFolio, SharpeRatio, TimeReturn.
NouveauAnalyzerAnalyseur
Sibacktrader L'analyseur fourni ne répond pas aux exigences ,Peut être construit par soi - mêmeAnalyzerAnalyseur.ParSharpeRatio
Par exemple,Les codes de référence sont les suivants:. Sharp ratio est l'un des indicateurs de rendement les plus couramment utilisés , Il reflète le rendement excédentaire de la contribution des fluctuations unitaires ,Plus il est grand, mieux c'est.. Le ratio Sharp est égal au rendement excédentaire de la stratégie par rapport au rendement sans risque divisé par l'écart type de rendement. .
import backtrader as bt
from backtrader.utils.py3 import map
from backtrader.mathsupport import average, standarddev
class SharpeRatio(bt.Analyzer):
params = (
('timeframe', bt.TimeFrame.Years),
('riskfreerate', 0.01),
)
def __init__(self):
super(SharpeRatio, self).__init__()
self.anret = bt.analyzers.AnnualReturn()
# analyzer Comme la Stratégie , C'est à partir du 0RacinebarOn y va.
def start(self):
pass
def prenext(self):
pass
def nextstart(self):
pass
def next(self):
pass
# En général, l'indice d'évaluation de l'ensemble de la stratégie est calculé après la fin de la stratégie.
def stop(self):
retfree = [self.p.riskfreerate] * len(self.anret.rets)
retavg = average(list(map(operator.sub, self.anret.rets, retfree)))
retdev = standarddev(self.anret.rets)
self.ratio = retavg / retdev
# Analyzer Méthode spécifique à la classe , Renvoie la classe contenant les résultats de l'analyse dictObjet
def get_analysis(self):
return dict(sharperatio=self.ratio)
# Prend en charge les mêmes fonctions d'impression d'information que la politique
def notify_order(self, order):
pass
def notify_trade(self, trade):
pass
def notify_cashvalue(self, cash, value):
pass
def notify_fund(self, cash, value, fundvalue, shares):
pass
Comme le montre le code ci - dessus,Bien queAnalyzer
Objet nonLines Objet et n'a pas besoin d'être linesItération précédente, Mais ils suivent le même mode de fonctionnement que la politique ,Oui, bien sûr.get_analysis
Cette méthode unique est utilisée pour renvoyer les résultats de l'analyse .
InbacktraderUtilisé dansPyFolio
cerebro.addanalyzer(bt.analyzers.PyFolio)
strats = cerebro.run()
# retrieve the 1st strategy
strat0 = strats[0]
pyfolio = strats.analyzers.getbyname('pyfolio')
returns, positions, transactions, gross_lev = pyfoliozer.get_pf_items()
import pyfolio as pf
pf.create_full_tear_sheet(returns)
pyfolio
InJupyter Notebook Peut également fonctionner à l'extérieur ,Mais dansJupyter Le meilleur support opérationnel à l'intérieur .
Par rapport au niveau de référencebenchmarkComparer
import backtrader as bt
cerebro = bt.Cerebro()
spypd = bt.feeds.PandasData(dataname=spydata, name="spy")
cerebro.adddata(spypd)
cerebro.addanalyzer(bt.analyzers.TimeReturn, timeframe=bt.TimeFrame.Years, _name='TimeReturn')
cerebro.addanalyzer(bt.analyzers.TimeReturn, timeframe=bt.TimeFrame.Years, data=spypd, _name='BenchTimeReturn')
strats = cerebro.run()
time_return = strat.analyzers.getbyname('TimeReturn').get_analysis()
bench_time_return = strat.analyzers.getbyname('BenchTimeReturn').get_analysis()
print("--------------- TimeReturn -----------------")
print(time_return)
print("--------------- BenchTimeReturn -----------------")
print(bench_time_return)
Journal de sortie:
--------------- TimeReturn -----------------
OrderedDict([(datetime.date(2009, 12, 31), 0.0), (datetime.date(2010, 12, 31), 0.0055023006637382466), (datetime.date(2011, 12, 31), 0.0015355496623354892), (datetime.date(2012, 12, 31), 0.004218277850025043), (datetime.date(2013, 12, 31), 0.09220659214070048), (datetime.date(2014, 12, 31), 0.05213380413050861), (datetime.date(2015, 12, 31), 0.012115724348371826), (datetime.date(2016, 12, 31), -0.017901621371985033), (datetime.date(2017, 12, 31), 0.06763449420829182), (datetime.date(2018, 12, 31), 0.01391412496311406), (datetime.date(2019, 12, 31), 0.05472002239157425), (datetime.date(2020, 12, 31), 1.8864865026259587), (datetime.date(2021, 12, 31), 0.36892175167157526), (datetime.date(2022, 12, 31), -0.2711252801992251)])
--------------- SpyTimeReturn -----------------
OrderedDict([(datetime.date(2009, 12, 31), -0.011793865755532318), (datetime.date(2010, 12, 31), 0.12840988195524994), (datetime.date(2011, 12, 31), -0.001988071570576566), (datetime.date(2012, 12, 31), 0.134741065036728), (datetime.date(2013, 12, 31), 0.2968892471880906), (datetime.date(2014, 12, 31), 0.11289182180470925), (datetime.date(2015, 12, 31), -0.008124930541476227), (datetime.date(2016, 12, 31), 0.09643402233275422), (datetime.date(2017, 12, 31), 0.19384416771302204), (datetime.date(2018, 12, 31), -0.06347893319524989), (datetime.date(2019, 12, 31), 0.28785206349908), (datetime.date(2020, 12, 31), 0.16162313396749006), (datetime.date(2021, 12, 31), 0.2703540848726258), (datetime.date(2022, 12, 31), -0.13563244077211734)])
Notez que ce n'est pas tout. Analyzers Tous les Analyseurs sont pris en charge BenchmarkComparer.
Conclusions & Communication
Attention au numéro public Wechat:Zhuge dittalk,En savoir plus. Vous pouvez également obtenir une invitation à rejoindre le Groupe d'échange d'investissement 、 Groupe de discussion sur l'investissement quantitatif , Avec de nombreux passionnés d'investissement 、 Quantifier les praticiens 、 Les taureaux de la technologie communiquent ensemble 、Duel, Augmenter rapidement votre niveau d'investissement .
Ce n'est pas facile d'écrire,Je pense que cet article vous aidera.,Un petit coup de main.
RÉFÉRENCES
边栏推荐
- 杭州网上开户是安全的吗?
- 2022 - 06 - 12: dans un échiquier carré n * N, il y a n * n pièces, donc chaque pièce peut avoir exactement une pièce. Mais maintenant quelques pièces sont rassemblées sur une grille, par exemple: 2 0
- Local file upload FTP or remote directory
- Is it safe to open an account online in Hangzhou?
- FTP_ Manipulate remote files
- Normalizing y-axis in histograms in R ggplot to proportion
- 基于ESP32CAM实现WebSocket服务器实时点灯
- 2022-06-12:在N*N的正方形棋盤中,有N*N個棋子,那麼每個格子正好可以擁有一個棋子。 但是現在有些棋子聚集到一個格子上了,比如: 2 0 3 0 1 0 3 0 0 如上的二維數組代錶,一
- 领先企业的管理实践证明,企业可持续发展的核心是什么?
- Tidb data migration (DM) Introduction
猜你喜欢
Through the function seaborn cubehelix_ Palette build order palette
It's called the next generation monitoring system. Let's see how awesome it is
怎么写出一份令人惊叹的设计文档?
Raspberry school advanced development - "writing of IO port driver code" includes bus address, physical \u virtual address and bcm2835 chip manual knowledge
数字时代进化论
RT thread simulator lvgl control: button button event
Br tool backup recovery
RT-Thread 模拟器 simulator LVGL控件:slider 控件
尝试使用RenderDoc查看UE的Shader代码
Powerdispatcher reverse generation of Oracle data model
随机推荐
Relevant knowledge under WinForm
部署RDS服务
【騰訊阿裏最全面試題集錦】(四面:3輪技術+1輪HR)
Evolution in the digital age
When the concept of industrial Internet just appeared, people only regarded it as a method to obtain b-end traffic
C # using multithreading
Compilation and development process of Quanzhi v3s environment
How to use clion to debug a project built by the make tool
Que se passe - t - il si les produits financiers sont nuls pendant plusieurs jours?
C drawing table and sending mail function
学习Mysql基础第一天
Database connection under WinForm
Upper computer development (software test of firmware download software)
【硬记】脏读、不可重复读、幻读场景核心区别
关于oracle的函数。
It's called the next generation monitoring system. Let's see how awesome it is
C Advanced Programming - features
5xx series problem solving
Tidb dashboard modify port
Sorting of numbers and strings