Advertisement
Maurizio-Ciullo

Bot Break-in-New Ver-4 ETH/PERP FTX 4H LONG E SHORT

Jan 13th, 2022 (edited)
209
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
  2.  
  3. //Il trading system completo - Bot Break in New (Strategia Breakout) - parte 1
  4. // (Exchange= FTX) (Sottostante ETH-PERP) (Timeframe= 4H) (Direzione= LONG E SHORT) (Swing Posizione= SI) (Esclusione Ore=NO) (Esclusione Giorni=LUNEDI') (Esclusione Mesi=SETTEMBRE)
  5. // (Take Profit Long/Short Market = Non Definito) (Take Profit Limit Long/Short= +20% Tradingview-Hub) (Stop Loss Limit Long/Short= -11% Tradingview-Hub) (Stop Emergenza= No)
  6. //@version=4
  7. strategy(title="Bot Break-in-New Ver-4 ETH/PERP FTX 4H LONG E SHORT", overlay=true,
  8.      pyramiding=0,
  9.      initial_capital=150,
  10.      commission_type=strategy.commission.percent,
  11.      commission_value=0.1, slippage=3,
  12.      default_qty_type=strategy.percent_of_equity,
  13.      default_qty_value=27.5)
  14.  
  15.  
  16. //input SL e TP Long e Short
  17. input_stop_loss_long = input(title="stop_loss_long", type=input.float, defval=11, minval=0, maxval=100, step=0.1, group="Stop")
  18. input_take_profit_long = input(title="take_profit_long", type=input.float, defval=20, minval=0, maxval=100, step=0.1, group="Stop")
  19. input_stop_loss_short = input(title="stop_loss_short", type=input.float, defval=11, minval=0, maxval=100, step=0.1, group="Stop")
  20. input_take_profit_short = input(title="take_profit_short", type=input.float, defval=20, minval=0, maxval=100, step=0.1, group="Stop")
  21. input_lunghezza_ema = input(title="lunghezza ema", type=input.integer, defval=125, minval=0, maxval=300, step=5)
  22.  
  23. riskPerTrade = input(title="Risk Per Trade %", type=input.float, minval=0.1, maxval=100, defval=27.5, step=0.5)
  24.  
  25. in_atr_periodo = input(title="Periodicità ATR", type=input.integer, minval=5, maxval=500, defval=10, step=1)
  26. in_atr_Mult = input(title="atr_Mult", type=input.float, minval=1, maxval=5, defval=1, step=0.5)
  27. //in_tpPips = input(title="TP", type=input.integer, defval=40)
  28. //in_slPips = input(title="SL", type=input.integer, defval=30)
  29.  
  30. //Input solo long o solo short
  31. in_solo_long = input(title="Solo long", type=input.bool, defval=false, inline="1", group="Direzione")
  32. in_solo_short = input(title="Solo short", type=input.bool, defval=false, inline="1", group="Direzione")
  33.  
  34. // Calcolo del range del backtest
  35.  
  36. startDate = input(title="Start Date", type=input.integer,
  37.      defval=1, minval=1, maxval=31, group="Periodo")
  38. startMonth = input(title="Start Month", type=input.integer,
  39.      defval=08, minval=1, maxval=12, group="Periodo")
  40. startYear = input(title="Start Year", type=input.integer,
  41.      defval=2017, minval=1800, maxval=2100, group="Periodo")
  42.  
  43. endDate = input(title="End Date", type=input.integer,
  44.      defval=01, minval=1, maxval=31, group="Periodo")
  45. endMonth = input(title="End Month", type=input.integer,
  46.      defval=01, minval=1, maxval=12, group="Periodo")
  47. endYear = input(title="End Year", type=input.integer,
  48.      defval=2121, minval=1800, maxval=2100, group="Periodo")
  49.  
  50.  
  51. inDateRange = (time >= timestamp(syminfo.timezone, startYear,
  52.          startMonth, startDate, 0, 0)) and
  53.      (time < timestamp(syminfo.timezone, endYear, endMonth, endDate, 0, 0))
  54.  
  55. atr   = atr(in_atr_periodo)
  56. media = ema(close, input_lunghezza_ema)
  57.  
  58. hourTrading = input(title="sessione valida di trading", type=input.string, defval="0600-2300:23456")
  59.  
  60. rangeTrading = time(timeframe.period, hourTrading)
  61.  
  62.  
  63. //calcolo della size per lo SL e TP
  64. size = ((strategy.equity * riskPerTrade) / 100)
  65. nr_contratti = (size) / close
  66. stop_loss_long =round(((size /syminfo.mintick) / 100) * input_stop_loss_long)/nr_contratti
  67. take_profit_long =round(((size /syminfo.mintick) / 100) * input_take_profit_long)/nr_contratti
  68. stop_loss_short =round(((size /syminfo.mintick) / 100) * input_stop_loss_short)/nr_contratti
  69. take_profit_short =round(((size /syminfo.mintick) / 100) * input_take_profit_short)/nr_contratti
  70.  
  71. plot(strategy.position_size != 0 ? strategy.position_avg_price : na , color=strategy.position_size > 0 ? color.blue : strategy.position_size < 0 ? color.red : na, style=plot.style_linebr, title="entry_price") // stampa l'entry price in rosso se short in blu se long
  72. plot(strategy.position_size > 0 ?  strategy.position_avg_price + take_profit_long * 0.01 * 10: strategy.position_size < 0 ? strategy.position_avg_price - take_profit_short * 0.01 * 10: na, color=color.green, style=plot.style_cross, linewidth=2, title="tk_limit")
  73. plot(strategy.position_size > 0 ?  strategy.position_avg_price - stop_loss_long * 0.01 * 10: strategy.position_size < 0 ? strategy.position_avg_price + stop_loss_short * 0.01 * 10 : na, color=color.red, style=plot.style_cross, linewidth=2, title="sl_limit")
  74.  
  75. bgcolor(strategy.position_size > 0 ? color.green : strategy.position_size < 0 ? color.red : na) // sfondo verde quando siamo long, sfondo rosso quando siamo short, no sfondo quando non siamo in posizione
  76.  
  77.  
  78. // giorni da 1 a 7 1 è domenica
  79.  
  80. //Condizione Long
  81. cond_long = (abs(open-close)>(atr*in_atr_Mult)) and close > open and close > media and month!=9 and dayofweek !=2 and not in_solo_short and inDateRange
  82.  
  83. //Condizione Short
  84. cond_short = (abs(open-close)>(atr*in_atr_Mult)) and close < open and close < media and month!=9 and dayofweek !=2 and not in_solo_long and inDateRange
  85.  
  86. barcolor(cond_long ? color.lime : cond_short ? color.purple : na)
  87.  
  88. if (cond_long) //and strategy.opentrades == 0
  89.     strategy.entry("operazioneLong", true)
  90.     strategy.exit("SL e TP", from_entry = "operazioneLong", loss=stop_loss_long, profit=take_profit_long)
  91.  
  92. //chiusura di sicurezza Long
  93. //if (cond_exitLong)  
  94. //    strategy.close(id="operazioneLong")
  95.  
  96.  
  97. //entrata e uscita Short
  98. if (cond_short)// and strategy.opentrades == 0
  99.     strategy.entry("operazioneShort", false)
  100.     strategy.exit("SL e TP", from_entry = "operazioneShort", loss=stop_loss_short, profit=take_profit_short)
  101.  
  102. //chiusura di sicurezza Short
  103. //if (cond_exitShort)  
  104. //    strategy.close(id="operazioneShort")
  105.  
  106. // Tabella risultati mensili by QuantNomad (TSC Boilerplate) Per visualizzare andare nelle impostazioni proprietà e spuntare ad ogni tick
  107.  
  108. new_month = month(time) != month(time[1])
  109. new_year  = year(time)  != year(time[1])
  110.  
  111. eq = strategy.equity
  112.  
  113. bar_pnl = eq / eq[1] - 1
  114.  
  115. cur_month_pnl = 0.0
  116. cur_year_pnl  = 0.0
  117.  
  118. // Current Monthly P&L
  119. cur_month_pnl := new_month ? 0.0 :
  120.                  (1 + cur_month_pnl[1]) * (1 + bar_pnl) - 1
  121.  
  122. // Current Yearly P&L
  123. cur_year_pnl := new_year ? 0.0 :
  124.                  (1 + cur_year_pnl[1]) * (1 + bar_pnl) - 1  
  125.  
  126. // Arrays to store Yearly and Monthly P&Ls
  127. var month_pnl  = array.new_float(0)
  128. var month_time = array.new_int(0)
  129.  
  130. var year_pnl  = array.new_float(0)
  131. var year_time = array.new_int(0)
  132.  
  133. last_computed = false
  134.  
  135. if (not na(cur_month_pnl[1]) and (new_month or barstate.islast))
  136.     if (last_computed[1])
  137.         array.pop(month_pnl)
  138.         array.pop(month_time)
  139.        
  140.     array.push(month_pnl , cur_month_pnl[1])
  141.     array.push(month_time, time[1])
  142.  
  143. if (not na(cur_year_pnl[1]) and (new_year or barstate.islast))
  144.     if (last_computed[1])
  145.         array.pop(year_pnl)
  146.         array.pop(year_time)
  147.        
  148.     array.push(year_pnl , cur_year_pnl[1])
  149.     array.push(year_time, time[1])
  150.  
  151. last_computed := barstate.islast ? true : nz(last_computed[1])
  152.  
  153. // Monthly P&L Table    
  154. var monthly_table = table(na)
  155. prec      = input(2, title = "Return Precision")
  156.  
  157. if (barstate.islast)
  158.     monthly_table := table.new(position.bottom_right, columns = 14, rows = array.size(year_pnl) + 1, bgcolor=#0F0F0F,border_color=#000000, border_width=1) //frame_width=1 tabella più piccola sostituisce border_width=1
  159.  
  160.     table.cell(monthly_table, 0,  0, "",     text_color=#D3D3D3, bgcolor=#0F0F0F)
  161.     table.cell(monthly_table, 1,  0, "Jan",  text_color=#D3D3D3, bgcolor=#0F0F0F)
  162.     table.cell(monthly_table, 2,  0, "Feb",  text_color=#D3D3D3, bgcolor=#0F0F0F)
  163.     table.cell(monthly_table, 3,  0, "Mar",  text_color=#D3D3D3, bgcolor=#0F0F0F)
  164.     table.cell(monthly_table, 4,  0, "Apr",  text_color=#D3D3D3, bgcolor=#0F0F0F)
  165.     table.cell(monthly_table, 5,  0, "May",  text_color=#D3D3D3, bgcolor=#0F0F0F)
  166.     table.cell(monthly_table, 6,  0, "Jun",  text_color=#D3D3D3, bgcolor=#0F0F0F)
  167.     table.cell(monthly_table, 7,  0, "Jul",  text_color=#D3D3D3, bgcolor=#0F0F0F)
  168.     table.cell(monthly_table, 8,  0, "Aug",  text_color=#D3D3D3, bgcolor=#0F0F0F)
  169.     table.cell(monthly_table, 9,  0, "Sep",  text_color=#D3D3D3, bgcolor=#0F0F0F)
  170.     table.cell(monthly_table, 10, 0, "Oct",  text_color=#D3D3D3, bgcolor=#0F0F0F)
  171.     table.cell(monthly_table, 11, 0, "Nov",  text_color=#D3D3D3, bgcolor=#0F0F0F)
  172.     table.cell(monthly_table, 12, 0, "Dec",  text_color=#D3D3D3, bgcolor=#0F0F0F)
  173.     table.cell(monthly_table, 13, 0, "Year", text_color=#D3D3D3, bgcolor=#0F0F0F)
  174.  
  175.  
  176.     for yi = 0 to array.size(year_pnl) - 1
  177.         table.cell(monthly_table, 0,  yi + 1, tostring(year(array.get(year_time, yi))), text_color=#D3D3D3, bgcolor=#0F0F0F)
  178.        
  179.         y_color = array.get(year_pnl, yi) > 0 ? color.lime : color.red
  180.         table.cell(monthly_table, 13, yi + 1, tostring(round(array.get(year_pnl, yi) * 100, prec)), bgcolor = y_color)
  181.        
  182.     for mi = 0 to array.size(month_time) - 1
  183.         m_row   = year(array.get(month_time, mi))  - year(array.get(year_time, 0)) + 1
  184.         m_col   = month(array.get(month_time, mi))
  185.         m_color = array.get(month_pnl, mi) > 0 ? color.lime : color.red
  186.        
  187.         table.cell(monthly_table, m_col, m_row, tostring(round(array.get(month_pnl, mi) * 100, prec)), bgcolor = m_color)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement