Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //@version=4
- strategy("Newest Ultimate Day Trading Strat", default_qty_value=1000, overlay=false)
- // === INPUTS ===
- // Use Alternate Anchor TF for MAs
- anchor = input(0, minval=0, maxval=1440, title="Use Alternate Anchor TimeFrame (0=none, max=1440 (mins,D,W)")
- //
- gmmaType = input("Guppy", title="Guppy Type", options=["Guppy", "SuperGuppy"])
- smoothLen = input(1, minval=1, title="Oscillator Smoothing Length (1=none)")
- signalLen = input(13, minval=1, title="GMMA Oscillator Signal Length")
- showZones = input(true, title="Show Bullish/Bearish Zones")
- //
- src = input(title="Source", type=input.source, defval=close)
- // Truncated Hilbert transform
- hilbertTransform(src) =>
- 0.962 * src + 0.5769 * nz(src[2]) - 0.5769 * nz(src[4]) - 0.0962 * nz(src[6])
- firFilter(src) =>
- (4 * src + 3 * nz(src[1]) + 2 * nz(src[2]) + nz(src[3])) / 10
- computeComponent(src, periodMult) =>
- hilbertTransform(src) * periodMult
- getEIT(src) =>
- PI = 2 * asin(1)
- mesaPeriod = 0.0
- mesaPeriodMult = 0.075 * nz(mesaPeriod[1]) + 0.54
- smooth = 0.0
- smooth := firFilter(src)
- detrender = 0.0
- detrender := computeComponent(smooth, mesaPeriodMult)
- // Compute InPhase and Quadrature components
- I1 = nz(detrender[3])
- Q1 = computeComponent(detrender, mesaPeriodMult)
- // Advance the phase of I1 and Q1 by 90 degrees
- jI = computeComponent(I1, mesaPeriodMult)
- jQ = computeComponent(Q1, mesaPeriodMult)
- I2 = 0.0
- Q2 = 0.0
- // Phasor addition for 3 bar averaging
- I2 := I1 - jQ
- Q2 := Q1 + jI
- // Smooth the I and Q components before applying the discriminator
- I2 := 0.2 * I2 + 0.8 * nz(I2[1])
- Q2 := 0.2 * Q2 + 0.8 * nz(Q2[1])
- // Homodyne Discriminator
- Re = I2 * nz(I2[1]) + Q2 * nz(Q2[1])
- Im = I2 * nz(Q2[1]) - Q2 * nz(I2[1])
- Re := 0.2 * Re + 0.8 * nz(Re[1])
- Im := 0.2 * Im + 0.8 * nz(Im[1])
- if Re != 0 and Im != 0
- mesaPeriod := 2 * PI / atan(Im / Re)
- mesaPeriod
- if mesaPeriod > 1.5 * nz(mesaPeriod[1])
- mesaPeriod := 1.5 * nz(mesaPeriod[1])
- mesaPeriod
- if mesaPeriod < 0.67 * nz(mesaPeriod[1])
- mesaPeriod := 0.67 * nz(mesaPeriod[1])
- mesaPeriod
- if mesaPeriod < 6
- mesaPeriod := 6
- mesaPeriod
- if mesaPeriod > 50
- mesaPeriod := 50
- mesaPeriod
- mesaPeriod := 0.2 * mesaPeriod + 0.8 * nz(mesaPeriod[1])
- smoothPeriod = 0.0
- smoothPeriod := 0.33 * mesaPeriod + 0.67 * nz(smoothPeriod[1])
- // Compute Trendline as a SMA over the measured dominant cycle period
- dcPeriod = floor(smoothPeriod + 0.5)
- if dcPeriod < 1
- dcPeriod := 1
- dcPeriod
- itrend = 0.0
- for i = 0 to dcPeriod - 1 by 1
- itrend := itrend + src[i]
- itrend
- if dcPeriod > 0
- itrend := itrend / dcPeriod
- itrend
- eit = firFilter(itrend)
- if bar_index < 12
- eit := src
- eit
- eit
- eit = getEIT(src)
- src1 = firFilter(src)
- //
- // === /INPUTS ===
- //
- // === FUNCTIONS ===
- //Fast Guppy Avg EMA
- GMMAFast(src, mult) =>
- ema1 = ema(src1, 3 * mult)
- ema2 = ema(src1, 5 * mult)
- ema3 = ema(src1, 8 * mult)
- ema4 = ema(src1, 10 * mult)
- ema5 = ema(src1, 12 * mult)
- ema6 = ema(src1, 15 * mult)
- return = ema1 + ema2 + ema3 + ema4 + ema5 + ema6
- return
- //Slow Guppy Avg EMA
- GMMASlow(src, mult) =>
- ema7 = ema(src1, 30 * mult)
- ema8 = ema(src1, 35 * mult)
- ema9 = ema(src1, 40 * mult)
- ema10 = ema(src1, 45 * mult)
- ema11 = ema(src1, 50 * mult)
- ema12 = ema(src1, 60 * mult)
- return = ema7 + ema8 + ema9 + ema10 + ema11 + ema12
- return
- //Fast SuperGuppy Avg EMA
- superGMMAFast(src1, mult) =>
- emaF1 = ema(src1, 3 * mult)
- emaF2 = ema(src1, 5 * mult)
- emaF3 = ema(src1, 7 * mult)
- emaF4 = ema(src1, 9 * mult)
- emaF5 = ema(src1, 11 * mult)
- emaF6 = ema(src1, 13 * mult)
- emaF7 = ema(src1, 15 * mult)
- emaF8 = ema(src1, 17 * mult)
- emaF9 = ema(src1, 19 * mult)
- emaF10 = ema(src1, 21 * mult)
- emaF11 = ema(src1, 23 * mult)
- return = (emaF1 + emaF2 + emaF3 + emaF4 + emaF5 + emaF6 + emaF7 + emaF8 + emaF9 + emaF10 +
- emaF11) / 11
- return
- //Slow SuperGuppy Avg EMA
- superGMMASlow(src, mult) =>
- emaS1 = ema(src1, 25 * mult)
- emaS2 = ema(src1, 28 * mult)
- emaS3 = ema(src1, 31 * mult)
- emaS4 = ema(src1, 34 * mult)
- emaS5 = ema(src1, 37 * mult)
- emaS6 = ema(src1, 40 * mult)
- emaS7 = ema(src1, 43 * mult)
- emaS8 = ema(src1, 46 * mult)
- emaS9 = ema(src1, 49 * mult)
- emaS10 = ema(src1, 52 * mult)
- emaS11 = ema(src1, 55 * mult)
- emaS12 = ema(src1, 58 * mult)
- emaS13 = ema(src1, 61 * mult)
- emaS14 = ema(src1, 64 * mult)
- emaS15 = ema(src1, 67 * mult)
- emaS16 = ema(src1, 70 * mult)
- // average
- return = (emaS1 + emaS2 + emaS3 + emaS4 + emaS5 + emaS6 + emaS7 + emaS8 + emaS9 + emaS10 +
- emaS11 + emaS12 + emaS13 + emaS14 + emaS15 + emaS16) / 16
- return
- // === /FUNCTIONS ===
- // === SERIES ===
- // Calculate the Multiplier for Anchor MAs.
- mult = not timeframe.isintraday or anchor == 0 or timeframe.multiplier <= 0 or
- timeframe.multiplier >= anchor or anchor > 1440 ? 1 :
- round(anchor / timeframe.multiplier) > 1 ? round(anchor / timeframe.multiplier) :
- 1
- mult := timeframe.isintraday or anchor == 0 or timeframe.multiplier <= 0 or
- timeframe.multiplier >= anchor or anchor > 52 ? mult :
- round(anchor / timeframe.multiplier) > 1 ? round(anchor / timeframe.multiplier) :
- 1
- // Select type of Oscillator calculation
- GMMAFast__1 = GMMAFast(src1, mult)
- superGMMAFast__1 = superGMMAFast(src1, mult)
- gmmaFast = gmmaType == "Guppy" ? GMMAFast__1 : superGMMAFast__1
- GMMASlow__1 = GMMASlow(src1, mult)
- superGMMASlow__1 = superGMMASlow(src1, mult)
- gmmaSlow = gmmaType == "Guppy" ? GMMASlow__1 : superGMMASlow__1
- // Calculate Oscillator, Smoothed Osc and signal line
- gmmaOscRaw = (gmmaFast - gmmaSlow) / gmmaSlow * 100
- gmmaOsc = sma(gmmaOscRaw, smoothLen)
- gmmaSignal = ema(gmmaOscRaw, signalLen)
- gmmaClr = gmmaOsc < gmmaSignal ? color.red :
- gmmaOsc > gmmaSignal ? color.green : color.gray
- // bullish signal rule:
- bearishRule = crossover(gmmaSignal, gmmaOsc)
- // bearish signal rule:
- bullishRule = crossunder(gmmaSignal, gmmaOsc)
- // current trading State
- ruleState = 0
- ruleState := bullishRule ? 1 : bearishRule ? -1 : nz(ruleState[1])
- // === /SERIES ===
- // === PLOTTING ===
- plot(gmmaOsc, title="GMMA OSC Smooth", style=plot.style_line, linewidth=2, color=gmmaClr, transp=10)
- plot(gmmaSignal, title="GMMA Signal", style=plot.style_line, linewidth=1, color=color.orange, transp=10)
- hline(0, title="Zero line", linestyle=hline.style_dotted, linewidth=2, color=color.gray)
- // === /PLOTTING ===
- //
- // ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ //
- // === ALERTS ===
- bgcolor(showZones ? ruleState == -1 ? color.red : ruleState == 1 ? color.green : color.gray : na, title="Guppy Bullish/Bearish Zones", transp=90)
- alertcondition(bullishRule, title="Guppy Bullish", message="Guppy Bullish")
- alertcondition(bearishRule, title="Guppy Bearish", message="Guppy Bearish")
- ebc = input(false, title="Enable Bar colors")
- bc = gmmaOsc > gmmaSignal ? color.green : color.red
- barcolor(ebc ? bc : na)
- // === /ALERTS ===
- longCondition = bullishRule
- shortCondition = bearishRule
- //
- min = security("USOIL", "1", close)
- if min > min[1] and longCondition
- strategy.entry("long", strategy.long)
- if min < min[1] and shortCondition
- strategy.entry("short", strategy.short)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement