OPEN-SOURCE SCRIPT
Telah dikemas kini ✅ VMA Avg ATR + Days to Targets 🎯

1) The trend filter: LazyBear VMA
You implement the well‑known “LazyBear” Variable Moving Average (VMA) from price directional movement (pdm/mdm).
Internally you:
Smooth positive/negative one‑bar moves (pdmS, mdmS),
Turn them into relative strengths (pdiS, mdiS),
Measure their difference/total (iS), and
Normalize that over a rolling window to get a scaling factor vI.
The VMA itself is then an adaptive EMA:
vma := (1 - k*vI) * vma[1] + (k*vI) * close, where k = 1/vmaLen.
When vI is larger, VMA hugs price more; when smaller, it smooths more.
Coloring:
Green when vma > vma[1] (rising),
Red when vma < vma[1] (falling),
White when flat.
Candles are recolored to match.
Why this matters: The VMA color is your trend regime; everything else in the script keys off changes in this color.
2) What counts as a “valid” new trend?
A new trend is valid only when the previous bar was white and the current bar turns green or red:
validTrendStart := vmaColor != color.white and vmaColor[1] == color.white.
When that happens, you start a trend segment:
Save entry price (startPrice = close) and baseline ATR (startATR = ATR(atrLen)).
Reset “extreme” trackers: extremeHigh = high, extremeLow = low.
Timestamp the start (trendStartTime = time).
Effect: You only study / trade transitions out of a flat VMA into a slope. This helps avoid chop and reduces false starts.
3) While the trend is active
On each new bar without a color change:
If green trend: update extremeHigh = max(extremeHigh, high).
If red trend: update extremeLow = min(extremeLow, low).
This tracks the best excursion from the entry during that single trend leg.
4) When the VMA color changes (trend ends)
When vmaColor flips (green→red or red→green), you close the prior segment only if it was a valid trend (started after white). Then you:
Compute how far price traveled in ATR units from the start:
Uptrend ended: (extremeHigh - startPrice) / startATR
Downtrend ended: (startPrice - extremeLow) / startATR
Add that result to a running sum and count for the direction:
totalUp / countUp, totalDown / countDown.
Target checks for the ended trend (no look‑ahead):
T1 uses the previous average ATR move before the just‑ended trend (prevAvgUp/prevAvgDown).
Up: t1Up = startPrice + prevAvgUp * startATR
Down: t1Down = startPrice - prevAvgDown * startATR
T2 is a fixed 6× ATR move from the start (up or down).
You increment hit counters and also accumulate time‑to‑hit (ms from trendStartTime) for any target that got reached during that ended leg.
If T1 wasn’t reached, it counts as a miss.
Immediately initialize the next potential trend segment with the current bar’s startPrice/startATR/extremes and set validTrendStart according to the “white → color” rule.
Important detail: Using prevAvgUp/Down to evaluate T1 for the just‑completed trend avoids look‑ahead bias. The current trend’s performance isn’t used to set its own T1.
5) Running statistics & targets (for the current live trend)
After closing/adding to totals:
avgUp = totalUp / countUp and avgDown = totalDown / countDown are the historical average ATR move per valid trend for each direction.
Current plotted targets (only visible while a valid trend is active and in that direction):
T1 Up: startPrice + avgUp * startATR
T2 Up: startPrice + 6 * startATR
T1 Down: startPrice - avgDown * startATR
T2 Down: startPrice - 6 * startATR
The entry line is also plotted at startPrice when a valid trend is live.
If there’s no history yet (e.g., first trend), avgUp/avgDown are na, so T1 is na until at least one valid trend has closed. T2 still shows (6× ATR).
6) Win rate & time metrics
Win % (per direction):
winUp = hitUpT1 / (hitUpT1 + missUp) and similarly for down.
(This is strictly based on T1 hits vs misses; T2 hits don’t affect Win% directly.)
Average days to hit T1/T2:
The script stores milliseconds from trend start to each target hit, then reports the average in days separately for Up/Down and for T1/T2.
7) The dashboard table (bottom‑right)
It shows, side‑by‑side for Up/Down:
Avg ATR: historical average ATR move per completed valid trend.
🎯 Target 1 / Target 2: the current trend’s price levels (T1 = avgATR×ATR; T2 = 6×ATR).
✅ Win %: T1 hit rate so far.
⏱ Days to T1/T2: average days (from valid trend start) for the targets that were reached.
8) Alerts
“New Trend Detected” when a valid trend starts (white → green/red).
Target hits for the active trend:
Uptrend: separate alerts for T1 and T2 (high >= target).
Downtrend: separate alerts for T1 and T2 (low <= target).
9) Inputs & defaults
vmaLen = 17: governs how adaptive/smooth the VMA is (larger = smoother, fewer trend flips).
atrLen = 14: ATR baseline for sizing targets and normalizing moves.
10) Practical read of the plots
When you see white → green: that bar is your valid entry (trend start).
An Entry Line appears at the start price.
Target lines appear only for the active direction. T1 scales with your historical average ATR move; T2 is a fixed stretch (6× ATR).
The table updates as more trends complete, refining:
The average ATR reach (which resets your T1 sizing),
The win rate to T1, and
The average days it typically takes to hit T1/T2.
Subtle points / edge cases
No look‑ahead: T1 for a finished trend is checked against the prior average (not including the trend itself).
First trends: Until at least one valid trend completes, T1 is na (no history). T2 still shows.
Only “valid” trends are counted: Segments must start after a white bar; flips that happen color→color without a white in between don’t start a new valid trend.
Time math: Uses bar timestamps in ms, converted to days; results reflect the chart’s timeframe/market session.
TL;DR
The VMA color defines the regime; entries only trigger when a flat (white) VMA turns green/red.
Each trend’s max excursion from entry is recorded in ATR units.
T1 for current trends = (historical average ATR move) × current ATR from entry; T2 = 6× ATR.
The table shows your evolving edge (avg ATR reach, T1 win%, and days to targets), and alerts fire on new trends and target hits.
If you want, I can add optional features like: per‑ticker persistence of stats, excluding very short trends, or making T2 a user input instead of a fixed 6× ATR.
You implement the well‑known “LazyBear” Variable Moving Average (VMA) from price directional movement (pdm/mdm).
Internally you:
Smooth positive/negative one‑bar moves (pdmS, mdmS),
Turn them into relative strengths (pdiS, mdiS),
Measure their difference/total (iS), and
Normalize that over a rolling window to get a scaling factor vI.
The VMA itself is then an adaptive EMA:
vma := (1 - k*vI) * vma[1] + (k*vI) * close, where k = 1/vmaLen.
When vI is larger, VMA hugs price more; when smaller, it smooths more.
Coloring:
Green when vma > vma[1] (rising),
Red when vma < vma[1] (falling),
White when flat.
Candles are recolored to match.
Why this matters: The VMA color is your trend regime; everything else in the script keys off changes in this color.
2) What counts as a “valid” new trend?
A new trend is valid only when the previous bar was white and the current bar turns green or red:
validTrendStart := vmaColor != color.white and vmaColor[1] == color.white.
When that happens, you start a trend segment:
Save entry price (startPrice = close) and baseline ATR (startATR = ATR(atrLen)).
Reset “extreme” trackers: extremeHigh = high, extremeLow = low.
Timestamp the start (trendStartTime = time).
Effect: You only study / trade transitions out of a flat VMA into a slope. This helps avoid chop and reduces false starts.
3) While the trend is active
On each new bar without a color change:
If green trend: update extremeHigh = max(extremeHigh, high).
If red trend: update extremeLow = min(extremeLow, low).
This tracks the best excursion from the entry during that single trend leg.
4) When the VMA color changes (trend ends)
When vmaColor flips (green→red or red→green), you close the prior segment only if it was a valid trend (started after white). Then you:
Compute how far price traveled in ATR units from the start:
Uptrend ended: (extremeHigh - startPrice) / startATR
Downtrend ended: (startPrice - extremeLow) / startATR
Add that result to a running sum and count for the direction:
totalUp / countUp, totalDown / countDown.
Target checks for the ended trend (no look‑ahead):
T1 uses the previous average ATR move before the just‑ended trend (prevAvgUp/prevAvgDown).
Up: t1Up = startPrice + prevAvgUp * startATR
Down: t1Down = startPrice - prevAvgDown * startATR
T2 is a fixed 6× ATR move from the start (up or down).
You increment hit counters and also accumulate time‑to‑hit (ms from trendStartTime) for any target that got reached during that ended leg.
If T1 wasn’t reached, it counts as a miss.
Immediately initialize the next potential trend segment with the current bar’s startPrice/startATR/extremes and set validTrendStart according to the “white → color” rule.
Important detail: Using prevAvgUp/Down to evaluate T1 for the just‑completed trend avoids look‑ahead bias. The current trend’s performance isn’t used to set its own T1.
5) Running statistics & targets (for the current live trend)
After closing/adding to totals:
avgUp = totalUp / countUp and avgDown = totalDown / countDown are the historical average ATR move per valid trend for each direction.
Current plotted targets (only visible while a valid trend is active and in that direction):
T1 Up: startPrice + avgUp * startATR
T2 Up: startPrice + 6 * startATR
T1 Down: startPrice - avgDown * startATR
T2 Down: startPrice - 6 * startATR
The entry line is also plotted at startPrice when a valid trend is live.
If there’s no history yet (e.g., first trend), avgUp/avgDown are na, so T1 is na until at least one valid trend has closed. T2 still shows (6× ATR).
6) Win rate & time metrics
Win % (per direction):
winUp = hitUpT1 / (hitUpT1 + missUp) and similarly for down.
(This is strictly based on T1 hits vs misses; T2 hits don’t affect Win% directly.)
Average days to hit T1/T2:
The script stores milliseconds from trend start to each target hit, then reports the average in days separately for Up/Down and for T1/T2.
7) The dashboard table (bottom‑right)
It shows, side‑by‑side for Up/Down:
Avg ATR: historical average ATR move per completed valid trend.
🎯 Target 1 / Target 2: the current trend’s price levels (T1 = avgATR×ATR; T2 = 6×ATR).
✅ Win %: T1 hit rate so far.
⏱ Days to T1/T2: average days (from valid trend start) for the targets that were reached.
8) Alerts
“New Trend Detected” when a valid trend starts (white → green/red).
Target hits for the active trend:
Uptrend: separate alerts for T1 and T2 (high >= target).
Downtrend: separate alerts for T1 and T2 (low <= target).
9) Inputs & defaults
vmaLen = 17: governs how adaptive/smooth the VMA is (larger = smoother, fewer trend flips).
atrLen = 14: ATR baseline for sizing targets and normalizing moves.
10) Practical read of the plots
When you see white → green: that bar is your valid entry (trend start).
An Entry Line appears at the start price.
Target lines appear only for the active direction. T1 scales with your historical average ATR move; T2 is a fixed stretch (6× ATR).
The table updates as more trends complete, refining:
The average ATR reach (which resets your T1 sizing),
The win rate to T1, and
The average days it typically takes to hit T1/T2.
Subtle points / edge cases
No look‑ahead: T1 for a finished trend is checked against the prior average (not including the trend itself).
First trends: Until at least one valid trend completes, T1 is na (no history). T2 still shows.
Only “valid” trends are counted: Segments must start after a white bar; flips that happen color→color without a white in between don’t start a new valid trend.
Time math: Uses bar timestamps in ms, converted to days; results reflect the chart’s timeframe/market session.
TL;DR
The VMA color defines the regime; entries only trigger when a flat (white) VMA turns green/red.
Each trend’s max excursion from entry is recorded in ATR units.
T1 for current trends = (historical average ATR move) × current ATR from entry; T2 = 6× ATR.
The table shows your evolving edge (avg ATR reach, T1 win%, and days to targets), and alerts fire on new trends and target hits.
If you want, I can add optional features like: per‑ticker persistence of stats, excluding very short trends, or making T2 a user input instead of a fixed 6× ATR.
Nota Keluaran
Using the VMA Avg ATR + Days to Targets Indicator on a 65-Minute TimeframeOverview
This TradingView Pine Script v5 indicator combines a Variable Moving Average (VMA), Average True Range (ATR), and higher timeframe alignment to identify trends and set price targets on a 65-minute chart. It overlays a VMA line, colors bars to show trend direction, plots entry and target levels, and provides a dashboard with key metrics like average ATR movement, win rates, and time to reach targets. The VMA length can be adjusted based on the dashboard’s win percentage to optimize performance for different assets or market conditions.
How to Use
1. Setup
- Add to Chart: In TradingView, open the Pine Script Editor, paste the indicator code, and add it to your 65-minute chart for your chosen asset.
- Default Settings:
---- VMA Length: 17 (adjust based on win percentage in the dashboard).
---- ATR Length: 14 (adjust for volatility measurement).
2. Reading the Indicator
- VMA Line:
---- Green: Bullish trend (VMA rising).
---- Red: Bearish trend (VMA falling).
---- White: Neutral (no trend).
- Bar Colors: Match the VMA (green for bullish, red for bearish, white for neutral).
- Entry Line (Blue): Appears when a new trend starts (VMA changes from white to green/red) and aligns with daily and 195-minute timeframes.
- Target Lines:
---- Target 1 (Green): Based on historical average ATR movement.
---- Target 2 (Yellow): Set at 6x the current ATR.
- Dashboard (Bottom-Right):
---- Avg ATR: Average price movement in ATR multiples for up/downtrends.
---- Target 1 & 2: Current target price levels.
---- Win %: Percentage of trends hitting Target 1. Use this to optimize VMA length.
---- Days to T1/T2: Average time to reach targets.
3. Adjusting VMA Length
- Optimize Using Win %: The dashboard displays the win percentage for Target 1 hits in uptrends and downtrends. To improve performance:
---- Test different VMA lengths (e.g., 10, 15, 20, 25) in the indicator settings.
---- Monitor the dashboard’s win % for each length over a sample period (e.g., 1-3 months).
---- Choose the VMA length with the highest win % for your asset on the 65-minute timeframe, balancing responsiveness and reliability.
---- Example: If a VMA length of 15 yields a higher win % (e.g., 75%) compared to the default 17 (e.g., 60%), switch to 15 for better trend detection.
4. Trading on the 65-Minute Timeframe
- Entry:
---- Enter when the VMA changes color (white to green for long, white to red for short) and the blue entry line appears, confirming alignment with daily and 195-minute trends.
- Targets:
---- Target 1: Use for conservative exits (based on past ATR averages).
---- Target 2: Use for larger moves (6x ATR).
---- Stop-Loss: Set below/above the entry price by 1-2x ATR for risk management.
---- Exit: Close the trade when the price hits Target 1 or 2, or if the VMA color reverses (e.g., green to red).
5. Alerts
- Set alerts in TradingView for:
---- New Trend: When a valid trend starts on the 65-minute chart.
---- Target Hits: When the price reaches Target 1 or 2 (uptrend/downtrend).
- Configure via TradingView’s alert menu, selecting the indicator and desired condition.
6. Tips for the 65-Minute Timeframe
- Trend Confirmation: The indicator’s higher timeframe checks (daily and 195-minute) help filter false signals, ideal for volatile assets.
- VMA Optimization: Regularly review the dashboard’s win % to fine-tune the VMA length. Shorter lengths (e.g., 10-12) may suit fast-moving markets, while longer lengths (e.g., 20-25) may work better in stable trends.
- Combine Tools: Pair with support/resistance or volume to confirm entries.
- Backtest: Use TradingView’s strategy tester to evaluate performance with different VMA lengths on the 65-minute chart for your asset.
7. Limitations
- Lag: The VMA may lag in fast markets; shorter VMA lengths can reduce this but may increase false signals.
- False Signals: Trends may fail if higher timeframe alignment weakens.
- Volatility: High volatility may lead to wider ATR-based targets; adjust risk accordingly.
This setup leverages the indicator’s strengths for your preferred 65-minute timeframe, with the added flexibility of adjusting the VMA length based on the dashboard’s win percentage to optimize trend detection and trading outcomes.
Nota Keluaran
The indicator’s intelligence lies in its ability to:* Adapt: Dynamically selects the best VMA length based on performance metrics.
* Analyze: Uses ATR and historical data to set realistic price targets and track success rates.
* Filter: Employs multi-timeframe alignment to reduce false signals.
* Communicate: Provides clear visual cues and actionable alerts with detailed information.
Skrip sumber terbuka
Dalam semangat sebenar TradingView, pencipta skrip ini telah menjadikannya sumber terbuka supaya pedagang dapat menilai dan mengesahkan kefungsiannya. Terima kasih kepada penulis! Walaupun anda boleh menggunakannya secara percuma, ingat bahawa menerbitkan semula kod ini adalah tertakluk kepada Peraturan Dalaman kami.
Penafian
Maklumat dan penerbitan adalah tidak dimaksudkan untuk menjadi, dan tidak membentuk, nasihat untuk kewangan, pelaburan, perdagangan dan jenis-jenis lain atau cadangan yang dibekalkan atau disahkan oleh TradingView. Baca dengan lebih lanjut di Terma Penggunaan.
Skrip sumber terbuka
Dalam semangat sebenar TradingView, pencipta skrip ini telah menjadikannya sumber terbuka supaya pedagang dapat menilai dan mengesahkan kefungsiannya. Terima kasih kepada penulis! Walaupun anda boleh menggunakannya secara percuma, ingat bahawa menerbitkan semula kod ini adalah tertakluk kepada Peraturan Dalaman kami.
Penafian
Maklumat dan penerbitan adalah tidak dimaksudkan untuk menjadi, dan tidak membentuk, nasihat untuk kewangan, pelaburan, perdagangan dan jenis-jenis lain atau cadangan yang dibekalkan atau disahkan oleh TradingView. Baca dengan lebih lanjut di Terma Penggunaan.