Advertisement
Maurizio-Ciullo

Strategia alta volatilita

Jun 8th, 2022
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.26 KB | None | 0 0
  1.                                        # Strategia Alta Volatilità Webinar Casario Del 07 Giugno 2022
  2.  
  3. import backtrader as bt
  4. import yfinance as yf
  5. import quantstats as qs
  6. import pandas as pd
  7.  
  8. class Strategia(bt.Strategy):
  9.  
  10.     def __init__(self):
  11.         self.sma = bt.ind.SMA(period=4)
  12.         self.lowest = bt.indicators.Lowest(self.data.low, period=3)
  13.  
  14.     def next(self):
  15.         data = self.data.datetime.date().strftime('%Y-%m-%d')
  16.  
  17.         if self.getposition().size == 0:
  18.             if self.data0.close < self.lowest[-1] and ('2015-08-19' <= data <= '2016-03-02' or
  19.                                                        '2016-06-13' <= data <= '2016-11-14' or
  20.                                                        '2018-01-29' <= data <= '2018-04-18' or
  21.                                                        '2018-10-17' <= data <= '2019-01-31' or
  22.                                                        '2019-07-29' <= data <= '2019-09-13' or
  23.                                                        '2021-12-01' <= data <= '2022-05-18'):
  24.                 volume = int((self.broker.getvalue()) / self.data0.close)
  25.                 self.sell(size=volume)
  26.  
  27.         elif self.data0.open > self.sma:
  28.             self.close()
  29.  
  30.  
  31. if __name__ == '__main__':
  32.     tickers = ['XLB', 'XLV', 'XLP', 'XLY', 'XLC', 'XLU', 'XLI', 'XLF', 'XLK', 'XLE', 'XLRE']
  33.  
  34.     dataVix = yf.download('^VIX', '2015-01-01', '2022-06-07')
  35.  
  36.     for symbol in tickers:
  37.         cerebro = bt.Cerebro()
  38.         dataTicker = yf.download(symbol, '2015-01-01', '2022-06-07')
  39.  
  40.         tickerData = bt.feeds.PandasData(dataname=dataTicker)
  41.         vixData = bt.feeds.PandasData(dataname=dataVix)
  42.  
  43.         cerebro.adddata(tickerData, name=symbol)
  44.         cerebro.adddata(vixData, name='VIX')
  45.  
  46.         cerebro.addstrategy(Strategia)
  47.  
  48.         cerebro.broker.setcash(10000.0)
  49.         cerebro.addanalyzer(bt.analyzers.PyFolio, _name='pyfolio')
  50.  
  51.         results = cerebro.run()
  52.  
  53.         strat = results[0]
  54.         pyfoliozer = strat.analyzers.getbyname('pyfolio')
  55.         returns, positions, transactions, gross_lev = pyfoliozer.get_pf_items()
  56.         returns.index = returns.index.tz_convert(None)
  57.         qs.reports.html(returns, output=f"""{symbol}""", download_filename=f"""{symbol}.html""")
  58.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement