Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Strategia Alta Volatilità Webinar Casario Del 07 Giugno 2022
- import backtrader as bt
- import yfinance as yf
- import quantstats as qs
- import pandas as pd
- class Strategia(bt.Strategy):
- def __init__(self):
- self.sma = bt.ind.SMA(period=4)
- self.lowest = bt.indicators.Lowest(self.data.low, period=3)
- def next(self):
- data = self.data.datetime.date().strftime('%Y-%m-%d')
- if self.getposition().size == 0:
- if self.data0.close < self.lowest[-1] and ('2015-08-19' <= data <= '2016-03-02' or
- '2016-06-13' <= data <= '2016-11-14' or
- '2018-01-29' <= data <= '2018-04-18' or
- '2018-10-17' <= data <= '2019-01-31' or
- '2019-07-29' <= data <= '2019-09-13' or
- '2021-12-01' <= data <= '2022-05-18'):
- volume = int((self.broker.getvalue()) / self.data0.close)
- self.sell(size=volume)
- elif self.data0.open > self.sma:
- self.close()
- if __name__ == '__main__':
- tickers = ['XLB', 'XLV', 'XLP', 'XLY', 'XLC', 'XLU', 'XLI', 'XLF', 'XLK', 'XLE', 'XLRE']
- dataVix = yf.download('^VIX', '2015-01-01', '2022-06-07')
- for symbol in tickers:
- cerebro = bt.Cerebro()
- dataTicker = yf.download(symbol, '2015-01-01', '2022-06-07')
- tickerData = bt.feeds.PandasData(dataname=dataTicker)
- vixData = bt.feeds.PandasData(dataname=dataVix)
- cerebro.adddata(tickerData, name=symbol)
- cerebro.adddata(vixData, name='VIX')
- cerebro.addstrategy(Strategia)
- cerebro.broker.setcash(10000.0)
- cerebro.addanalyzer(bt.analyzers.PyFolio, _name='pyfolio')
- results = cerebro.run()
- strat = results[0]
- pyfoliozer = strat.analyzers.getbyname('pyfolio')
- returns, positions, transactions, gross_lev = pyfoliozer.get_pf_items()
- returns.index = returns.index.tz_convert(None)
- qs.reports.html(returns, output=f"""{symbol}""", download_filename=f"""{symbol}.html""")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement