//@version=4
// EMA Section
study(title="Triple EMA + Sloping Trend", shorttitle="Triple EMA + Sloping Trend", overlay=true, max_labels_count = 500)
emaShort = input(title = "Short EMA Length", type = input.integer, defval = 50, minval = 1)
emaShortSrc = input(title = "Short EMA Src", type = input.source, defval = close)
emaMed = input(title = "Med EMA Length", type = input.integer, defval = 100, minval = 1)
emaMedSrc = input(title = "Med EMA Src", type = input.source, defval = close)
emaLong = input(title = "Long EMA Length", type = input.integer, defval = 150, minval = 1)
emaLongSrc = input(title = "Long EMA Src", type = input.source, defval = close)
slopeRange = input(title = "Slope Range", type = input.integer, defval = 10, minval = 1)
slopeDegLim = input(title = "Slope Angle Limit",type = input.float, defval = 30, minval = 1)
ema50 = ema(close, 50)
ema100 = ema(close, 100)
ema150 = ema(close, 150)
plot(ema50, color=color.blue, linewidth = 2)
plot(ema100, color=color.yellow, linewidth = 2)
plot(ema150, color=color.red, linewidth = 2)
calculate_slope(_range, _src) =>
_y = _src - nz(_src[_range])
_angle = atan(_y/_range)
_angle
calculate_avg_slope(_range, _src) =>
_total = 0.0
for i = 1 to _range
_total += calculate_slope(i, _src)
_total / _range
slopeEMA1 = todegrees(calculate_avg_slope(slopeRange, ema50))
slopeEMA2 = todegrees(calculate_avg_slope(slopeRange, ema100))
slopeEMA3 = todegrees(calculate_avg_slope(slopeRange, ema150))
// Bullish
// 50 MA > 100 MA > 200 MA all with slopes > 30 deg
// closes below 50 EMA, but above 100 EMA, long when candle closes above 50 EMA
closeBelow50 = crossunder(close, ema50)
closeBelow100 = crossunder(close, ema100)
closeBelow150 = crossunder(close, ema150)
correctBullOrder = barssince(closeBelow50) < barssince(closeBelow100)
tempLongPos = ema50 > ema100 and ema100 > ema150 and correctBullOrder and crossover(close, ema50)
emaLongPos = barssince(tempLongPos) < barssince(close < ema100) and barssince(tempLongPos) < barssince(close < ema150)
slopeLongPos = slopeEMA1 > slopeDegLim and slopeEMA2 > slopeDegLim and slopeEMA3 > slopeDegLim
// Bearish
// 50 MA < 100 MA < 200 MA all with slopes < -30 deg
// closes above, but below 100 EMA, short when candle closes below 50 EMA
closeAbove50 = crossover(close, ema50)
closeAbove100 = crossover(close, ema100)
closeAbove150 = crossover(close, ema150)
correctBearOrder = barssince(closeAbove50) < barssince(closeAbove100)
tempShortPos = ema50 < ema100 and ema100 < ema150 and correctBearOrder and crossunder(close, ema50)
emaShortPos = barssince(tempShortPos) < barssince(close > ema100) and barssince(tempShortPos) < barssince(close > ema150)
slopeShortPos = slopeEMA1 < -slopeDegLim and slopeEMA2 < -slopeDegLim and slopeEMA3 < -slopeDegLim
// Computing Strategy
long = emaLongPos and slopeLongPos
short = emaShortPos and slopeShortPos
if long
label.new(x = bar_index, y = na, text = "Long", yloc = yloc.abovebar, color = color.green)
if short
label.new(x = bar_index, y = na, text = "Short", yloc = yloc.abovebar, color = color.red)
// Alerts
alertcondition(long, title = "Long Signal", message = "Long @ {{timenow}}: {{ticker}} -> {{interval}}: {{close}}")
alertcondition(short, title = "Short Signal", message = "Short @ {{timenow}}: {{ticker}} -> {{interval}}: {{close}}")
Overview
Triple EMA + Sloping Trend places a long label when the averages stack upward, all slopes exceed the angle limit, and price closes back above the shortest average after a dip that remains above the middle average. A short label uses the opposite stack, negative slopes and a close below the shortest average. Slope range and angle limit change the filter. Declared length and source inputs are unused; the averages use close and fixed lengths. It has no orders or stops.
The inputs you can change from the gear icon on the chart. Defaults are the author's.
Setting
Type
Default
Variable
Short EMA Length
int
50
emaShort
Short EMA Src
source
close
emaShortSrc
Med EMA Length
int
100
emaMed
Med EMA Src
source
close
emaMedSrc
Long EMA Length
int
150
emaLong
Long EMA Src
source
close
emaLongSrc
Slope Range
int
10
slopeRange
Slope Angle Limit
float
30
slopeDegLim
Third-party code. ForexR did not write, test or endorse this script, and the summary above was generated automatically from its code and README. Indicators describe the past, and a strategy's backtest can look better than live trading, especially when a script repaints. Check it in the Strategy Tester and on a demo account before you rely on it.
The Adaptive Laguerre Filter calculates a smoothed, dynamically adjusted trendline plotted directly on the main price chart. It dynamically adjusts its damping factor (alpha) based on recent price range variations and median percentile calculations over a spec
This script plots three moving averages on the price chart: a fast EMA or SMA with 10 periods, a slow EMA or SMA with 20 periods, and a trend EMA or SMA with 100 periods. It signals trend changes by drawing a white cross when the fast moving average crosses ab
This indicator plots four customizable moving averages directly on the main price chart using default lengths of 3, 8, 21, and 50 periods. It fills the space between adjacent averages in green or maroon depending on trend alignment. Additionally, it computes B
This indicator plots three exponential moving averages and ATR volatility envelopes on the price chart. It compares the fast and slow EMAs to shade a trend ribbon and marks confirmed upward and downward crossovers with triangle labels. Settings change the thre
Donald SPX - Options Trading is an overlay indicator designed for intraday SPX analysis. It plots a 200-period Weighted Moving Average (WMA) on the price chart while evaluating multi-timeframe market structure across Daily, 15-minute, 5-minute, and 2-minute ba
This multi-timeframe indicator calculates and plots 20-period and 60-period simple moving averages from the 60-minute timeframe directly onto the price chart. The 20-period average displays as a green line, while the 60-period average appears in blue. It serve