Advertisement
Maurizio-Ciullo

Strategia BREAKIN - Esempio backtest EURUSD

Apr 16th, 2022
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 8.17 KB | None | 0 0
  1.                                                Strategia BREAKIN - Esempio backtest EURUSD
  2.  
  3.  
  4.  
  5. !pip install backtrader
  6. !pip install matplotlib==3.2.2
  7.  
  8. ----------------------------------------------------------------------------------------
  9.  
  10. import backtrader as bt
  11.  
  12.  
  13. class BreakIn(bt.Strategy):
  14.    
  15.     params = (
  16.         ('atrPeriodo', 7),
  17.         ('atrMult', 1.5),
  18.         ('stopLoss', 0.0040),
  19.         ('takeProfit', 0.0040),
  20.     )
  21.  
  22.     def __init__(self):
  23.         self.atr = bt.ind.ATR(period=self.params.atrPeriodo)
  24.         self.openPrice = self.datas[0].open
  25.         self.highPrice = self.datas[0].high
  26.         self.lowPrice = self.datas[0].low
  27.         self.closePrice = self.datas[0].close
  28.  
  29.     def next(self):
  30.         if abs(self.openPrice - self.closePrice) > (self.atr * self.params.atrMult) and self.closePrice > self.openPrice and self.position.size == 0 :
  31.             stopLoss = self.closePrice - self.params.stopLoss
  32.             takeProfit = self.closePrice + self.params.takeProfit
  33.             self.buy_bracket(size=50000, stopprice=stopLoss, limitprice=takeProfit, exectype=bt.Order.Market)
  34.  
  35.         elif abs(self.openPrice - self.closePrice) > (self.atr * self.params.atrMult) and self.closePrice < self.openPrice and self.position.size == 0:
  36.             stopLoss = self.closePrice + self.params.stopLoss
  37.             takeProfit = self.closePrice - self.params.takeProfit
  38.             self.sell_bracket(size=50000, stopprice=stopLoss, limitprice=takeProfit, exectype=bt.Order.Market)
  39.  
  40.  
  41. ----------------------------------------------------------------------------------------
  42.  
  43.  
  44. import backtrader as bt
  45. from datetime import datetime
  46.  
  47. from backtrader import CommInfoBase
  48.  
  49.  
  50. initCapital = 10000
  51. cerebro = bt.Cerebro()
  52.  
  53. cerebro.broker.setcommission(leverage=30, commission=0.00001, commtype=CommInfoBase.COMM_FIXED)
  54. cerebro.broker.set_slippage_fixed(0.0001)
  55.  
  56.  
  57. data = bt.feeds.GenericCSVData(
  58.     dataname='FXCM_EURUSD_1H_20170101_20211013.csv',
  59.     timeframe=bt.TimeFrame.Minutes,
  60.     compression=60,
  61.     fromdate=datetime(2017, 1, 1),
  62.     todate=datetime(2021, 10, 18),
  63.     dtformat=('%Y%m%d'),
  64.     tmformat=('%H%M'),
  65.     date=0,
  66.     time=1,
  67.     open=2,
  68.     high=3,
  69.     low=4,
  70.     close=5,
  71.     volume=6,
  72.     openinterest=-1
  73. )
  74. # Add the data to Cerebro
  75. cerebro.adddata(data)
  76. # Set our desired cash start
  77. cerebro.broker.setcash(initCapital)
  78.  
  79. cerebro.addanalyzer(bt.analyzers.DrawDown, _name="drawdown")
  80. cerebro.addanalyzer(bt.analyzers.TradeAnalyzer, _name="trade")
  81. cerebro.addanalyzer(bt.analyzers.TimeReturn, _name="timereturn")
  82.  
  83. # Run over everything
  84.  
  85. cerebro.addstrategy(BreakIn)
  86.  
  87. result = cerebro.run(tradehistory=True)
  88.  
  89.  
  90. ----------------------------------------------------------------------------------------
  91.  
  92.  
  93.     finalCapital = initCapital + result[0].analyzers.trade.get_analysis()['pnl']['net']['total']
  94.  
  95.     print("+++++++++++++++++++++++++++++++++++++++++++++++++++++")
  96.     print("+++++++++++++++++++++ Backtest ++++++++++++++++++++++")
  97.     print("+++++++++++++++++++++++++++++++++++++++++++++++++++++")
  98.     print("")
  99.     print("Ordini Totali..........: {}".format(result[0].analyzers.trade.get_analysis()['total']['total']))
  100.     print("Ordini Streak vinti....: {}".format(result[0].analyzers.trade.get_analysis()['streak']['won']['current']))
  101.     print("Ordini Streak persi....: {}".format(result[0].analyzers.trade.get_analysis()['streak']['lost']['current']))
  102.     print("Profit Factor..........: {}".format(
  103.         abs(result[0].analyzers.trade.get_analysis()['won']['pnl']['total']) / abs(
  104.             result[0].analyzers.trade.get_analysis()['lost']['pnl']['total'])))
  105.     print("Drawdown Max...........: {}".format(result[0].analyzers.drawdown.get_analysis()['max']['drawdown']))
  106.     print("Capitale finale........: {}".format(finalCapital))
  107.     print("Profitto %.............: {}".format(((finalCapital - initCapital) / initCapital) * 100))
  108.     print("PNL lorda..............: {}".format(result[0].analyzers.trade.get_analysis()['pnl']['gross']['total']))
  109.     print("PNL netta..............: {}".format(result[0].analyzers.trade.get_analysis()['pnl']['net']['total']))
  110.     print("---------------- Vincite -------------")
  111.     print("Trade totali...........: {}".format(result[0].analyzers.trade.get_analysis()['won']['total']))
  112.     print("Trade PNL totale.......: {}".format(result[0].analyzers.trade.get_analysis()['won']['pnl']['total']))
  113.     print("Trade PNL medio........: {}".format(result[0].analyzers.trade.get_analysis()['won']['pnl']['average']))
  114.     print("Trade PNL massimo......: {}".format(result[0].analyzers.trade.get_analysis()['won']['pnl']['max']))
  115.     print("---------------- Perdite -------------")
  116.     print("Trade totali...........: {}".format(result[0].analyzers.trade.get_analysis()['lost']['total']))
  117.     print("Trade PNL totale.......: {}".format(result[0].analyzers.trade.get_analysis()['lost']['pnl']['total']))
  118.     print("Trade PNL medio........: {}".format(result[0].analyzers.trade.get_analysis()['lost']['pnl']['average']))
  119.     print("Trade PNL massimo......: {}".format(result[0].analyzers.trade.get_analysis()['lost']['pnl']['max']))
  120.     print("----------------- Long ---------------")
  121.     print("Trade totali...........: {}".format(result[0].analyzers.trade.get_analysis()['long']['total']))
  122.     print("Trade vinti............: {}".format(result[0].analyzers.trade.get_analysis()['long']['won']))
  123.     print("Trade persi............: {}".format(result[0].analyzers.trade.get_analysis()['long']['lost']))
  124.     print("Win/Loss Ratio.........: {}".format(
  125.         result[0].analyzers.trade.get_analysis()['long']['won'] / result[0].analyzers.trade.get_analysis()['long'][
  126.             'total']))
  127.     print("Trade PNL totale.......: {}".format(result[0].analyzers.trade.get_analysis()['long']['pnl']['total']))
  128.     print("Trade PNL Medio........: {}".format(result[0].analyzers.trade.get_analysis()['long']['pnl']['average']))
  129.     print("Trade Vincite Totali...: {}".format(result[0].analyzers.trade.get_analysis()['long']['pnl']['won']['total']))
  130.     print(
  131.         "Trade Vincita Media....: {}".format(result[0].analyzers.trade.get_analysis()['long']['pnl']['won']['average']))
  132.     print("Trade Vincita Massima..: {}".format(result[0].analyzers.trade.get_analysis()['long']['pnl']['won']['max']))
  133.     print(
  134.         "Trade Perdita Totali...: {}".format(result[0].analyzers.trade.get_analysis()['long']['pnl']['lost']['total']))
  135.     print("Trade Perdita Media....: {}".format(
  136.         result[0].analyzers.trade.get_analysis()['long']['pnl']['lost']['average']))
  137.     print("Trade Perdita Massima..: {}".format(result[0].analyzers.trade.get_analysis()['long']['pnl']['lost']['max']))
  138.     print("----------------- Short ---------------")
  139.     print("Trade totali...........: {}".format(result[0].analyzers.trade.get_analysis()['short']['total']))
  140.     print("Trade vinti............: {}".format(result[0].analyzers.trade.get_analysis()['short']['won']))
  141.     print("Trade persi............: {}".format(result[0].analyzers.trade.get_analysis()['short']['lost']))
  142.     print("Win/Loss Ratio.........: {}".format(
  143.         result[0].analyzers.trade.get_analysis()['short']['won'] / result[0].analyzers.trade.get_analysis()['short'][
  144.             'total']))
  145.     print("Trade PNL totale.......: {}".format(result[0].analyzers.trade.get_analysis()['short']['pnl']['total']))
  146.     print("Trade PNL Medio........: {}".format(result[0].analyzers.trade.get_analysis()['short']['pnl']['average']))
  147.     print(
  148.         "Trade Vincite Totali...: {}".format(result[0].analyzers.trade.get_analysis()['short']['pnl']['won']['total']))
  149.     print("Trade Vincita Media....: {}".format(
  150.         result[0].analyzers.trade.get_analysis()['short']['pnl']['won']['average']))
  151.     print("Trade Vincita Massima..: {}".format(result[0].analyzers.trade.get_analysis()['short']['pnl']['won']['max']))
  152.     print(
  153.         "Trade Perdita Totali...: {}".format(result[0].analyzers.trade.get_analysis()['short']['pnl']['lost']['total']))
  154.     print("Trade Perdita Media....: {}".format(
  155.         result[0].analyzers.trade.get_analysis()['short']['pnl']['lost']['average']))
  156.     print("Trade Perdita Massima..: {}".format(result[0].analyzers.trade.get_analysis()['short']['pnl']['lost']['max']))
  157.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement