Advertisement
Maurizio-Ciullo

Bot Scalping-Trailing-Bot ETH/PERP Ver-5 FTX 5M LONG E SHORT

May 28th, 2022
302
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 Scalping-Trailing Bot Ver-5 (Strategia Breakout) Parte 1
  4. // (Exchange= FTX) (Sottostante ETH-PERP) (Timeframe= 5M) (Direzione= LONG E SHORT) (Swing Posizione= NO) (Esclusione Ore=NO) (Esclusione Giorni=NO') (Esclusione Mesi=NO)
  5. // (Take Profit Long/Short Market = SI) (Take Profit Limit Long/Short= +3% Tradingview-Hub) (Stop Loss Limit Long/Short= -3% Tradingview-Hub) (Stop Loss Market Long/Short= NO) (Trailing Stop=SI) (Stop Emergenza= NO)
  6. // (Rischio Operazione 2% Perdita Media)
  7. // (In Sample Dal=01/02/2021 Al 01/10/2021) (Out Of Sample Dal=01/10/2021 Al 29/03/2022)
  8. // (Progettatta Il=25/04/2022)
  9.  
  10.  
  11. //@version=5
  12. //1. Strategia
  13. strategy(title='Bot Scalping-Trailing-Bot ETH/PERP Ver-5 FTX 5M LONG E SHORT', overlay=true, //precision=2,
  14.      pyramiding=0,
  15.      initial_capital=150,
  16.      commission_type=strategy.commission.percent,
  17.      commission_value=0.1,
  18.      slippage=3,
  19.      default_qty_type=strategy.percent_of_equity,
  20.      default_qty_value=37)
  21.      
  22.      
  23. // Input
  24. input_take_profit_long = input.float(title="input_take_profit_long", defval=3.0, minval=0.1, maxval=1000, group='Target')
  25. input_stop_loss_long = input.float(title="input_stop_loss_long", defval=3.0, minval=0.1, maxval=1000, group='Stop Loss')
  26. input_take_profit_short = input.float(title="input_take_profit_short", defval=3.0, minval=0.1, maxval=1000, group='Target')
  27. input_stop_loss_short = input.float(title="input_stop_loss_short", defval=3.0, minval=0.1, maxval=1000, group='Stop Loss')
  28. input_trailing_trigger_long = input.float(title='trailing_trigger_long', defval=60, minval=0, maxval=100, step=1, group='Traling Stop')
  29. input_trailing_close_long = input.float(title='trailing_close_long', defval=54, minval=0, maxval=100, step=1, group='Traling Stop')
  30. input_trailing_trigger_short = input.float(title='trailing_trigger_short', defval=60, minval=0, maxval=100, step=1, group='Traling Stop')
  31. input_trailing_close_short = input.float(title='trailing_close_short', defval=54, minval=0, maxval=100, step=1, group='Traling Stop')
  32. input_boombar_3_long = input.float(title="input_boombar_3_long", defval=0.44, minval=0.1, maxval=1000, group='Differenziali Boom Bar', tooltip="Boombar Voglio 3 Candele Precedenti Opposte") // Boombar Voglio 3 Candele Precedenti Nella Direzione Opposta
  33. input_boombar_doji_long = input.float(title="input_boombar_doji_long", defval=0.44, minval=0.1, maxval=1000, group='Differenziali Grandezza Doji')
  34. input_boombar_3_short = input.float(title="input_boombar_3_short", defval=0.34, minval=0.1, maxval=1000, group='Differenziali Boom Bar', tooltip="Boombar Voglio 3 Candele Precedenti Opposte") // Boombar Voglio 3 Candele Precedenti Nella Direzione Opposta
  35. input_boombar_doji_short = input.float(title="input_boombar_doji_short", defval=0.34, minval=0.1, maxval=1000, group='Differenziali Grandezza Doji')
  36. input_distanza_long = input.float(title="input_distanza_long", defval=1.8, minval=0.1, maxval=1000, group='Differenziali Chiusura Con Medie') // distanza tra la haClose e la slow ema
  37. input_distanza_short = input.float(title="input_distanza_short", defval=2.4, minval=0.1, maxval=1000, group='Differenziali Chiusura Con Medie') // distanza tra la haClose e la slow ema
  38. mult_doji_long = input.float(title="mult_doji_long", defval=0.2, minval=0.1, maxval=1000, group='Grandezza Doji', tooltip="Determina La Grandezza Delle Doji Precedenti") // determina la grandezza delle doji precedenti
  39. mult_doji_short = input.float(title="mult_doji_short", defval=0.26, minval=0.1, maxval=1000, group='Grandezza Doji', tooltip="Determina La Grandezza Delle Doji Precedenti") // determina la grandezza delle doji precedenti
  40. lunghezza_adx_long = input.int(title="lunghezza_adx_long", defval=5, minval=1, maxval=1000, group='Differenziale Adx', tooltip="Opera In Base Alla Tendenza")
  41. lunghezza_adx_short = input.int(title="lunghezza_adx_short", defval=7, minval=1, maxval=1000, group='Differenziale Adx', tooltip="Opera In Base Alla Tendenza")
  42. differenziale_adx_basso_long = input.float(title="differenziale_adx_basso_long", defval=25.0, minval=0.1, maxval=1000, group='Differenziale Adx', tooltip="Opera In Base Alla Tendenza")
  43. differenziale_adx_alto_long = input.float(title="differenziale_adx_alto_long", defval=75.0, minval=0.1, maxval=1000, group='Differenziale Adx', tooltip="Opera In Base Alla Tendenza")
  44. differenziale_adx_basso_short = input.float(title="differenziale_adx_basso_short", defval=20.0, minval=0.1, maxval=1000, group='Differenziale Adx', tooltip="Opera In Base Alla Tendenza")
  45. differenziale_adx_alto_short = input.float(title="differenziale_adx_alto_short", defval=80.0, minval=0.1, maxval=1000, group='Differenziale Adx', tooltip="Opera In Base Alla Tendenza")
  46. lunghezza_rsi_long = input.int(title="lunghezza_rsi_long", defval=15, minval=1, maxval=1000, group='Differenziale Rsi', tooltip="Opera In Base Ai Range Rsi")
  47. lunghezza_rsi_short = input.int(title="lunghezza_rsi_short", defval=6, minval=1, maxval=1000, group='Differenziale Rsi', tooltip="Opera In Base Ai Range Rsi")
  48. differenziale_rsi_long = input.float(title="differenziale_rsi_long", defval=90.0, minval=0.1, maxval=1000, group='Differenziale Rsi', tooltip="Opera In Base Ai Range Rsi")
  49. differenziale_rsi_short = input.float(title="differenziale_rsi_short", defval=24.0, minval=0.1, maxval=1000, group='Differenziale Rsi', tooltip="Opera In Base Ai Range Rsi")
  50. input_fast_ema_long = input.int(title="input_fast_ema_long", defval=52, minval=1, maxval=1000, group='Medie')
  51. input_fast_ema_short = input.int(title="input_fast_ema_short", defval=42, minval=1, maxval=1000, group='Medie')
  52. input_slow_ema_long  = input.int(title="input_slow_ema_long", defval=82, minval=1, maxval=1000, group='Medie')
  53. input_slow_ema_short = input.int(title="input_slow_ema_short", defval=170, minval=1, maxval=1000, group='Medie')
  54. input_dmi_min_diff_long = input.float(title="input_dmi_min_diff_long", defval=26.1, minval=1, maxval=1000, group='Differenziale Dmi')
  55. input_dmi_min_diff_short = input.float(title="input_dmi_min_diff_short", defval=32.6, minval=1, maxval=1000, group='Differenziale Dmi')
  56. input_adx_neutrale = input.float(title="input_adx_neutrale", defval=0.0, minval=0.0, maxval=1000, group='Differenziale Dmi')
  57. in_solo_long = input.bool(title='Solo long', defval=false, inline='1', group='Direzione')
  58. in_solo_short = input.bool(title='Solo short', defval=false, inline='1', group='Direzione')
  59. riskPerTrade = input.float(title='Risk Per Trade %', minval=0.1, maxval=100, defval=8.8, step=0.5)
  60.  
  61.  
  62. // Calcolo del range del backtest
  63. startDate = input.int(title="Start Date",
  64.      defval=17, minval=1, maxval=31, group="Periodo")
  65. startMonth = input.int(title="Start Month",
  66.      defval=08, minval=1, maxval=12, group="Periodo")
  67. startYear = input.int(title="Start Year",
  68.      defval=2016, minval=1800, maxval=2150, group="Periodo")
  69.  
  70. endDate = input.int(title="End Date",
  71.      defval=01, minval=1, maxval=31, group="Periodo")
  72. endMonth = input.int(title="End Month",
  73.      defval=01, minval=1, maxval=12, group="Periodo")
  74. endYear = input.int(title="End Year",
  75.      defval=2121, minval=1800, maxval=2150, group="Periodo")
  76.  
  77.  
  78. inDateRange = (time >= timestamp(syminfo.timezone, startYear,
  79.          startMonth, startDate, 0, 0)) and
  80.      (time < timestamp(syminfo.timezone, endYear, endMonth, endDate, 0, 0))
  81.  
  82.  
  83. // Start Hour Range Trading Non Attivo /////////////////////
  84. //hourTrading = input(title='sessione valida di trading', defval='0600-2300:23456')
  85. //hourRangeTrading = time(timeframe.period, hourTrading)
  86.  
  87.  
  88. // Start Detecting Heiken Ashi ///////////////////////////////////////////////////////
  89. isHA = input(true, 'HA Candles')
  90. heikenashi_1 = ticker.heikinashi(syminfo.tickerid)
  91. data = isHA ? heikenashi_1 : syminfo.tickerid
  92. haOpen = request.security(data, timeframe.period, open)
  93. haHigh = request.security(data, timeframe.period, high)
  94. haLow = request.security(data, timeframe.period, low)
  95. haClose = request.security(data, timeframe.period, close)
  96. color = haClose > haOpen ? color.green : color.red
  97. plotcandle(haOpen, haHigh, haLow, haClose, 'Heiken Ashi Color', color=color)
  98. // End Detecting Heiken Ashi ///////////////////////////////////////////////////////
  99.  
  100.  
  101. // Variabili Medie Long e Short
  102. fast_ema_long = ta.ema(haClose, input_fast_ema_long)
  103. fast_ema_short = ta.ema(haClose, input_fast_ema_short)
  104. slow_ema_long = ta.ema(haClose, input_slow_ema_long)
  105. slow_ema_short = ta.ema(haClose, input_slow_ema_short)
  106. plot(fast_ema_long, title = "fast_ema_long", color=color.blue)
  107. plot(fast_ema_short, title = "fast_ema_short", color=color.purple)
  108. plot(slow_ema_long, title = "slow_ema_long", color=color.blue)
  109. plot(slow_ema_short, title = "slow_ema_short", color=color.purple)
  110.  
  111.  
  112. // Variabili Rsi Long e Short
  113. valore_rsi_long = ta.rsi(close, lunghezza_rsi_long)
  114. valore_rsi_short = ta.rsi(close, lunghezza_rsi_short)
  115. plot(valore_rsi_long, title = "valore_rsi_long", color=color.blue)
  116. plot(valore_rsi_short, title = "valore_rsi_short", color=color.purple)
  117.  
  118.  
  119. // Variabili Boombar Long e Short E Voglio 3 Candele Precedenti Nella Direzione Opposta
  120. boombar_3_long = haClose[1] / 100 * input_boombar_3_long
  121. boombar_3_short = haClose[1] / 100 *input_boombar_3_short
  122. plot(boombar_3_long, title = "boombar_3_long", color=color.blue)
  123. plot(boombar_3_short, title = "boombar_3_short", color=color.purple)
  124.  
  125.  
  126. // Variabili Boombar_doji Long e Short determina la grandezza delle doji precedenti
  127. boombar_doji_long = haClose[1] / 100 * input_boombar_doji_long
  128. boombar_doji_short = haClose[1] / 100 * input_boombar_doji_short
  129. plot(boombar_doji_long, title = "boombar_doji_long", color=color.blue)
  130. plot(boombar_doji_short, title = "boombar_doji_short", color=color.purple)
  131.  
  132.  
  133. // Variabili distanza tra la haClose e le ema Long e Short
  134. distanza_long = slow_ema_long / 100 * input_distanza_long
  135. distanza_short = slow_ema_short / 100 * input_distanza_short
  136. plot(distanza_long, title = "distanza_long", color=color.blue)
  137. plot(distanza_short, title = "distanza_short", color=color.purple)
  138.  
  139.  
  140. // Variabili Dmi NON ATTIVO
  141. // [di_pos, di_neg, adx] = ta.dmi(14, 14)
  142. // diffenziale_adx = adx + (adx / 100 * input_adx_neutrale)
  143. // valore_adx_long = ta.dmi(lunghezza_adx_long, lunghezza_adx_long)
  144. // valore_adx_short = ta.dmi(lunghezza_adx_short, lunghezza_adx_short)
  145. // plot(adx, title="adx")
  146.  
  147.  
  148. // Variabili Adx Long
  149. [di_pos_long, di_neg_long, adx_long] = ta.dmi(lunghezza_adx_long, lunghezza_adx_long)
  150. valore_adx_long = adx_long
  151. plot(adx_long, title="adx_long")
  152.  
  153. // Variabili Adx Short
  154. [di_pos_short, di_neg_short, adx_short] = ta.dmi(lunghezza_adx_short, lunghezza_adx_short)
  155. valore_adx_short = adx_short
  156. plot(adx_short, title="adx_short")
  157.  
  158.  
  159. // Money Menagment e stop loss
  160.  
  161. // size = strategy.equity * input_risk / 100
  162. // nr_contratti = size / close
  163. // stop_loss_long = math.round(size / syminfo.mintick / 100 * input_stop_loss_long) / nr_contratti
  164. // stop_loss_short = math.round(size / syminfo.mintick / 100 * input_stop_loss_short) / nr_contratti
  165. // target_long = math.round(size / syminfo.mintick / 100 * input_target_long) / nr_contratti
  166. // target_short = math.round(size / syminfo.mintick / 100 * input_target_short) / nr_contratti
  167.  
  168.  
  169. //Variabili Stop Long e Short
  170. stop_loss_long_price = math.round(strategy.opentrades.entry_price(0) - (strategy.opentrades.entry_price(0) * input_stop_loss_long) / 100)
  171. //stop_loss_long = (strategy.opentrades.entry_price(0) - stop_loss_long_price) / syminfo.mintick
  172. stop_loss_short_price = math.round(strategy.opentrades.entry_price(0) + (strategy.opentrades.entry_price(0) * input_stop_loss_short) / 100)
  173. //stop_loss_short = (stop_loss_short_price - strategy.opentrades.entry_price(0)) / syminfo.mintick
  174. take_profit_long_price = math.round(strategy.opentrades.entry_price(0) + (strategy.opentrades.entry_price(0) * input_take_profit_long) / 100)
  175. //take_profit_long = (take_profit_long_price - strategy.opentrades.entry_price(0)) / syminfo.mintick
  176. take_profit_short_price = math.round(strategy.opentrades.entry_price(0) - (strategy.opentrades.entry_price(0) * input_take_profit_short) / 100)
  177. //take_profit_short =(strategy.opentrades.entry_price(0) - take_profit_short_price) / syminfo.mintick
  178.  
  179.  
  180. 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
  181. 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")
  182. 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")
  183.  
  184. 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
  185.  
  186.  
  187. //Variabili Trailing Stop Long e Short
  188. trailing_stop_trigger_long = strategy.opentrades.entry_price(0) + ( strategy.opentrades.entry_price(0) * input_take_profit_long  / 100) * (input_trailing_trigger_long / 100)
  189. trailing_stop_close_long = strategy.opentrades.entry_price(0) + ( strategy.opentrades.entry_price(0) * input_take_profit_long  / 100) * (input_trailing_close_long / 100)
  190. trailing_stop_trigger_short = strategy.opentrades.entry_price(0) - ( strategy.opentrades.entry_price(0) * input_take_profit_short  / 100) * (input_trailing_trigger_short / 100)
  191. trailing_stop_close_short = strategy.opentrades.entry_price(0) - ( strategy.opentrades.entry_price(0) * input_take_profit_short  / 100) * (input_trailing_close_short / 100)
  192.  
  193. plot(strategy.position_size > 0 ? trailing_stop_trigger_long : na, color=color.blue, style=plot.style_cross, linewidth=2, title="trail_trigger_long")
  194. plot(strategy.position_size > 0 ? trailing_stop_close_long : na, color=color.blue, style=plot.style_cross, linewidth=2, title="trail_close_long")
  195. plot(strategy.position_size < 0 ? trailing_stop_trigger_short : na, color=color.blue, style=plot.style_cross, linewidth=2, title="trail_trigger_short")
  196. plot(strategy.position_size < 0 ? trailing_stop_close_short : na, color=color.blue, style=plot.style_cross, linewidth=2, title="trail_close_short")
  197.  
  198.  
  199. // Plot No Trading Allowed giorni da 1 a 7 1 è domenica. Mesi da 1 a 12 1 è Gennaio.
  200.  
  201. //giorni_esclusi = dayofweek(time)
  202. //plotshape(giorni_esclusi[1] == 2 ? giorni_esclusi : na, color=color.green, title="giorni_esclusi")
  203. //mesi_esclusi = month(time)
  204. //plotshape(mesi_esclusi[1] == 9 ? mesi_esclusi : na, color=color.yellow, title="mesi_esclusi")
  205.  
  206.  
  207. //Condizione Entrata Long 1 E 2
  208. CondEntryLong1 = valore_rsi_long < differenziale_rsi_long and (haClose - slow_ema_long) < distanza_long and valore_adx_long < differenziale_adx_alto_long and valore_adx_long > differenziale_adx_basso_long and (fast_ema_long[1] - slow_ema_long[1]) < (fast_ema_long - slow_ema_long) and math.abs(haOpen - haClose) > boombar_3_long and fast_ema_long > slow_ema_long and haOpen < haClose and haOpen[1] > haClose[1] and haOpen[2] > haClose[2] and haOpen[3] > haClose[3] and not in_solo_short and inDateRange
  209.  
  210. CondEntryLong2 = valore_rsi_long < differenziale_rsi_long and (haClose - slow_ema_long) < distanza_long and valore_adx_long < differenziale_adx_alto_long and valore_adx_long > differenziale_adx_basso_long and (fast_ema_long[1] - slow_ema_long[1]) < (fast_ema_long - slow_ema_long) and math.abs(haOpen - haClose) > boombar_doji_long and fast_ema_long > slow_ema_long and haOpen < haClose and math.abs(haClose[1] - haOpen[1]) < (haClose / 100 * mult_doji_long) and not in_solo_short and inDateRange
  211.  
  212.  
  213. //Condizione Entrata Short 1 E 2
  214. CondEntryShort1 = valore_rsi_short > differenziale_rsi_short and (slow_ema_short - haClose) < distanza_short and valore_adx_short < differenziale_adx_alto_short and valore_adx_short > differenziale_adx_basso_short and (slow_ema_short[1] - fast_ema_short[1]) <= (slow_ema_short - fast_ema_short) and math.abs(haOpen - haClose) > boombar_3_short and (fast_ema_short < slow_ema_short) and (haOpen > haClose) and (haOpen[1] < haClose[1] and haOpen[2] < haClose[2] and haOpen[3] < haClose[3]) and not in_solo_long and inDateRange
  215.  
  216. CondEntryShort2 = valore_rsi_short > differenziale_rsi_short and (slow_ema_short - haClose) < distanza_short and valore_adx_short < differenziale_adx_alto_short and valore_adx_short > differenziale_adx_basso_short and (slow_ema_short[1] - fast_ema_short[1]) <= (slow_ema_short - fast_ema_short) and fast_ema_short < slow_ema_short and math.abs(haOpen[1] - haClose[1]) < (haClose / 100 * mult_doji_short) and math.abs(haOpen - haClose) > boombar_doji_short and (haOpen > haClose) and not in_solo_long and inDateRange
  217.  
  218. barcolor(CondEntryLong1 ? color.lime : CondEntryShort1 ? color.purple : na)
  219. barcolor(CondEntryLong2 ? color.lime : CondEntryShort2 ? color.purple : na)
  220.  
  221.  
  222. // Condizione Uscita Close Trailing Stop Long E Short //////////////////////////////////////////////////////////////
  223.  
  224.  
  225. // Trigger Trailing Stop: Quando la posizione è aperta, contando indietro dall'ultima chiusura fino a max 65 candele indietro fino ad arrivare all'ingresso della posizione, se gli high sono >= dei trailing_stop_trigger e le close sono <= dei trailing_stop_close la condizione è valida
  226. // Trigger Trailing Stop: Quando la posizione è aperta, contando indietro dall'ultima chiusura fino a max 65 candele indietro fino ad arrivare all'ingresso della posizione, se i low sono <= dei trailing_stop_trigger e le close sono >= dei trailing_stop_close la condizione è valida
  227. // buy_command = '{"pair":"ETH-PERP","unitsPercent":"37","unitsType":"percentBalance","exchange":"Ftx","apiKey":"FTX","token":"e6d67d6e-1a5f-4e53-a9fd-6276dfa2a34b","isBuy":true,"isMarket":true,"stopLossPercent":"-3","stopLossType":"percent","leverage":1,"marginType":"ISOLATED","targets":[{"idx":1,"amount":"100","takeProfitPercent":"3"}],"targetType":"percent","targetAmountInPercent":true,"closeCurrentPosition":true,"preventPyramiding":true,"cancelAllOrders":true,"subAccount":"Scalping-Bot-ETH-PERP-FTX-5M"}'
  228. // sell_command = '{"pair":"ETH-PERP","unitsPercent":"37","unitsType":"percentBalance","exchange":"Ftx","apiKey":"FTX","token":"e6d67d6e-1a5f-4e53-a9fd-6276dfa2a34b","isSell":true,"isMarket":true,"stopLossPercent":"-3","stopLossType":"percent","leverage":1,"marginType":"ISOLATED","targets":[{"idx":1,"amount":"100","takeProfitPercent":"3"}],"targetType":"percent","targetAmountInPercent":true,"closeCurrentPosition":true,"preventPyramiding":true,"cancelAllOrders":true,"subAccount":"Scalping-Bot-ETH-PERP-FTX-5M"}'
  229. // close_command = '{"pair":"ETH-PERP","unitsPercent":"37","exchange":"Ftx","apiKey":"FTX","token":"e6d67d6e-1a5f-4e53-a9fd-6276dfa2a34b","isClose":true,"subAccount":"Scalping-Bot-ETH-PERP-FTX-5M"}'
  230.  
  231.  
  232. //entrata e uscita Long 1 E 2 (stop/limit x prezzo) (loss/profit x ticks)
  233. if (CondEntryLong1 or CondEntryLong2) and strategy.opentrades == 0
  234.     strategy.entry('operazioneLong', strategy.long, alert_message = "Open Long Position")//, comment = buy_command)
  235.  
  236. if strategy.opentrades ==1
  237.     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)
  238.     strategy.close('operazioneLong', when=trailing_long, alert_message = "Close Long Position")//, comment = close_command)
  239.  
  240.  
  241. ///////////// Condizione che non viene usata perchè non ci sono segnali di chiusura strategy.close ////////////////////////
  242.  
  243. // if condExitLong and strategy.opentrades == 1
  244. //     strategy.close('operazioneLong', alert_message = "Close Long Position", comment = close_command)
  245.    
  246. /////////////  CondEntryLong2 già incluso nelle condizioni di entrata  ////////////////////////
  247.    
  248. //if CondEntryLong2 and strategy.opentrades == 0
  249. //    strategy.entry('operazioneLong2', strategy.long, alert_message = "Open Long Position2", comment = buy_command)    
  250.    
  251. //if strategy.opentrades ==1
  252. //    strategy.exit('SL e TP', from_entry='operazioneLong2', stop = stop_loss_long_price, limit = take_profit_long_price, alert_message = "Your Long SL-TP Has Been Triggered.", comment = close_command)
  253.    
  254. ///////////// Condizione che non viene usata perchè non ci sono segnali di chiusura strategy.close ////////////////////////    
  255.    
  256. // if condExitLong2 and strategy.opentrades == 1
  257. //     strategy.close('operazioneLong2', alert_message = "Close Long Position2", comment = close_command)    
  258.    
  259. //entrata e uscita Short 1 E 2
  260. if (CondEntryShort1 or CondEntryShort2) and strategy.opentrades == 0
  261.     strategy.entry('operazioneShort', strategy.short, alert_message = "Open Short position")//, comment = sell_command)
  262.    
  263. if strategy.opentrades ==1
  264.     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)
  265.     strategy.close('operazioneShort', when=trailing_short, alert_message = "Close Short Position")//, comment = close_command)
  266.  
  267. ///////////// Condizione che non viene usata perchè non ci sono segnali di chiusura strategy.close ////////////////////////
  268.  
  269. // if condExitShort and strategy.opentrades == 1
  270. //     strategy.close('operazioneShort', alert_message = "Close Short Position", comment = close_command)
  271.  
  272. /////////////  CondEntryLong2 già incluso nelle condizioni di entrata  ////////////////////////
  273.  
  274. //if CondEntryShort2 and strategy.opentrades == 0
  275. //    strategy.entry('operazioneShort2', strategy.short, alert_message = "Open Short position2", comment = sell_command)
  276.    
  277. //if strategy.opentrades ==1
  278. //    strategy.exit('SL e TP', from_entry='operazioneShort2', stop = stop_loss_short_price, limit = take_profit_short_price, alert_message = "Your Short SL-TP Has Been Triggered.", comment = close_command)
  279.    
  280. ///////////// Condizione che non viene usata perchè non ci sono segnali di chiusura strategy.close ////////////////////////    
  281.    
  282. // if condExitShort2 and strategy.opentrades == 1
  283. //     strategy.close('operazioneShort2', alert_message = "Close Short Position2", comment = close_command)
  284.    
  285. // Nome Alert: Scalping-Bot ETH/PERP Ver5 FTX-5M
  286. // Commento Alert: {{strategy.order.comment}}
  287.  
  288.  
  289. // ----------------- Inizio Tabella risultati mensili. Per visualizzare andare nelle impostazioni proprietà e spuntare ad ogni tick -----------------
  290.  
  291. // new_month = month(time) != month(time[1])
  292. // new_year  = year(time)  != year(time[1])
  293.  
  294. // eq = strategy.equity
  295.  
  296. // bar_pnl = eq / eq[1] - 1
  297.  
  298. // cur_month_pnl = 0.0
  299. // cur_year_pnl  = 0.0
  300.  
  301. // // Current Monthly P&L
  302. // cur_month_pnl := new_month ? 0.0 :
  303. //                  (1 + cur_month_pnl[1]) * (1 + bar_pnl) - 1
  304.  
  305. // // Current Yearly P&L
  306. // cur_year_pnl := new_year ? 0.0 :
  307. //                  (1 + cur_year_pnl[1]) * (1 + bar_pnl) - 1  
  308.  
  309. // // Arrays to store Yearly and Monthly P&Ls
  310. // var month_pnl  = array.new_float(0)
  311. // var month_time = array.new_int(0)
  312.  
  313. // var year_pnl  = array.new_float(0)
  314. // var year_time = array.new_int(0)
  315.  
  316. // last_computed = false
  317.  
  318. // if (not na(cur_month_pnl[1]) and (new_month or barstate.islast))
  319. //     if (last_computed[1])
  320. //         array.pop(month_pnl)
  321. //         array.pop(month_time)
  322.        
  323. //     array.push(month_pnl , cur_month_pnl[1])
  324. //     array.push(month_time, time[1])
  325.  
  326. // if (not na(cur_year_pnl[1]) and (new_year or barstate.islast))
  327. //     if (last_computed[1])
  328. //         array.pop(year_pnl)
  329. //         array.pop(year_time)
  330.        
  331. //     array.push(year_pnl , cur_year_pnl[1])
  332. //     array.push(year_time, time[1])
  333.  
  334. // last_computed := barstate.islast ? true : nz(last_computed[1])
  335.  
  336. // // Monthly P&L Table    
  337. // var monthly_table = table(na)
  338. // prec      = input(2, title = "Return Precision")
  339.  
  340. // if (barstate.islast)
  341. //     monthly_table := table.new(position.bottom_right, columns = 14, rows = array.size(year_pnl) + 1, bgcolor=#0F0F0F,border_width=1,border_color=#000000)
  342.  
  343. //     table.cell(monthly_table, 0,  0, "",     text_color=#D3D3D3, bgcolor=#0F0F0F)
  344. //     table.cell(monthly_table, 1,  0, "Jan",  text_color=#D3D3D3, bgcolor=#0F0F0F)
  345. //     table.cell(monthly_table, 2,  0, "Feb",  text_color=#D3D3D3, bgcolor=#0F0F0F)
  346. //     table.cell(monthly_table, 3,  0, "Mar",  text_color=#D3D3D3, bgcolor=#0F0F0F)
  347. //     table.cell(monthly_table, 4,  0, "Apr",  text_color=#D3D3D3, bgcolor=#0F0F0F)
  348. //     table.cell(monthly_table, 5,  0, "May",  text_color=#D3D3D3, bgcolor=#0F0F0F)
  349. //     table.cell(monthly_table, 6,  0, "Jun",  text_color=#D3D3D3, bgcolor=#0F0F0F)
  350. //     table.cell(monthly_table, 7,  0, "Jul",  text_color=#D3D3D3, bgcolor=#0F0F0F)
  351. //     table.cell(monthly_table, 8,  0, "Aug",  text_color=#D3D3D3, bgcolor=#0F0F0F)
  352. //     table.cell(monthly_table, 9,  0, "Sep",  text_color=#D3D3D3, bgcolor=#0F0F0F)
  353. //     table.cell(monthly_table, 10, 0, "Oct",  text_color=#D3D3D3, bgcolor=#0F0F0F)
  354. //     table.cell(monthly_table, 11, 0, "Nov",  text_color=#D3D3D3, bgcolor=#0F0F0F)
  355. //     table.cell(monthly_table, 12, 0, "Dec",  text_color=#D3D3D3, bgcolor=#0F0F0F)
  356. //     table.cell(monthly_table, 13, 0, "Year", text_color=#D3D3D3, bgcolor=#0F0F0F)
  357.  
  358.  
  359. //     for yi = 0 to array.size(year_pnl) - 1
  360. //         table.cell(monthly_table, 0,  yi + 1, str.tostring(year(array.get(year_time, yi))), text_color=#D3D3D3, bgcolor=#0F0F0F)
  361.        
  362. //         y_color = array.get(year_pnl, yi) > 0 ? color.lime : color.red
  363. //         table.cell(monthly_table, 13, yi + 1, str.tostring(math.round(array.get(year_pnl, yi) * 100, prec)), bgcolor = y_color)
  364.        
  365. //     for mi = 0 to array.size(month_time) - 1
  366. //         m_row   = year(array.get(month_time, mi))  - year(array.get(year_time, 0)) + 1
  367. //         m_col   = month(array.get(month_time, mi))
  368. //         m_color = array.get(month_pnl, mi) > 0 ? color.lime : color.red
  369.        
  370. //         table.cell(monthly_table, m_col, m_row, str.tostring(math.round(array.get(month_pnl, mi) * 100, prec)), bgcolor = m_color)
  371.  
  372. // ----------------- Fine Tabella risultati mensili. Per visualizzare andare nelle impostazioni proprietà e spuntare ad ogni tick -----------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement