OPEN-SOURCE SCRIPT
EMA Trend Screener

//version=5
indicator("EMA Trend Screener", shorttitle="ETS", format=format.inherit)
// EMA Calculations
ema10 = ta.ema(close, 10)
ema20 = ta.ema(close, 20)
ema50 = ta.ema(close, 50)
ema100 = ta.ema(close, 100)
ema200 = ta.ema(close, 200)
// RSI Calculations
rsi_daily = ta.rsi(close, 14)
rsi_weekly = request.security(syminfo.tickerid, "1W", ta.rsi(close, 14))
// Core Conditions with 99% thresholds
price_above_10ema = close > (ema10 * 0.99)
ema10_above_20 = ema10 > (ema20 * 0.99)
ema20_above_50 = ema20 > (ema50 * 0.99)
ema50_above_100 = ema50 > (ema100 * 0.99)
ema100_above_200 = ema100 > (ema200 * 0.99)
// RSI Conditions
rsi_daily_bullish = rsi_daily > 50
rsi_weekly_bullish = rsi_weekly > 50
// EMA Spread Calculation
ema_max = math.max(ema10, math.max(ema20, math.max(ema50, math.max(ema100, ema200))))
ema_min = math.min(ema10, math.min(ema20, math.min(ema50, math.min(ema100, ema200))))
ema_spread_pct = (ema_max / ema_min - 1) * 100
// Price to 20 EMA Distance
price_to_20ema_pct = (close / ema20 - 1) * 100
// Additional Conditions
ema_spread_ok = ema_spread_pct < 10
price_to_20ema_ok = price_to_20ema_pct < 10
ema200_positive = ema200 > 0
// Final Signal Calculation
all_conditions_met = price_above_10ema and ema10_above_20 and ema20_above_50 and
ema50_above_100 and ema100_above_200 and rsi_daily_bullish and
rsi_weekly_bullish and ema_spread_ok and price_to_20ema_ok and ema200_positive
// SCREENER OUTPUT - This is the key for premium screener
// Return 1 for stocks meeting criteria, 0 for those that don't
screener_signal = all_conditions_met ? 1 : 0
// Plot the screener signal (this will be the column value)
plot(screener_signal, title="EMA Trend Signal", display=display.none)
// Additional screener columns you can add
plot(rsi_daily, title="RSI Daily", display=display.none)
plot(rsi_weekly, title="RSI Weekly", display=display.none)
plot(ema_spread_pct, title="EMA Spread %", display=display.none)
plot(price_to_20ema_pct, title="Price to 20EMA %", display=display.none)
// Screener-friendly outputs for individual conditions
plot(price_above_10ema ? 1 : 0, title="Price > 10EMA", display=display.none)
plot(ema10_above_20 ? 1 : 0, title="10EMA > 20EMA", display=display.none)
plot(ema20_above_50 ? 1 : 0, title="20EMA > 50EMA", display=display.none)
plot(ema50_above_100 ? 1 : 0, title="50EMA > 100EMA", display=display.none)
plot(ema100_above_200 ? 1 : 0, title="100EMA > 200EMA", display=display.none)
// Market cap condition (note: market cap data may not be available in all cases)
// You'll need to set this in the main screener interface
// Performance 3Y condition
// This also needs to be set in the main screener interface as it's fundamental data
indicator("EMA Trend Screener", shorttitle="ETS", format=format.inherit)
// EMA Calculations
ema10 = ta.ema(close, 10)
ema20 = ta.ema(close, 20)
ema50 = ta.ema(close, 50)
ema100 = ta.ema(close, 100)
ema200 = ta.ema(close, 200)
// RSI Calculations
rsi_daily = ta.rsi(close, 14)
rsi_weekly = request.security(syminfo.tickerid, "1W", ta.rsi(close, 14))
// Core Conditions with 99% thresholds
price_above_10ema = close > (ema10 * 0.99)
ema10_above_20 = ema10 > (ema20 * 0.99)
ema20_above_50 = ema20 > (ema50 * 0.99)
ema50_above_100 = ema50 > (ema100 * 0.99)
ema100_above_200 = ema100 > (ema200 * 0.99)
// RSI Conditions
rsi_daily_bullish = rsi_daily > 50
rsi_weekly_bullish = rsi_weekly > 50
// EMA Spread Calculation
ema_max = math.max(ema10, math.max(ema20, math.max(ema50, math.max(ema100, ema200))))
ema_min = math.min(ema10, math.min(ema20, math.min(ema50, math.min(ema100, ema200))))
ema_spread_pct = (ema_max / ema_min - 1) * 100
// Price to 20 EMA Distance
price_to_20ema_pct = (close / ema20 - 1) * 100
// Additional Conditions
ema_spread_ok = ema_spread_pct < 10
price_to_20ema_ok = price_to_20ema_pct < 10
ema200_positive = ema200 > 0
// Final Signal Calculation
all_conditions_met = price_above_10ema and ema10_above_20 and ema20_above_50 and
ema50_above_100 and ema100_above_200 and rsi_daily_bullish and
rsi_weekly_bullish and ema_spread_ok and price_to_20ema_ok and ema200_positive
// SCREENER OUTPUT - This is the key for premium screener
// Return 1 for stocks meeting criteria, 0 for those that don't
screener_signal = all_conditions_met ? 1 : 0
// Plot the screener signal (this will be the column value)
plot(screener_signal, title="EMA Trend Signal", display=display.none)
// Additional screener columns you can add
plot(rsi_daily, title="RSI Daily", display=display.none)
plot(rsi_weekly, title="RSI Weekly", display=display.none)
plot(ema_spread_pct, title="EMA Spread %", display=display.none)
plot(price_to_20ema_pct, title="Price to 20EMA %", display=display.none)
// Screener-friendly outputs for individual conditions
plot(price_above_10ema ? 1 : 0, title="Price > 10EMA", display=display.none)
plot(ema10_above_20 ? 1 : 0, title="10EMA > 20EMA", display=display.none)
plot(ema20_above_50 ? 1 : 0, title="20EMA > 50EMA", display=display.none)
plot(ema50_above_100 ? 1 : 0, title="50EMA > 100EMA", display=display.none)
plot(ema100_above_200 ? 1 : 0, title="100EMA > 200EMA", display=display.none)
// Market cap condition (note: market cap data may not be available in all cases)
// You'll need to set this in the main screener interface
// Performance 3Y condition
// This also needs to be set in the main screener interface as it's fundamental data
開源腳本
本著TradingView的真正精神,此腳本的創建者將其開源,以便交易者可以查看和驗證其功能。向作者致敬!雖然您可以免費使用它,但請記住,重新發佈程式碼必須遵守我們的網站規則。
免責聲明
這些資訊和出版物並不意味著也不構成TradingView提供或認可的金融、投資、交易或其他類型的意見或建議。請在使用條款閱讀更多資訊。
開源腳本
本著TradingView的真正精神,此腳本的創建者將其開源,以便交易者可以查看和驗證其功能。向作者致敬!雖然您可以免費使用它,但請記住,重新發佈程式碼必須遵守我們的網站規則。
免責聲明
這些資訊和出版物並不意味著也不構成TradingView提供或認可的金融、投資、交易或其他類型的意見或建議。請在使用條款閱讀更多資訊。