Advertisement
Maurizio-Ciullo

Study Weekly-Mean-Trend ETH/USDT.P BYBIT 4H LONG E SHORT

Jun 5th, 2025
294
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2.                                                     // Study Weekly-Mean-Trend ETH/USDT.P BYBIT 4H LONG E SHORT //
  3.  
  4. // © Maurizio-Ciullo
  5.  
  6. // No Repainting: https://www.youtube.com/watch?v=-ZvGC0wUNAI IN QUESTA STRATEGIA E' STATA USATA LA TECNICA NO REPAINTING
  7. // A differenza di quella originale ho cambiato le Medie da SMA a EMA perchè performano meglio
  8.  
  9. // SU TRADINGVIEW ORARIO BORSA GMT
  10. // BARSBACK: 50
  11.  
  12. // Il trading system completo - Weekly Mean Trend ETH/USDT.P BYBIT 4H LONG E SHORT (Strategia Breakout)
  13. // (Sviluppo Dati Exchange = FTX)
  14. // (Exchange= BYBIT) (Sottostante ETH-USDT.P) (Timeframe= 4H) (Direzione= LONG E SHORT) (Swing Posizione= NO) (Esclusione Ore=NO) (Esclusione Giorni=NO) (Esclusione Mesi=NO)
  15. // (Take Profit Long/Short Market = NO) (Take Profit Limit Long/Short= NO)
  16. // (Stop Loss Limit Long= NO) (Stop Loss Limit Short= NO) (Stop Loss Market Long/Short= SI) (Trailing Stop=SI) (Stop Emergenza= NO)
  17. // (Rischio Operazione 2% Perdita Media) (Max Drawdown Permesso 10,94%)
  18. // (ATTENZIONE !!! NON USO PIU' IL RISCHIO OPERAZIONE SOPRA DEL 2% MA LA LASCIO SEMPRE LIVE E QUANDO ARRIVA AL 15% DI MAX DD AGGIUSTATO CON IL PROGRAMMA MONTECARLO PYTHON LA CESTINO
  19. // (In Sample Dal=18/08/17 Al 30/11/21) (Out Of Sample Dal=30/11/21 Al 31/01/22)
  20. // (Money Management = 25% Del Capitale Tradestation)  
  21. // (Money Management = 21% Del Capitale Tradingview) Preso Dal 15% Media Max Drawdown 2°nda Deviazione Standard Simulazione Montecarlo Python
  22. // (Progettatta Il=31/01/22)
  23.  
  24. // ATTENZIONE SONO STATI GENERATI NUOVO REPORT RECENTI IN DATA 01/06/2025 MA QUESTI REPORT SONO STATI GENERATI SUL SEGUENTE DATAFEED DATO CHE FTX E' FALLITO:
  25. // DATI NUOVI REPORT GENERATI NELLE CARTELLE DI SVILUPPO:
  26. // IL DATAFEED COMPLETO = (18/08/2017 26/05/2025)                                              
  27. // NUOVI DATI DI REPORT DATAFEED ETH/USDT BINANCE + ETH/USDT.P BYBIT 4H  STORICO INIZIALE BINANCE PER POI PROSEGUIRE CON BYBIT                                                                                                                     
  28. // (Sviluppo Dati Exchange = BINANCE + BYBIT) (BINANCE Dal=18/08/2017 Al 21/10/2020) (BYBIT Dal=21/10/2020 Al 26/05/2025)
  29.  
  30. //@version=5
  31. indicator("Study Weekly-Mean-Trend ETH/USDT.P BYBIT 4H LONG E SHORT", overlay=true)  
  32.  
  33.  
  34. // Input
  35. input_media_W_high = input.int(title='media_W_high', defval=10, minval=1, maxval=500, group='Medie_Settimanali')
  36. input_media_W_low = input.int(title='media_W_low', defval=19, minval=1, maxval=500, group='Medie_Settimanali')
  37. input_media_W_high_smoothed = input.int(title='media_W_high_smoothed', defval=38, minval=1, maxval=500, group='Medie_Settimanali_Smoothed')
  38. input_media_W_low_smoothed = input.int(title='media_W_low_smoothed', defval=38, minval=1, maxval=500, group='Medie_Settimanali_Smoothed')
  39. in_atr_period_long = input.int(title='Periodicità ATR long', minval=5, maxval=500, defval=14, step=1)
  40. in_atr_period_short = input.int(title='Periodicità ATR short', minval=5, maxval=500, defval=9, step=1)
  41. in_atr_mult_long = input.float(title='atr_Mult_long', minval=0.1, maxval=5, defval=0.75, step=0.5)
  42. in_atr_mult_short = input.float(title='atr_Mult_short', minval=0.1, maxval=5, defval=1, step=0.5)
  43. dmi_min_diff_input_long = input.float(title='Distanza min dim_long', minval=-100, maxval=1000000, defval=18, step=0.1)
  44. dmi_min_diff_input_short = input.float(title='Distanza min dim_short', minval=-100, maxval=1000000, defval=25, step=0.1)
  45.  
  46.  
  47. // >>>>>>>>>>>>>> Start Calcolo Minimo E Massimo Settimanale Allineato con Tradestation <<<<<<<<<<<<<<<<<
  48.  
  49. // Variabili persistenti
  50. var float MinimoCorrente = na  
  51. var float MinimoSettPrec = na
  52. var float MassimoCorrente = na  
  53. var float MassimoSettPrec = na
  54. var int GiornoPrecedente = na
  55.  
  56. // Prendi il valore LOW in modo sicuro (anti-repainting)
  57. low_val = low[barstate.isconfirmed ? 0 : 1]
  58. high_val = high[barstate.isconfirmed ? 0 : 1]
  59.  
  60. // Giorno dell’anno
  61. data_attuale = (dayofweek(time))
  62.  
  63. // Se è domenica e nuova giornata → nuova settimana
  64. if dayofweek == dayofweek.sunday and GiornoPrecedente != data_attuale
  65.     MinimoSettPrec := MinimoCorrente   // salvo il minimo della settimana appena chiusa (da domenica precedente a sabato)
  66.     MinimoCorrente := low_val         // resetto il minimo per la nuova settimana (che inizia di domenica)
  67.     MassimoSettPrec := MassimoCorrente
  68.     MassimoCorrente := high_val
  69. else
  70.     MinimoCorrente := math.min(nz(MinimoCorrente, low_val), low_val)  // Durante tutti i giorni della settimana (escluso il primo giorno della nuova settimana),
  71.                                                                       // aggiorno MinimoCorrente con il minimo tra il minimo finora registrato e il low del giorno corrente,
  72.                                                                       // così da memorizzare il minimo assoluto di tutta la settimana in corso.
  73.     MassimoCorrente := math.max(nz(MassimoCorrente, high_val), high_val)
  74.  
  75. // Aggiorna giorno precedente
  76. GiornoPrecedente := data_attuale
  77.  
  78. // Ritardo di 5 barre
  79. LowSettPrecSpostato = MinimoSettPrec[5]
  80. HighSettPrecSpostato = MassimoSettPrec[5]
  81.  
  82. wpl = LowSettPrecSpostato
  83. wph = HighSettPrecSpostato
  84.  
  85. // Media mobile
  86. media_low = ta.ema(wpl, input_media_W_low)
  87. media_high = ta.ema(wph, input_media_W_high)
  88.  
  89. // Plot
  90. plot(media_low, title="media_low_smoothed", color=color.green, linewidth=2)
  91. plot(media_high, title="media_high_smoothed", color=color.green, linewidth=2)
  92.  
  93. // >>>>>>>>>>>>>> End Calcolo Minimo E Massimo Settimanale Allineato con Tradestation <<<<<<<<<<<<<<<<<
  94.  
  95.  
  96. // >>>>>>>>>>>>>> Start Detecting Atr Long E Short <<<<<<<<<<<<<<<<<
  97. // Per il calcolo dell'indicatore è stato richiamato l'indicatore originale e l'indicatore di 1na barra fa per non avere repainting usando l'operatore ternario
  98.  
  99. valore_atr_long_origin =  ta.atr(in_atr_period_long)
  100. valore_atr_long1 = valore_atr_long_origin[1]
  101. valore_atr_long =  barstate.isconfirmed ? valore_atr_long_origin : valore_atr_long1   // NO REPAINTING
  102.  
  103. atr_per_mult_long = valore_atr_long * in_atr_mult_long
  104. plot(atr_per_mult_long, title='atr_mult_long')
  105.  
  106.  
  107. valore_atr_short_origin = ta.atr(in_atr_period_short)
  108. valore_atr_short1 = valore_atr_short_origin[1]
  109. valore_atr_short =  barstate.isconfirmed ? valore_atr_short_origin : valore_atr_short1 // NO REPAINTING
  110.  
  111. atr_per_mult_short = valore_atr_short * in_atr_mult_short
  112. plot(atr_per_mult_short, title='atr_mult_short')
  113.  
  114. // >>>>>>>>>>>>>> End Detecting Atr Long E Short <<<<<<<<<<<<<<<<<
  115.  
  116.  
  117. // >>>>>>>>>>>>>> Start Detecting DMI <<<<<<<<<<<<<<<<<
  118.  
  119. // Filtro voglio che sia true se il +DI è sopra sia il -DI ed anche dell'ADX //21,3587
  120. // Per il calcolo dell'indicatore è stato richiamato l'indicatore originale e l'indicatore di 1na barra fa per non avere repainting usando l'operatore ternario
  121.  
  122. //[di_pos, di_neg, adx] = ta.dmi(14, 14)
  123. [di_pos_origin, di_neg_origin, adx] = ta.dmi(14, 14)
  124.  
  125. di_pos1 = di_pos_origin[1]
  126. di_neg1 = di_neg_origin[1]
  127.  
  128. di_pos = barstate.isconfirmed ? di_pos_origin : di_pos1
  129. di_neg = barstate.isconfirmed ? di_neg_origin : di_neg1
  130.  
  131.  
  132. //dmi_total_green_cross = di_pos > di_neg and di_pos > adx? true : false
  133. //dmi_total_green_cross = (di_pos - di_neg) > dma_min_diff_input ? true : false
  134. //dmi_total_green_cross = (di_neg - di_pos) > dmi_min_diff_input ? true : false
  135. //dmi_total_green_cross_short = (di_neg > adx + dmi_min_diff_input_short)  ? true : false
  136. //dmi_total_green_cross_long = (di_pos > adx + dmi_min_diff_input_long)  ? true : false
  137. //dmi_total_green_cross = (di_pos - di_neg) < dmi_min_diff_input  ? true : false
  138.  
  139. //plot(dmi_total_green_cross ? 1 : 0, title="dmi_total_green_cross")
  140.  
  141. // >>>>>>>>>>>>>> End Detecting DMI <<<<<<<<<<<<<<<<<
  142.  
  143.  
  144. // >>>>>>>>>>>>>> Open - Close Values <<<<<<<<<<<<<<<<<
  145.  
  146. open_minus_close = math.abs(open - close)
  147. plot(open_minus_close, "open_minus_close", color=color.blue)
  148.  
  149.  
  150. // >>>>>>>>>>>>>> Start Entry/Exit Conditions <<<<<<<<<<<<<<<<<
  151.  
  152. // // Condizione Entry Long: Crossover chiusura media e media maggiore altra media
  153. // condEntryLong = ta.crossover(close, media_high) and math.abs(open - close) > valore_atr_long * in_atr_mult_long and close > open and di_pos > dmi_min_diff_input_long and not onlyShort and inDateRange
  154. // // Condizione Exit Long: Crossunder chiusura media
  155. // condExitLong = ta.crossunder(close, media_high)
  156.  
  157. // // Condizione Entry Short: Crossounder chiusura media e media minore altra media
  158. // condEntryShort = ta.crossunder(close, media_low) and math.abs(open - close) > valore_atr_short * in_atr_mult_short and close < open and di_neg > dmi_min_diff_input_short and not onlyLong and inDateRange
  159. // // Condizione Exit Short: Crossover chiusura media
  160. // condExitShort = ta.crossover(close, media_low)
  161.  
  162. // >>>>>>>>>>>>>> End Entry/Exit Conditions <<<<<<<<<<<<<<<<<
  163.  
  164.  
  165.  
  166.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement