Day Trading Signals - Ultimate Pro (Dark Neon + Strong BB Cloud)//@version=5
indicator("Day Trading Signals - Ultimate Pro (Dark Neon + Strong BB Cloud)", overlay=true, max_lines_count=500, max_labels_count=500)
// ===== INPUTS =====
ema_fast_len = input.int(9, "Fast EMA Length")
ema_slow_len = input.int(21, "Slow EMA Length")
rsi_len = input.int(12, "RSI Length")
rsi_overbought = input.int(70, "RSI Overbought Level")
rsi_oversold = input.int(30, "RSI Oversold Level")
bb_len = input.int(20, "Bollinger Bands Length")
bb_mult = input.float(2.0, "Bollinger Bands Multiplier")
sr_len = input.int(15, "Pivot Lookback for Support/Resistance")
min_ema_gap = input.float(0.0, "Minimum EMA Gap to Define Trend", step=0.1)
sr_lifespan = input.int(200, "Bars to Keep S/R Lines")
// Display options
show_bb = input.bool(true, "Show Bollinger Bands?")
show_ema = input.bool(true, "Show EMA Lines?")
show_sr = input.bool(true, "Show Support/Resistance Lines?")
show_bg = input.bool(true, "Show Background Trend Color?")
// ===== COLORS (Dark Neon Theme) =====
neon_teal = color.rgb(0, 255, 200)
neon_purple = color.rgb(180, 95, 255)
neon_orange = color.rgb(255, 160, 60)
neon_yellow = color.rgb(255, 235, 90)
neon_red = color.rgb(255, 70, 110)
neon_gray = color.rgb(140, 140, 160)
sr_support_col = color.rgb(0, 190, 140)
sr_resist_col = color.rgb(255, 90, 120)
// ===== INDICATORS =====
ema_fast = ta.ema(close, ema_fast_len)
ema_slow = ta.ema(close, ema_slow_len)
ema_gap = math.abs(ema_fast - ema_slow)
trend_up = (ema_fast > ema_slow) and (ema_gap > min_ema_gap)
trend_down = (ema_fast < ema_slow) and (ema_gap > min_ema_gap)
trend_flat = ema_gap <= min_ema_gap
rsi = ta.rsi(close, rsi_len)
bb_mid = ta.sma(close, bb_len)
bb_upper = bb_mid + bb_mult * ta.stdev(close, bb_len)
bb_lower = bb_mid - bb_mult * ta.stdev(close, bb_len)
// ===== SUPPORT / RESISTANCE =====
pivot_high = ta.pivothigh(high, sr_len, sr_len)
pivot_low = ta.pivotlow(low, sr_len, sr_len)
var line sup_lines = array.new_line()
var line res_lines = array.new_line()
if show_sr and not na(pivot_low)
l = line.new(bar_index - sr_len, pivot_low, bar_index, pivot_low, color=sr_support_col, width=2, extend=extend.right)
array.push(sup_lines, l)
if show_sr and not na(pivot_high)
l = line.new(bar_index - sr_len, pivot_high, bar_index, pivot_high, color=sr_resist_col, width=2, extend=extend.right)
array.push(res_lines, l)
// Delete old S/R lines
if array.size(sup_lines) > 0
for i = 0 to array.size(sup_lines) - 1
l = array.get(sup_lines, i)
if bar_index - line.get_x2(l) > sr_lifespan
line.delete(l)
array.remove(sup_lines, i)
break
if array.size(res_lines) > 0
for i = 0 to array.size(res_lines) - 1
l = array.get(res_lines, i)
if bar_index - line.get_x2(l) > sr_lifespan
line.delete(l)
array.remove(res_lines, i)
break
// ===== BUY / SELL CONDITIONS =====
buy_cond = trend_up and not trend_flat and ta.crossover(ema_fast, ema_slow) and rsi < rsi_oversold and close < bb_lower
sell_cond = trend_down and not trend_flat and ta.crossunder(ema_fast, ema_slow) and rsi > rsi_overbought and close > bb_upper
// ===== SIGNAL PLOTS =====
plotshape(buy_cond, title="Buy Signal", location=location.belowbar, color=neon_teal, style=shape.labelup, text="BUY", size=size.small)
plotshape(sell_cond, title="Sell Signal", location=location.abovebar, color=neon_red, style=shape.labeldown, text="SELL", size=size.small)
// ===== EMA LINES =====
plot(show_ema ? ema_fast : na, color=neon_orange, title="EMA Fast", linewidth=2)
plot(show_ema ? ema_slow : na, color=neon_purple, title="EMA Slow", linewidth=2)
// ===== STRONG BOLLINGER BAND CLOUD =====
plot_bb_upper = plot(show_bb ? bb_upper : na, color=color.new(neon_yellow, 20), title="BB Upper")
plot_bb_lower = plot(show_bb ? bb_lower : na, color=color.new(neon_gray, 20), title="BB Lower")
plot(bb_mid, color=color.new(neon_gray, 50), title="BB Mid")
// More visible BB cloud (stronger contrast)
bb_cloud_color = trend_up ? color.new(neon_teal, 40) : trend_down ? color.new(neon_red, 40) : color.new(neon_gray, 70)
fill(plot_bb_upper, plot_bb_lower, color=show_bb ? bb_cloud_color : na, title="BB Cloud")
// ===== BACKGROUND COLOR (TREND ZONES) =====
bgcolor(show_bg ? (trend_up ? color.new(neon_teal, 92) : trend_down ? color.new(neon_red, 92) : color.new(neon_gray, 94)) : na)
// ===== ALERTS =====
alertcondition(buy_cond, title="Buy Signal", message="Buy signal triggered. Check chart.")
alertcondition(sell_cond, title="Sell Signal", message="Sell signal triggered. Check chart.")
广量指标
Day Trading Signals - Ultimate Pro (Dark Neon + Strong BB Cloud)//@version=5
indicator("Day Trading Signals - Ultimate Pro (Dark Neon + Strong BB Cloud)", overlay=true, max_lines_count=500, max_labels_count=500)
// ===== INPUTS =====
ema_fast_len = input.int(9, "Fast EMA Length")
ema_slow_len = input.int(21, "Slow EMA Length")
rsi_len = input.int(12, "RSI Length")
rsi_overbought = input.int(70, "RSI Overbought Level")
rsi_oversold = input.int(30, "RSI Oversold Level")
bb_len = input.int(20, "Bollinger Bands Length")
bb_mult = input.float(2.0, "Bollinger Bands Multiplier")
sr_len = input.int(15, "Pivot Lookback for Support/Resistance")
min_ema_gap = input.float(0.0, "Minimum EMA Gap to Define Trend", step=0.1)
sr_lifespan = input.int(200, "Bars to Keep S/R Lines")
// Display options
show_bb = input.bool(true, "Show Bollinger Bands?")
show_ema = input.bool(true, "Show EMA Lines?")
show_sr = input.bool(true, "Show Support/Resistance Lines?")
show_bg = input.bool(true, "Show Background Trend Color?")
// ===== COLORS (Dark Neon Theme) =====
neon_teal = color.rgb(0, 255, 200)
neon_purple = color.rgb(180, 95, 255)
neon_orange = color.rgb(255, 160, 60)
neon_yellow = color.rgb(255, 235, 90)
neon_red = color.rgb(255, 70, 110)
neon_gray = color.rgb(140, 140, 160)
sr_support_col = color.rgb(0, 190, 140)
sr_resist_col = color.rgb(255, 90, 120)
// ===== INDICATORS =====
ema_fast = ta.ema(close, ema_fast_len)
ema_slow = ta.ema(close, ema_slow_len)
ema_gap = math.abs(ema_fast - ema_slow)
trend_up = (ema_fast > ema_slow) and (ema_gap > min_ema_gap)
trend_down = (ema_fast < ema_slow) and (ema_gap > min_ema_gap)
trend_flat = ema_gap <= min_ema_gap
rsi = ta.rsi(close, rsi_len)
bb_mid = ta.sma(close, bb_len)
bb_upper = bb_mid + bb_mult * ta.stdev(close, bb_len)
bb_lower = bb_mid - bb_mult * ta.stdev(close, bb_len)
// ===== SUPPORT / RESISTANCE =====
pivot_high = ta.pivothigh(high, sr_len, sr_len)
pivot_low = ta.pivotlow(low, sr_len, sr_len)
var line sup_lines = array.new_line()
var line res_lines = array.new_line()
if show_sr and not na(pivot_low)
l = line.new(bar_index - sr_len, pivot_low, bar_index, pivot_low, color=sr_support_col, width=2, extend=extend.right)
array.push(sup_lines, l)
if show_sr and not na(pivot_high)
l = line.new(bar_index - sr_len, pivot_high, bar_index, pivot_high, color=sr_resist_col, width=2, extend=extend.right)
array.push(res_lines, l)
// Delete old S/R lines
if array.size(sup_lines) > 0
for i = 0 to array.size(sup_lines) - 1
l = array.get(sup_lines, i)
if bar_index - line.get_x2(l) > sr_lifespan
line.delete(l)
array.remove(sup_lines, i)
break
if array.size(res_lines) > 0
for i = 0 to array.size(res_lines) - 1
l = array.get(res_lines, i)
if bar_index - line.get_x2(l) > sr_lifespan
line.delete(l)
array.remove(res_lines, i)
break
// ===== BUY / SELL CONDITIONS =====
buy_cond = trend_up and not trend_flat and ta.crossover(ema_fast, ema_slow) and rsi < rsi_oversold and close < bb_lower
sell_cond = trend_down and not trend_flat and ta.crossunder(ema_fast, ema_slow) and rsi > rsi_overbought and close > bb_upper
// ===== SIGNAL PLOTS =====
plotshape(buy_cond, title="Buy Signal", location=location.belowbar, color=neon_teal, style=shape.labelup, text="BUY", size=size.small)
plotshape(sell_cond, title="Sell Signal", location=location.abovebar, color=neon_red, style=shape.labeldown, text="SELL", size=size.small)
// ===== EMA LINES =====
plot(show_ema ? ema_fast : na, color=neon_orange, title="EMA Fast", linewidth=2)
plot(show_ema ? ema_slow : na, color=neon_purple, title="EMA Slow", linewidth=2)
// ===== STRONG BOLLINGER BAND CLOUD =====
plot_bb_upper = plot(show_bb ? bb_upper : na, color=color.new(neon_yellow, 20), title="BB Upper")
plot_bb_lower = plot(show_bb ? bb_lower : na, color=color.new(neon_gray, 20), title="BB Lower")
plot(bb_mid, color=color.new(neon_gray, 50), title="BB Mid")
// More visible BB cloud (stronger contrast)
bb_cloud_color = trend_up ? color.new(neon_teal, 40) : trend_down ? color.new(neon_red, 40) : color.new(neon_gray, 70)
fill(plot_bb_upper, plot_bb_lower, color=show_bb ? bb_cloud_color : na, title="BB Cloud")
// ===== BACKGROUND COLOR (TREND ZONES) =====
bgcolor(show_bg ? (trend_up ? color.new(neon_teal, 92) : trend_down ? color.new(neon_red, 92) : color.new(neon_gray, 94)) : na)
// ===== ALERTS =====
alertcondition(buy_cond, title="Buy Signal", message="Buy signal triggered. Check chart.")
alertcondition(sell_cond, title="Sell Signal", message="Sell signal triggered. Check chart.")
FOX ScreenerFOX Screener is a multi-indicator market scanner designed to analyze up to 10 symbols simultaneously and display their technical conditions in a clean, real-time table. It helps traders quickly identify bullish, bearish, and neutral setups based on a combined signal system.
The screener evaluates each symbol using:
RSI (Overbought/Oversold levels)
MACD (Momentum direction)
EMA Difference (Short–Long trend bias)
Bollinger Bands (Volatility-based reversal zones)
Price, High, Low (For quick reference)
Each indicator generates its own BUY/SELL/NEUTRAL reading, and the script consolidates them into a Total Signal with color-coded highlighting:
BUY when bullish signals dominate
SELL when bearish signals dominate
NEUTRAL when signals are mixed
Disclaimer:
The information provided is for educational and informational purposes only. It does not constitute financial or investment advice. Trading and investing in stocks involves risk, including the possible loss of capital. Any decisions to buy, sell, or hold securities are the sole responsibility of the reader. Past performance is not indicative of future results. Always do your own research and, if necessary, consult with a licensed financial advisor before making investment decisions.
Risk-Managed StrategyRisk-Managed Strategy is a complete algorithmic trading framework that blends multiple technical systems—RSI, MACD, EMA crossover, Bollinger Bands, and SuperTrend—into a unified signal engine.
The script dynamically calculates position size based on capital, risk percentage, ATR-based stop loss, and reward-ratio targets.
It features:
-Multi-indicator signal voting (BUY / SELL / NEUTRAL)
- Dynamic capital tracking across trades
- Automatic position sizing based on risk amount
- Auto-generated Stop Loss and Take Profit using recent highs/lows
- On-chart SL, TP, and CMP plotting for clarity
This strategy is designed for traders who want a professional, rule-based system that balances accuracy, risk control, and automation.
Disclaimer:
The information provided is for educational and informational purposes only. It does not constitute financial or investment advice. Trading and investing in stocks involves risk, including the possible loss of capital. Any decisions to buy, sell, or hold securities are the sole responsibility of the reader. Past performance is not indicative of future results. Always do your own research and, if necessary, consult with a licensed financial advisor before making investment decisions.
Scout Regiment - D17# Scout Regiment - D17 Indicator
## English Documentation
### Overview
Scout Regiment - D17 is a comprehensive TradingView indicator that combines multiple technical analysis tools into one powerful overlay indicator. It provides traders with market structure analysis, divergence detection, volume profiling, smart money concepts, and session analysis.
### Key Features
#### 1. **EMA (Exponential Moving Averages)**
- **Purpose**: Trend identification and dynamic support/resistance levels
- **Configuration**: 13 customizable EMAs with adjustable periods
- **Default Active EMAs**: EMA 3 (21), EMA 5 (55), EMA 7 (144), EMA 8 (233)
- **Uses**: Identify trend direction, entry/exit points, and trend strength
- **Color Coding**: Different colors for easy visual distinction
#### 2. **TFMA (Timeframe Moving Averages)**
- **Purpose**: Multi-timeframe trend analysis
- **Features**:
- 3 EMAs on higher timeframes
- Dynamic labels showing trend direction
- Price difference percentage display
- Customizable timeframe settings
- **Default Settings**: 21-period timeframe with lengths 55, 144, and 233
- **Benefits**: Align trades with higher timeframe trends
#### 3. **DFMA (Daily Frame Moving Averages)**
- **Purpose**: Daily timeframe perspective on any chart
- **Features**: Similar to TFMA but specifically for daily analysis
- **Default Timeframe**: 1D (Daily)
- **Use Case**: Long-term trend confirmation and positioning
#### 4. **PMA (Price Moving Averages)**
- **Purpose**: Price channel analysis with filled areas
- **Configuration**: 7 customizable moving averages with fill zones
- **Default Lengths**: 12, 144, 169, 288, 338, 576, 676
- **Visual**: Color-filled zones between selected MAs for channel trading
#### 5. **VWAP (Volume Weighted Average Price)**
- **Purpose**: Institutional trading levels and fair value
- **Features**:
- Multiple anchor periods (Session, Week, Month, Quarter, Year, etc.)
- Standard deviation bands
- Corporate event anchoring (Earnings, Dividends, Splits)
- **Use Case**: Identify institutional support/resistance and mean reversion opportunities
#### 6. **Divergence Detector**
- **Purpose**: Identify potential trend reversals
- **Supported Indicators**: MACD, MACD Histogram, RSI, Stochastic, CCI, Williams %R, Bias, Momentum, OBV, SOBV, VWmacd, CMF, MFI, and external indicators
- **Divergence Types**:
- Regular Bullish/Bearish
- Hidden Bullish/Bearish
- **Features**:
- Automatic divergence line drawing
- Customizable detection parameters
- Color-coded alerts
#### 7. **Volume Profile & Node Detection**
- **Purpose**: Identify key price levels based on volume distribution
- **Features**:
- Volume Profile with POC (Point of Control)
- Value Area High (VAH) and Value Area Low (VAL)
- Peak and trough volume node detection
- Highest/lowest volume node highlighting
- **Lookback**: Configurable (default 377 bars)
- **Use Case**: Identify support/resistance zones and liquidity areas
#### 8. **Smart Money Concepts**
- **Purpose**: Track institutional trading patterns
- **Features**:
- Market Structure (BOS - Break of Structure, CHoCH - Change of Character)
- Internal and Swing structures
- Strong/Weak Highs and Lows
- Equal Highs/Lows detection
- Fair Value Gaps (FVG)
- **Modes**: Historical or Present (latest only)
- **Use Case**: Trade with institutional flow
#### 9. **Trading Sessions**
- **Purpose**: Analyze market behavior during different global sessions
- **Available Sessions**:
- Asian Session
- Sydney, Tokyo, Shanghai, Hong Kong
- European Session
- London, New York, NYSE
- **Features**:
- Session boxes with high/low visualization
- Real-time countdown timers
- Volume and price change tracking
- Information table with session statistics
- **Customization**: Choose which sessions to display, colors, and box styles
### How to Use
#### For Trend Following:
1. Enable EMAs 3, 5, 7, and 8
2. Use TFMA for higher timeframe confirmation
3. Look for price above/below key EMAs for trend direction
4. Use VWAP as additional confirmation
#### For Reversal Trading:
1. Enable Divergence Detector with MACD Histogram and Bias
2. Look for divergences at key support/resistance levels
3. Confirm with Smart Money CHoCH signals
4. Use Volume Profile nodes as entry/exit targets
#### For Intraday Trading:
1. Enable Trading Sessions
2. Focus on high-volume sessions (London, New York overlap)
3. Use session highs/lows as support/resistance
4. Trade Fair Value Gaps during active sessions
#### For Swing Trading:
1. Use DFMA for daily trend
2. Enable PMA for channel identification
3. Look for price reactions at volume profile value areas
4. Confirm with swing structure breaks
### Best Practices
1. **Don't Overcrowd**: Enable only the components you need for your strategy
2. **Multi-Timeframe Analysis**: Always check higher timeframe TFMA/DFMA
3. **Confluence**: Look for multiple signals confirming the same direction
4. **Volume Confirmation**: Use Volume Profile to validate price action
5. **Session Awareness**: Be aware of which session is active for volatility expectations
### Performance Optimization
- Disable unused features to improve chart loading speed
- Use "Present Mode" for Smart Money Concepts if historical data isn't needed
- Reduce Volume Profile lookback period on slower devices
### Alerts
The indicator includes alert conditions for:
- All divergence types (8 conditions)
- Smart Money structure breaks (8 conditions)
- Equal highs/lows detection
- Fair Value Gaps formation
---
## 中文说明文档
### 概述
Scout Regiment - D17 是一款综合性TradingView指标,将多个技术分析工具整合到一个强大的叠加指标中。它为交易者提供市场结构分析、背离检测、成交量分析、聪明钱概念和时区分析。
### 核心功能
#### 1. **EMA(指数移动平均线)**
- **用途**:趋势识别和动态支撑阻力位
- **配置**:13条可自定义周期的EMA
- **默认启用**:EMA 3(21)、EMA 5(55)、EMA 7(144)、EMA 8(233)
- **应用**:识别趋势方向、进出场点位和趋势强度
- **颜色编码**:不同颜色便于视觉区分
#### 2. **TFMA(时间框架移动平均线)**
- **用途**:多时间框架趋势分析
- **特点**:
- 3条更高时间框架的EMA
- 显示趋势方向的动态标签
- 价格差异百分比显示
- 可自定义时间框架设置
- **默认设置**:21周期时间框架,长度为55、144和233
- **优势**:使交易与更高时间框架趋势保持一致
#### 3. **DFMA(日线框架移动平均线)**
- **用途**:在任何图表上提供日线时间框架视角
- **特点**:与TFMA类似,但专门用于日线分析
- **默认时间框架**:1D(日线)
- **使用场景**:长期趋势确认和定位
#### 4. **PMA(价格移动平均线)**
- **用途**:价格通道分析与填充区域
- **配置**:7条可自定义的移动平均线,带填充区域
- **默认长度**:12、144、169、288、338、576、676
- **视觉效果**:选定MA之间的彩色填充区域,用于通道交易
#### 5. **VWAP(成交量加权平均价格)**
- **用途**:机构交易水平和公允价值
- **特点**:
- 多个锚定周期(交易日、周、月、季度、年等)
- 标准差波段
- 企业事件锚定(财报、分红、拆股)
- **使用场景**:识别机构支撑阻力和均值回归机会
#### 6. **背离检测器**
- **用途**:识别潜在趋势反转
- **支持指标**:MACD、MACD柱状图、RSI、随机指标、CCI、威廉指标、乖离率、动量、OBV、SOBV、VWmacd、CMF、MFI及外部指标
- **背离类型**:
- 常规看涨/看跌背离
- 隐藏看涨/看跌背离
- **特点**:
- 自动绘制背离连线
- 可自定义检测参数
- 颜色编码警报
#### 7. **成交量分布与节点检测**
- **用途**:基于成交量分布识别关键价格水平
- **特点**:
- 成交量分布图与POC(控制点)
- 价值区域高点(VAH)和低点(VAL)
- 峰值和低谷成交量节点检测
- 最高/最低成交量节点突出显示
- **回溯期**:可配置(默认377根K线)
- **使用场景**:识别支撑阻力区域和流动性区域
#### 8. **聪明钱概念**
- **用途**:追踪机构交易模式
- **特点**:
- 市场结构(BOS-突破结构、CHoCH-结构转变)
- 内部和摆动结构
- 强/弱高低点
- 等高/等低检测
- 公允价值缺口(FVG)
- **模式**:历史模式或当前模式(仅最新)
- **使用场景**:跟随机构资金流动交易
#### 9. **交易时区**
- **用途**:分析不同全球时段的市场行为
- **可用时段**:
- 亚洲时段
- 悉尼、东京、上海、香港
- 欧洲时段
- 伦敦、纽约、纽交所
- **特点**:
- 时段方框显示高低点
- 实时倒计时
- 成交量和价格变化追踪
- 时段统计信息表格
- **自定义**:选择显示哪些时段、颜色和方框样式
### 使用方法
#### 趋势跟随策略:
1. 启用EMA 3、5、7和8
2. 使用TFMA进行更高时间框架确认
3. 观察价格在关键EMA上方/下方确定趋势方向
4. 使用VWAP作为额外确认
#### 反转交易策略:
1. 启用背离检测器(MACD柱状图和乖离率)
2. 在关键支撑阻力位寻找背离
3. 用聪明钱CHoCH信号确认
4. 使用成交量分布节点作为进出场目标
#### 日内交易策略:
1. 启用交易时区
2. 关注高成交量时段(伦敦、纽约重叠时段)
3. 使用时段高低点作为支撑阻力
4. 在活跃时段交易公允价值缺口
#### 波段交易策略:
1. 使用DFMA确定日线趋势
2. 启用PMA识别通道
3. 观察价格在成交量分布价值区域的反应
4. 用摆动结构突破确认
### 最佳实践
1. **避免过度拥挤**:仅启用策略所需的组件
2. **多时间框架分析**:始终检查更高时间框架的TFMA/DFMA
3. **汇合点**:寻找多个信号确认同一方向
4. **成交量确认**:使用成交量分布验证价格行为
5. **时段意识**:了解当前活跃时段以预期波动性
### 性能优化
- 禁用未使用的功能以提高图表加载速度
- 如果不需要历史数据,对聪明钱概念使用"当前模式"
- 在较慢设备上减少成交量分布回溯期
### 警报
指标包含以下警报条件:
- 所有背离类型(8个条件)
- 聪明钱结构突破(8个条件)
- 等高/等低检测
- 公允价值缺口形成
---
## Technical Support
For questions or issues, please refer to the TradingView community or contact the indicator creator.
## 技术支持
如有问题,请参考TradingView社区或联系指标创建者。
Kripto Fema ind/ This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at mozilla.org
// © Femayakup
//@version=5
indicator(title = "Kripto Fema ind", shorttitle="Kripto Fema ind", overlay=true, format=format.price, precision=2,max_lines_count = 500, max_labels_count = 500, max_bars_back=500)
showEma200 = input(true, title="EMA 200")
showPmax = input(true, title="Pmax")
showLinreg = input(true, title="Linreg")
showMavilim = input(true, title="Mavilim")
showNadaray = input(true, title="Nadaraya Watson")
ma(source, length, type) =>
switch type
"SMA" => ta.sma(source, length)
"EMA" => ta.ema(source, length)
"SMMA (RMA)" => ta.rma(source, length)
"WMA" => ta.wma(source, length)
"VWMA" => ta.vwma(source, length)
//Ema200
timeFrame = input.timeframe(defval = '240',title= 'EMA200 TimeFrame',group = 'EMA200 Settings')
len200 = input.int(200, minval=1, title="Length",group = 'EMA200 Settings')
src200 = input(close, title="Source",group = 'EMA200 Settings')
offset200 = input.int(title="Offset", defval=0, minval=-500, maxval=500,group = 'EMA200 Settings')
out200 = ta.ema(src200, len200)
higherTimeFrame = request.security(syminfo.tickerid,timeFrame,out200 ,barmerge.gaps_on,barmerge.lookahead_on)
ema200Plot = showEma200 ? higherTimeFrame : na
plot(ema200Plot, title="EMA200", offset=offset200)
//Linreq
group1 = "Linreg Settings"
lengthInput = input.int(100, title="Length", minval = 1, maxval = 5000,group = group1)
sourceInput = input.source(close, title="Source")
useUpperDevInput = input.bool(true, title="Upper Deviation", inline = "Upper Deviation", group = group1)
upperMultInput = input.float(2.0, title="", inline = "Upper Deviation", group = group1)
useLowerDevInput = input.bool(true, title="Lower Deviation", inline = "Lower Deviation", group = group1)
lowerMultInput = input.float(2.0, title="", inline = "Lower Deviation", group = group1)
group2 = "Linreg Display Settings"
showPearsonInput = input.bool(true, "Show Pearson's R", group = group2)
extendLeftInput = input.bool(false, "Extend Lines Left", group = group2)
extendRightInput = input.bool(true, "Extend Lines Right", group = group2)
extendStyle = switch
extendLeftInput and extendRightInput => extend.both
extendLeftInput => extend.left
extendRightInput => extend.right
=> extend.none
group3 = "Linreg Color Settings"
colorUpper = input.color(color.new(color.blue, 85), "Linreg Renk", inline = group3, group = group3)
colorLower = input.color(color.new(color.red, 85), "", inline = group3, group = group3)
calcSlope(source, length) =>
max_bars_back(source, 5000)
if not barstate.islast or length <= 1
else
sumX = 0.0
sumY = 0.0
sumXSqr = 0.0
sumXY = 0.0
for i = 0 to length - 1 by 1
val = source
per = i + 1.0
sumX += per
sumY += val
sumXSqr += per * per
sumXY += val * per
slope = (length * sumXY - sumX * sumY) / (length * sumXSqr - sumX * sumX)
average = sumY / length
intercept = average - slope * sumX / length + slope
= calcSlope(sourceInput, lengthInput)
startPrice = i + s * (lengthInput - 1)
endPrice = i
var line baseLine = na
if na(baseLine) and not na(startPrice) and showLinreg
baseLine := line.new(bar_index - lengthInput + 1, startPrice, bar_index, endPrice, width=1, extend=extendStyle, color=color.new(colorLower, 0))
else
line.set_xy1(baseLine, bar_index - lengthInput + 1, startPrice)
line.set_xy2(baseLine, bar_index, endPrice)
na
calcDev(source, length, slope, average, intercept) =>
upDev = 0.0
dnDev = 0.0
stdDevAcc = 0.0
dsxx = 0.0
dsyy = 0.0
dsxy = 0.0
periods = length - 1
daY = intercept + slope * periods / 2
val = intercept
for j = 0 to periods by 1
price = high - val
if price > upDev
upDev := price
price := val - low
if price > dnDev
dnDev := price
price := source
dxt = price - average
dyt = val - daY
price -= val
stdDevAcc += price * price
dsxx += dxt * dxt
dsyy += dyt * dyt
dsxy += dxt * dyt
val += slope
stdDev = math.sqrt(stdDevAcc / (periods == 0 ? 1 : periods))
pearsonR = dsxx == 0 or dsyy == 0 ? 0 : dsxy / math.sqrt(dsxx * dsyy)
= calcDev(sourceInput, lengthInput, s, a, i)
upperStartPrice = startPrice + (useUpperDevInput ? upperMultInput * stdDev : upDev)
upperEndPrice = endPrice + (useUpperDevInput ? upperMultInput * stdDev : upDev)
var line upper = na
lowerStartPrice = startPrice + (useLowerDevInput ? -lowerMultInput * stdDev : -dnDev)
lowerEndPrice = endPrice + (useLowerDevInput ? -lowerMultInput * stdDev : -dnDev)
var line lower = na
if na(upper) and not na(upperStartPrice) and showLinreg
upper := line.new(bar_index - lengthInput + 1, upperStartPrice, bar_index, upperEndPrice, width=1, extend=extendStyle, color=color.new(colorUpper, 0))
else
line.set_xy1(upper, bar_index - lengthInput + 1, upperStartPrice)
line.set_xy2(upper, bar_index, upperEndPrice)
na
if na(lower) and not na(lowerStartPrice) and showLinreg
lower := line.new(bar_index - lengthInput + 1, lowerStartPrice, bar_index, lowerEndPrice, width=1, extend=extendStyle, color=color.new(colorUpper, 0))
else
line.set_xy1(lower, bar_index - lengthInput + 1, lowerStartPrice)
line.set_xy2(lower, bar_index, lowerEndPrice)
na
showLinregPlotUpper = showLinreg ? upper : na
showLinregPlotLower = showLinreg ? lower : na
showLinregPlotBaseLine = showLinreg ? baseLine : na
linefill.new(showLinregPlotUpper, showLinregPlotBaseLine, color = colorUpper)
linefill.new(showLinregPlotBaseLine, showLinregPlotLower, color = colorLower)
// Pearson's R
var label r = na
label.delete(r )
if showPearsonInput and not na(pearsonR) and showLinreg
r := label.new(bar_index - lengthInput + 1, lowerStartPrice, str.tostring(pearsonR, "#.################"), color = color.new(color.white, 100), textcolor=color.new(colorUpper, 0), size=size.normal, style=label.style_label_up)
//Mavilim
group4 = "Mavilim Settings"
mavilimold = input(false, title="Show Previous Version of MavilimW?",group=group4)
fmal=input(3,"First Moving Average length",group = group4)
smal=input(5,"Second Moving Average length",group = group4)
tmal=fmal+smal
Fmal=smal+tmal
Ftmal=tmal+Fmal
Smal=Fmal+Ftmal
M1= ta.wma(close, fmal)
M2= ta.wma(M1, smal)
M3= ta.wma(M2, tmal)
M4= ta.wma(M3, Fmal)
M5= ta.wma(M4, Ftmal)
MAVW= ta.wma(M5, Smal)
col1= MAVW>MAVW
col3= MAVWpmaxsrc ? pmaxsrc-pmaxsrc : 0
vdd1=pmaxsrc
ma = 0.0
if mav == "SMA"
ma := ta.sma(pmaxsrc, length)
ma
if mav == "EMA"
ma := ta.ema(pmaxsrc, length)
ma
if mav == "WMA"
ma := ta.wma(pmaxsrc, length)
ma
if mav == "TMA"
ma := ta.sma(ta.sma(pmaxsrc, math.ceil(length / 2)), math.floor(length / 2) + 1)
ma
if mav == "VAR"
ma := VAR
ma
if mav == "WWMA"
ma := WWMA
ma
if mav == "ZLEMA"
ma := ZLEMA
ma
if mav == "TSF"
ma := TSF
ma
ma
MAvg=getMA(pmaxsrc, length)
longStop = Normalize ? MAvg - Multiplier*atr/close : MAvg - Multiplier*atr
longStopPrev = nz(longStop , longStop)
longStop := MAvg > longStopPrev ? math.max(longStop, longStopPrev) : longStop
shortStop = Normalize ? MAvg + Multiplier*atr/close : MAvg + Multiplier*atr
shortStopPrev = nz(shortStop , shortStop)
shortStop := MAvg < shortStopPrev ? math.min(shortStop, shortStopPrev) : shortStop
dir = 1
dir := nz(dir , dir)
dir := dir == -1 and MAvg > shortStopPrev ? 1 : dir == 1 and MAvg < longStopPrev ? -1 : dir
PMax = dir==1 ? longStop: shortStop
plot(showsupport ? MAvg : na, color=#fbff04, linewidth=2, title="EMA9")
pALL=plot(PMax, color=color.new(color.red, transp = 0), linewidth=2, title="PMax")
alertcondition(ta.cross(MAvg, PMax), title="Cross Alert", message="PMax - Moving Avg Crossing!")
alertcondition(ta.crossover(MAvg, PMax), title="Crossover Alarm", message="Moving Avg BUY SIGNAL!")
alertcondition(ta.crossunder(MAvg, PMax), title="Crossunder Alarm", message="Moving Avg SELL SIGNAL!")
alertcondition(ta.cross(pmaxsrc, PMax), title="Price Cross Alert", message="PMax - Price Crossing!")
alertcondition(ta.crossover(pmaxsrc, PMax), title="Price Crossover Alarm", message="PRICE OVER PMax - BUY SIGNAL!")
alertcondition(ta.crossunder(pmaxsrc, PMax), title="Price Crossunder Alarm", message="PRICE UNDER PMax - SELL SIGNAL!")
buySignalk = ta.crossover(MAvg, PMax)
plotshape(buySignalk and showsignalsk ? PMax*0.995 : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.green, transp = 0), textcolor=color.white)
sellSignallk = ta.crossunder(MAvg, PMax)
plotshape(sellSignallk and showsignalsk ? PMax*1.005 : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, transp = 0), textcolor=color.white)
// buySignalc = ta.crossover(pmaxsrc, PMax)
// plotshape(buySignalc and showsignalsc ? PMax*0.995 : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=#0F18BF, textcolor=color.white)
// sellSignallc = ta.crossunder(pmaxsrc, PMax)
// plotshape(sellSignallc and showsignalsc ? PMax*1.005 : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=#0F18BF, textcolor=color.white)
// mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0,display=display.none)
longFillColor = highlighting ? (MAvg>PMax ? color.new(color.green, transp = 90) : na) : na
shortFillColor = highlighting ? (MAvg math.exp(-(math.pow(x, 2)/(h * h * 2)))
//-----------------------------------------------------------------------------}
//Append lines
//-----------------------------------------------------------------------------{
n = bar_index
var ln = array.new_line(0)
if barstate.isfirst and repaint
for i = 0 to 499
array.push(ln,line.new(na,na,na,na))
//-----------------------------------------------------------------------------}
//End point method
//-----------------------------------------------------------------------------{
var coefs = array.new_float(0)
var den = 0.
if barstate.isfirst and not repaint
for i = 0 to 499
w = gauss(i, h)
coefs.push(w)
den := coefs.sum()
out = 0.
if not repaint
for i = 0 to 499
out += src * coefs.get(i)
out /= den
mae = ta.sma(math.abs(src - out), 499) * mult
upperN = out + mae
lowerN = out - mae
//-----------------------------------------------------------------------------}
//Compute and display NWE
//-----------------------------------------------------------------------------{
float y2 = na
float y1 = na
nwe = array.new(0)
if barstate.islast and repaint
sae = 0.
//Compute and set NWE point
for i = 0 to math.min(499,n - 1)
sum = 0.
sumw = 0.
//Compute weighted mean
for j = 0 to math.min(499,n - 1)
w = gauss(i - j, h)
sum += src * w
sumw += w
y2 := sum / sumw
sae += math.abs(src - y2)
nwe.push(y2)
sae := sae / math.min(499,n - 1) * mult
for i = 0 to math.min(499,n - 1)
if i%2 and showNadaray
line.new(n-i+1, y1 + sae, n-i, nwe.get(i) + sae, color = upCss)
line.new(n-i+1, y1 - sae, n-i, nwe.get(i) - sae, color = dnCss)
if src > nwe.get(i) + sae and src < nwe.get(i) + sae and showNadaray
label.new(n-i, src , '▼', color = color(na), style = label.style_label_down, textcolor = dnCss, textalign = text.align_center)
if src < nwe.get(i) - sae and src > nwe.get(i) - sae and showNadaray
label.new(n-i, src , '▲', color = color(na), style = label.style_label_up, textcolor = upCss, textalign = text.align_center)
y1 := nwe.get(i)
//-----------------------------------------------------------------------------}
//Dashboard
//-----------------------------------------------------------------------------{
var tb = table.new(position.top_right, 1, 1
, bgcolor = #1e222d
, border_color = #373a46
, border_width = 1
, frame_color = #373a46
, frame_width = 1)
if repaint
tb.cell(0, 0, 'Repainting Mode Enabled', text_color = color.white, text_size = size.small)
//-----------------------------------------------------------------------------}
//Plot
//-----------------------------------------------------------------------------}
// plot(repaint ? na : out + mae, 'Upper', upCss)
// plot(repaint ? na : out - mae, 'Lower', dnCss)
//Crossing Arrows
// plotshape(ta.crossunder(close, out - mae) ? low : na, "Crossunder", shape.labelup, location.absolute, color(na), 0 , text = '▲', textcolor = upCss, size = size.tiny)
// plotshape(ta.crossover(close, out + mae) ? high : na, "Crossover", shape.labeldown, location.absolute, color(na), 0 , text = '▼', textcolor = dnCss, size = size.tiny)
//-----------------------------------------------------------------------------}
//////////////////////////////////////////////////////////////////////////////////
enableD = input (true, "DIVERGANCE ON/OFF" , group="INDICATORS ON/OFF")
//DIVERGANCE
prd1 = input.int (defval=5 , title='PIVOT PERIOD' , minval=1, maxval=50 , group="DIVERGANCE")
source = input.string(defval='HIGH/LOW' , title='SOURCE FOR PIVOT POINTS' , options= , group="DIVERGANCE")
searchdiv = input.string(defval='REGULAR/HIDDEN', title='DIVERGANCE TYPE' , options= , group="DIVERGANCE")
showindis = input.string(defval='FULL' , title='SHOW INDICATORS NAME' , options= , group="DIVERGANCE")
showlimit = input.int(1 , title='MINIMUM NUMBER OF DIVERGANCES', minval=1, maxval=11 , group="DIVERGANCE")
maxpp = input.int (defval=20 , title='MAXIMUM PIVOT POINTS TO CHECK', minval=1, maxval=20 , group="DIVERGANCE")
maxbars = input.int (defval=200 , title='MAXIMUM BARS TO CHECK' , minval=30, maxval=200 , group="DIVERGANCE")
showlast = input (defval=false , title='SHOW ONLY LAST DIVERGANCE' , group="DIVERGANCE")
dontconfirm = input (defval=false , title="DON'T WAIT FOR CONFORMATION" , group="DIVERGANCE")
showlines = input (defval=false , title='SHOW DIVERGANCE LINES' , group="DIVERGANCE")
showpivot = input (defval=false , title='SHOW PIVOT POINTS' , group="DIVERGANCE")
calcmacd = input (defval=true , title='MACD' , group="DIVERGANCE")
calcmacda = input (defval=true , title='MACD HISTOGRAM' , group="DIVERGANCE")
calcrsi = input (defval=true , title='RSI' , group="DIVERGANCE")
calcstoc = input (defval=true , title='STOCHASTIC' , group="DIVERGANCE")
calccci = input (defval=true , title='CCI' , group="DIVERGANCE")
calcmom = input (defval=true , title='MOMENTUM' , group="DIVERGANCE")
calcobv = input (defval=true , title='OBV' , group="DIVERGANCE")
calcvwmacd = input (true , title='VWMACD' , group="DIVERGANCE")
calccmf = input (true , title='CHAIKIN MONEY FLOW' , group="DIVERGANCE")
calcmfi = input (true , title='MONEY FLOW INDEX' , group="DIVERGANCE")
calcext = input (false , title='CHECK EXTERNAL INDICATOR' , group="DIVERGANCE")
externalindi = input (defval=close , title='EXTERNAL INDICATOR' , group="DIVERGANCE")
pos_reg_div_col = input (defval=#ffffff , title='POSITIVE REGULAR DIVERGANCE' , group="DIVERGANCE")
neg_reg_div_col = input (defval=#00def6 , title='NEGATIVE REGULAR DIVERGANCE' , group="DIVERGANCE")
pos_hid_div_col = input (defval=#00ff0a , title='POSITIVE HIDDEN DIVERGANCE' , group="DIVERGANCE")
neg_hid_div_col = input (defval=#ff0015 , title='NEGATIVE HIDDEN DIVERGANCE' , group="DIVERGANCE")
reg_div_l_style_ = input.string(defval='SOLID' , title='REGULAR DIVERGANCE LINESTYLE' , options= , group="DIVERGANCE")
hid_div_l_style_ = input.string(defval='SOLID' , title='HIDDEN DIVERGANCE LINESTYLE' , options= , group="DIVERGANCE")
reg_div_l_width = input.int (defval=2 , title='REGULAR DIVERGANCE LINEWIDTH' , minval=1, maxval=5 , group="DIVERGANCE")
hid_div_l_width = input.int (defval=2 , title='HIDDEN DIVERGANCE LINEWIDTH' , minval=1, maxval=5 , group="DIVERGANCE")
showmas = input.bool (defval=false , title='SHOW MOVING AVERAGES (50 & 200)', inline='MA' , group="DIVERGANCE")
cma1col = input.color (defval=#ffffff , title='' , inline='MA' , group="DIVERGANCE")
cma2col = input.color (defval=#00def6 , title='' , inline='MA' , group="DIVERGANCE")
//PLOTS
plot(showmas ? ta.sma(close, 50) : na, color=showmas ? cma1col : na)
plot(showmas ? ta.sma(close, 200) : na, color=showmas ? cma2col : na)
var reg_div_l_style = reg_div_l_style_ == 'SOLID' ? line.style_solid : reg_div_l_style_ == 'DASHED' ? line.style_dashed : line.style_dotted
var hid_div_l_style = hid_div_l_style_ == 'SOLID' ? line.style_solid : hid_div_l_style_ == 'DASHED' ? line.style_dashed : line.style_dotted
rsi = ta.rsi(close, 14)
= ta.macd(close, 12, 26, 9)
moment = ta.mom(close, 10)
cci = ta.cci(close, 10)
Obv = ta.obv
stk = ta.sma(ta.stoch(close, high, low, 14), 3)
maFast = ta.vwma(close, 12)
maSlow = ta.vwma(close, 26)
vwmacd = maFast - maSlow
Cmfm = (close - low - (high - close)) / (high - low)
Cmfv = Cmfm * volume
cmf = ta.sma(Cmfv, 21) / ta.sma(volume, 21)
Mfi = ta.mfi(close, 14)
var indicators_name = array.new_string(11)
var div_colors = array.new_color(4)
if barstate.isfirst and enableD
array.set(indicators_name, 0, showindis == "DON'T SHOW" ? '' : '')
array.set(indicators_name, 1, showindis == "DON'T SHOW" ? '' : '')
array.set(indicators_name, 2, showindis == "DON'T SHOW" ? '' : '')
array.set(indicators_name, 3, showindis == "DON'T SHOW" ? '' : '')
array.set(indicators_name, 4, showindis == "DON'T SHOW" ? '' : '')
array.set(indicators_name, 5, showindis == "DON'T SHOW" ? '' : '')
array.set(indicators_name, 6, showindis == "DON'T SHOW" ? '' : '')
array.set(indicators_name, 7, showindis == "DON'T SHOW" ? '' : '')
array.set(indicators_name, 8, showindis == "DON'T SHOW" ? '' : '')
array.set(indicators_name, 9, showindis == "DON'T SHOW" ? '' : '')
array.set(indicators_name, 10, showindis == "DON'T SHOW" ? '' : '')
array.set(div_colors, 0, pos_reg_div_col)
array.set(div_colors, 1, neg_reg_div_col)
array.set(div_colors, 2, pos_hid_div_col)
array.set(div_colors, 3, neg_hid_div_col)
float ph1 = ta.pivothigh(source == 'CLOSE' ? close : high, prd1, prd1)
float pl1 = ta.pivotlow(source == 'CLOSE' ? close : low, prd1, prd1)
plotshape(ph1 and showpivot, text='H', style=shape.labeldown, color=color.new(color.white, 100), textcolor=#00def6, location=location.abovebar, offset=-prd1)
plotshape(pl1 and showpivot, text='L', style=shape.labelup, color=color.new(color.white, 100), textcolor=#ffffff, location=location.belowbar, offset=-prd1)
var int maxarraysize = 20
var ph_positions = array.new_int(maxarraysize, 0)
var pl_positions = array.new_int(maxarraysize, 0)
var ph_vals = array.new_float(maxarraysize, 0.)
var pl_vals = array.new_float(maxarraysize, 0.)
if ph1
array.unshift(ph_positions, bar_index)
array.unshift(ph_vals, ph1)
if array.size(ph_positions) > maxarraysize
array.pop(ph_positions)
array.pop(ph_vals)
if pl1
array.unshift(pl_positions, bar_index)
array.unshift(pl_vals, pl1)
if array.size(pl_positions) > maxarraysize
array.pop(pl_positions)
array.pop(pl_vals)
positive_regular_positive_hidden_divergence(src, cond) =>
divlen = 0
prsc = source == 'CLOSE' ? close : low
if dontconfirm or src > src or close > close
startpoint = dontconfirm ? 0 : 1
for x = 0 to maxpp - 1 by 1
len = bar_index - array.get(pl_positions, x) + prd1
if array.get(pl_positions, x) == 0 or len > maxbars
break
if len > 5 and (cond == 1 and src > src and prsc < nz(array.get(pl_vals, x)) or cond == 2 and src < src and prsc > nz(array.get(pl_vals, x)))
slope1 = (src - src ) / (len - startpoint)
virtual_line1 = src - slope1
slope2 = (close - close ) / (len - startpoint)
virtual_line2 = close - slope2
arrived = true
for y = 1 + startpoint to len - 1 by 1
if src < virtual_line1 or nz(close ) < virtual_line2
arrived := false
break
virtual_line1 -= slope1
virtual_line2 -= slope2
virtual_line2
if arrived
divlen := len
break
divlen
negative_regular_negative_hidden_divergence(src, cond) =>
divlen = 0
prsc = source == 'CLOSE' ? close : high
if dontconfirm or src < src or close < close
startpoint = dontconfirm ? 0 : 1
for x = 0 to maxpp - 1 by 1
len = bar_index - array.get(ph_positions, x) + prd1
if array.get(ph_positions, x) == 0 or len > maxbars
break
if len > 5 and (cond == 1 and src < src and prsc > nz(array.get(ph_vals, x)) or cond == 2 and src > src and prsc < nz(array.get(ph_vals, x)))
slope1 = (src - src ) / (len - startpoint)
virtual_line1 = src - slope1
slope2 = (close - nz(close )) / (len - startpoint)
virtual_line2 = close - slope2
arrived = true
for y = 1 + startpoint to len - 1 by 1
if src > virtual_line1 or nz(close ) > virtual_line2
arrived := false
break
virtual_line1 -= slope1
virtual_line2 -= slope2
virtual_line2
if arrived
divlen := len
break
divlen
//CALCULATIONS
calculate_divs(cond, indicator_1) =>
divs = array.new_int(4, 0)
array.set(divs, 0, cond and (searchdiv == 'REGULAR' or searchdiv == 'REGULAR/HIDDEN') ? positive_regular_positive_hidden_divergence(indicator_1, 1) : 0)
array.set(divs, 1, cond and (searchdiv == 'REGULAR' or searchdiv == 'REGULAR/HIDDEN') ? negative_regular_negative_hidden_divergence(indicator_1, 1) : 0)
array.set(divs, 2, cond and (searchdiv == 'HIDDEN' or searchdiv == 'REGULAR/HIDDEN') ? positive_regular_positive_hidden_divergence(indicator_1, 2) : 0)
array.set(divs, 3, cond and (searchdiv == 'HIDDEN' or searchdiv == 'REGULAR/HIDDEN') ? negative_regular_negative_hidden_divergence(indicator_1, 2) : 0)
divs
var all_divergences = array.new_int(44)
array_set_divs(div_pointer, index) =>
for x = 0 to 3 by 1
array.set(all_divergences, index * 4 + x, array.get(div_pointer, x))
array_set_divs(calculate_divs(calcmacd , macd) , 0)
array_set_divs(calculate_divs(calcmacda , deltamacd) , 1)
array_set_divs(calculate_divs(calcrsi , rsi) , 2)
array_set_divs(calculate_divs(calcstoc , stk) , 3)
array_set_divs(calculate_divs(calccci , cci) , 4)
array_set_divs(calculate_divs(calcmom , moment) , 5)
array_set_divs(calculate_divs(calcobv , Obv) , 6)
array_set_divs(calculate_divs(calcvwmacd, vwmacd) , 7)
array_set_divs(calculate_divs(calccmf , cmf) , 8)
array_set_divs(calculate_divs(calcmfi , Mfi) , 9)
array_set_divs(calculate_divs(calcext , externalindi), 10)
total_div = 0
for x = 0 to array.size(all_divergences) - 1 by 1
total_div += math.round(math.sign(array.get(all_divergences, x)))
total_div
if total_div < showlimit
array.fill(all_divergences, 0)
var pos_div_lines = array.new_line(0)
var neg_div_lines = array.new_line(0)
var pos_div_labels = array.new_label(0)
var neg_div_labels = array.new_label(0)
delete_old_pos_div_lines() =>
if array.size(pos_div_lines) > 0
for j = 0 to array.size(pos_div_lines) - 1 by 1
line.delete(array.get(pos_div_lines, j))
array.clear(pos_div_lines)
delete_old_neg_div_lines() =>
if array.size(neg_div_lines) > 0
for j = 0 to array.size(neg_div_lines) - 1 by 1
line.delete(array.get(neg_div_lines, j))
array.clear(neg_div_lines)
delete_old_pos_div_labels() =>
if array.size(pos_div_labels) > 0
for j = 0 to array.size(pos_div_labels) - 1 by 1
label.delete(array.get(pos_div_labels, j))
array.clear(pos_div_labels)
delete_old_neg_div_labels() =>
if array.size(neg_div_labels) > 0
for j = 0 to array.size(neg_div_labels) - 1 by 1
label.delete(array.get(neg_div_labels, j))
array.clear(neg_div_labels)
delete_last_pos_div_lines_label(n) =>
if n > 0 and array.size(pos_div_lines) >= n
asz = array.size(pos_div_lines)
for j = 1 to n by 1
line.delete(array.get(pos_div_lines, asz - j))
array.pop(pos_div_lines)
if array.size(pos_div_labels) > 0
label.delete(array.get(pos_div_labels, array.size(pos_div_labels) - 1))
array.pop(pos_div_labels)
delete_last_neg_div_lines_label(n) =>
if n > 0 and array.size(neg_div_lines) >= n
asz = array.size(neg_div_lines)
for j = 1 to n by 1
line.delete(array.get(neg_div_lines, asz - j))
array.pop(neg_div_lines)
if array.size(neg_div_labels) > 0
label.delete(array.get(neg_div_labels, array.size(neg_div_labels) - 1))
array.pop(neg_div_labels)
pos_reg_div_detected = false
neg_reg_div_detected = false
pos_hid_div_detected = false
neg_hid_div_detected = false
var last_pos_div_lines = 0
var last_neg_div_lines = 0
var remove_last_pos_divs = false
var remove_last_neg_divs = false
if pl1
remove_last_pos_divs := false
last_pos_div_lines := 0
last_pos_div_lines
if ph1
remove_last_neg_divs := false
last_neg_div_lines := 0
last_neg_div_lines
divergence_text_top = ''
divergence_text_bottom = ''
distances = array.new_int(0)
dnumdiv_top = 0
dnumdiv_bottom = 0
top_label_col = color.white
bottom_label_col = color.white
old_pos_divs_can_be_removed = true
old_neg_divs_can_be_removed = true
startpoint = dontconfirm ? 0 : 1
for x = 0 to 10 by 1
div_type = -1
for y = 0 to 3 by 1
if array.get(all_divergences, x * 4 + y) > 0
div_type := y
if y % 2 == 1
dnumdiv_top += 1
top_label_col := array.get(div_colors, y)
top_label_col
if y % 2 == 0
dnumdiv_bottom += 1
bottom_label_col := array.get(div_colors, y)
bottom_label_col
if not array.includes(distances, array.get(all_divergences, x * 4 + y))
array.push(distances, array.get(all_divergences, x * 4 + y))
new_line = showlines ? line.new(x1=bar_index - array.get(all_divergences, x * 4 + y), y1=source == 'CLOSE' ? close : y % 2 == 0 ? low : high , x2=bar_index - startpoint, y2=source == 'CLOSE' ? close : y % 2 == 0 ? low : high , color=array.get(div_colors, y), style=y < 2 ? reg_div_l_style : hid_div_l_style, width=y < 2 ? reg_div_l_width : hid_div_l_width) : na
if y % 2 == 0
if old_pos_divs_can_be_removed
old_pos_divs_can_be_removed := false
if not showlast and remove_last_pos_divs
delete_last_pos_div_lines_label(last_pos_div_lines)
last_pos_div_lines := 0
last_pos_div_lines
if showlast
delete_old_pos_div_lines()
array.push(pos_div_lines, new_line)
last_pos_div_lines += 1
remove_last_pos_divs := true
remove_last_pos_divs
if y % 2 == 1
if old_neg_divs_can_be_removed
old_neg_divs_can_be_removed := false
if not showlast and remove_last_neg_divs
delete_last_neg_div_lines_label(last_neg_div_lines)
last_neg_div_lines := 0
last_neg_div_lines
if showlast
delete_old_neg_div_lines()
array.push(neg_div_lines, new_line)
last_neg_div_lines += 1
remove_last_neg_divs := true
remove_last_neg_divs
if y == 0
pos_reg_div_detected := true
pos_reg_div_detected
if y == 1
neg_reg_div_detected := true
neg_reg_div_detected
if y == 2
pos_hid_div_detected := true
pos_hid_div_detected
if y == 3
neg_hid_div_detected := true
neg_hid_div_detected
if div_type >= 0
divergence_text_top += (div_type % 2 == 1 ? showindis != "DON'T SHOW" ? array.get(indicators_name, x) + ' ' : '' : '')
divergence_text_bottom += (div_type % 2 == 0 ? showindis != "DON'T SHOW" ? array.get(indicators_name, x) + ' ' : '' : '')
divergence_text_bottom
if showindis != "DON'T SHOW"
if dnumdiv_top > 0
divergence_text_top += str.tostring(dnumdiv_top)
divergence_text_top
if dnumdiv_bottom > 0
divergence_text_bottom += str.tostring(dnumdiv_bottom)
divergence_text_bottom
if divergence_text_top != ''
if showlast
delete_old_neg_div_labels()
array.push(neg_div_labels, label.new(x=bar_index, y=math.max(high, high ), color=top_label_col, style=label.style_diamond, size = size.auto))
if divergence_text_bottom != ''
if showlast
delete_old_pos_div_labels()
array.push(pos_div_labels, label.new(x=bar_index, y=math.min(low, low ), color=bottom_label_col, style=label.style_diamond, size = size.auto))
// POSITION AND SIZE
PosTable = input.string(defval="Bottom Right", title="Position", options= , group="Table Location & Size", inline="1")
SizTable = input.string(defval="Auto", title="Size", options= , group="Table Location & Size", inline="1")
Pos1Table = PosTable == "Top Right" ? position.top_right : PosTable == "Middle Right" ? position.middle_right : PosTable == "Bottom Right" ? position.bottom_right : PosTable == "Top Center" ? position.top_center : PosTable == "Middle Center" ? position.middle_center : PosTable == "Bottom Center" ? position.bottom_center : PosTable == "Top Left" ? position.top_left : PosTable == "Middle Left" ? position.middle_left : position.bottom_left
Siz1Table = SizTable == "Auto" ? size.auto : SizTable == "Huge" ? size.huge : SizTable == "Large" ? size.large : SizTable == "Normal" ? size.normal : SizTable == "Small" ? size.small : size.tiny
tbl = table.new(Pos1Table, 21, 16, border_width = 1, border_color = color.gray, frame_color = color.gray, frame_width = 1)
// Kullanıcı tarafından belirlenecek yeşil ve kırmızı zaman dilimi sayısı
greenThreshold = input.int(5, minval=1, maxval=10, title="Yeşil Zaman Dilimi Sayısı", group="Alarm Ayarları")
redThreshold = input.int(5, minval=1, maxval=10, title="Kırmızı Zaman Dilimi Sayısı", group="Alarm Ayarları")
// TIMEFRAMES OPTIONS
box01 = input.bool(true, "TF ", inline = "01", group="Select Timeframe")
tf01 = input.timeframe("1", "", inline = "01", group="Select Timeframe")
box02 = input.bool(false, "TF ", inline = "02", group="Select Timeframe")
tf02 = input.timeframe("3", "", inline = "02", group="Select Timeframe")
box03 = input.bool(true, "TF ", inline = "03", group="Select Timeframe")
tf03 = input.timeframe("5", "", inline = "03", group="Select Timeframe")
box04 = input.bool(true, "TF ", inline = "04", group="Select Timeframe")
tf04 = input.timeframe("15", "", inline = "04", group="Select Timeframe")
box05 = input.bool(false, "TF ", inline = "05", group="Select Timeframe")
tf05 = input.timeframe("30", "", inline = "05", group="Select Timeframe")
box06 = input.bool(true, "TF ", inline = "01", group="Select Timeframe")
tf06 = input.timeframe("60", "", inline = "01", group="Select Timeframe")
box07 = input.bool(false, "TF ", inline = "02", group="Select Timeframe")
tf07 = input.timeframe("120", "", inline = "02", group="Select Timeframe")
box08 = input.bool(false, "TF ", inline = "03", group="Select Timeframe")
tf08 = input.timeframe("180", "", inline = "03", group="Select Timeframe")
box09 = input.bool(true, "TF ", inline = "04", group="Select Timeframe")
tf09 = input.timeframe("240", "", inline = "04", group="Select Timeframe")
box10 = input.bool(false, "TF ", inline = "05", group="Select Timeframe")
tf10 = input.timeframe("D", "", inline = "05", group="Select Timeframe")
// indicator('Tillson FEMA', overlay=true)
length1 = input(1, 'FEMA Length')
a1 = input(0.7, 'Volume Factor')
e1 = ta.ema((high + low + 2 * close) / 4, length1)
e2 = ta.ema(e1, length1)
e3 = ta.ema(e2, length1)
e4 = ta.ema(e3, length1)
e5 = ta.ema(e4, length1)
e6 = ta.ema(e5, length1)
c1 = -a1 * a1 * a1
c2 = 3 * a1 * a1 + 3 * a1 * a1 * a1
c3 = -6 * a1 * a1 - 3 * a1 - 3 * a1 * a1 * a1
c4 = 1 + 3 * a1 + a1 * a1 * a1 + 3 * a1 * a1
FEMA = c1 * e6 + c2 * e5 + c3 * e4 + c4 * e3
tablocol1 = FEMA > FEMA
tablocol3 = FEMA < FEMA
color_1 = col1 ? color.rgb(149, 219, 35): col3 ? color.rgb(238, 11, 11) : color.yellow
plot(FEMA, color=color_1, linewidth=3, title='FEMA')
tilson1 = FEMA
tilson1a =FEMA
// DEFINITION OF VALUES
symbol = ticker.modify(syminfo.tickerid, syminfo.session)
tfArr = array.new(na)
tilson1Arr = array.new(na)
tilson1aArr = array.new(na)
// DEFINITIONS OF RSI & CCI FUNCTIONS APPENDED IN THE TIMEFRAME OPTIONS
cciNcciFun(tf, flg) =>
= request.security(symbol, tf, )
if flg and (barstate.isrealtime ? true : timeframe.in_seconds(timeframe.period) <= timeframe.in_seconds(tf))
array.push(tfArr, na(tf) ? timeframe.period : tf)
array.push(tilson1Arr, tilson_)
array.push(tilson1aArr, tilson1a_)
cciNcciFun(tf01, box01), cciNcciFun(tf02, box02), cciNcciFun(tf03, box03), cciNcciFun(tf04, box04),
cciNcciFun(tf05, box05), cciNcciFun(tf06, box06), cciNcciFun(tf07, box07), cciNcciFun(tf08, box08),
cciNcciFun(tf09, box09), cciNcciFun(tf10, box10)
// TABLE AND CELLS CONFIG
// Post Timeframe in format
tfTxt(x)=>
out = x
if not str.contains(x, "S") and not str.contains(x, "M") and
not str.contains(x, "W") and not str.contains(x, "D")
if str.tonumber(x)%60 == 0
out := str.tostring(str.tonumber(x)/60)+"H"
else
out := x + "m"
out
if barstate.islast
table.clear(tbl, 0, 0, 20, 15)
// TITLES
table.cell(tbl, 0, 0, "⏱", text_color=color.white, text_size=Siz1Table, bgcolor=#000000)
table.cell(tbl, 1, 0, "FEMA("+str.tostring(length1)+")", text_color=#FFFFFF, text_size=Siz1Table, bgcolor=#000000)
j = 1
greenCounter = 0 // Yeşil zaman dilimlerini saymak için bir sayaç
redCounter = 0
if array.size(tilson1Arr) > 0
for i = 0 to array.size(tilson1Arr) - 1
if not na(array.get(tilson1Arr, i))
//config values in the cells
TF_VALUE = array.get(tfArr,i)
tilson1VALUE = array.get(tilson1Arr, i)
tilson1aVALUE = array.get(tilson1aArr, i)
SIGNAL1 = tilson1VALUE >= tilson1aVALUE ? "▲" : tilson1VALUE <= tilson1aVALUE ? "▼" : na
// Yeşil oklar ve arka planı ayarla
greenArrowColor1 = SIGNAL1 == "▲" ? color.rgb(0, 255, 0) : color.rgb(255, 0, 0)
greenBgColor1 = SIGNAL1 == "▲" ? color.rgb(25, 70, 22) : color.rgb(93, 22, 22)
allGreen = tilson1VALUE >= tilson1aVALUE
allRed = tilson1VALUE <= tilson1aVALUE
// Determine background color for time text
timeBgColor = allGreen ? #194616 : (allRed ? #5D1616 : #000000)
txtColor = allGreen ? #00FF00 : (allRed ? #FF4500 : color.white)
if allGreen
greenCounter := greenCounter + 1
redCounter := 0
else if allRed
redCounter := redCounter + 1
greenCounter := 0
else
redCounter := 0
greenCounter := 0
// Dinamik pair değerini oluşturma
pair = "USDT_" + syminfo.basecurrency + "USDT"
// Bot ID için kullanıcı girişi
bot_id = input.int(12387976, title="Bot ID", minval=0,group ='3Comas Message', inline = '1') // Varsayılan değeri 12387976 olan bir tamsayı girişi alır
// E-posta tokenı için kullanıcı girişi
email_token = input("cd4111d4-549a-4759-a082-e8f45c91fa47", title="Email Token",group ='3Comas Message', inline = '1')
// USER INPUT FOR DELAY
delay_seconds = input.int(0, title="Delay Seconds", minval=0, maxval=86400,group ='3Comas Message', inline = '1')
// Dinamik mesajın oluşturulması
message = '{ "message_type": "bot", "bot_id": ' + str.tostring(bot_id) + ', "email_token": "' + email_token + '", "delay_seconds": ' + str.tostring(delay_seconds) + ', "pair": "' + pair + '"}'
// Kullanıcının belirlediği yeşil veya kırmızı zaman dilimi sayısına ulaşıldığında alarmı tetikle
if greenCounter >= greenThreshold
alert(message, alert.freq_once_per_bar_close)
// if redCounter >= redThreshold
// alert(message, alert.freq_once_per_bar_close)
// Kullanıcının belirlediği yeşil veya kırmızı zaman dilimi sayısına ulaşıldığında alarmı tetikle
// if greenCounter >= greenThreshold
// alert("Yeşil zaman dilimi sayısı " + str.tostring(greenThreshold) + " adede ulaştı", alert.freq_once_per_bar_close)
// if redCounter >= redThreshold
// alert("Kırmızı zaman dilimi sayısı " + str.tostring(redThreshold) + " adede ulaştı", alert.freq_once_per_bar_close)
table.cell(tbl, 0, j, tfTxt(TF_VALUE), text_color=txtColor, text_halign=text.align_left, text_size=Siz1Table, bgcolor=timeBgColor)
table.cell(tbl, 1, j, str.tostring(tilson1VALUE, "#.#######")+SIGNAL1, text_color=greenArrowColor1, text_halign=text.align_right, text_size=Siz1Table, bgcolor=greenBgColor1)
j += 1
prd = input.int(defval=10, title='Pivot Period', minval=4, maxval=30, group='Setup')
ppsrc = input.string(defval='High/Low', title='Source', options= , group='Setup')
maxnumpp = input.int(defval=20, title=' Maximum Number of Pivot', minval=5, maxval=100, group='Setup')
ChannelW = input.int(defval=10, title='Maximum Channel Width %', minval=1, group='Setup')
maxnumsr = input.int(defval=5, title=' Maximum Number of S/R', minval=1, maxval=10, group='Setup')
min_strength = input.int(defval=2, title=' Minimum Strength', minval=1, maxval=10, group='Setup')
labelloc = input.int(defval=20, title='Label Location', group='Colors', tooltip='Positive numbers reference future bars, negative numbers reference histical bars')
linestyle = input.string(defval='Dashed', title='Line Style', options= , group='Colors')
linewidth = input.int(defval=2, title='Line Width', minval=1, maxval=4, group='Colors')
resistancecolor = input.color(defval=color.red, title='Resistance Color', group='Colors')
supportcolor = input.color(defval=color.lime, title='Support Color', group='Colors')
showpp = input(false, title='Show Point Points')
float src1 = ppsrc == 'High/Low' ? high : math.max(close, open)
float src2 = ppsrc == 'High/Low' ? low : math.min(close, open)
float ph = ta.pivothigh(src1, prd, prd)
float pl = ta.pivotlow(src2, prd, prd)
plotshape(ph and showpp, text='H', style=shape.labeldown, color=na, textcolor=color.new(color.red, 0), location=location.abovebar, offset=-prd)
plotshape(pl and showpp, text='L', style=shape.labelup, color=na, textcolor=color.new(color.lime, 0), location=location.belowbar, offset=-prd)
Lstyle = linestyle == 'Dashed' ? line.style_dashed : linestyle == 'Solid' ? line.style_solid : line.style_dotted
//calculate maximum S/R channel zone width
prdhighest = ta.highest(300)
prdlowest = ta.lowest(300)
cwidth = (prdhighest - prdlowest) * ChannelW / 100
var pivotvals = array.new_float(0)
if ph or pl
array.unshift(pivotvals, ph ? ph : pl)
if array.size(pivotvals) > maxnumpp // limit the array size
array.pop(pivotvals)
get_sr_vals(ind) =>
float lo = array.get(pivotvals, ind)
float hi = lo
int numpp = 0
for y = 0 to array.size(pivotvals) - 1 by 1
float cpp = array.get(pivotvals, y)
float wdth = cpp <= lo ? hi - cpp : cpp - lo
if wdth <= cwidth // fits the max channel width?
if cpp <= hi
lo := math.min(lo, cpp)
else
hi := math.max(hi, cpp)
numpp += 1
numpp
var sr_up_level = array.new_float(0)
var sr_dn_level = array.new_float(0)
sr_strength = array.new_float(0)
find_loc(strength) =>
ret = array.size(sr_strength)
for i = ret > 0 ? array.size(sr_strength) - 1 : na to 0 by 1
if strength <= array.get(sr_strength, i)
break
ret := i
ret
ret
check_sr(hi, lo, strength) =>
ret = true
for i = 0 to array.size(sr_up_level) > 0 ? array.size(sr_up_level) - 1 : na by 1
//included?
if array.get(sr_up_level, i) >= lo and array.get(sr_up_level, i) <= hi or array.get(sr_dn_level, i) >= lo and array.get(sr_dn_level, i) <= hi
if strength >= array.get(sr_strength, i)
array.remove(sr_strength, i)
array.remove(sr_up_level, i)
array.remove(sr_dn_level, i)
ret
else
ret := false
ret
break
ret
var sr_lines = array.new_line(11, na)
var sr_labels = array.new_label(11, na)
for x = 1 to 10 by 1
rate = 100 * (label.get_y(array.get(sr_labels, x)) - close) / close
label.set_text(array.get(sr_labels, x), text=str.tostring(label.get_y(array.get(sr_labels, x))) + '(' + str.tostring(rate, '#.##') + '%)')
label.set_x(array.get(sr_labels, x), x=bar_index + labelloc)
label.set_color(array.get(sr_labels, x), color=label.get_y(array.get(sr_labels, x)) >= close ? color.red : color.lime)
label.set_textcolor(array.get(sr_labels, x), textcolor=label.get_y(array.get(sr_labels, x)) >= close ? color.white : color.black)
label.set_style(array.get(sr_labels, x), style=label.get_y(array.get(sr_labels, x)) >= close ? label.style_label_down : label.style_label_up)
line.set_color(array.get(sr_lines, x), color=line.get_y1(array.get(sr_lines, x)) >= close ? resistancecolor : supportcolor)
if ph or pl
//because of new calculation, remove old S/R levels
array.clear(sr_up_level)
array.clear(sr_dn_level)
array.clear(sr_strength)
//find S/R zones
for x = 0 to array.size(pivotvals) - 1 by 1
= get_sr_vals(x)
if check_sr(hi, lo, strength)
loc = find_loc(strength)
// if strength is in first maxnumsr sr then insert it to the arrays
if loc < maxnumsr and strength >= min_strength
array.insert(sr_strength, loc, strength)
array.insert(sr_up_level, loc, hi)
array.insert(sr_dn_level, loc, lo)
// keep size of the arrays = 5
if array.size(sr_strength) > maxnumsr
array.pop(sr_strength)
array.pop(sr_up_level)
array.pop(sr_dn_level)
for x = 1 to 10 by 1
line.delete(array.get(sr_lines, x))
label.delete(array.get(sr_labels, x))
for x = 0 to array.size(sr_up_level) > 0 ? array.size(sr_up_level) - 1 : na by 1
float mid = math.round_to_mintick((array.get(sr_up_level, x) + array.get(sr_dn_level, x)) / 2)
rate = 100 * (mid - close) / close
array.set(sr_labels, x + 1, label.new(x=bar_index + labelloc, y=mid, text=str.tostring(mid) + '(' + str.tostring(rate, '#.##') + '%)', color=mid >= close ? color.red : color.lime, textcolor=mid >= close ? color.white : color.black, style=mid >= close ? label.style_label_down : label.style_label_up))
array.set(sr_lines, x + 1, line.new(x1=bar_index, y1=mid, x2=bar_index - 1, y2=mid, extend=extend.both, color=mid >= close ? resistancecolor : supportcolor, style=Lstyle, width=linewidth))
f_crossed_over() =>
ret = false
for x = 0 to array.size(sr_up_level) > 0 ? array.size(sr_up_level) - 1 : na by 1
float mid = math.round_to_mintick((array.get(sr_up_level, x) + array.get(sr_dn_level, x)) / 2)
if close <= mid and close > mid
ret := true
ret
ret
f_crossed_under() =>
ret = false
for x = 0 to array.size(sr_up_level) > 0 ? array.size(sr_up_level) - 1 : na by 1
float mid = math.round_to_mintick((array.get(sr_up_level, x) + array.get(sr_dn_level, x)) / 2)
if close >= mid and close < mid
ret := true
ret
ret
alertcondition(f_crossed_over(), title='Resistance Broken', message='Resistance Broken')
alertcondition(f_crossed_under(), title='Support Broken', message='Support Broken')
RSI Divergence (Regular + Hidden, @darshakssc)This indicator detects regular and hidden divergence between price and RSI, using confirmed swing highs and swing lows (pivots) on both series. It is designed as a visual analysis tool, not as a signal generator or trading system.
The goal is to highlight moments where price action and RSI momentum move in different directions, which some traders study as potential early warnings of trend exhaustion or trend continuation. All divergence signals are only drawn after a pivot is fully confirmed, helping to avoid repainting.
The script supports four divergence types:
Regular Bullish Divergence
Regular Bearish Divergence
Hidden Bullish Divergence
Hidden Bearish Divergence
Each type is drawn with a different color and labeled clearly on the chart.
Core Concepts Used
1. RSI (Relative Strength Index)
The script uses standard RSI, calculated on a configurable input source (default: close) and length (default: 14).
RSI is treated purely as a momentum oscillator – the script does not enforce oversold/overbought interpretations.
2. Pivots / Swings
The indicator defines swing highs and swing lows using ta.pivothigh() and ta.pivotlow():
A swing high forms when a bar’s high is higher than a specified number of bars to the left and to the right.
A swing low forms when a bar’s low is lower than a specified number of bars to the left and to the right.
The same pivot logic is applied to both price and RSI.
Because pivots require “right side” bars to form, the indicator:
Waits for the full pivot to be confirmed (no forward-looking referencing beyond the rightBars parameter).
Only then considers that pivot for divergence detection.
This helps prevent repainting of divergence signals.
How Divergence Is Detected
The script always uses the two most recent confirmed pivots for both price and RSI. It tracks:
Last two swing lows in price and RSI
Last two swing highs in price and RSI
Their pivot bar indexes and values
A basic minimum distance filter between the pivots (in bars) is also applied to reduce noise.
1. Regular Bullish Divergence
Condition:
Price makes a lower low (LL) between the last two lows
RSI makes a higher low (HL) over the same two pivot lows
The RSI difference between the two lows is greater than or equal to the user-defined minimum (Min RSI Difference)
The two low pivots are separated by at least Min Bars Between Swings
Interpretation:
Some traders view this as bearish momentum weakening while price prints a new low. The script only marks this structure; it does not assume any outcome.
On the chart:
Drawn between the previous and current price swing lows
Labeled: “Regular Bullish”
Color: Green (by default in the script)
2. Regular Bearish Divergence
Condition:
Price makes a higher high (HH) between the last two highs
RSI makes a lower high (LH) over the same two pivot highs
RSI difference exceeds Min RSI Difference
Pivots are separated by at least Min Bars Between Swings
Interpretation:
Some traders see this as bullish momentum weakening while price prints a new high. Again, the indicator simply highlights this divergence.
On the chart:
Drawn between the previous and current price swing highs
Labeled: “Regular Bearish”
Color: Red
3. Hidden Bullish Divergence
Condition:
Price makes a higher low (HL) between the last two lows
RSI makes a lower low (LL) over the same two lows
RSI difference exceeds Min RSI Difference
Pivots meet the minimum distance requirement
Interpretation:
Some traders interpret hidden bullish divergence as a potential trend continuation signal within an existing uptrend. The indicator does not classify trends; it just tags the pattern when price and RSI pivots meet the conditions.
On the chart:
Drawn between the previous and current price swing lows
Labeled: “Hidden Bullish”
Color: Teal
4. Hidden Bearish Divergence
Condition:
Price makes a lower high (LH) between the last two highs
RSI makes a higher high (HH) over those highs
RSI difference exceeds Min RSI Difference
Pivots meet the minimum distance filter
Interpretation:
Some traders associate hidden bearish divergence with potential downtrend continuation, but again, this script only visualizes the structure.
On the chart:
Drawn between the previous and current price swing highs
Labeled: “Hidden Bearish”
Color: Orange
Inputs and Settings
1. RSI Settings
RSI Source – Price source for RSI (default: close).
RSI Length – Period for RSI calculation (default: 14).
These control the responsiveness of the RSI. Shorter lengths may show more frequent divergence; longer lengths smooth the signal.
2. Swing / Pivot Settings
Left Swing Bars (leftBars)
Right Swing Bars (rightBars)
These define how strict the pivot detection is:
Higher values → fewer, more significant swings
Lower values → more swings, more signals
Because the script uses ta.pivothigh / ta.pivotlow, a pivot is only confirmed once rightBars candles have closed after the candidate bar. This is an intentional design to reduce repainting and make pivots stable.
3. Divergence Filters
Min Bars Between Swings (Min Bars Between Swings)
Requires a minimum bar distance between the two pivots used to form divergence.
Helps avoid clutter from pivots that are too close to each other.
Min RSI Difference (Min RSI Difference)
Requires a minimum absolute difference between RSI values at the two pivots.
Filters out very minor changes in RSI that may not be meaningful.
4. Visibility Toggles
Show Regular Divergence
Show Hidden Divergence
You can choose to display:
Both regular and hidden divergence, or
Only regular divergence, or
Only hidden divergence
This is useful if you prefer to focus on one type of structure.
5. Alerts
Enable Alerts
When enabled, the script exposes four alert conditions:
Regular Bullish Divergence Confirmed
Regular Bearish Divergence Confirmed
Hidden Bullish Divergence Confirmed
Hidden Bearish Divergence Confirmed
Each alert fires after the corresponding divergence has been fully confirmed based on the pivot and bar confirmation logic. The script does not issue rapid or intrabar signals; it uses confirmed historical conditions.
You can set these in the TradingView Alerts dialog by choosing this indicator and selecting the desired condition.
Visual Elements
On the main price chart, the indicator:
Draws a line between the two price pivots involved in the divergence.
Adds a small label at the latest pivot, describing the divergence type.
Colors are used to differentiate divergence categories (Green/Red/Teal/Orange).
This makes it easy to visually scan the chart for zones where price and RSI have diverged.
What to Look For (Analytical Use)
This indicator is intended as a visual helper, especially when:
You want to quickly see where price made new highs or lows while RSI did not confirm them in the same way.
You are studying momentum exhaustion, shifts, or continuation using RSI divergence as one of many tools.
You want to compare divergence occurrences across different timeframes or instruments.
Important:
The indicator does not tell you when to enter or exit trades.
It does not rank or validate the “quality” of a divergence.
Divergence can persist or fail; it is not a guarantee of reversal or continuation.
Many traders combine divergence analysis with:
Higher timeframe context
Trend filters (moving averages, structure)
Support/resistance zones or liquidity areas
Volume, structure breaks, or other confirmations
Disclaimer
This script is provided for educational and analytical purposes only.
It does not constitute financial advice, trading advice, or investment recommendations.
No part of this indicator is intended to suggest, encourage, or guarantee any specific trading outcome.
Users are solely responsible for their own decisions and risk management.
The Operator Schedule (Daily/Repeating) - Time-Based AlertsKKRESULT PLAYBOOK SUCCES FORMULA
DAILY ROUTINE — THE OPERATOR SCHEDULE
• 5 AM wake-up. (5-6hrs)
• Pre-workout meal.
• Boxing or conditioning.
• Fuel + hydration.
• Morning silence.
• Chart prep.
• Trade 9:30 AM – 3 PM.
• Journal.
• Shutdown routine to reset. A consistent routine builds a consistent trader.
• Edit YouTube Video
• 12 PM Fuel + hydration
Hull MA Multi-Time Frame 30 minutesA Hull Moving Average (HMA) plotted on a fixed 30-minute timeframe gives a smooth, lag-free trend indication by filtering out noise.
When multiple HMAs of varying lengths converge near the lower side, it signals bullish accumulation, suggesting that sellers are exhausted and buyers are stepping in.
Conversely, when HMAs form a bouquet or cluster near the top, it indicates distribution or weakening momentum, signaling a potential bearish reversal.
In essence, HMA alignment and convergence act as a visual gauge of trend strength and turning points in market sentiment.
Multi-Timeframe Stochastic (4x) z Podświetlaniem - PawelA script that provides information when most of the stocks are in the overbought or oversold zone.
Liquidity Sweep & Reversal MapLiquidity Sweep & Reversal Map (LSRM) is a visual tool designed to help traders study how price interacts with key liquidity areas such as daily highs, daily lows, previous-day levels, and potential sweep zones. Its purpose is to map structure, highlight volatility around major reference points, and visualize how price behaves after taking liquidity.
This indicator does not attempt to predict market direction. It simply identifies conditions where price has interacted with a known reference level and marks that interaction for user analysis.
🔍 What This Indicator Shows
1. Key Liquidity Reference Levels
The script automatically draws and updates the following levels:
TH — Today’s High
TL — Today’s Low
PDH — Previous Day High
PDL — Previous Day Low
These levels are widely monitored by many traders and can be helpful when studying liquidity behavior and intraday volatility.
2. Liquidity Sweeps
A liquidity sweep occurs when:
Price briefly moves beyond a major high or low
And then closes back within the prior range
The indicator marks detected sweep interactions with:
BS (Bullish Sweep) when liquidity is taken below a low
SS (Bearish Sweep) when liquidity is taken above a high
A sweep only appears after the bar has closed, helping users analyze completed price structure.
3. Optional Sweep Zones
When enabled, the tool draws a shaded zone between:
The swept wick
The reference level
This can help highlight areas where liquidity was taken.
4. Volume & Candle Filters
The indicator includes optional filters such as:
Relative volume spikes
Strong candle body requirement
These filters are provided only to refine the visual highlight of sweeps; they do not constitute trading signals.
🎛 Customization
Users can configure:
Instrument presets
Sweep buffers
Volume sensitivity
Line visibility and thickness
Label display
Zone visibility
All settings are optional and intended for chart annotation only.
⚠️ Important Notes
This tool is not a trading system, signal generator, or strategy.
It does not provide buy/sell advice or predict future price movement.
All markings are visual aids for chart study and structural analysis only.
Users should rely on their own judgment and independent analysis when making trading decisions.
Vince/Williams Market Internals SuiteThis indicator is a powerhouse combination of three distinct market internal strategies developed by Ralph Vince and Larry Williams. Instead of using three separate scripts to monitor market health, this tool consolidates them into a single dashboard that analyzes NYSE "New Lows" data to detect structural rot, capitulation, and crash risks.
The first component is the Volatility Vulnerability monitor, which identifies when the market structure is decaying. It looks for an extended period where the number of New Lows fails to drop to negligible levels. If you see an Orange Circle while price is above the 50 SMA, it is a major warning that the uptrend is hollow and prone to a crash. Conversely, a Blue Circle below the 50 SMA suggests the weakness is already priced in, offering a contrarian entry signal.
The second component is the Selling Climax signal. This identifies moments of pure terror where New Lows hit extreme levels (default 20%). The script marks these panic days with Orange Diamonds, but the real value is the Green Diamond that appears immediately when the panic subsides, often signaling a sharp V-bottom.
Finally, the Bloodbath Rule runs in the background as a defensive filter. When the background turns red (marked by a Red Cross), it means New Lows have breached the "danger" threshold (default 4%). During these periods, internal selling pressure is accelerating, and you should strictly avoid entering new long positions until the background clears.
Note: This script relies on broad market data (ADVN/DECN/LOWN) and works best on Daily timeframes.
Double RSI With Color Fill5RSI & 8RSi for intraday. Buy when 5RSI crosses down with 8RSI and Sell if 5RSI crosses above 8RSI.
Simple VP Shape DetectorSimple VP Shape Detector is a lightweight Pine Script tool designed to help traders quickly identify the four major Volume Profile shapes commonly used in orderflow and auction-market theory:
D-Shape (Balanced Profile)
P-Shape (Short-Covering / Buyer-Dominant)
B-Shape (Long-Liquidation / Seller-Dominant)
Thin Profile (Trend Profile)
This indicator uses candle statistics (range, body size, volume distribution approximation, and directional movement) to estimate the underlying shape of the volume profile when the full Volume Profile tool is not available.
✔️ What this indicator does
Analyzes recent bars to estimate volume concentration vs. price movement
Flags possible VP shapes using simple logic
Displays labels above/below candles showing:
“D” → Balanced
“P” → Buyer-heavy
“B” → Seller-heavy
“T” → Trending / Thin profile
Helps traders quickly identify auction conditions
✔️ Why this is useful
Volume Profile tools require premium data or heavy visual processing.
This script provides a simple, fast, CPU-light alternative that still captures the essential behavior of profile shapes.
✔️ How shapes are detected
D-Shape: small directional movement + larger body clustering
P-Shape: strong upward move + volume weighted to upper half
B-Shape: strong downward move + volume weighted to lower half
Thin: long range candles with little internal consolidation
⚠️ Disclaimer
This script is an approximation. It does NOT replace full Volume Profile tools.
It is designed as an educational / supplemental tool for market structure analysis.
Percentage Distance from 200-Week SMA200-Week SMA % Distance Oscillator (Clean & Simple)
This lightweight, no-nonsense indicator shows how far the current price is from the classic 200-week Simple Moving Average, expressed as a percentage.
Key features:
• True percentage distance: (Price − 200w SMA) / 200w SMA × 100
• Auto-scaling oscillator (no forced ±100% range → the line actually moves and looks alive)
• Clean zero line
• +10% overbought and −10% oversold levels with subtle background shading
• Real-time table showing the exact current percentage
• Small label on the last bar for instant reading
• Alert conditions when price moves >10% above or below the 200-week SMA
Why 200-week SMA?
Many legendary investors and hedge funds (Stan Druckenmiller, Paul Tudor Jones, etc.) use the 200-week SMA as their ultimate long-term trend anchor. Being +10% or more above it has historically signaled extreme optimism, while −10% or lower has marked deep pessimism and generational buying opportunities.
Perfect for Bitcoin, SPX, gold, individual stocks – works on any timeframe (looks especially good on daily and weekly charts).
Open-source • No repainting • Minimalist & fast
Enjoy and trade well!
Sector Performance (2x12 Grid, labeled)Sector Performance Dashboard that tracks short-term and multi-interval returns for 24 major U.S. market ETFs. It renders a clean, color-coded performance grid directly on the chart, making sector rotation and broad-market strength/weakness easy to read at a glance.
The dashboard covers t wo full rows of liquid U.S. sector and thematic ETFs, including:
Row 1 (Core Market + GICS sectors)
SPY, QQQ, IWM, XLF, XLE, XLRE, XLY, XLU, XLP, XLI, XLV, XLB
Row 2 (Extended industries / themes)
XLF, XBI, XHB, CLOU, XOP, IGV, XME, SOXX, DIA, KRE, XLK, VIX (VX1!)
Key features include:
Time-interval selector (1–60 min, 1D, 1W, 1M, 3M, 12M)
Automatic rate-of-return calculation with inside/outside-bar detection
Two-row, twelve-column grid with dynamic layout anchoring (top/middle/bottom + left/center/right)
Uniform white text for clarity, while inside/outside candles retain custom colors
Adaptive transparency rules (heavy/avg/light) based on magnitude of % change
Ticker label normalization (cleans up prefixes like “CBOE_DLY:”)
Market Breadth Decision HelperMarket Breadth Decision Helper (NYSE/NASDAQ VOLD, ADD, TICK)
Combines NYSE VOLD, NASDAQ VOLD (VOLDQ), NYSE/NASDAQ ADD, and TICK into a single intraday dashboard for tactical bias and risk management.
Tiered pressure scale (sign shows direction, abs(tier) shows intensity): 0 = Neutral, 1 = Mild, 2 = Strong, 3 = Severe, 4 = Panic. On-chart legend makes this explicit.
Table view highlights value, tier, bull/bear point contributions, and notes (PANIC, OVERRIDE, DIVERGENCE). VOLD and ADD panic trigger “stand down”; VOLD ±2 triggers bull/bear overrides; NYSE vs NASDAQ ADD divergence triggers “scalp only.”
Bull/bear points: VOLD 2 pts, ADD NYSE 2 pts, ADD NASDAQ 1 pt, TICK 1 pt. ≥3 pts on a side lifts that side’s multiplier to 1.5. Bias flips Bullish/Bearish only if a side leads and has ≥2 pts; otherwise Neutral.
Breadth modes: PANIC_NO_TRADE → DIVERGENCE_SCALP_ONLY → VOLD_OVERRIDE_BULL/BEAR → NORMAL/NO_EDGE.
Intraday context: tracks current session day_high / day_low for the chart symbol.
JSON/Alert export (optional) sends raw values plus *_tier and *_tier_desc labels (NEUTRAL/MILD/STRONG/SEVERE/PANIC) with sign/magnitude hints, so agents/bots never have to guess what “1 vs 2 vs 3 vs 4” mean.
Customizable bands for VOLD/ADD/TICK, table styling, label placement, and dashboard bias input to align with higher-timeframe context.
Best use
Quick read on internal participation and pressure magnitude.
Guardrails: respect PANIC and overrides; treat divergence as “scalp only.”
Pair with your strategy entries; let breadth govern when to press, scale back, or stand down.
Symbols (defaults)
VOLD (NYSE volume diff), VOLDQ (NASDAQ volume diff), ADD (NYSE), ADDQ (NASDAQ), TICK (NYSE). Adjust in Inputs as needed.
Alerts
Panic, divergence, strong bullish/bearish breadth. Enable JSON export to feed algo/agent workflows.
🔰BGL Algo Break out and Trend Indicator publicdesigned for public use no charges identifying chart trends
EMA Trend Alignment (10/20/50) with MTF & SignalsBullish Crossovers 10>20>50 and Bearish Crossover 10<20<50






















