10/21 EMA + 50/200 Daily SMAAll four relevant moving averages in one script to allow you to add move indicators.
Indicadores de Banda
SHALOM TRADING HUB – CPR Camarilla & MASHALOM TRADING HUB – CPR Camarilla & MA (v4)
All-in-One Intraday & Swing Toolkit
Daily CPR (Prev Day), Weekly/Monthly Pivots, Prev Day/Week/Month High–Low, EMA/SMA pack, and Camarilla (H1–H4 & L1–L4). Plus Tomorrow CPR preview for next-session planning. 🔥
Features
Daily CPR: TC / PP / BC from previous day (value area & bias).
Floor Pivots: Daily/Weekly/Monthly R1–R4, S1–S4.
Previous High/Low: PDH/PDL, PWH/PWL, PMH/PML lines for breakout/mean-revert reads.
Camarilla Levels: H1–H4 & L1–L4 (popular 1.1 factor variant).
Moving Averages: EMA(9/20/50/100/200) & SMA(9/20/50/100/200) toggles.
Tomorrow CPR (Preview): Next session Pivot / BC / TC / R1 / S1 (D/W/M selectable).
Inputs (Settings)
Number of Daily/Weekly/Monthly pivots – show last N periods.
Show toggles – Daily CPR, Weekly/Monthly pivots, Prev H/L, Camarilla, Inner Camarilla, EMA/SMA.
Tomorrow CPR Type – D / W / M.
MA Lengths – fully customizable.
How to Use (Quick)
Trend bias: Price vs. CPR band & 20/50/200 MA stack.
Value zone: Inside TC–BC → balance; clean break & hold outside → trend continuation.
Reaction zones: Camarilla H3/L3 = bounce areas; H4/L4 = breakout/ breakdown lines.
Higher timeframe confluence: Add Weekly/Monthly pivots for swing levels.
Best Practices
Works on any timeframe; intraday (3–15m) recommended for CPR action.
Lines are derived using security(..., lookahead_on) on previous completed period → no forward repainting of those levels.
If too many lines: reduce “Number of … pivots” or turn off inner Camarilla/extra S/R.
Aidous IndicatorAidous Indicator – Multi-Framework Trend & Liquidity Suite
The Aidous Indicator is a comprehensive, multi-layered technical analysis tool built for traders seeking precision, adaptability, and clarity across all timeframes. It combines several advanced methodologies into a single, cohesive framework that dynamically adjusts to market conditions.
🔧 Key Features
Adaptive Trend Detection
Utilizes a custom momentum-weighted smoothing algorithm enhanced by volatility and strength filters (ATR, ADX) to identify reliable trend shifts.
Trade Management System
Automatically plots entry, stop-loss, and five take-profit levels based on dynamic volatility metrics, with real-time updates and visual cues.
Liquidity Line Extension
Tracks volume at key price levels and extends lines when price interacts with previously identified zones, helping visualize market interest.
Support & Resistance Zones
Detects swing highs/lows and plots non-overlapping zones with optional bilingual labeling for broader accessibility.
Fibonacci Projection Tool
Integrates ZigZag pivots to project Fibonacci levels with customizable display options, including value and percentage formats.
Linear Regression Channel
Automatically adjusts lookback periods based on timeframe and plots trend channels with breakout detection and directional labeling.
Parabolic SAR Overlay
Optional PSAR component for additional trend confirmation, plotted with intuitive color coding.
Secondary Buy/Sell Signal Engine
A custom supertrend logic enhanced by EMA crossover validation to highlight high-probability trade entries.
🧠 How It Works
The indicator is built using modular logic and timeframe-aware parameters. It leverages:
Custom smoothing and momentum calculations
Volatility and volume filters
Dynamic plotting of trade zones and trend signals
Visual enhancements for clarity and usability
Real-time alerts for actionable signals
This tool is suitable for scalping, intraday, swing, and long-term strategies, offering traders a versatile and visually rich experience.
High volume bar by VibieHigh Volume Bar with Extended vPOC (Aggregation Enabled)
🧠 Concept
This indicator is designed to detect institutional activity and large traders by using statistical volume analysis and identifying key intrabar liquidity levels.
It applies Z-Score volume analysis to highlight unusually high volume candles and marks the Volume Point of Control (vPOC) inside each detected bar — the price level where the most volume was transacted.
⸻
⚙️ How It Works
1. Z-Score Volume Analysis
• The indicator calculates how far current volume deviates from its historical average using standard deviations (Z-Score).
• When the Z-Score exceeds the user-defined threshold, the candle is flagged as a High Volume Bar (HVB).
2. Multi-Exchange Aggregation
• Volumes from Binance, Bybit, and Coinbase can be aggregated into a composite volume metric.
• This provides a broader and more accurate market perspective, minimizing anomalies from individual exchanges.
3. Candle Coloring
• Bullish HVB → entire candle (body + wicks) is colored blue.
• Bearish HVB → entire candle is colored red.
• This makes large volume events immediately visible on the chart.
4. vPOC Detection
• The script examines a lower timeframe (e.g., 1 minute) within the HVB to find the price level with the highest traded volume.
• A horizontal line is drawn at that price and can be extended for multiple bars, marking a short-term liquidity zone that often acts as support or resistance.
⸻
🧭 How to Use
• vPOC levels frequently act as liquidity magnets and are often retested after the HVB appears.
• Bullish HVB + vPOC below current price = potential long entry zone.
• Bearish HVB + vPOC above price = potential short entry zone.
• Useful for identifying institutional absorption, stop runs, or hidden accumulation/distribution.
⸻
🌟 Why It’s Original and Useful
• Combines statistical volume analysis (Z-Score) with intrabar volume profiling.
• Aggregates multiple exchanges for broader accuracy.
• Offers precise liquidity levels that classic indicators don’t provide.
• Especially valuable for advanced traders looking for institutional footprints.
f.aYou can use it for Dow Jones as well. For gold at the 4:30 timeframe, you can occasionally enter with confirmation from liquidity and numeric signals—just follow the bars until you reach the target.
Euro Area vs US10YThe Euro Area GDP-Weighted Yield vs US10Y Spread is a macroeconomic indicator designed for forex traders and institutional investors who want to monitor the fundamental interest rate differential between the Eurozone and the United States. This tool aggregates sovereign bond yields from the major Eurozone member states using a weighted methodology based on outstanding government debt, providing a comprehensive view of the Euro Area’s fixed income market dynamics.
This indicator calculates a composite 10-year government bond yield for the Eurozone by combining data from seven major member countries: Germany, France, Italy, Spain, Netherlands, Belgium, and Austria. The weights are based on the proportion of government debt outstanding in each country, reflecting the actual composition of the European sovereign bond market rather than just GDP size.
The indicator then compares this Euro Area weighted yield against the US 10-Year Treasury yield (US10Y), producing a yield spread that serves as a powerful leading indicator for EUR/USD price movements.
9:30 USA OPENEasy if it go up it will turn green and you can lng if it goes down it will turn red and you can short
MACD / AO Alineación (V21) PublicA long or short indicator for any timeframe. It's important to consider volatility and ADX to find the most appropriate momentum. There are also other details to consider.
POPS 20-50-200 Color🎯 Color Logic
Phase 1 — Trend (20/50 cross):
🟢 Green candles: 20-MA is above 50-MA (bullish momentum)
🔴 Red candles: 20-MA is below 50-MA (bearish pressure)
Phase 2 — Market Direction Override (200-MA):
🟢 If price is above 200-MA → overall bullish environment
🔴 If price is below 200-MA → overall bearish environment
(The 200-MA overrides the color, just like ThinkorSwim’s last AssignPriceColor.)
🧠 Trading Tips
Use this on any timeframe (2-min to daily).
When all candles are green → strong uptrend confirmation.
When red below 200-MA → stay defensive or short setups only.
Combine with volume, Fibonacci, or Pops EMA Fan for perfect momentum confirmation.
💎 Pro Pops Tip
If you want to layer signals cleanly, add:
Pops 13-48-200 EMA Fan → to gauge trend strength
Pops Thicc Volume Study → to confirm momentum bursts
Together, they create the “POPS Momentum Stack” — your best friend for finding strong breakouts and clean entries.
Volume Aggregated Spot & Futures -- Crypto (by plyst & more)📊 Volume Aggregated Spot & Futures - Enhanced Edition
🎯 Overview
Advanced volume aggregation indicator that combines spot and perpetual futures volume across the top 10 cryptocurrency exchanges. This enhanced version builds upon the original work by @HALDRO Project with optimized calculations and expanded functionality.
✨ Key Features
- 📈 Real-time aggregated volume from 10 major exchanges (Binance, Bybit, OKX, Coinbase, Bitget, KuCoin, Kraken, MEXC, Gate.io, HTX)
- 🔄 Multiple visualization modes: Volume, Delta, Cumulative Delta, Spot vs Perp analysis, Liquidations, OBV, and MFI
- 💱 Multi-currency support: Display volume in COIN, USD, or EUR
- 🎨 Clean, single-color bar chart showing total cumulative volume
- 📊 Multiple calculation methods: SUM, AVG, MEDIAN, VARIANCE
- 🎯 Separate spot (USDT, USD, USDC, etc.) and perpetual futures (.P contracts) tracking
🔧 Technical Improvements
✓ Corrected MFI formula for accurate money flow calculations
✓ Optimized volume aggregation logic with proper NA handling
✓ Support for 10 exchanges (up from 9)
✓ Streamlined codebase for better performance
✓ Updated perpetual contract naming conventions (.P format)
📖 Usage
Perfect for analyzing total market volume, identifying liquidation events, tracking buyer/seller pressure through delta analysis, and understanding the spot vs futures market dynamics.
🙏 Credits
Original concept and framework by @HALDRO Project. This version includes mathematical corrections, code optimizations, and expanded exchange support.
⚠️ Note
Aggregated volume is calculated from external exchange data using request.security(). Ensure your plan supports the necessary security calls for optimal performance.
Secret strategy[Smartalgo]We are revealing our secret trading strategy through Tradingview indicator
FEATURES
Trend Detection: Automatically identifies trend direction using a smoothed Supertrend (WMA + EMA), with shape markers on trend shifts and color-coded bars for clarity.
snapshot
Rejection Signals: Detects price rejections at the trend line after a user-defined number of consolidation bars; plots ▲/▼ icons to highlight strong continuation setups.
snapshot
Target Projection: On trend confirmation, plots entry, stop-loss (ATR-based), and three dynamic take-profit levels based on customizable
snapshot
multiples.
Dynamic Updates: All levels (entry, SL, TP1–TP3) auto-adjust based on volatility and are labeled in real time on the chart.
Customization: Users can tweak trend parameters, rejection confirmation count, SL/TP ratios, smoothing lengths, and appearance settings.
Alerts: Built-in alerts for trend changes, rejection events, and when TP1, TP2, or TP3 are reached.
Chart Overlay: Plots directly on price chart with minimal clutter and clearly labeled levels for easy trading.
Candle Pattern Detector SMC with Alerts @AshokTrendJust Follow Hammer, Inverted Hammer, Hanging Man, Engulfing, volume adn smc consideration,
Trading the candlestick patterns (Hammer, Inverted Hammer, Hanging Man, Bullish/Bearish Engulfing) with volume confirmation adds an important layer of validation, helping to filter false signals and improve trade success. Here’s how to integrate volume into your strategy:
***
### How to Trade Candlestick Patterns with Volume Confirmation
#### 1. Understand Volume Role
- Volume shows the strength behind price moves:
- Higher volume on a pattern (compared to recent average) indicates strong participation, increasing the pattern’s reliability.
- Low volume may mean weak conviction and higher risk of failure.
#### 2. Volume Confirmation Rules
- Define a volume threshold, for example:
- Current candle’s volume > average volume of last 10 or 20 candles (or a fixed multiplier, e.g., 1.2× average).
- For bullish patterns (Hammer, Inverted Hammer, Bullish Engulfing): confirm with rising volume on pattern candle or next candle.
- For bearish patterns (Hanging Man, Bearish Engulfing): confirm with higher volume on pattern candle indicating strong selling.
#### 3. Entry Signals with Volume
- **Bullish Entry:**
- Signal candle (Hammer, Bullish Engulfing, etc.) appears near support or order block.
- Volume on the signal candle or immediate next candle is higher than average.
- Enter long on confirmation candle or close of signal candle.
- **Bearish Entry:**
- Signal candle (Hanging Man, Bearish Engulfing, etc.) appears near resistance or supply zone.
- Volume on the signal candle or immediate next candle exceeds average.
- Enter short on confirmation candle or close of signal candle.
#### 4. Stop Loss & Targets
- Place stop loss just below (for longs) or above (for shorts) the low/high wick of the signal candle or the order block zone.
- Set take profit based on nearby support/resistance, risk-reward ratio, or a fixed number of candle closes.
#### 5. Avoid Trading Without Volume Confirmation
- Reject candles if volume is below threshold to reduce false signals.
### Summary
Trading candlestick patterns combined with volume confirmation ensures only well-supported setups are taken, improving win rates and reducing noisy or fake signals. Volume adds a critical dimension to the SMC candle patterns for binary or any form of trading.
Would you like me to generate a full Pine Script that integrates volume confirmation with the patterns you requested?
my_strategy_2.0Overview:
This is a high-speed scalping strategy optimized for volatile crypto assets (BTC, ETH, etc.) on timeframes 1m–5m. It combines trend-following SuperTrend with confirmations from MACD, RSI, Bollinger Bands, and volume spikes for precise entries. Focus on quick profits (1–3 ATR) with strict risk control: partial take-profits, stop-loss, and trailing breakeven after the first TP.
Key Signals:
Long: SuperTrend flip up + MACD crossover up + RSI >50 + BB Upper breakout + volume spike + volatility filter (ATR >0.5%).
Short: Similar but downward.
Exits and Risks:
TP: 33% at +1 ATR, 33% at +2 ATR, 34% at +3 ATR (customizable).
SL: Initial at -1 ATR, after TP1 — to breakeven with trailing on BB midline (optional).
Filters: Minimum ATR to avoid flat markets; realistic commissions in backtests.
Recommendations:
Test on 2020–2025 data (out-of-sample 2024+). Expected Win Rate ~55%, Profit Factor >1.8, Drawdown <10%. Ideal for 1–2% risk per trade. Not for beginners — use paper trading.
Disclaimer: Past results do not guarantee future performance. Trade at your own risk.
(Pine v6 code, ready for publication. Author: gopog777 with expert fixes.)
Nemesis Strategy MLWinning That's all I know
Years of research been done to this strategy It's based on algorithm that detects where the markets are going Works on crypto this strategy his excellent indicators and it can generate a lot of money if you know what you are doing and depending on the fees of the exchanges as well So be smart and be kind God bless you all
悟隐高阶战法//@version=5
indicator("悟隐高阶战法", shorttitle='HT', overlay=true, max_labels_count=500, max_bars_back=5000)
// 输入参数
count_bull = input.int(3, title='非连续阳线数量', group='设置')
count_bear = input.int(3, title='非连续阴线数量', group='设置')
show_points = input.bool(true, title='显示高低点')
show_lines = input.bool(true,title = '显示线条')
max_points = input.int(200, title='最大点数')
line_color = input.color(color.purple, "连线颜色")
line_width = input.int(2, "线宽", minval=1, maxval=4)
h_color=input.color(color.red,title = 'H点颜色')
h_trs=input.float(80,title = 'h点透明度')
l_color=input.color(color.green,title = 'L点颜色')
l_trs=input.float(80,title = 'L点透明度')
// 警报设置
enable_alerts = input.bool(true, title='启用警报', group='警报设置')
show_signals = input.bool(true, title='显示BUY/SELL标记', group='信号显示设置')
signal_size = input.string('normal', title='信号标记大小', options= , group='信号显示设置')
signal_distance = input.float(0.1, title='信号标记距K线距离(%)', minval=0.05, maxval=0.5, group='信号显示设置')
// 各信号显示开关
show_signal_yyx = input.bool(true, title='显示看跌【阴阳阴】', group='信号开关')
show_signal_ayy = input.bool(true, title='显示看涨【阳阴阳】', group='信号开关')
show_signal_bull_1v2 = input.bool(true, title='显示看涨【一大于二】', group='信号开关')
show_signal_bear_1v2 = input.bool(true, title='显示看跌【一大于二】', group='信号开关')
show_signal_bear_2v2 = input.bool(true, title='显示看跌【二大于二】', group='信号开关')
show_signal_bull_2v2 = input.bool(true, title='显示看涨【二大于二】', group='信号开关')
show_signal_bull_engulf = input.bool(true, title='显示看涨吞没【吞没随阴线】', group='信号开关')
show_signal_bear_engulf = input.bool(true, title='显示看跌【吞没随阳线】', group='信号开关')
// 子条件显示开关
show_signal_bear_2v2_c1 = input.bool(true, title='看跌【二大于二】-条件1', group='子条件开关')
show_signal_bear_2v2_c2 = input.bool(true, title='看跌【二大于二】-条件2', group='子条件开关')
show_signal_bull_2v2_c1 = input.bool(true, title='看涨【二大于二】-条件1', group='子条件开关')
show_signal_bull_2v2_c2 = input.bool(true, title='看涨【二大于二】-条件2', group='子条件开关')
// ------------------ 自定义数据类型 ------------------
type RecordPrice
int bar_index
float open_price
float high_price
float low_price
float close_price
type Extremum
chart.point pt
string kind // "high" 或 "low"
type ABCPoints
float price_a
int index_a
float price_b
int index_b
float price_c
int index_c
string trend_type // "bull" 或 "bear"
bool broken // 是否被突破
// ------------------ 数组初始化 ------------------
var bullRecords = array.new()
var bearRecords = array.new()
var allPoints = array.new() // 存储所有高低点
var label pointLabels = array.new() // 存储绘制的标签,方便清理
var abcBullPoints = ABCPoints.new() // 存储牛市ABC点
var abcBearPoints = ABCPoints.new() // 存储熊市ABC点
// 存储黄线和标签的引用
var line yellowLines = array.new()
var label yellowLabels = array.new()
// 存储绿线和标签的引用
var line greenLines = array.new()
var label greenLabels = array.new()
// 突破状态变量
var bool cBroken = false
var int breakBarIndex = na
var bool fBroken = false
var int breakBarIndexBear = na
// 信号检测变量
var string currentSignal = ""
var string alertMessage = ""
var bool buySignal = false
var bool sellSignal = false
// ------------------ 状态变量 ------------------
var string lastPosition = "none"
var float lastHigh = na
var int lastHighBarIndex = na
var float lastLow = na
var int lastLowBarIndex = na
var float currentHigh = 0.0
var float currentLow = 0.0
var int currentHighBar = 0
var int currentLowBar = 0
// 使用Map存储每根K线是否创新高/新低
var map newHighMap = map.new()
var map newLowMap = map.new()
// 初始化
if barstate.isfirst
currentHigh := high
currentLow := low
currentHighBar := bar_index
currentLowBar := bar_index
// 更新区间高低并标记
bool isNewHigh = false
bool isNewLow = false
if high > currentHigh
currentHigh := high
currentHighBar := bar_index
isNewHigh := true
if low < currentLow
currentLow := low
currentLowBar := bar_index
isNewLow := true
// 存储当前K线的标记
map.put(newHighMap, bar_index, isNewHigh)
map.put(newLowMap, bar_index, isNewLow)
// ------------------ 方法 ------------------
method putRecord(array arr, int bar_idx, float open_pr, float high_pr, float low_pr, float close_pr) =>
newRecord = RecordPrice.new()
newRecord.bar_index := bar_idx
newRecord.open_price := open_pr
newRecord.high_price := high_pr
newRecord.low_price := low_pr
newRecord.close_price := close_pr
array.push(arr, newRecord)
method getRecord(array arr, int index) =>
if array.size(arr) > index and index >= 0
array.get(arr, index)
else
na
method removeRecord(array arr, int index) =>
if array.size(arr) > index and index >= 0
array.remove(arr, index)
method getLastRecord(array arr) =>
int size = array.size(arr)
if size > 0
array.get(arr, size - 1)
else
na
method isIncreasingLastN(array arr, int N) =>
if array.size(arr) < N
false
else
inc = true
for i = array.size(arr) - N to array.size(arr) - 2
prev = arr.getRecord(i)
curr = arr.getRecord(i + 1)
if curr.high_price <= prev.high_price
inc := false
break
inc
method isDecreasingLastN(array arr, int N) =>
if array.size(arr) < N
false
else
dec = true
for i = array.size(arr) - N to array.size(arr) - 2
prev = arr.getRecord(i)
curr = arr.getRecord(i + 1)
if curr.low_price >= prev.low_price
dec := false
break
dec
// 删除所有黄线和标签的方法
deleteYellowLinesAndLabels() =>
// 删除黄线
if array.size(yellowLines) > 0
for i = 0 to array.size(yellowLines) - 1
line l = array.get(yellowLines, i)
if not na(l)
line.delete(l)
array.clear(yellowLines)
// 删除标签
if array.size(yellowLabels) > 0
for i = 0 to array.size(yellowLabels) - 1
label lab = array.get(yellowLabels, i)
if not na(lab)
label.delete(lab)
array.clear(yellowLabels)
// 删除所有绿线和标签的方法
deleteGreenLinesAndLabels() =>
// 删除绿线
if array.size(greenLines) > 0
for i = 0 to array.size(greenLines) - 1
line l = array.get(greenLines, i)
if not na(l)
line.delete(l)
array.clear(greenLines)
// 删除标签
if array.size(greenLabels) > 0
for i = 0 to array.size(greenLabels) - 1
label lab = array.get(greenLabels, i)
if not na(lab)
label.delete(lab)
array.clear(greenLabels)
// 辅助函数:判断K线类型
isBullish(int offset = 0) =>
close > open
isBearish(int offset = 0) =>
close < open
// 辅助函数:获取当前趋势
getCurrentTrend() =>
if lastPosition == "low"
"uptrend" // 上涨趋势
else if lastPosition == "high"
"downtrend" // 下跌趋势
else
"none"
// 辅助函数:检查指定偏移的K线是否创过新高
wasNewHigh(int offset) =>
int targetBarIndex = bar_index - offset
bool result = false
if map.contains(newHighMap, targetBarIndex)
result := map.get(newHighMap, targetBarIndex)
result
// 辅助函数:检查指定偏移的K线是否创过新低
wasNewLow(int offset) =>
int targetBarIndex = bar_index - offset
bool result = false
if map.contains(newLowMap, targetBarIndex)
result := map.get(newLowMap, targetBarIndex)
result
// 辅助函数:检查过去N根K线中是否有创新高
hasNewHigh(int lookback = 3) =>
bool newHigh = false
for i = 0 to lookback - 1
if wasNewHigh(i)
newHigh := true
break
newHigh
// 辅助函数:检查过去N根K线中是否有创新低
hasNewLow(int lookback = 3) =>
bool newLow = false
for i = 0 to lookback - 1
if wasNewLow(i)
newLow := true
break
newLow
// 辅助函数:在过去5根K线中检查阴阳阴组合且有新高(相对于趋势起点)
checkBearishYYXPattern() =>
bool hasPattern = false
bool hasHighInRange = false
// 检查过去5根K线中是否有创新高
for i = 0 to 4
if wasNewHigh(i)
hasHighInRange := true
break
if hasHighInRange
// 检查过去3根K线的阴阳阴组合
if isBearish(0) and isBullish(1) and isBearish(2)
hasPattern := true
hasPattern
// 辅助函数:在过去5根K线中检查阳阴阳组合且有新低(相对于趋势起点)
checkBullishAYYPattern() =>
bool hasPattern = false
bool hasLowInRange = false
// 检查过去5根K线中是否有创新低
for i = 0 to 4
if wasNewLow(i)
hasLowInRange := true
break
if hasLowInRange
// 检查过去3根K线的阳阴阳组合
if isBullish(0) and isBearish(1) and isBullish(2)
hasPattern := true
hasPattern
// 辅助函数:检查是否是看涨吞没形态
isBullishEngulf(int offset = 0) =>
// 当前K线是阳线
isBullish(offset) and
// 吞没前一根K线
high > high and low < low and
// 确保只吞没前一根,不吞没前二根
not (high > high and low < low )
// 辅助函数:检查是否是看跌吞没形态
isBearishEngulf(int offset = 0) =>
// 当前K线是阴线
isBearish(offset) and
// 吞没前一根K线
high > high and low < low and
// 确保只吞没前一根,不吞没前二根
not (high > high and low < low )
// ------------------ 阳线/阴线处理 ------------------
if close > open
bullRecords.putRecord(bar_index, open, high, low, close)
if array.size(bullRecords) > count_bull
bullRecords.removeRecord(0)
if close < open
bearRecords.putRecord(bar_index, open, high, low, close)
if array.size(bearRecords) > count_bear
bearRecords.removeRecord(0)
// 做一个统计 ,记录当时的高价
var int count_long=na
var int count_short=na
var float high_price=na
var float low_price=na
// ------------------ 寻找低点 ------------------
if array.size(bullRecords) >= count_bull and bullRecords.isIncreasingLastN(count_bull) and close > open
if (lastPosition == "none" or lastPosition == "high") and low!=currentLow and bullRecords.first().bar_index >= currentLowBar
lastPosition := "low"
lastLow := currentLow
lastLowBarIndex := currentLowBar
if array.size(allPoints) >= max_points
array.shift(allPoints)
array.push(allPoints, Extremum.new(chart.point.from_index(lastLowBarIndex, lastLow), "low"))
currentHigh := high
currentHighBar := bar_index
count_long:=0
high_price:=high
// ------------------ 寻找高点 ------------------
if array.size(bearRecords) >= count_bear and bearRecords.isDecreasingLastN(count_bear) and close < open
if (lastPosition == "none" or lastPosition == "low") and high!=currentHigh and bearRecords.first().bar_index >= currentHighBar
lastPosition := "high"
lastHigh := currentHigh
lastHighBarIndex := currentHighBar
if array.size(allPoints) >= max_points
array.shift(allPoints)
array.push(allPoints, Extremum.new(chart.point.from_index(lastHighBarIndex, lastHigh), "high"))
currentLow := low
currentLowBar := bar_index
count_short:=0
low_price:=low
// ------------------ 绘制 ------------------
if barstate.islast and array.size(allPoints) > 1
// 删除旧的标签
for l in pointLabels
label.delete(l)
array.clear(pointLabels)
// 历史折线
if array.size(allPoints) > 2 and show_lines
tmpPts = array.new()
for i = 0 to array.size(allPoints)-2
ex = array.get(allPoints, i)
array.push(tmpPts, ex.pt)
polyline.new(tmpPts, xloc=xloc.bar_index, line_color=line_color, line_width=line_width)
// 最后一段线
if array.size(allPoints) >= 2 and show_lines
ex1 = array.get(allPoints, array.size(allPoints)-2)
ex2 = array.get(allPoints, array.size(allPoints)-1)
line.new(x1=ex1.pt.index, y1=ex1.pt.price, x2=ex2.pt.index, y2=ex2.pt.price,
xloc=xloc.bar_index, color=line_color, width=line_width)
// 高低点标签
if show_points
for i = 0 to array.size(allPoints)-1
ex = array.get(allPoints, i)
label lbl = na
if ex.kind == "low"
lbl := label.new(ex.pt.index, ex.pt.price, text=str.tostring(ex.pt.price),
style=label.style_label_up, color=color.new(color.green,80), textcolor=color.white)
else
lbl := label.new(ex.pt.index, ex.pt.price, text=str.tostring(ex.pt.price),
style=label.style_label_down, color=color.new(color.red,80), textcolor=color.white)
array.push(pointLabels,lbl)
// ------------------ 虚线预测段 ------------------
var line lastDashedLine = na
var label lastDashedLabel = na
if barstate.islast and array.size(allPoints) > 0
lastEx = array.get(allPoints, array.size(allPoints)-1)
if lastEx.kind == "low" and show_lines
if not na(lastDashedLine)
line.delete(lastDashedLine)
lastDashedLine := line.new(lastEx.pt.index, lastEx.pt.price, currentHighBar, currentHigh,
xloc=xloc.bar_index, color=line_color, width=line_width, style=line.style_dashed)
if show_points
if not na(lastDashedLabel)
label.delete(lastDashedLabel)
lastDashedLabel := label.new(lastEx.pt.index, lastEx.pt.price, text='H',
style=label.style_label_down, color=color.new(h_color,h_trs), textcolor=color.white)
if lastEx.kind == "high" and show_lines
if not na(lastDashedLine)
line.delete(lastDashedLine)
lastDashedLine := line.new(lastEx.pt.index, lastEx.pt.price, currentLowBar, currentLow,
xloc=xloc.bar_index, color=line_color, width=line_width, style=line.style_dashed)
if show_points
if not na(lastDashedLabel)
label.delete(lastDashedLabel)
lastDashedLabel := label.new(currentLowBar, currentLow, text='L',
style=label.style_label_up, color=color.new(l_color,l_trs), textcolor=color.white)
// ------------------ 信号检测逻辑 ------------------
// 重置信号
buySignal := false
sellSignal := false
currentSignal := ""
alertMessage := ""
if enable_alerts and bar_index >= 2
// 获取当前趋势
trend = getCurrentTrend()
// 信号1:看跌【阴阳阴】- 上涨趋势中,过去5根K线中有新高且出现阴线-阳线-阴线组合
if show_signal_yyx and trend == "uptrend" and checkBearishYYXPattern()
sellSignal := true
currentSignal := "SELL"
alertMessage := "看跌【阴阳阴】"
// 信号2:看涨【阳阴阳】- 下跌趋势中,过去5根K线中有新低且出现阳线-阴线-阳线组合
if show_signal_ayy and trend == "downtrend" and checkBullishAYYPattern()
buySignal := true
currentSignal := "BUY"
alertMessage := "看涨【阳阴阳】"
// 信号3:看涨【一大于二】- 下跌趋势中创新低,出现阳线,左边2根K至少有一根阴线
if show_signal_bull_1v2 and trend == "downtrend" and isBullish(0) and (isBearish(1) or isBearish(2)) and hasNewLow(3)
// 条件1:阳线实体最高价(收盘价)大于左边2根K实体最高价且实体最低价(开盘价)小于左边2根K实体最低价
condition1 = close > math.max(close , open ) and close > math.max(close , open ) and
open < math.min(close , open ) and open < math.min(close , open )
// 条件2:阳线最高价分别大于左边2根K最高价且最低价分别小于左边2根K最低价
condition2 = high > high and high > high and low < low and low < low
if condition1 or condition2
buySignal := true
currentSignal := "BUY"
alertMessage := "看涨【一大于二】"
// 信号4:看跌【一大于二】- 上涨趋势中,出现阴线,左边2根K至少有一根阳线
if show_signal_bear_1v2 and trend == "uptrend" and isBearish(0) and (isBullish(1) or isBullish(2)) and hasNewHigh(3)
// 条件1:阴线实体最高价(开盘价)大于左边2根K实体最高价且实体最低价(收盘价)小于左边2根K实体最低价
condition1 = open > math.max(close , open ) and open > math.max(close , open ) and
close < math.min(close , open ) and close < math.min(close , open )
// 条件2:阴线最高价分别大于左边2根K最高价且最低价分别小于左边2根K最低价
condition2 = high > high and high > high and low < low and low < low
if condition1 or condition2
sellSignal := true
currentSignal := "SELL"
alertMessage := "看跌【一大于二】"
// 信号5:看跌【二大于二】- 上涨趋势中
if show_signal_bear_2v2 and trend == "uptrend" and bar_index >= 3
// 条件1:连续2根阴线收盘价低于左边2根K线,且4根K线前3根必须有一根创新高(相对于趋势起点)
condition1 = show_signal_bear_2v2_c1 and isBearish(0) and isBearish(1) and
close < close and close < close and close < close and close < close and
(wasNewHigh(1) or wasNewHigh(2) or wasNewHigh(3))
// 条件2:连续2根阳线后再连续2根阴线,2根阴线最低价低于前面2根阳线最低价,最高价大于前面2根阳线最高价,中间2根K必须有一根创新高(相对于趋势起点)
condition2 = show_signal_bear_2v2_c2 and isBearish(0) and isBearish(1) and isBullish(2) and isBullish(3) and
math.min(low, low ) < math.min(low , low ) and
math.max(high, high ) > math.max(high , high ) and
(wasNewHigh(1) or wasNewHigh(2))
if condition1 or condition2
sellSignal := true
currentSignal := "SELL"
alertMessage := "看跌【二大于二】" + (condition1 ? "-条件1" : "") + (condition2 ? "-条件2" : "")
// 信号6:看涨【二大于二】- 下跌趋势中
if show_signal_bull_2v2 and trend == "downtrend" and bar_index >= 3
// 条件1:连续2根阳线收盘价高于左边2根K线,且4根K线前3根必须有一根创新低(相对于趋势起点)
condition1 = show_signal_bull_2v2_c1 and isBullish(0) and isBullish(1) and
close > close and close > close and close > close and close > close and
(wasNewLow(1) or wasNewLow(2) or wasNewLow(3))
// 条件2:连续2根阴线后再连续2根阳线,2根阳线最低价低于前面2根阴线最低价,最高价大于前面2根阴线最高价,中间2根K必须有一根创新低(相对于趋势起点)
condition2 = show_signal_bull_2v2_c2 and isBullish(0) and isBullish(1) and isBearish(2) and isBearish(3) and
math.min(low, low ) < math.min(low , low ) and
math.max(high, high ) > math.max(high , high ) and
(wasNewLow(1) or wasNewLow(2))
if condition1 or condition2
buySignal := true
currentSignal := "BUY"
alertMessage := "看涨【二大于二】" + (condition1 ? "-条件1" : "") + (condition2 ? "-条件2" : "")
// 信号7:看跌【吞没随阴线】- 上涨趋势中阳线吞没前一根K线,阳线后出现阴线,且有一根K创新高
if show_signal_bull_engulf and trend == "uptrend" and bar_index >= 2 and
isBullishEngulf(1) and isBearish(0) and hasNewHigh(3)
sellSignal := true
currentSignal := "SELL"
alertMessage := "看跌【吞没随阴线】"
// 信号8:看涨【吞没随阳线】- 下跌趋势中阴线吞没前一根K线,阴线后出现阳线,且有一根K创新低
if show_signal_bear_engulf and trend == "downtrend" and bar_index >= 2 and
isBearishEngulf(1) and isBullish(0) and hasNewLow(3)
buySignal := true
currentSignal := "BUY"
alertMessage := "看涨【吞没随阳线】"
// ------------------ BUY/SELL标记显示 ------------------
if show_signals
// 根据signal_size设置标记大小
labelSize = switch signal_size
"tiny" => size.tiny
"small" => size.small
"normal" => size.normal
"large" => size.large
"huge" => size.huge
=> size.normal
// 显示BUY信号
if buySignal
label.new(bar_index, low - (high - low) * signal_distance, text="BUY",
style=label.style_label_up, color=color.new(color.green, 0),
textcolor=color.white, size=labelSize, tooltip=alertMessage)
// 显示SELL信号
if sellSignal
label.new(bar_index, high + (high - low) * signal_distance, text="SELL",
style=label.style_label_down, color=color.new(color.red, 0),
textcolor=color.white, size=labelSize, tooltip=alertMessage)
// ------------------ TradingView警报条件 ------------------
// 检查是否有启用的买入/卖出信号(包括子条件)
enabledBuySignals = show_signal_ayy or
(show_signal_bull_1v2 ) or
(show_signal_bull_2v2 and (show_signal_bull_2v2_c1 or show_signal_bull_2v2_c2)) or
show_signal_bear_engulf
enabledSellSignals = show_signal_yyx or
(show_signal_bear_1v2) or
(show_signal_bear_2v2 and (show_signal_bear_2v2_c1 or show_signal_bear_2v2_c2)) or
show_signal_bull_engulf
// 买入信号警报
alertcondition(enable_alerts and enabledBuySignals and buySignal, title="买入信号", message="{{alertMessage}}")
// 卖出信号警报
alertcondition(enable_alerts and enabledSellSignals and sellSignal, title="卖出信号", message="{{alertMessage}}")
// 所有信号的通用警报
alertcondition(enable_alerts and (enabledBuySignals and buySignal or enabledSellSignals and sellSignal), title="所有交易信号",
message="信号类型: {{currentSignal}}, 详情: {{alertMessage}}")
// 具体的信号类型警报
alertcondition(enable_alerts and show_signal_ayy and buySignal and str.contains(alertMessage, "阳阴阳"), title="看涨【阳阴阳】", message="看涨【阳阴阳】")
alertcondition(enable_alerts and show_signal_yyx and sellSignal and str.contains(alertMessage, "阴阳阴"), title="看跌【阴阳阴】", message="看跌【阴阳阴】")
alertcondition(enable_alerts and show_signal_bull_1v2 and buySignal and str.contains(alertMessage, "一大于二"), title="看涨【一大于二】", message="看涨【一大于二】")
alertcondition(enable_alerts and show_signal_bear_1v2 and sellSignal and str.contains(alertMessage, "一大于二"), title="看跌【一大于二】", message="看跌【一大于二】")
alertcondition(enable_alerts and show_signal_bull_2v2 and buySignal and str.contains(alertMessage, "二大于二"), title="看涨【二大于二】", message="看涨【二大于二】")
alertcondition(enable_alerts and show_signal_bear_2v2 and sellSignal and str.contains(alertMessage, "二大于二"), title="看跌【二大于二】", message="看跌【二大于二】")
alertcondition(enable_alerts and show_signal_bull_engulf and sellSignal and str.contains(alertMessage, "吞没随阴线"), title="看涨吞没【吞没随阴线】", message="看涨吞没【吞没随阴线】")
alertcondition(enable_alerts and show_signal_bear_engulf and buySignal and str.contains(alertMessage, "吞没随阳线"), title="看跌【吞没随阳线】", message="看跌【吞没随阳线】")
Advanced Market Trend Analyzer//@version=5
indicator("Advanced Market Trend Analyzer", shorttitle="AMT Analyzer", overlay=true)
// Input parameters
rsi_length = input.int(14, "RSI Length")
ema_fast = input.int(9, "Fast EMA")
ema_slow = input.int(21, "Slow EMA")
volume_ma_length = input.int(20, "Volume MA Length")
overbought = input.int(70, "Overbought Level")
oversold = input.int(30, "Oversold Level")
BIF ASK WITH TREND Price Trend with PercentageBID ASK WITH TREND Price Trend with Percentage SHOW MARKET TREND AND MARKET VOLLUME
king amun king gold**Features:**
- ✓ Ability to enable/disable each indicator individually
- ✓ Colors that change depending on the indicator's direction
- ✓ Different line thicknesses (EMA: thick, SMA: thin)
- ✓ Fully customizable settings
SM OTC style Supply/Demand Zones Lite+//@version=6
indicator("OTC SD MTF Lite+", "OTCSDmtf+", overlay=true, max_boxes_count=200, max_labels_count=200)
// ================= Inputs =================
useH4 = input.bool(true, "Show 4H zones")
useD1 = input.bool(true, "Show 1D zones")
useW1 = input.bool(true, "Show 1W zones")
useM1 = input.bool(false, "Show 1M zones")
baseLen = input.int(2, "Base length (HTF bars)", 1, 5)
wickPctMax = input.float(35.0, "Max wick % in base", 0, 100)
impulseX = input.float(1.5, "Departure body vs ATR (x)", 0.5, 5.0)
atrLen = input.int(14, "ATR length (HTF)")
extendBars = input.int(2000, "Extend bars on chart", 200, 10000)
maxPerTF = input.int(12, "Max zones per TF", 3, 30)
showLegend = input.bool(true, "Show tiny legend (4H/1D/1W/1M)")
onlyNearest = input.bool(false, "Show ONLY nearest zone above/below")
hideOverlapTF = input.bool(true, "Hide overlapping zones within each TF (keep newest)")
showNearestLabels = input.bool(false, "Show distance labels to nearest above/below")
// --- Hard cap for future drawing with xloc.bar_index ---
FUTURE_CAP = 500
// Colors (Demand hues per TF). Supply uses red for contrast.
colH4 = color.new(color.teal, 78)
colD1 = color.new(color.blue, 78)
colW1 = color.new(color.orange, 78)
colM1 = color.new(color.purple, 78)
colSup= color.new(color.red, 78)
// ================= Helpers =================
wickiness(h, l, o, c) =>
rng = math.max(h - l, syminfo.mintick)
topW = h - math.max(o, c)
botW = math.min(o, c) - l
100.0 * (topW + botW) / rng
// Returns: (dTrig, dProx, dDist, sTrig, sProx, sDist)
f_htfSignals(baseBars, wickMax, xImpulse, aLen) =>
float _o = open
float _h = high
float _l = low
float _c = close
float _atr = ta.atr(aLen)
bool ok = true
for i = 1 to baseBars
ok := ok and (wickiness(_h , _l , _o , _c ) <= wickMax)
bool bullDepart = _c > _o and (_c - _o) > xImpulse * _atr
bool bearDepart = _c < _o and (_o - _c) > xImpulse * _atr
float dTrig = 0.0
float dProx = na
float dDist = na
float sTrig = 0.0
float sProx = na
float sDist = na
if ok and bullDepart
float hi = ta.highest(_h, baseBars)
float lo = ta.lowest(_l, baseBars)
dTrig := 1.0
dProx := lo
dDist := hi
if ok and bearDepart
float hi2 = ta.highest(_h, baseBars)
float lo2 = ta.lowest(_l, baseBars)
sTrig := 1.0
sProx := hi2
sDist := lo2
// ================= Pull HTF signals =================
= request.security(syminfo.tickerid, "240", f_htfSignals(baseLen, wickPctMax, impulseX, atrLen))
= request.security(syminfo.tickerid, "D", f_htfSignals(baseLen, wickPctMax, impulseX, atrLen))
= request.security(syminfo.tickerid, "W", f_htfSignals(baseLen, wickPctMax, impulseX, atrLen))
= request.security(syminfo.tickerid, "M", f_htfSignals(baseLen, wickPctMax, impulseX, atrLen))
// ================= Storage per TF =================
var zH4 = array.new_box()
var aH4 = array.new_bool()
var lH4 = array.new_label()
var sH4 = array.new_int() // 1 = Demand, -1 = Supply
var zD1 = array.new_box()
var aD1 = array.new_bool()
var lD1 = array.new_label()
var sD1 = array.new_int()
var zW1 = array.new_box()
var aW1 = array.new_bool()
var lW1 = array.new_label()
var sW1 = array.new_int()
var zM1 = array.new_box()
var aM1 = array.new_bool()
var lM1 = array.new_label()
var sM1 = array.new_int()
// ================= Overlap utils =================
overlap(topA, botA, topB, botB) =>
not (topA < botB or botA > topB)
purgeOverlaps(arrB, arrA, arrL, newTop, newBot) =>
if hideOverlapTF and array.size(arrB) > 0
for i = 0 to array.size(arrB) - 1
if array.get(arrA, i)
box bOld = array.get(arrB, i)
float t = box.get_top(bOld)
float btm = box.get_bottom(bOld)
if overlap(newTop, newBot, t, btm)
box.delete(bOld)
label.delete(array.get(arrL, i))
array.set(arrA, i, false)
// ================= Add zone =================
addZone(arrB, arrA, arrL, arrS, topV, botV, baseColor, isDemand) =>
purgeOverlaps(arrB, arrA, arrL, topV, botV)
int leftX = bar_index - 1
int rightX = bar_index + math.min(extendBars, FUTURE_CAP) // respect +500 cap
box b = box.new(leftX, topV, rightX, botV, xloc=xloc.bar_index, bgcolor=baseColor, border_color=color.new(color.black, 0))
float ly = isDemand == 1 ? topV : botV
st = isDemand == 1 ? label.style_label_down : label.style_label_up
string tagTxt = isDemand == 1 ? "Demand" : "Supply"
label l = label.new(leftX, ly, tagTxt, xloc=xloc.bar_index, style=st, textcolor=color.white, color=color.new(color.black, 0), size=size.tiny)
array.push(arrB, b)
array.push(arrA, true)
array.push(arrL, l)
array.push(arrS, isDemand)
if array.size(arrB) > maxPerTF
box.delete(array.shift(arrB))
array.shift(arrA)
label.delete(array.shift(arrL))
array.shift(arrS)
// ================= Maintain / Invalidate =================
extendAll(arrB, arrA) =>
if array.size(arrB) > 0
for i = 0 to array.size(arrB) - 1
if array.get(arrA, i)
box.set_right(array.get(arrB, i), bar_index + math.min(extendBars, FUTURE_CAP)) // respect +500 cap
invalidate(arrB, arrA, arrL) =>
if array.size(arrB) > 0
for i = 0 to array.size(arrB) - 1
if array.get(arrA, i)
box b = array.get(arrB, i)
float t = box.get_top(b)
float btm = box.get_bottom(b)
// Close outside band → remove
if close > t or close < btm
box.delete(b)
label.delete(array.get(arrL, i))
array.set(arrA, i, false)
// ================= New HTF bar flags (strict booleans) =================
int chH4 = ta.change(time("240"))
int chD1 = ta.change(time("D"))
int chW1 = ta.change(time("W"))
int chM1 = ta.change(time("M"))
bool newBarH4 = useH4 and (not na(chH4)) and (chH4 != 0)
bool newBarD1 = useD1 and (not na(chD1)) and (chD1 != 0)
bool newBarW1 = useW1 and (not na(chW1)) and (chW1 != 0)
bool newBarM1 = useM1 and (not na(chM1)) and (chM1 != 0)
// ================= Create zones on new HTF bar =================
if newBarH4
if d4t > 0 and not na(d4p) and not na(d4d)
addZone(zH4, aH4, lH4, sH4, d4d, d4p, colH4, 1)
if s4t > 0 and not na(s4p) and not na(s4d)
addZone(zH4, aH4, lH4, sH4, s4p, s4d, colSup, -1)
if newBarD1
if d1t > 0 and not na(d1p) and not na(d1d)
addZone(zD1, aD1, lD1, sD1, d1d, d1p, colD1, 1)
if s1t > 0 and not na(s1p) and not na(s1d)
addZone(zD1, aD1, lD1, sD1, s1p, s1d, colSup, -1)
if newBarW1
if w1t > 0 and not na(w1p) and not na(w1d)
addZone(zW1, aW1, lW1, sW1, w1d, w1p, colW1, 1)
if swt > 0 and not na(swp) and not na(swd)
addZone(zW1, aW1, lW1, sW1, swp, swd, colSup, -1)
if newBarM1
if m1t > 0 and not na(m1p) and not na(m1d)
addZone(zM1, aM1, lM1, sM1, m1d, m1p, colM1, 1)
if smt > 0 and not na(smp) and not na(smd)
addZone(zM1, aM1, lM1, sM1, smp, smd, colSup, -1)
// ================= Maintain & Invalidate (every bar) =================
extendAll(zH4, aH4)
extendAll(zD1, aD1)
extendAll(zW1, aW1)
extendAll(zM1, aM1)
invalidate(zH4, aH4, lH4)
invalidate(zD1, aD1, lD1)
invalidate(zW1, aW1, lW1)
invalidate(zM1, aM1, lM1)
// ================= Nearest across all TFs =================
tfNearest(arrB, arrA) =>
int upIdx = -1
int dnIdx = -1
float upDist = 1e10
float dnDist = 1e10
float upBtm = na
float dnTop = na
if array.size(arrB) > 0
for i = 0 to array.size(arrB) - 1
if array.get(arrA, i)
box b = array.get(arrB, i)
float t = box.get_top(b)
float btm = box.get_bottom(b)
if btm >= close
float d = btm - close
if d < upDist
upDist := d
upIdx := i
upBtm := btm
if t <= close
float d2 = close - t
if d2 < dnDist
dnDist := d2
dnIdx := i
dnTop := t
= tfNearest(zH4, aH4)
= tfNearest(zD1, aD1)
= tfNearest(zW1, aW1)
= tfNearest(zM1, aM1)
float upBest = 1e10, dnBest = 1e10
int upArr = -1, upIdxSel = -1, dnArr = -1, dnIdxSel = -1
color upColor = color.new(color.white, 100), dnColor = color.new(color.white, 100)
if (not na(uh4y)) and uh4d < upBest
upBest := uh4d, upArr := 0, upIdxSel := uh4i, upColor := colH4
if (not na(ud1y)) and ud1d < upBest
upBest := ud1d, upArr := 1, upIdxSel := ud1i, upColor := colD1
if (not na(uw1y)) and uw1d < upBest
upBest := uw1d, upArr := 2, upIdxSel := uw1i, upColor := colW1
if (not na(um1y)) and um1d < upBest
upBest := um1d, upArr := 3, upIdxSel := um1i, upColor := colM1
if (not na(dh4y)) and dh4d < dnBest
dnBest := dh4d, dnArr := 0, dnIdxSel := dh4i, dnColor := colH4
if (not na(dd1y)) and dd1d < dnBest
dnBest := dd1d, dnArr := 1, dnIdxSel := dd1i, dnColor := colD1
if (not na(dw1y)) and dw1d < dnBest
dnBest := dw1d, dnArr := 2, dnIdxSel := dw1i, dnColor := colW1
if (not na(dm1y)) and dm1d < dnBest
dnBest := dm1d, dnArr := 3, dnIdxSel := dm1i, dnColor := colM1
// ================= Nearest-only visibility (optional) =================
hideAll(arrB, arrA) =>
if array.size(arrB) > 0
for i = 0 to array.size(arrB) - 1
if array.get(arrA, i)
box.set_bgcolor(array.get(arrB, i), color.new(color.white, 100))
box.set_border_color(array.get(arrB, i), color.new(color.white, 100))
showOne(arrB, arrA, arrS, idx, demColor) =>
if idx >= 0 and idx < array.size(arrB)
if array.get(arrA, idx)
bool isDemand = array.get(arrS, idx) == 1
color c = isDemand ? demColor : colSup
box.set_bgcolor(array.get(arrB, idx), c)
box.set_border_color(array.get(arrB, idx), color.new(color.black, 0))
if onlyNearest
hideAll(zH4, aH4), hideAll(zD1, aD1), hideAll(zW1, aW1), hideAll(zM1, aM1)
if upArr == 0
showOne(zH4, aH4, sH4, upIdxSel, upColor)
if upArr == 1
showOne(zD1, aD1, sD1, upIdxSel, upColor)
if upArr == 2
showOne(zW1, aW1, sW1, upIdxSel, upColor)
if upArr == 3
showOne(zM1, aM1, sM1, upIdxSel, upColor)
if dnArr == 0
showOne(zH4, aH4, sH4, dnIdxSel, dnColor)
if dnArr == 1
showOne(zD1, aD1, sD1, dnIdxSel, dnColor)
if dnArr == 2
showOne(zW1, aW1, sW1, dnIdxSel, dnColor)
if dnArr == 3
showOne(zM1, aM1, sM1, dnIdxSel, dnColor)
// ================= Nearest distance labels (optional) =================
var label nearUp = na
var label nearDn = na
makeNearLabel(y, txt) =>
label.new(bar_index, y, txt, xloc=xloc.bar_index, style=label.style_label_left, color=color.new(color.black, 0), textcolor=color.white, size=size.tiny)
if showNearestLabels
if not na(nearUp)
label.delete(nearUp)
if not na(nearDn)
label.delete(nearDn)
if upArr != -1
box bUp = upArr == 0 ? array.get(zH4, upIdxSel) : upArr == 1 ? array.get(zD1, upIdxSel) : upArr == 2 ? array.get(zW1, upIdxSel) : array.get(zM1, upIdxSel)
float upBtm = box.get_bottom(bUp)
float pctUp = math.round(10000.0 * (upBtm - close) / close) / 100.0
nearUp := makeNearLabel(upBtm, "Nearest Above ~ " + str.tostring(pctUp) + "%")
if dnArr != -1
box bDn = dnArr == 0 ? array.get(zH4, dnIdxSel) : dnArr == 1 ? array.get(zD1, dnIdxSel) : dnArr == 2 ? array.get(zW1, dnIdxSel) : array.get(zM1, dnIdxSel)
float dnTop = box.get_top(bDn)
float pctDn = math.round(10000.0 * (close - dnTop) / close) / 100.0
nearDn := makeNearLabel(dnTop, "Nearest Below ~ " + str.tostring(pctDn) + "%")
// ================= Tiny legend (dots) =================
var table legend = na
if showLegend and na(legend)
legend := table.new(position.top_left, 4, 1)
if showLegend and not na(legend)
table.cell(legend, 0, 0, "● 4H", text_color=color.white, bgcolor=color.new(color.black, 0))
table.cell(legend, 1, 0, "● 1D", text_color=color.white, bgcolor=color.new(color.black, 0))
table.cell(legend, 2, 0, "● 1W", text_color=color.white, bgcolor=color.new(color.black, 0))
table.cell(legend, 3, 0, "● 1M", text_color=color.white, bgcolor=color.new(color.black, 0))
table.cell_set_bgcolor(legend, 0, 0, color.new(color.teal, 70))
table.cell_set_bgcolor(legend, 1, 0, color.new(color.blue, 70))
table.cell_set_bgcolor(legend, 2, 0, color.new(color.orange, 70))
table.cell_set_bgcolor(legend, 3, 0, color.new(color.purple, 70))
Rudra ChakraA readymade template. Helps you to identify trend, momentum at a glance.
Blue dots for +momentum and red for -momentum.
Also the background Green, orange and red indicate the shift in trend. Buy signals indicate more than avg buying in some timeframe.
ATH Line with Date (Editable)Overview:
This indicator draws a continuous horizontal line at the instrument’s All-Time High (ATH) and annotates it with a label that shows the date the ATH was set in dd-mmm-yyyy format. The label is fully configurable (text prefix, side, position, colors, vertical offset), and you can optionally append the ATH price formatted as $ 1.234,56. Built for Pine Script™ v6 and works on any symbol or timeframe.
How it works
• Maintains a running maximum of high.
• Detects the bar where the current ATH occurred and extracts its date.
• Renders a horizontal line extended both sides at the ATH level.
• Places an optional label on the last bar or on the ATH bar.
• Triggers an optional alert when a new ATH is printed.
Inputs
• Line color / width / style – customize the ATH line appearance.
• Show label – toggle label on/off.
• Label text (prefix) – default ATH ►.
• Label text color / background – visual customization for the tag.
• Label side – left or right-anchored label.
• X location – Last bar or ATH bar.
• Label vertical offset (%) – moves the label above/below the line.
• Show price – appends the ATH price in the format $ 1.234,56
Notes & behavior:
• Repainting: The ATH level is stable until a higher high appears. When a new ATH is set, the line and date update accordingly—this is expected behavior.
• The ATH is computed from the chart’s current timeframe/history. If the symbol has limited history on your chart, the ATH reflects only the available data.
• No external libraries; no user data is collected.
Alerts:
• Includes New ATH alert condition. Fire it to be notified when price sets a new all-time high.
Tips:
• Use Last bar placement to keep the label visible at the right edge while scrolling.
• If the label overlaps candles or drawings, add a small positive vertical offset.
Version:
• Pine Script™ v6. Indicator only; no trading signals or orders.
Disclaimer:
For educational purposes only. This script does not constitute financial advice or a recommendation to buy or sell any security. Always do your own research and manage risk appropriately.
3SMA (1H only) by tophengzkyThis script plots three Simple Moving Averages (SMA 10, 20, 50), but they are only visible when the chart timeframe is set to 1 hour (1H).
It helps traders focus on higher timeframe trend direction without cluttering charts on other timeframes.
SMA1 = 10 (white)
SMA2 = 20 (yellow)
SMA3 = 200 (red)
Works only on 1H timeframe
Useful for swing traders and intraday traders who rely on hourly trend confirmation.
why 1 hr only? the only purpose of this is just to know the bias of the market weather it will reverse or it will continue the trend. As long as the price action did not cross this 3 SMA's the trend will continue.
as a trend trader it is very useful this strategy.. make it simple!