Advertisement
Maurizio-Ciullo

Bot Scalping-Exponential-Tick ETH/PERP Ver-5 BYBIT 5M LONG E SHORT

Jun 13th, 2023 (edited)
1,148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //@version=5
  2. //1. Strategia
  3. strategy(title='Bot Scalping-Exponential-Tick ETH/PERP Ver-5 BYBIT 5M LONG E SHORT', overlay=true, precision = 2,
  4.      max_bars_back=2000, // Serve Per Caricare Più Storico Per Il Trailing Stop
  5.      pyramiding=0,
  6.      precision =3,
  7.      calc_on_every_tick = true,
  8.      initial_capital=300,
  9.      commission_type=strategy.commission.percent,
  10.      commission_value=0.06,
  11.      slippage=17,
  12.      default_qty_type=strategy.percent_of_equity,
  13.      default_qty_value=100)
  14.      
  15.      
  16. // Input
  17. input_target_long = input.float(title="input_take_profit_long", defval=5.0, minval=0.1, maxval=1000, group='Target')
  18. input_stop_loss_long = input.float(title="input_stop_loss_long", defval=1.3, minval=0.1, maxval=1000, group='Stop Loss')
  19. input_target_short = input.float(title="input_take_profit_short", defval=10.0, minval=0.1, maxval=1000, group='Target')
  20. input_stop_loss_short = input.float(title="input_stop_loss_short", defval=1.1, minval=0.1, maxval=1000, group='Stop Loss')
  21. lunghezza_adx = input.int(title="lunghezza adx", defval=9, minval=0, maxval=1000, group='Differenziale Dmi')
  22. differenziale_adx_basso_long = input.float(title="differenziale_adx_basso_long", defval=0.0, minval=0.0, maxval=1000, group='Differenziale Adx', tooltip="Opera In Base Alla Tendenza")
  23. differenziale_adx_alto_long = input.float(title="differenziale_adx_alto_long", defval=27.0, minval=0.1, maxval=1000, group='Differenziale Adx', tooltip="Opera In Base Alla Tendenza")
  24. differenziale_adx_basso_short = input.float(title="differenziale_adx_basso_short", defval=30.0, minval=0.1, maxval=1000, group='Differenziale Adx', tooltip="Opera In Base Alla Tendenza")
  25. differenziale_adx_alto_short = input.float(title="differenziale_adx_alto_short", defval=60.0, minval=0.1, maxval=1000, group='Differenziale Adx', tooltip="Opera In Base Alla Tendenza")
  26. lunghezza_rsi = input.int(title="lunghezza_rsi", defval=9, minval=1, maxval=1000, group='Differenziale Rsi', tooltip="Opera In Base Ai Range Rsi")
  27. differenziale_rsi_long = input.float(title="differenziale_rsi_long", defval=65.0, minval=0.1, maxval=1000, group='Differenziale Rsi', tooltip="Opera In Base Ai Range Rsi")
  28. differenziale_rsi_short = input.float(title="differenziale_rsi_short", defval=45.0, minval=0.1, maxval=1000, group='Differenziale Rsi', tooltip="Opera In Base Ai Range Rsi")
  29. lunghezza_media_long = input.int(title="media_long", defval=130, minval=1, maxval=1000, group='Medie')
  30. lunghezza_media_short = input.int(title="media_short", defval=110, minval=1, maxval=1000, group='Medie')
  31. lunghezza_media_tendenza_veloce_long = input.int(title="media_tendenza_veloce_long", defval=42, minval=1, maxval=1000, group='Medie')
  32. lunghezza_media_tendenza_lenta_long  = input.int(title="media_tendenza_lenta_long", defval=216, minval=1, maxval=1000, group='Medie')
  33. lunghezza_media_tendenza_veloce_short = input.int(title="media_tendenza_veloce_short", defval=54, minval=1, maxval=1000, group='Medie')
  34. lunghezza_media_tendenza_lenta_short  = input.int(title="media_tendenza_lenta_short", defval=108, minval=1, maxval=1000, group='Medie')
  35. input_trailing_stop_trigger_long1 = input.int(title="trigger long 1", defval=50, minval=1, maxval=1000, group='Trailing')
  36. input_trailing_stop_close_long1 = input.int(title="close long 1", defval=20, minval=1, maxval=1000, group='Trailing')
  37. input_trailing_stop_trigger_long2 = input.int(title="trigger long 2", defval=70, minval=1, maxval=1000, group='Trailing')
  38. input_trailing_stop_close_long2 = input.int(title="close long 2", defval=50, minval=1, maxval=1000, group='Trailing')
  39. input_trailing_stop_trigger_short1 = input.int(title="trigger short 1", defval=40, minval=1, maxval=1000, group='Trailing')
  40. input_trailing_stop_close_short1 = input.int(title="close short 1", defval=20, minval=1, maxval=1000, group='Trailing')
  41. input_trailing_stop_trigger_short2 = input.int(title="trigger short 2", defval=70, minval=1, maxval=1000, group='Trailing')
  42. input_trailing_stop_close_short2 = input.int(title="close short 2", defval=50, minval=1, maxval=1000, group='Trailing')
  43. perc_apertura_minima_long = input.float(title="perc_apertura_minima_long", defval=0.07, minval=0.01, maxval=1000, group='apertura minima')
  44. perc_apertura_minima_short = input.float(title="perc_apertura_minima_short", defval=0.05, minval=0.01, maxval=1000, group='apertura minima')
  45. in_solo_long = input.bool(title='Solo long', defval=false, inline='1', group='Direzione')
  46. in_solo_short = input.bool(title='Solo short', defval=false, inline='1', group='Direzione')
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54. // Medie Mobili
  55. media_long = ta.ema(close, lunghezza_media_long)
  56. plot(media_long, color=color.new(color.blue, 0), title='Ema Long', linewidth=2)
  57. media_tendenza_lenta_long = ta.ema(close, lunghezza_media_tendenza_lenta_long)
  58. media_tendenza_veloce_long = ta.ema(close, lunghezza_media_tendenza_veloce_long)
  59. plot(media_tendenza_lenta_long, color=color.new(color.purple, 0), title='media_tendenza_lenta_long', linewidth=2)
  60. plot(media_tendenza_veloce_long, color=color.new(color.aqua, 0), title='media_tendenza_veloce_long', linewidth=2)
  61. media_short = ta.ema(close, lunghezza_media_short)
  62. plot(media_short, color=color.new(color.red, 0), title='Ema Short', linewidth=2)
  63. media_tendenza_lenta_short = ta.ema(close, lunghezza_media_tendenza_lenta_short)
  64. media_tendenza_veloce_short = ta.ema(close, lunghezza_media_tendenza_veloce_short)
  65. plot(media_tendenza_lenta_short, color=color.new(color.olive, 0), title='media_tendenza_lenta', linewidth=2)
  66. plot(media_tendenza_veloce_short, color=color.new(color.lime, 0), title='media_tendenza_veloce', linewidth=2)
  67.  
  68.  
  69. //Apertura minima
  70.  
  71. apertura_minima_long   = (media_long / 100) * perc_apertura_minima_long
  72. apertura_minima_short   = (media_short / 100) * perc_apertura_minima_short
  73.  
  74.  
  75. //Variabili Stop Long e Short
  76. stop_loss_long_price =(strategy.opentrades.entry_price(0) - (strategy.opentrades.entry_price(0) * input_stop_loss_long) / 100)
  77. stop_loss_short_price = (strategy.opentrades.entry_price(0) + (strategy.opentrades.entry_price(0) * input_stop_loss_short) / 100)
  78. take_profit_long_price = (strategy.opentrades.entry_price(0) + (strategy.opentrades.entry_price(0) * input_target_long) / 100)
  79. take_profit_short_price = (strategy.opentrades.entry_price(0) - (strategy.opentrades.entry_price(0) * input_target_short) / 100)
  80.  
  81.  
  82.  
  83.  
  84. // Variabili Rsi Long e Short
  85. valore_rsi = ta.rsi(close, lunghezza_rsi)
  86. plot(valore_rsi, title = "valore_rsi", color=color.blue)
  87.  
  88.  
  89. // Variabili Adx
  90. [di_pos, di_neg, adx] = ta.dmi(lunghezza_adx, lunghezza_adx)
  91. valore_adx = adx
  92. plot(adx, title="adx_long")
  93.  
  94.  
  95. // Contatori
  96.  
  97. contatraillong1 = 0
  98. plot(contatraillong1, title = 'contatraillong1')
  99. contatraillong2 = 0
  100. plot(contatraillong2, title = 'contatraillong2')
  101. contatrailshort1 = 0
  102. plot(contatrailshort1, title = 'contatrailshort1')
  103. contatrailshort2 = 0
  104. plot(contatrailshort2, title = 'contatrailshort2')
  105.  
  106.  
  107. if strategy.opentrades == 0
  108.     contatraillong1 := 0
  109.  
  110. if strategy.opentrades == 0
  111.     contatraillong2 := 0
  112.  
  113. if strategy.opentrades == 0
  114.     contatrailshort1 := 0
  115.  
  116. if strategy.opentrades == 0
  117.     contatrailshort2 := 0
  118.  
  119.  
  120.  
  121.  
  122. // Calcolo Trailing Stop
  123. trailing_stop_trigger_long1 = strategy.opentrades.entry_price(0) + (strategy.opentrades.entry_price(0) * input_target_long /100) * (input_trailing_stop_trigger_long1/100)
  124. trailing_stop_close_long1 = strategy.opentrades.entry_price(0) + (strategy.opentrades.entry_price(0) * input_target_long /100) * (input_trailing_stop_close_long1/100)
  125. trailing_stop_trigger_long2 = strategy.opentrades.entry_price(0) + (strategy.opentrades.entry_price(0) * input_target_long /100) * (input_trailing_stop_trigger_long2/100)
  126. trailing_stop_close_long2 = strategy.opentrades.entry_price(0) + (strategy.opentrades.entry_price(0) * input_target_long /100) * (input_trailing_stop_close_long2/100)
  127. trailing_stop_trigger_short1 = strategy.opentrades.entry_price(0) - (strategy.opentrades.entry_price(0) * input_target_short /100) * (input_trailing_stop_trigger_short1/100)
  128. trailing_stop_close_short1 = strategy.opentrades.entry_price(0) - (strategy.opentrades.entry_price(0) * input_target_short /100) * (input_trailing_stop_close_short1/100)
  129. trailing_stop_trigger_short2 = strategy.opentrades.entry_price(0) - (strategy.opentrades.entry_price(0) * input_target_short /100) * (input_trailing_stop_trigger_short2/100)
  130. trailing_stop_close_short2 = strategy.opentrades.entry_price(0) - (strategy.opentrades.entry_price(0) * input_target_short /100) * (input_trailing_stop_close_short2/100)
  131.  
  132. plot(strategy.position_size != 0 ? strategy.opentrades.entry_price(0) : 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
  133. plot(strategy.position_size > 0 ?  take_profit_long_price : strategy.position_size < 0 ? take_profit_short_price: na, color=color.green, style=plot.style_cross, linewidth=2, title="tk_limit")
  134. plot(strategy.position_size > 0 ?  stop_loss_long_price : strategy.position_size < 0 ? stop_loss_short_price: na, color=color.red, style=plot.style_cross, linewidth=2, title="sl_limit")
  135. plot(strategy.position_size > 0 ?  trailing_stop_trigger_long1 : strategy.position_size < 0 ? trailing_stop_trigger_short1: na, color=strategy.position_size > 0 ? color.blue : strategy.position_size < 0 ? color.red : na, style=plot.style_cross, linewidth=2, title="trigger1")
  136. plot(strategy.position_size > 0 ?  trailing_stop_close_long1 : strategy.position_size < 0 ? trailing_stop_close_short1: na, color=strategy.position_size > 0 ? color.blue : strategy.position_size < 0 ? color.red : na, style=plot.style_cross, linewidth=2, title="trailing 1")
  137. plot(strategy.position_size > 0 ?  trailing_stop_trigger_long2 : strategy.position_size < 0 ? trailing_stop_trigger_short2: na, color=strategy.position_size > 0 ? color.blue : strategy.position_size < 0 ? color.red : na, style=plot.style_cross, linewidth=2, title="trigger2")
  138. plot(strategy.position_size > 0 ?  trailing_stop_close_long2 : strategy.position_size < 0 ? trailing_stop_close_short2: na, color=strategy.position_size > 0 ? color.blue : strategy.position_size < 0 ? color.red : na, style=plot.style_cross, linewidth=2, title="trailing2")
  139. bgcolor(strategy.position_size > 0 ? color.green : strategy.position_size < 0 ? color.red : na, transp=90) // sfondo verde quando siamo long, sfondo rosso quando siamo short, no sfondo quando non siamo in posizione
  140.  
  141. lunghezza_trailing_long =  bar_index - strategy.opentrades.entry_bar_index(0) +1
  142. lunghezza_trailing_short =  bar_index - strategy.opentrades.entry_bar_index(0) +1
  143.  
  144. range_barre_trailing = bar_index - strategy.opentrades.entry_bar_index(0) +1
  145. //plot(lunghezza_trailing, title = 'lunghezza')
  146. varip float highesthigh = 0.0
  147. highesthigh := strategy.opentrades ==1 ? ta.highest(high, lunghezza_trailing_long): na
  148. //plot(highesthigh)
  149.  
  150. varip float lowestlow = 0.0
  151. lowestlow := strategy.opentrades == 1 ?  ta.lowest(low, lunghezza_trailing_short) : na
  152.  
  153. plot(strategy.position_size > 0 ?  highesthigh : na, color=color.blue, style=plot.style_cross, linewidth=1, title="highesthigh")
  154. plot(strategy.position_size < 0 ?  lowestlow : na, color=color.red, style=plot.style_cross, linewidth=1, title="lowestlow")
  155.  
  156.  
  157. //Condizione Entrata Long
  158. //condEntryLong =  close > (media_long + apertura_minima_long)  and valore_adx > differenziale_adx_basso_long and valore_adx < differenziale_adx_alto_long  and valore_rsi < differenziale_rsi_long and not in_solo_short
  159. //condEntryShort =  close < (media_short - apertura_minima_short)   and valore_adx > differenziale_adx_basso_short and valore_adx < differenziale_adx_alto_short  and valore_rsi > differenziale_rsi_short and not in_solo_long
  160.  
  161. condEntryLong = ta.crossover(close, media_long) and close > (media_long + apertura_minima_long) and media_tendenza_veloce_long > media_tendenza_lenta_long and valore_adx > differenziale_adx_basso_long and valore_adx < differenziale_adx_alto_long  and valore_rsi < differenziale_rsi_long and not in_solo_short
  162. condEntryShort = ta.crossunder(close, media_short) and close < (media_short - apertura_minima_short)  and media_tendenza_lenta_short > media_tendenza_veloce_short and valore_adx > differenziale_adx_basso_short and valore_adx < differenziale_adx_alto_short  and valore_rsi > differenziale_rsi_short and not in_solo_long
  163.  
  164.  
  165.  
  166. // Condizione Uscita Trailing Stop Long
  167. trailing_long =  (highesthigh > trailing_stop_trigger_long1 and low <= trailing_stop_close_long1) or (highesthigh > trailing_stop_trigger_long2 and low <= trailing_stop_close_long2)
  168.  
  169. //barcolor(condEntryLong ? color.lime : na)
  170.  
  171.  
  172.  
  173. trailing_long1  = (highesthigh >= trailing_stop_trigger_long1) and strategy.position_size > 0
  174.  
  175. trailing_long1Float = if trailing_long1 == true
  176.     1
  177. else
  178.  
  179.     0
  180. plot(trailing_long1Float, title = 'tralinglong1')
  181.  
  182. trailing_long2  = (highesthigh >= trailing_stop_trigger_long2) and strategy.position_size > 0
  183.  
  184. trailing_long2Float = if trailing_long2 == true
  185.     1
  186. else
  187.     0
  188. plot(trailing_long2Float, title = 'tralinglong2')
  189.  
  190. trailing_short1  = (lowestlow <= trailing_stop_trigger_short1) and strategy.position_size < 0
  191.  
  192. trailing_short1Float = if trailing_short1 == true
  193.     1
  194. else
  195.     0
  196. plot(trailing_short1Float, title = 'tralingshort1')
  197.  
  198. trailing_short2  = (lowestlow <= trailing_stop_trigger_short2) and strategy.position_size < 0
  199.  
  200. trailing_short2Float = if trailing_short2 == true
  201.     1
  202. else
  203.     0
  204. plot(trailing_short2Float, title = 'tralingshort2')
  205.  
  206.  
  207. buy_command = 'buy}'
  208. sell_command = 'sell'
  209. close_command = 'close'
  210. // trailing_long1_command = '"trailing longone 1,"' + str.tostring(highesthigh) + str.tostring(contatraillong1) + str.tostring(input_trailing_stop_trigger_long1) + ''
  211. // trailing_long2_command = '"trailing longone 2,"' + str.tostring(highesthigh) + str.tostring(contatraillong2) + str.tostring(input_trailing_stop_trigger_long2) + ''
  212. // trailing_short1_command = '"trailing shortone 1,"' + str.tostring(highesthigh) + str.tostring(contatrailshort1) + str.tostring(input_trailing_stop_trigger_short1) + ''
  213. // trailing_short2_command = '"trailing shortone 2,"' + str.tostring(highesthigh) + str.tostring(contatrailshort2) + str.tostring(input_trailing_stop_trigger_short2) + ''
  214. trailing_long1_command = '{"Trigger":"long1","highesthigh":' + str.tostring(highesthigh) + '"contatrail":' + str.tostring(contatraillong1) + '"trigger":' + str.tostring(input_trailing_stop_trigger_long1) + '}'
  215. trailing_long2_command = '{"Trigger":"long2","highesthigh":' + str.tostring(highesthigh) + '"contatrail":' + str.tostring(contatraillong2) + '"trigger":' + str.tostring(input_trailing_stop_trigger_long2) + '}'
  216. trailing_short1_command = '{"Trigger":"short1","highesthigh":' + str.tostring(highesthigh) + '"contatrail":' + str.tostring(contatrailshort1) + '"trigger":' + str.tostring(input_trailing_stop_trigger_short1) + '}'
  217. trailing_short2_command = '{"Trigger":"short2","highesthigh":' + str.tostring(highesthigh) + '"contatrail":' + str.tostring(contatrailshort2) + '"trigger":' + str.tostring(input_trailing_stop_trigger_short2) + '}'
  218.  
  219.  
  220. //entrata e uscita Long (stop/limit x prezzo) (loss/profit x ticks)
  221. if condEntryLong and strategy.opentrades == 0 //and strategy.opentrades[1] == 0 and strategy.opentrades[2] == 0 and ((strategy.closedtrades - strategy.closedtrades[1]) == 0)
  222.     strategy.entry('operazioneLong', strategy.long, alert_message = "Open Long Position", comment = buy_command)
  223.    
  224. if (trailing_long1 == false and trailing_long2 == false) and strategy.opentrades ==1
  225.     strategy.exit('SL e TP', from_entry='operazioneLong', stop=stop_loss_long_price, limit=take_profit_long_price, alert_message = "Your Long SL-TP Has Been Triggered.", comment = close_command)
  226.  
  227.  
  228. if (trailing_long1 == true and trailing_long2 == false and contatraillong1 <=0) and strategy.opentrades == 1
  229.     alert(trailing_long1_command, alert.freq_once_per_bar)
  230.     contatraillong1 := 1
  231. if (trailing_long1 == true and trailing_long2 == false ) and strategy.opentrades == 1    
  232.     strategy.exit('SL e TP', from_entry='operazioneLong', stop=trailing_stop_close_long1, limit=take_profit_long_price)
  233.    
  234.  
  235. if (trailing_long2 == true and contatraillong2 <=0) and strategy.opentrades == 1
  236.     alert(trailing_long2_command,alert.freq_once_per_bar)
  237.     contatraillong2 := 1
  238. if (trailing_long2 == true) and strategy.opentrades == 1    
  239.     strategy.exit('SL e TP', from_entry='operazioneLong', stop=trailing_stop_close_long2, limit=take_profit_long_price)
  240.    
  241.  
  242.     //entrata e uscita Long (stop/limit x prezzo) (loss/profit x ticks)
  243. if condEntryShort and strategy.opentrades == 0// and strategy.opentrades[1] == 0 and strategy.opentrades[2] == 0 and ((strategy.closedtrades - strategy.closedtrades[1]) == 0)
  244.     strategy.entry('operazioneShort', strategy.short, alert_message = "Open Short Position", comment = sell_command)
  245.    
  246.  
  247. if (trailing_short1 == false and trailing_short2 == false) and  strategy.opentrades ==1 //  
  248.     strategy.exit('SL e TP', from_entry='operazioneShort', stop=stop_loss_short_price, limit=take_profit_short_price, alert_message = "Your Short SL-TP Has Been Triggered.", comment = close_command)
  249.  
  250.  
  251. if (trailing_short1 == true and trailing_short2 == false and contatrailshort1 <=0) and strategy.opentrades == 1
  252.     alert(trailing_short1_command,alert.freq_once_per_bar)
  253.     contatrailshort1 :=  1
  254. if (trailing_short1 == true and trailing_short2 == false ) and strategy.opentrades == 1
  255.     strategy.exit('SL e TP', from_entry='operazioneShort', stop=trailing_stop_close_short1, limit=take_profit_short_price)
  256.    
  257.  
  258. if (trailing_short2 == true and contatrailshort2 <=0 ) and strategy.opentrades == 1
  259.     alert(trailing_short2_command,alert.freq_once_per_bar)
  260.     contatrailshort2 :=  1
  261. if (trailing_short2 == true ) and strategy.opentrades == 1
  262.     strategy.exit('SL e TP', from_entry='operazioneShort', stop=trailing_stop_close_short2, limit=take_profit_short_price)
  263.    
  264. plot(strategy.opentrades, title='posizioni aperte')
  265. plot(strategy.closedtrades, title='posizioni chiuse')
  266. plot(strategy.closedtrades - strategy.closedtrades[1])
  267.  
  268. // // Nome Alert: Scalping-Exponential-Bot ETH/PERP Ver-5 FTX 5M
  269. // // Commento Alert: {{strategy.order.comment}}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement