Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
- // ยฉ Maurizio-Ciullo
- // (Take Profit Long/Short= Market Close Sopra/Sotto Bande) (Take Profit Limit Long/Short= +12% Tradingview-Hub) (Stop Loss Limit Long= -9% Tradingview-Hub) (Stop Loss Limit Short= -7% Tradingview-Hub) (Stop Emergenza= No)
- //Il trading system completo - Study Reversal Band (Strategia Reversal) - parte 2
- // (Exchange= FTX) (Sottostante ETH-PERP) (Timeframe= 4H) (Direzione= LONG E SHORT) (Swing Posizione= SI) (Esclusione Ore=NO) (Esclusione Giorni=NO) (Esclusione Mesi=APRILE/AGOSTO)
- // (Take Profit Long/Short= Market Close Sopra/Sotto Bande) (Take Profit Limit Long/Short= +12% Tradingview-Hub) (Stop Loss Limit Long= -9% Tradingview-Hub) (Stop Loss Limit Short= -7% Tradingview-Hub)
- //@version=4
- study(title="Study Reversal-Band ETH/PERP FTX 4H LONG E SHORT", overlay=false)
- input_stop_loss_long = input(title="stop_loss_long", type=input.float, defval=9, minval=0, maxval=100, step=0.1, group="Stop&Target")
- input_stop_loss_short = input(title="stop_loss_short", type=input.float, defval=7, minval=0, maxval=100, step=0.1, group="Stop&Target")
- input_target_long = input(title="target_long", type=input.float, defval=12, minval=0, maxval=100, step=0.1, group="Stop&Target")
- input_target_short = input(title="target_short", type=input.float, defval=12, minval=0, maxval=100, step=0.1, group="Stop&Target")
- input_risk = input(title="Percentuale rischio", type=input.float, defval=27.5, minval=0, maxval=100, step = 0.01, group="Stop&Target")
- input_sma_long = input(title="Media BB Long", type=input.integer, defval=30, minval=0, maxval=50, group="Bande")
- input_sma_short = input(title="Media BB Short", type=input.integer, defval=24, minval=0, maxval=50, group="Bande")
- deviazione_long = input(title="Deviazione Long", type=input.float, defval=1.5, step=0.1, group="Bande")
- deviazione_short = input(title="Deviazione Short", type=input.float, defval=1.5, step=0.1, group="Bande")
- input_ema_long = input(title="Media Long", type=input.integer, defval=55, minval=0, maxval=500, group="Medie")
- input_ema_short = input(title="Media Short", type=input.integer, defval=55, minval=0, maxval=500, group="Medie")
- lunghezza_adx_long = input(title="Lunghezza ADX Long", type=input.integer, defval=10, group="ADX")
- lunghezza_adx_short = input(title="Lunghezza ADX Short", type=input.integer, defval=9, group="ADX")
- differenziale_adx_long = input(title="Differenziale ADX Long", type=input.integer, defval=35, group="ADX")
- differenziale_adx_short = input(title="Differenziale ADX Short", type=input.integer, defval=31, group="ADX")
- only_Long = input(title="Solo long trade", type=input.bool, defval=false, inline="1", group="Direzione")
- only_Short = input(title="Solo short trade", type=input.bool, defval=false, inline="1", group="Direzione")
- // Calcolo del range del backtest
- startDate = input(title="Start Date", type=input.integer,
- defval=17, minval=1, maxval=31, group="Periodo")
- startMonth = input(title="Start Month", type=input.integer,
- defval=08, minval=1, maxval=12, group="Periodo")
- startYear = input(title="Start Year", type=input.integer,
- defval=2017, minval=1800, maxval=2100, group="Periodo")
- endDate = input(title="End Date", type=input.integer,
- defval=01, minval=1, maxval=31, group="Periodo")
- endMonth = input(title="End Month", type=input.integer,
- defval=01, minval=1, maxval=12, group="Periodo")
- endYear = input(title="End Year", type=input.integer,
- defval=2121, minval=1800, maxval=2100, group="Periodo")
- inDateRange = (time >= timestamp(syminfo.timezone, startYear,
- startMonth, startDate, 0, 0)) and
- (time < timestamp(syminfo.timezone, endYear, endMonth, endDate, 0, 0))
- ////Calcolo degli indicatori
- // Medie Mobili
- ema_long = ema(close, input_ema_long)
- ema_short = ema(close,input_ema_short)
- //// Bollinger Bands
- // Bollinger Bands Long
- middle_Band_long = sma(close, input_sma_long)
- deviazione_st_long = deviazione_long * stdev(close, input_sma_long)
- UpperBand_long = middle_Band_long + deviazione_st_long
- LowerBand_long = middle_Band_long - deviazione_st_long
- // Bollinger Bands Short
- middle_Band_short = sma(close, input_sma_short)
- deviazione_st_short = deviazione_short * stdev(close, input_sma_short)
- UpperBand_short = middle_Band_short + deviazione_st_short
- LowerBand_short = middle_Band_short - deviazione_st_short
- //// ADX
- // ADX Long
- [di_pos_long, di_neg_long, adx_long] = dmi(lunghezza_adx_long, lunghezza_adx_long)
- //ADX Short
- [di_pos_short, di_neg_short, adx_short] = dmi(lunghezza_adx_short, lunghezza_adx_short)
- ////Entry/Exit Conditions
- //Condizione Entry Long
- condEntryLong = crossover(close, LowerBand_long) and close < ema_long and adx_long < differenziale_adx_long and month !=4 and month!=8 and not only_Short and inDateRange
- //Condizione Uscita Long
- condExitLong = crossover(close, UpperBand_long)
- // Condizione Entry Short: Crossunder di due medie con il prezzo di chiusura che รจ comunque sotto una terza media con differenziale delle medie
- condEntryShort = crossunder(close, UpperBand_short) and close > ema_short and adx_short < differenziale_adx_short and month !=4 and month!=8 and not only_Long and inDateRange
- // Condizione Exit Short
- condExitShort = crossunder(close, LowerBand_short)
- //Entry/Exit Orders
- //strategy.entry("long", true, when = condEntryLong)
- //strategy.close("long", when=condExitLong)
- //strategy.entry("short", false, when = condEntryShort)
- //strategy.close("short", when=condExitShort)
- //definizione variabili posizioni aperte
- IsLongOpen = false
- IsLongOpen := condEntryLong[1] ? true : condExitLong[1] ? false : condEntryShort[1] ? false : IsLongOpen[1]
- IsShortOpen = false
- IsShortOpen := condEntryShort[1] ? true : condExitShort[1] ? false : condEntryLong[1] ? false : IsShortOpen[1]
- IsFlat = true
- IsFlat := not IsLongOpen and not IsShortOpen
- //conversione bool -> float, per debug
- IsLongOpenFloat = if IsLongOpen == true
- 1
- else
- 0
- IsShortOpenFloat = if IsShortOpen == true
- 1
- else
- 0
- IsFlatFloat = if IsFlat == true
- 1
- else
- 0
- //plot posizioni aperte, per debug
- //plot (IsLongOpenFloat)
- //plot (IsShortOpenFloat,color=color.yellow)
- //plot (IsFlatFloat,color=color.red)
- //variabili apertura e chiusura posizione
- OpenLong = condEntryLong //and not IsLongOpen
- CloseLong = condExitLong and IsLongOpen and not condEntryShort
- OpenShort = condEntryShort //and not IsShortOpen
- CloseShort = condExitShort and IsShortOpen and not condEntryLong
- //conversione bool -> float, per debug
- OpenShortFloat = if OpenShort == true
- 1
- else
- 0
- CloseShortFloat = if CloseShort == true
- 1
- else
- 0
- OpenLongFloat = if OpenLong == true
- 1
- else
- 0
- CloseLongFloat = if CloseLong == true
- 1
- else
- 0
- //plot aperture ordini, per debug
- plot (OpenShortFloat,color=color.red)
- plot (CloseShortFloat,color=color.yellow)
- plot (OpenLongFloat,color=color.blue)
- plot (CloseLongFloat,color=color.white)
- //alert
- // Plot entry ed exit degli allert
- //plotshape(series=OpenLong, text="entry_long", style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small)
- //plotshape(series=CloseLong, text="close_long", style=shape.triangleup, location=location.belowbar, color=color.olive, size=size.small)
- //plotshape(series=OpenShort, text="entry_short", style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small)
- //plotshape(series=CloseShort, text="close_short", style=shape.triangledown, location=location.abovebar, color=color.purple, size=size.small)
- alertcondition(OpenLong,title="Open Long")
- alertcondition(CloseLong,title="Close Long")
- alertcondition(OpenShort,title="Open Short")
- alertcondition(CloseShort,title="Close Short")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement