Video: WHY I STOPPED TRUSTING TRADING INDICATORS
Creator: Oliver Velez Trading
Original Video: Watch the original video
Difficulty: Intermediate
The Big Idea
An indicator can organize information without being qualified to make the entire trading decision. The source criticizes dependence on signals while retaining the 20- and 200-period averages for three narrower jobs: describing direction, describing separation, and locating price relative to a reference.
If you remember one thing: decide which question a tool answers before letting it influence an order. A contextual reading is not a complete entry rule.
The Critique Is About Dependence, Not Removing Every Line
The title sounds like a rejection of all indicators, but the actual lesson explicitly retains two moving averages. The source objects to treating a transformed signal as an unquestionable instruction, particularly when it distracts from the price action being traded.
That distinction matters. Removing a tool without replacing the decisions it previously supported can make a process less consistent. Conversely, keeping a tool because it looks familiar can add work without improving any decision. The useful exercise is to specify the job and evaluate whether the tool performs it.
The source’s claims that price-based traders are always superior or that indicators necessarily make users late are broader than the evidence supplied. No comparative dataset is provided. A delayed signal can avoid some false starts, while an earlier discretionary entry can be wrong sooner. The relevant comparison includes selection, execution, and costs rather than timing alone.
Transformation Compresses Information
A simple moving average replaces a sequence of closes with their mean. That makes a broad tendency easier to see while hiding some detail. The lost detail may matter to an entry, but the compression can still be useful when its purpose is clear.
For an n-period SMA, the change from one bar to the next equals the newest close minus the close leaving the window, divided by n. A 20-period average can therefore rise because the newest close replaces a lower old value, even if the latest candle itself is down.
That is why an average’s slope and a candle’s direction need not match. The average describes a window; the candle describes one interval. Neither observation alone establishes whether the next trade has attractive risk and reward.
Job One: Direction
The source uses a rising 20-period average as a broad upward reference, a falling one as a downward reference, and a relatively flat or wavy one as a less directional condition. These descriptions can help restrict the search without providing a particular entry event.
A visual forty-five-degree angle is not a stable threshold. Zoom, chart aspect ratio, price scale, and instrument price all change its appearance. A repeatable research definition should instead use a measurable change over a fixed number of bars, optionally normalized by volatility.
The included indicator compares the average with its value five bars earlier and divides by ATR. That is our definition, not a hidden numerical rule from the transcript. It is a way to make the classification inspectable across charts.
Job Two: State
State describes how far apart the 20 and 200 averages are. A small gap is labeled narrow; a large gap is labeled wide. This is different from direction: the 20 can rise while remaining close to the 200, or decline while the averages remain widely separated.
Narrow averages do not prove that the underlying price is quiet. Large two-sided moves can leave the averages close together. Likewise, a wide gap does not guarantee an immediate reversal. Treat these labels as measurements of average separation, not complete volatility or exhaustion models.
Job Three: Location
Location asks where an independently defined event occurs relative to the averages. A bullish price event near a rising average presents a different hypothesis from the same event far above it. That is a question about context and extension, not proof that the line will act as support.
Define what near means. A wick touching the average, a close within a fixed distance, and a whole candle overlapping a zone describe different events. The indicator uses close-to-average distance in ATR units so readers can see exactly what its table reports.
| Question | Measurement | Do not infer automatically |
|---|---|---|
| Direction | Change in the 20 SMA over a stated window | The next candle’s direction |
| State | Distance between the 20 and 200 SMAs | A guaranteed breakout or reversal |
| Location | Price distance from a selected reference | A valid entry or an executable stop |
Worked Example: Three Measurements, No Buy Signal
Suppose the 20 SMA is 100.50, its value five bars ago was 100.10, the 200 SMA is 100.30, and ATR is 0.80. The five-bar change is 0.40, or 0.50 ATR. The average gap is 0.20, or 0.25 ATR.
If the latest close is 100.62, it sits 0.12 above the 20 SMA, or 0.15 ATR. Under this indicator’s defaults, the context is upward, narrow, and near the 20. None of those calculations identifies a price event, target, position size, or acceptable fill.
Now suppose your independent entry plan requires a reclaim of a premarked level, but price has not reclaimed it. The correct conclusion is that the context is favorable while the entry is absent. Letting the attractive table replace that missing condition would recreate the overreliance the lesson criticizes.
Earlier Is Not Automatically Better
Many price-derived tools react to information after it has appeared, and smoothing can introduce delay. But a chart pattern that requires a close or confirmed swing also waits for information. The practical issue is what the waiting buys and costs.
Compare the same opportunity set under an early and a confirmed rule. Include early entries that fail, confirmations that arrive too late, and setups that never confirm. Comparing the earliest winning entry with a later confirmed entry on the same winning chart cannot establish which process is better overall.
Nor should you infer that multiple indicator panels necessarily make someone unprofitable. They may add redundancy or cognitive burden, but the claim requires evidence. Audit their actual contribution rather than judging the trader from a screenshot.
Reduce Redundancy by Naming the Decision
For each tool, write the question it answers, the condition that changes a decision, and what you would do without it. Several price-derived momentum tools may repeat similar information even when their colors look different.
Remove or hide one tool during a defined replay exercise, keeping the entry plan unchanged. Record decision consistency and errors. A simpler chart is useful if it makes the process clearer or more reliable; simplicity alone does not establish an edge.
Pine Script Indicator
View Pine Script Indicator Code
//@version=6
// Guide: https://candlechasers.com/moving-average-direction-state-location/
// Context classifications only; no trade entries, exits, or performance claims.
indicator("CC Direction State Location", overlay=true)
slopeBars = input.int(5, "Slope comparison bars", minval=1)
flatThreshold = input.float(0.20, "20 SMA flat threshold in ATR", minval=0.01, step=0.05)
narrowThreshold = input.float(0.5, "Narrow gap in ATR", minval=0.01, step=0.1)
wideThreshold = input.float(2.0, "Wide gap in ATR", minval=0.01, step=0.1)
nearThreshold = input.float(0.25, "Close proximity to average in ATR", minval=0.01, step=0.05)
shade = input.bool(false, "Shade narrow state")
if wideThreshold <= narrowThreshold
runtime.error("Wide gap threshold must exceed the narrow threshold.")
fast = ta.sma(close, 20)
slow = ta.sma(close, 200)
atr = ta.atr(14)
ready = not na(slow) and not na(fast[slopeBars]) and atr > 0
slope = ready ? (fast - fast[slopeBars]) / atr : na
gap = ready ? math.abs(fast - slow) / atr : na
int direction = ready ? (slope > flatThreshold ? 1 : slope < -flatThreshold ? -1 : 0) : 0
int state = ready ? (gap <= narrowThreshold ? 1 : gap >= wideThreshold ? 2 : 0) : 0
near20 = ready and math.abs(close - fast) / atr <= nearThreshold
near200 = ready and math.abs(close - slow) / atr <= nearThreshold
plot(fast, "20 SMA", color=color.blue, linewidth=2)
plot(slow, "200 SMA", color=color.red, linewidth=2)
bgcolor(shade and ready and state == 1 ? color.new(color.blue, 92) : na)
plot(slope, "20 SMA change / ATR", display=display.data_window)
plot(gap, "20 / 200 gap in ATR", display=display.data_window)
int priorState = nz(state[1])
bool narrowNow = barstate.isconfirmed and ready and ready[1] and state == 1 and priorState != 1
bool wideNow = barstate.isconfirmed and ready and ready[1] and state == 2 and priorState != 2
alertcondition(narrowNow, "Context becomes narrow", "CC: average gap becomes narrow on {{ticker}} {{interval}}. Not an entry signal.")
alertcondition(wideNow, "Context becomes wide", "CC: average gap becomes wide on {{ticker}} {{interval}}. Not an entry signal.")
var int savedDirection = 0
var int savedState = 0
var bool savedNear20 = false
var bool savedNear200 = false
var bool savedReady = false
if barstate.isconfirmed
savedDirection := direction
savedState := state
savedNear20 := near20
savedNear200 := near200
savedReady := ready
var table status = table.new(position.top_right, 1, 4, bgcolor=color.new(color.black, 15))
if barstate.islast
table.cell(status, 0, 0, savedReady ? "Last confirmed-bar context" : "Load 200+ bars for context", text_color=color.white)
table.cell(status, 0, 1, savedDirection == 1 ? "20 SMA direction: UP" : savedDirection == -1 ? "20 SMA direction: DOWN" : "20 SMA direction: FLAT / warming up", text_color=color.white)
table.cell(status, 0, 2, savedState == 1 ? "Average gap: NARROW" : savedState == 2 ? "Average gap: WIDE" : "Average gap: INTERMEDIATE / warming up", text_color=color.white)
table.cell(status, 0, 3, "Close near 20 / 200: " + str.tostring(savedNear20) + " / " + str.tostring(savedNear200), text_color=color.white)
What This Indicator Shows
The indicator displays the source’s 20 and 200 SMAs with a table for the last completed bar’s direction, separation state, and close proximity. Direction uses a five-bar 20-SMA change with a 0.20-ATR flat threshold. A gap no greater than 0.5 ATR is narrow; at least 2 ATR is wide; the middle remains intermediate. Close proximity defaults to 0.25 ATR.
Those thresholds are ours and adjustable. Optional shading is off by default. Alerts report transitions into narrow or wide context; they are not buy or sell alerts. Current reference lines and optional shading can develop during a live candle, while the table updates only at confirmation.
What This Indicator Does Not Show
This does not reproduce a complete Oliver Velez entry system, classify every price event, identify order-book support, or measure performance. ATR normalization is not part of the source’s stated visual rule. The code makes no higher-timeframe requests and does not detect patterns on other charts. Session settings change the data inside the averages.
Setup and Validation
Use standard candlesticks with at least 200 loaded bars. Check the chart’s regular- or extended-hours setting because it changes the averages. Configure context alerts Once Per Bar Close, and recreate alerts after changing inputs. The table uses the last confirmed chart bar, while lines show the developing chart values.
Validation status: calculations, state handling, and code preservation were reviewed statically. The indicator has not been compiled or chart-tested in TradingView here. Alerts and browser copying have not been tested live. No strategy orders, simulated fills, or measured performance results are claimed.
Practice and Research
- Context worksheet: label twenty consecutive observations by direction, separation, and location independently. Do not replace the three labels with a single favorable/unfavorable judgment.
- Location comparison: apply one unchanged price-event definition near and far from the averages. Record every event before reviewing later movement.
- Tool audit: compare your decision process with and without one additional indicator, keeping the same charts and entry rules. Track rule adherence, missed conditions, and decision time before drawing performance conclusions.
Use several volatility conditions and reserve later sessions for review. If a classification only looks useful at one perfectly selected threshold, investigate sensitivity before relying on it.
Check Your Understanding
Does the source advocate zero indicators? No. It retains the averages for direction, state, and location.
Do narrow averages prove low volatility? No. They measure separation of averages, not the full price path.
Why replace a visual angle with a numerical slope? Display settings change apparent angles; a stated calculation is repeatable.
Practical task: write the missing price-event rule beside a favorable context reading and wait until that independent condition actually occurs.
Final Takeaway
Let the averages summarize direction, separation, and location. Keep the entry decision explicit, and evaluate each tool by the decision it improves rather than by its visual appeal or its earliest winning example.
Risk Disclosure
This guide is for education and research, not personalized financial advice or a recommendation to trade any security or contract. Trading can cause substantial losses, and leveraged products may produce losses beyond the amount initially committed. Short selling can involve unlimited loss. Stops and displayed prices do not guarantee execution; gaps, spread, slippage, fees, liquidity, halts, and platform interruptions can materially affect outcomes. Historical charts, indicators, hypothetical calculations, and creator-reported results do not establish future performance. Understand the instrument, execution assumptions, and total exposure, practice before risking capital, and use only risk capital you can afford to lose.
CandleChasers provides independent educational analysis and is not affiliated with, endorsed by, or sponsored by the source creator or any platform mentioned.