Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //@version=5
- //1. Strategia
- strategy(title='Bot Scalping-Exponential-Tick ETH/PERP Ver-5 BYBIT 5M LONG E SHORT', overlay=true, precision = 2,
- max_bars_back=2000, // Serve Per Caricare Più Storico Per Il Trailing Stop
- pyramiding=0,
- precision =3,
- calc_on_every_tick = true,
- initial_capital=300,
- commission_type=strategy.commission.percent,
- commission_value=0.06,
- slippage=17,
- default_qty_type=strategy.percent_of_equity,
- default_qty_value=100)
- // Input
- input_target_long = input.float(title="input_take_profit_long", defval=5.0, minval=0.1, maxval=1000, group='Target')
- input_stop_loss_long = input.float(title="input_stop_loss_long", defval=1.3, minval=0.1, maxval=1000, group='Stop Loss')
- input_target_short = input.float(title="input_take_profit_short", defval=10.0, minval=0.1, maxval=1000, group='Target')
- input_stop_loss_short = input.float(title="input_stop_loss_short", defval=1.1, minval=0.1, maxval=1000, group='Stop Loss')
- lunghezza_adx = input.int(title="lunghezza adx", defval=9, minval=0, maxval=1000, group='Differenziale Dmi')
- 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")
- 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")
- 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")
- 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")
- lunghezza_rsi = input.int(title="lunghezza_rsi", defval=9, minval=1, maxval=1000, group='Differenziale Rsi', tooltip="Opera In Base Ai Range Rsi")
- 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")
- 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")
- lunghezza_media_long = input.int(title="media_long", defval=130, minval=1, maxval=1000, group='Medie')
- lunghezza_media_short = input.int(title="media_short", defval=110, minval=1, maxval=1000, group='Medie')
- lunghezza_media_tendenza_veloce_long = input.int(title="media_tendenza_veloce_long", defval=42, minval=1, maxval=1000, group='Medie')
- lunghezza_media_tendenza_lenta_long = input.int(title="media_tendenza_lenta_long", defval=216, minval=1, maxval=1000, group='Medie')
- lunghezza_media_tendenza_veloce_short = input.int(title="media_tendenza_veloce_short", defval=54, minval=1, maxval=1000, group='Medie')
- lunghezza_media_tendenza_lenta_short = input.int(title="media_tendenza_lenta_short", defval=108, minval=1, maxval=1000, group='Medie')
- input_trailing_stop_trigger_long1 = input.int(title="trigger long 1", defval=50, minval=1, maxval=1000, group='Trailing')
- input_trailing_stop_close_long1 = input.int(title="close long 1", defval=20, minval=1, maxval=1000, group='Trailing')
- input_trailing_stop_trigger_long2 = input.int(title="trigger long 2", defval=70, minval=1, maxval=1000, group='Trailing')
- input_trailing_stop_close_long2 = input.int(title="close long 2", defval=50, minval=1, maxval=1000, group='Trailing')
- input_trailing_stop_trigger_short1 = input.int(title="trigger short 1", defval=40, minval=1, maxval=1000, group='Trailing')
- input_trailing_stop_close_short1 = input.int(title="close short 1", defval=20, minval=1, maxval=1000, group='Trailing')
- input_trailing_stop_trigger_short2 = input.int(title="trigger short 2", defval=70, minval=1, maxval=1000, group='Trailing')
- input_trailing_stop_close_short2 = input.int(title="close short 2", defval=50, minval=1, maxval=1000, group='Trailing')
- perc_apertura_minima_long = input.float(title="perc_apertura_minima_long", defval=0.07, minval=0.01, maxval=1000, group='apertura minima')
- perc_apertura_minima_short = input.float(title="perc_apertura_minima_short", defval=0.05, minval=0.01, maxval=1000, group='apertura minima')
- in_solo_long = input.bool(title='Solo long', defval=false, inline='1', group='Direzione')
- in_solo_short = input.bool(title='Solo short', defval=false, inline='1', group='Direzione')
- // Medie Mobili
- media_long = ta.ema(close, lunghezza_media_long)
- plot(media_long, color=color.new(color.blue, 0), title='Ema Long', linewidth=2)
- media_tendenza_lenta_long = ta.ema(close, lunghezza_media_tendenza_lenta_long)
- media_tendenza_veloce_long = ta.ema(close, lunghezza_media_tendenza_veloce_long)
- plot(media_tendenza_lenta_long, color=color.new(color.purple, 0), title='media_tendenza_lenta_long', linewidth=2)
- plot(media_tendenza_veloce_long, color=color.new(color.aqua, 0), title='media_tendenza_veloce_long', linewidth=2)
- media_short = ta.ema(close, lunghezza_media_short)
- plot(media_short, color=color.new(color.red, 0), title='Ema Short', linewidth=2)
- media_tendenza_lenta_short = ta.ema(close, lunghezza_media_tendenza_lenta_short)
- media_tendenza_veloce_short = ta.ema(close, lunghezza_media_tendenza_veloce_short)
- plot(media_tendenza_lenta_short, color=color.new(color.olive, 0), title='media_tendenza_lenta', linewidth=2)
- plot(media_tendenza_veloce_short, color=color.new(color.lime, 0), title='media_tendenza_veloce', linewidth=2)
- //Apertura minima
- apertura_minima_long = (media_long / 100) * perc_apertura_minima_long
- apertura_minima_short = (media_short / 100) * perc_apertura_minima_short
- //Variabili Stop Long e Short
- stop_loss_long_price =(strategy.opentrades.entry_price(0) - (strategy.opentrades.entry_price(0) * input_stop_loss_long) / 100)
- stop_loss_short_price = (strategy.opentrades.entry_price(0) + (strategy.opentrades.entry_price(0) * input_stop_loss_short) / 100)
- take_profit_long_price = (strategy.opentrades.entry_price(0) + (strategy.opentrades.entry_price(0) * input_target_long) / 100)
- take_profit_short_price = (strategy.opentrades.entry_price(0) - (strategy.opentrades.entry_price(0) * input_target_short) / 100)
- // Variabili Rsi Long e Short
- valore_rsi = ta.rsi(close, lunghezza_rsi)
- plot(valore_rsi, title = "valore_rsi", color=color.blue)
- // Variabili Adx
- [di_pos, di_neg, adx] = ta.dmi(lunghezza_adx, lunghezza_adx)
- valore_adx = adx
- plot(adx, title="adx_long")
- // Contatori
- contatraillong1 = 0
- plot(contatraillong1, title = 'contatraillong1')
- contatraillong2 = 0
- plot(contatraillong2, title = 'contatraillong2')
- contatrailshort1 = 0
- plot(contatrailshort1, title = 'contatrailshort1')
- contatrailshort2 = 0
- plot(contatrailshort2, title = 'contatrailshort2')
- if strategy.opentrades == 0
- contatraillong1 := 0
- if strategy.opentrades == 0
- contatraillong2 := 0
- if strategy.opentrades == 0
- contatrailshort1 := 0
- if strategy.opentrades == 0
- contatrailshort2 := 0
- // Calcolo Trailing Stop
- trailing_stop_trigger_long1 = strategy.opentrades.entry_price(0) + (strategy.opentrades.entry_price(0) * input_target_long /100) * (input_trailing_stop_trigger_long1/100)
- trailing_stop_close_long1 = strategy.opentrades.entry_price(0) + (strategy.opentrades.entry_price(0) * input_target_long /100) * (input_trailing_stop_close_long1/100)
- trailing_stop_trigger_long2 = strategy.opentrades.entry_price(0) + (strategy.opentrades.entry_price(0) * input_target_long /100) * (input_trailing_stop_trigger_long2/100)
- trailing_stop_close_long2 = strategy.opentrades.entry_price(0) + (strategy.opentrades.entry_price(0) * input_target_long /100) * (input_trailing_stop_close_long2/100)
- trailing_stop_trigger_short1 = strategy.opentrades.entry_price(0) - (strategy.opentrades.entry_price(0) * input_target_short /100) * (input_trailing_stop_trigger_short1/100)
- trailing_stop_close_short1 = strategy.opentrades.entry_price(0) - (strategy.opentrades.entry_price(0) * input_target_short /100) * (input_trailing_stop_close_short1/100)
- trailing_stop_trigger_short2 = strategy.opentrades.entry_price(0) - (strategy.opentrades.entry_price(0) * input_target_short /100) * (input_trailing_stop_trigger_short2/100)
- trailing_stop_close_short2 = strategy.opentrades.entry_price(0) - (strategy.opentrades.entry_price(0) * input_target_short /100) * (input_trailing_stop_close_short2/100)
- 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
- 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")
- 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")
- 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")
- 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")
- 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")
- 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")
- 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
- lunghezza_trailing_long = bar_index - strategy.opentrades.entry_bar_index(0) +1
- lunghezza_trailing_short = bar_index - strategy.opentrades.entry_bar_index(0) +1
- range_barre_trailing = bar_index - strategy.opentrades.entry_bar_index(0) +1
- //plot(lunghezza_trailing, title = 'lunghezza')
- varip float highesthigh = 0.0
- highesthigh := strategy.opentrades ==1 ? ta.highest(high, lunghezza_trailing_long): na
- //plot(highesthigh)
- varip float lowestlow = 0.0
- lowestlow := strategy.opentrades == 1 ? ta.lowest(low, lunghezza_trailing_short) : na
- plot(strategy.position_size > 0 ? highesthigh : na, color=color.blue, style=plot.style_cross, linewidth=1, title="highesthigh")
- plot(strategy.position_size < 0 ? lowestlow : na, color=color.red, style=plot.style_cross, linewidth=1, title="lowestlow")
- //Condizione Entrata Long
- //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
- //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
- 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
- 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
- // Condizione Uscita Trailing Stop Long
- 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)
- //barcolor(condEntryLong ? color.lime : na)
- trailing_long1 = (highesthigh >= trailing_stop_trigger_long1) and strategy.position_size > 0
- trailing_long1Float = if trailing_long1 == true
- 1
- else
- 0
- plot(trailing_long1Float, title = 'tralinglong1')
- trailing_long2 = (highesthigh >= trailing_stop_trigger_long2) and strategy.position_size > 0
- trailing_long2Float = if trailing_long2 == true
- 1
- else
- 0
- plot(trailing_long2Float, title = 'tralinglong2')
- trailing_short1 = (lowestlow <= trailing_stop_trigger_short1) and strategy.position_size < 0
- trailing_short1Float = if trailing_short1 == true
- 1
- else
- 0
- plot(trailing_short1Float, title = 'tralingshort1')
- trailing_short2 = (lowestlow <= trailing_stop_trigger_short2) and strategy.position_size < 0
- trailing_short2Float = if trailing_short2 == true
- 1
- else
- 0
- plot(trailing_short2Float, title = 'tralingshort2')
- buy_command = 'buy}'
- sell_command = 'sell'
- close_command = 'close'
- // trailing_long1_command = '"trailing longone 1,"' + str.tostring(highesthigh) + str.tostring(contatraillong1) + str.tostring(input_trailing_stop_trigger_long1) + ''
- // trailing_long2_command = '"trailing longone 2,"' + str.tostring(highesthigh) + str.tostring(contatraillong2) + str.tostring(input_trailing_stop_trigger_long2) + ''
- // trailing_short1_command = '"trailing shortone 1,"' + str.tostring(highesthigh) + str.tostring(contatrailshort1) + str.tostring(input_trailing_stop_trigger_short1) + ''
- // trailing_short2_command = '"trailing shortone 2,"' + str.tostring(highesthigh) + str.tostring(contatrailshort2) + str.tostring(input_trailing_stop_trigger_short2) + ''
- trailing_long1_command = '{"Trigger":"long1","highesthigh":' + str.tostring(highesthigh) + '"contatrail":' + str.tostring(contatraillong1) + '"trigger":' + str.tostring(input_trailing_stop_trigger_long1) + '}'
- trailing_long2_command = '{"Trigger":"long2","highesthigh":' + str.tostring(highesthigh) + '"contatrail":' + str.tostring(contatraillong2) + '"trigger":' + str.tostring(input_trailing_stop_trigger_long2) + '}'
- trailing_short1_command = '{"Trigger":"short1","highesthigh":' + str.tostring(highesthigh) + '"contatrail":' + str.tostring(contatrailshort1) + '"trigger":' + str.tostring(input_trailing_stop_trigger_short1) + '}'
- trailing_short2_command = '{"Trigger":"short2","highesthigh":' + str.tostring(highesthigh) + '"contatrail":' + str.tostring(contatrailshort2) + '"trigger":' + str.tostring(input_trailing_stop_trigger_short2) + '}'
- //entrata e uscita Long (stop/limit x prezzo) (loss/profit x ticks)
- if condEntryLong and strategy.opentrades == 0 //and strategy.opentrades[1] == 0 and strategy.opentrades[2] == 0 and ((strategy.closedtrades - strategy.closedtrades[1]) == 0)
- strategy.entry('operazioneLong', strategy.long, alert_message = "Open Long Position", comment = buy_command)
- if (trailing_long1 == false and trailing_long2 == false) and strategy.opentrades ==1
- 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)
- if (trailing_long1 == true and trailing_long2 == false and contatraillong1 <=0) and strategy.opentrades == 1
- alert(trailing_long1_command, alert.freq_once_per_bar)
- contatraillong1 := 1
- if (trailing_long1 == true and trailing_long2 == false ) and strategy.opentrades == 1
- strategy.exit('SL e TP', from_entry='operazioneLong', stop=trailing_stop_close_long1, limit=take_profit_long_price)
- if (trailing_long2 == true and contatraillong2 <=0) and strategy.opentrades == 1
- alert(trailing_long2_command,alert.freq_once_per_bar)
- contatraillong2 := 1
- if (trailing_long2 == true) and strategy.opentrades == 1
- strategy.exit('SL e TP', from_entry='operazioneLong', stop=trailing_stop_close_long2, limit=take_profit_long_price)
- //entrata e uscita Long (stop/limit x prezzo) (loss/profit x ticks)
- if condEntryShort and strategy.opentrades == 0// and strategy.opentrades[1] == 0 and strategy.opentrades[2] == 0 and ((strategy.closedtrades - strategy.closedtrades[1]) == 0)
- strategy.entry('operazioneShort', strategy.short, alert_message = "Open Short Position", comment = sell_command)
- if (trailing_short1 == false and trailing_short2 == false) and strategy.opentrades ==1 //
- 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)
- if (trailing_short1 == true and trailing_short2 == false and contatrailshort1 <=0) and strategy.opentrades == 1
- alert(trailing_short1_command,alert.freq_once_per_bar)
- contatrailshort1 := 1
- if (trailing_short1 == true and trailing_short2 == false ) and strategy.opentrades == 1
- strategy.exit('SL e TP', from_entry='operazioneShort', stop=trailing_stop_close_short1, limit=take_profit_short_price)
- if (trailing_short2 == true and contatrailshort2 <=0 ) and strategy.opentrades == 1
- alert(trailing_short2_command,alert.freq_once_per_bar)
- contatrailshort2 := 1
- if (trailing_short2 == true ) and strategy.opentrades == 1
- strategy.exit('SL e TP', from_entry='operazioneShort', stop=trailing_stop_close_short2, limit=take_profit_short_price)
- plot(strategy.opentrades, title='posizioni aperte')
- plot(strategy.closedtrades, title='posizioni chiuse')
- plot(strategy.closedtrades - strategy.closedtrades[1])
- // // Nome Alert: Scalping-Exponential-Bot ETH/PERP Ver-5 FTX 5M
- // // Commento Alert: {{strategy.order.comment}}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement