Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Strategia Utente Quant Trader Academy BTC/USDT 4H //
- // Bot Utente QTA JohnnyTYX Diverg Prezz E RSI BTC-USDT 4H //
- // Trovi strategia e report sul formum qta o in cartella //
- // Buonasera a tutti, sto smanettando un po su pinescript, l’idea della strategia é agire sia su divergenze ribassiste sia rialziste del prezzo in confronto all’indicatore rsi.
- // La strategia si comporta bene su stocks e crypto in particolare su BTC/USD cambiando alcuni parametri, fatemi sapere cosa ne pensate
- // e volevo sapere se é possibile che abbia overfittato i parametri, grazie
- // mille in anticipo
- //@version=4
- strategy("RSI Divergence Strategy Bitcoin H4", overlay=true)
- // Input rsi
- rsiLength = input(7, title="RSI Period", minval=1)
- rsiSource = input(close, title="RSI Source")
- priceHigh = highest(high, rsiLength)
- priceLow = lowest(low, rsiLength)
- // Input Generali
- in_valuta = input("EUR", title="Valuta", options=['EUR', 'USD', 'CAD'])
- riskPerTrade = input(1.0, title="Risk Per Trade %", minval=0.1, maxval=100)
- in_atr_periodo = input(6, title="Periodicità ATR", minval=5, maxval=500)
- in_atr_min = input(0.0015, title="Min ATR", minval=0.0001, maxval=500)
- in_tp_short = input(1.8, title="TP short")
- in_tp_long = input(2.5, title="TP Long")
- in_solo_long = input(false, title="Solo Long")
- emaPeriod = input(26, title="EMA period", minval=1)
- // Input per la percentuale dell'impulso
- percentualeImpulso = input(2, title="Percentuale Impulso", minval=1, maxval=100,step = 0.1)
- //Input sessione Trading
- hourTrading = input(title="Sessione valida di trading", type=input.string, defval="0000-0000:1234567")
- rangeTrading = time(timeframe.period, hourTrading)
- bgcolor(rangeTrading ? color.green : color.red)
- // Calcolo degli indicatori
- rsi = rsi(rsiSource, rsiLength)
- rsiHigh = highest(rsi, rsiLength)
- rsiLow = lowest(rsi, rsiLength)
- atr = atr(in_atr_periodo)
- ema = ema(close, emaPeriod)
- // Definizione dell'impulso rialzista
- isBullishImpulse(candles, percentuale) =>
- changePercent = (close - close[candles]) / close[candles] * 100
- bullishImpulse = changePercent > percentuale
- //Definizione impulso ribassista
- isBearishImpulse(candles, percentuale) =>
- changePercent = (close - close[candles]) / close[candles] * 100
- bearishImpulse = changePercent < -percentuale
- firstImpulse = isBullishImpulse(1, percentualeImpulso)
- secondImpulse = isBullishImpulse(2, percentualeImpulso)
- firstBearishImpulse = isBearishImpulse(1, percentualeImpulso)
- secondBearishImpulse = isBearishImpulse(2, percentualeImpulso)
- // Calcolo dell'RSI per il primo e il secondo impulso rialzista
- rsiFirstImpulse = rsi(rsiSource, rsiLength)
- rsiSecondImpulse = security(syminfo.tickerid, "D", rsi(rsiSource, rsiLength))
- rsiFirstBearishImpulse = rsi(rsiSource, rsiLength)
- rsiSecondBearishImpulse = security(syminfo.tickerid, "D", rsi(rsiSource, rsiLength))
- // Confronto dell'RSI durante i due impulsi
- rsiBullishDivergence = (secondImpulse and rsiSecondImpulse < rsiFirstImpulse)
- rsiBearishDivergence = (secondBearishImpulse and rsiSecondBearishImpulse > rsiFirstBearishImpulse)
- //Position size
- valutabaseuguale = in_valuta == syminfo.basecurrency
- valutaSecondariaUguale = in_valuta == syminfo.currency
- nessunavaluta = not valutaSecondariaUguale and not valutabaseuguale
- conversionecoppia = valutaSecondariaUguale ? syminfo.tickerid : in_valuta + syminfo.currency
- conversioneTassocambio = security(symbol=conversionecoppia, resolution="D", expression=close)
- getVolumePosizione(stopLossSizePoints) =>
- riskAmount = (strategy.equity * (riskPerTrade / 100)) * (valutabaseuguale or nessunavaluta ? conversioneTassocambio : 1.0)
- riskPerPoint = (stopLossSizePoints * syminfo.pointvalue)
- positionSize = (riskAmount / riskPerPoint) / (syminfo.mintick * 10)
- round(positionSize)
- // Esecuzione delle operazioni
- if (rsiBearishDivergence) and not in_solo_long and rangeTrading and close < close [1]
- slPrice = high + atr
- slPips = ((slPrice - high) / syminfo.mintick / 10)
- size = getVolumePosizione(slPips)
- strategy.entry("Sell", strategy.short, qty=size)
- strategy.exit("Sell", profit=slPips * in_tp_short * 10, stop=slPrice)
- if rsiBullishDivergence and close > close [1] and rangeTrading and close > close [1]
- slPrice = low - atr
- slPips = ((low - slPrice) / syminfo.mintick / 10)
- size = getVolumePosizione(slPips)
- strategy.entry("Buy", strategy.long, qty=size)
- strategy.exit("Buy", profit=slPips * in_tp_long * 10, stop=slPrice)
- // Visualizzazione grafica
- plotshape(firstImpulse, color=color.green, style=shape.triangleup, location=location.belowbar, size=size.small, title="First Bullish Impulse")
- plotshape(secondImpulse, color=color.green, style=shape.triangleup, location=location.belowbar, size=size.small, title="Second Bullish Impulse")
- plotshape(firstBearishImpulse, color=color.red, style=shape.triangledown, location=location.abovebar, size=size.small, title="First Bearish Impulse")
- plotshape(secondBearishImpulse, color=color.red, style=shape.triangledown, location=location.abovebar, size=size.small, title="Second Bearish Impulse")
- plot(ema, title="EMA", color=color.purple)
Advertisement
Comments
-
- download all types of premium tradingview indicators codes available on telegram - https://t.me/tradingview_premium_indicator
Add Comment
Please, Sign In to add comment
Advertisement