//@version=6
indicator("CANDLE_TIME_RD", overlay = true, max_labels_count = 500)
// This tool displays the time of each candle directly on the chart by placing a label below
// the bar with an upward-pointing arrow for clear visual alignment. It helps traders quickly
// identify the exact timestamp of any candle during fast intraday analysis or historical review.
//
// OVERVIEW
// The script adjusts candle times relative to EST using a user-controlled timezone offset.
// It formats the timestamp in AM/PM or military style and can optionally display it vertically
// by stacking each character on its own line. Labels appear based on minute modulo logic for
// clean spacing so the chart does not become overloaded.
//
// FEATURES
// - Timezone offset input relative to EST (example: CST = -1, PST = -3).
// - AM/PM or military time toggle.
// - Vertical text toggle (on by default) that prints HH on first line and MM on second.
// - Modulo-based spacing so labels appear every N-th minute.
// - Clean label placement below candles with an upward-pointing arrow.
// - Manual string construction for hours and minutes to keep formatting consistent.
//
// USE CASES
// - Reviewing setups with ChatGPT where exact candle timing matters.
// - Syncing TradingView data to a chosen timezone for journaling.
// - Studying EMA touches, VWAP interactions, or momentum shifts at specific times.
// - Reducing clutter by showing timestamps at controlled intervals.
//
// Designed for clarity and fast intraday evaluation.
// Inputs
step = input.int(5, "Label every N-th minute (modulo)", minval = 1)
useMilitary = input.bool(false, "Use Military Time?")
tzOffset = input.int(0, "Timezone Offset from EST")
useVertical = input.bool(true, "Display text vertically (HH on top, MM below)")
minuteOnly = input.bool(false, "Print minute only?")
bubbleOpacity = input.int(80, "Bubble Transparency (0 = solid, 100 = invisible)", minval = 0, maxval = 100)
vertOffsetTicks = input.int(1, "Vertical offset (ticks below low)", minval = 0)
labelSize = input.string("small", "Label Size", options = ["tiny", "small", "normal", "large", "huge"])
// Time adjustment
offsetMs = tzOffset * 60 * 60 * 1000
adjTime = time + offsetMs
// Hour and minute
h = hour(adjTime)
m = minute(adjTime)
// Format minute with leading zero
mStr = m < 10 ? "0" + str.tostring(m) : str.tostring(m)
// Format hours WITH leading zero
h24Str = h < 10 ? "0" + str.tostring(h) : str.tostring(h)
h12 = h % 12
h12 := h12 == 0 ? 12 : h12
h12StrRaw = str.tostring(h12)
h12Str = h12 < 10 ? "0" + h12StrRaw : h12StrRaw
ampm = h >= 12 ? " PM" : " AM"
// Base time string
timeText = useMilitary ? h24Str + ":" + mStr : h12Str + ":" + mStr + ampm
if minuteOnly
timeText := mStr
// Vertical formatting: print as HH\nMM
finalText = timeText
if useVertical
if minuteOnly
finalText := mStr
else
hourPart = useMilitary ? h24Str : h12Str
finalText := hourPart + "\n" + mStr
// Label placement
labelPrice = low - vertOffsetTicks * syminfo.mintick
// Convert label size string to enum
sz = labelSize == "tiny" ? size.tiny : labelSize == "small" ? size.small : labelSize == "normal" ? size.normal : labelSize == "large" ? size.large : size.huge
// Draw label (one-liner)
if barstate.isnew and m % step == 0
label.new(bar_index, labelPrice, finalText, xloc = xloc.bar_index, yloc = yloc.price, style = label.style_label_up, textcolor = color.white, color = color.new(color.black, bubbleOpacity), size = sz)
ADX
//@version=6
indicator("ADX_RD", format=format.price, precision=2, timeframe="", timeframe_gaps=true)
// ADX_RD - Average Directional Index (Ryan DeBraal)
// This indicator provides a complete visualization of trend strength and directional pressure
// using the classic ADX system with Wilder smoothing. It plots the ADX line along with the
// +DI (bullish pressure) and -DI (bearish pressure) lines to show both the strength and the
// dominant side of the market. The script enhances the standard ADX toolkit by adding dynamic
// line styling, adjustable smoothing, opacity control, and visual thresholds that help traders
// quickly assess whether a trend is worth trading.
//
// OVERVIEW
// ADX (Average Directional Index) measures the strength of a trend, regardless of whether
// the trend is moving up or down. By itself, ADX does not indicate direction. Instead, it
// quantifies how strong the current move is. The companion lines — +DI and -DI — indicate
// which side (buyers or sellers) is currently exerting more directional force.
//
// HOW IT WORKS
// - +DI rises when price makes stronger upward moves (higher highs).
// - -DI rises when price makes stronger downward moves (lower lows).
// - ADX rises when either side is pushing strongly and the market is becoming directional.
// It falls when price movement becomes weak, noisy, or range-bound.
//
// ENHANCED FEATURES
// - Wilder-smoothing of +DI, -DI, and ADX for consistent trend-strength measurement.
// - Configurable threshold level (default 20), widely used to separate weak markets from
// trending ones. When ADX remains below this threshold, conditions are often choppy.
// - Automatic color shifting of the ADX line:
// ADX < threshold → white (weak or no trend)
// ADX >= threshold → yellow (trend developing or strong)
// - Adaptive line thickness behavior: the ADX line becomes thicker when the trend is strong,
// helping visually highlight actionable conditions.
// - Optional display of +DI and -DI lines, each rendered with adjustable opacity so they can
// either stand out or stay subtle depending on the trader's preference.
// - Horizontal dotted reference line at the threshold for quick visual anchoring.
// - All smoothing lengths and display parameters can be customized.
//
// PURPOSE AND TRADING USE
// The goal of this indicator is to let traders quickly answer two questions:
// 1. Is the market trending or flat?
// 2. If trending, who is in control: buyers or sellers?
// ADX_RD is especially useful when:
// - Confirming breakouts (ADX rising above threshold)
// - Filtering entries for trend-following strategies
// - Avoiding low-probability trades during sideways or volatile chop
// - Pairing with MACD, EMA, RSI, VWAP, or price-action setups as a final trend-strength filter
//
// IMPORTANT NOTES
// - ADX measures *strength*, not direction.
// - Direction comes from +DI and -DI:
// +DI above -DI → bullish pressure dominant
// -DI above +DI → bearish pressure dominant
// - High ADX with a clean DI separation typically indicates the strongest opportunities.
// - Low ADX implies signals from other indicators may fail due to lack of trend.
//
// In short, ADX_RD provides a clean, enhanced visualization of trend conditions, helping traders
// avoid chop, focus on strong directional setups, and make more disciplined entries.
// Inputs
lineThickness = input.int(1, "ADX Line Thickness")
adxlen = input.int(14, "ADX Smoothing")
dilen = input.int(14, "DI Length")
showDI = input.bool(true, "Show +DI / -DI Lines")
// Directional Movement and DI calculation
dirmov(len) =>
up = ta.change(high)
down = -ta.change(low)
plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
truerange = ta.rma(ta.tr, len)
plus = fixnan(100 * ta.rma(plusDM, len) / truerange)
minus = fixnan(100 * ta.rma(minusDM, len) / truerange)
[plus, minus]
// ADX calculation using Wilder smoothing
adx(dilen, adxlen) =>
[plus, minus] = dirmov(dilen)
sum = plus + minus
adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
// Get DI and ADX values
[plusDI, minusDI] = dirmov(dilen)
sig = adx(dilen, adxlen)
// Dynamic color: white if below 20, yellow if above
sigColor = sig < 20 ? color.new(color.white, 95) : color.yellow
// ADX plot
plot(sig, color=sigColor, title="ADX", linewidth=lineThickness * 2)
// +DI / -DI plots (optional)
plot(showDI ? plusDI : na, title="+DI", color=color.new(color.green, 0), linewidth=1)
plot(showDI ? minusDI : na, title="-DI", color=color.new(color.red, 0), linewidth=1)
// Horizontal dotted line at 20
hline(20, "Threshold 20", color=color.gray, linestyle=hline.style_dotted, linewidth=1)
Fair Price VWAP
//@version=6
indicator("FAIRPRICE_VWAP_RD", overlay = true)
// FAIRPRICE_VWAP_RD
// This script plots an **anchored VWAP (Volume Weighted Average Price)** that resets
// based on the user-selected anchor period. It acts as a dynamic “fair value” line
// that reflects where the market has actually transacted during the chosen period.
//
// FEATURES
// - Multiple anchor options: Session, Week, Month, Quarter, Year, Decade, Century,
// Earnings, Dividends, or Splits.
// - Intelligent handling of the “Session” anchor so it works correctly on both 1m
// (resets each new day) and 1D (continuous, non-resetting VWAP).
// - Manual VWAP calculation using cumulative(price * volume) and cumulative(volume),
// ensuring the line is stable and works on all timeframes.
// - Optional hiding of VWAP on daily or higher charts.
// - Offset input for horizontal shifting if desired.
// - VWAP provides a true “fair price” reference for trend, mean-reversion,
// and institutional-level analysis.
//
// PURPOSE
// This indicator solves the common problem of VWAP behaving incorrectly on higher
// timeframes, on synthetic data, or with unusual anchors. By implementing VWAP
// manually and allowing flexible reset conditions, it functions reliably as
// an institutional-style fair value benchmark across any timeframe.
// Inputs
lineThickness = input.int(1)
hideonDWM = input.bool(false, title = "Hide VWAP on 1D or Above")
anchor = input.string(defval = "Session", title = "Anchor Period", options = ["Session", "Week", "Month", "Quarter", "Year", "Decade", "Century", "Earnings", "Dividends", "Splits"])
src = input(hlc3, title = "Source")
offset = input.int(0, title = "Offset (bars, usually 0)", minval = 0)
//---------------------
// Volume check
//---------------------
cumVolume = ta.cum(volume)
if barstate.islast and cumVolume == 0
runtime.error("No volume is provided by the data vendor.")
//---------------------
// Anchor logic
//---------------------
new_earnings = request.earnings(syminfo.tickerid, earnings.actual,
barmerge.gaps_on, barmerge.lookahead_on, ignore_invalid_symbol = true)
new_dividends = request.dividends(syminfo.tickerid, dividends.gross,
barmerge.gaps_on, barmerge.lookahead_on, ignore_invalid_symbol = true)
new_split = request.splits(syminfo.tickerid, splits.denominator,
barmerge.gaps_on, barmerge.lookahead_on, ignore_invalid_symbol = true)
// Special handling for "Session" so it works on both 1m and 1D
sessNew =
timeframe.isintraday ? timeframe.change("D") : // intraday: reset each new day
timeframe.isdaily ? false : // daily: no reset, full-history VWAP
false
isNewPeriod = switch anchor
"Earnings" => not na(new_earnings)
"Dividends" => not na(new_dividends)
"Splits" => not na(new_split)
"Session" => sessNew
"Week" => timeframe.change("W")
"Month" => timeframe.change("M")
"Quarter" => timeframe.change("3M")
"Year" => timeframe.change("12M")
"Decade" => timeframe.change("12M") and year % 10 == 0
"Century" => timeframe.change("12M") and year % 100 == 0
=> false
isEsdAnchor = anchor == "Earnings" or anchor == "Dividends" or anchor == "Splits"
// On the very first bar, force a reset (for non-E/D/S anchors)
if na(src[1]) and not isEsdAnchor
isNewPeriod := true
//---------------------
// Manual anchored VWAP
//---------------------
var float cumPV = na
var float cumVol = na
float vwapValue = na
if not (hideonDWM and timeframe.isdwm)
if isNewPeriod or na(cumVol)
// Reset VWAP at new anchor
cumPV := src * volume
cumVol := volume
else
cumPV += src * volume
cumVol += volume
vwapValue := cumVol != 0 ? cumPV / cumVol : na
//---------------------
// Plot: VWAP line
//---------------------
plot(vwapValue, title = "VWAP", color = color.new(color.aqua, 50), offset = offset, linewidth = lineThickness)
RSI
//@version=6
indicator("RSI_RD", format=format.price, timeframe="", timeframe_gaps=true)
// RSI_RD - RSI Divergence Detector (Ryan DeBraal)
// This script plots a standard RSI along with advanced automatic divergence detection.
// It identifies four types of divergences using pivot logic and configurable
// lookback windows. Signals appear directly on the RSI line as plotted marks and labels.
//
// FEATURES
// - Standard RSI with user-defined length and source.
// - Midline (50), overbought (70), and oversold (30) levels with shaded background.
// - Automatic detection of:
// • Regular Bullish Divergence
// • Regular Bearish Divergence
// • Hidden Bullish Divergence
// • Hidden Bearish Divergence
// - Each divergence type can be toggled on/off individually.
// - Pivot-based detection using left/right lookback lengths.
// - Range filter (bars since pivot) to avoid stale or invalid divergences.
// - Colored markers and labels placed exactly on pivot points.
// - Alerts for all four divergence conditions.
//
// PURPOSE
// This indicator makes RSI divergence trading systematic and visual.
// It highlights when price action disagrees with RSI momentum — often signaling
// exhaustion, reversal setups, or continuation opportunities depending on the divergence type.
// Ideal for combining with trend filters, VWAP, or ORB structures.
// Inputs
lineThickness = input.int(2)
len = input.int(title="RSI Period", minval=1, defval=14)
src = input(title="RSI Source", defval=close)
lbR = input(title="Pivot Lookback Right", defval=5, display = display.data_window)
lbL = input(title="Pivot Lookback Left", defval=5, display = display.data_window)
rangeUpper = input(title="Max of Lookback Range", defval=60, display = display.data_window)
rangeLower = input(title="Min of Lookback Range", defval=5, display = display.data_window)
plotBull = input(title="Plot Bullish", defval=true, display = display.data_window)
plotHiddenBull = input(title="Plot Hidden Bullish", defval=false, display = display.data_window)
plotBear = input(title="Plot Bearish", defval=true, display = display.data_window)
plotHiddenBear = input(title="Plot Hidden Bearish", defval=false, display = display.data_window)
bearColor = color.red
bullColor = color.green
hiddenBullColor = color.new(color.green, 80)
hiddenBearColor = color.new(color.red, 80)
textColor = color.white
noneColor = color.new(color.white, 100)
aboveColor = color.blue
belowColor = color.blue
// RSI
osc = ta.rsi(src, len)
// green above 50, red below 50
rsiColor = osc >= 50 ? aboveColor : belowColor
plot(osc, "RSI", color=rsiColor, linewidth=lineThickness)
hline(50, "Middle Line", #787B86, hline.style_dotted)
obLevel = hline(70, "Overbought", #787B86, hline.style_dotted)
osLevel = hline(30, "Oversold", #787B86, hline.style_dotted)
fill(obLevel, osLevel, color=color.rgb(33, 150, 243, 90))
// Pivots
plFound = not na(ta.pivotlow(osc, lbL, lbR))
phFound = not na(ta.pivothigh(osc, lbL, lbR))
_inRange(cond) =>
bars = ta.barssince(cond)
rangeLower <= bars and bars <= rangeUpper
//------------------------------------------------------------------------------
// Regular Bullish
inRangePl = _inRange(plFound[1])
oscHL = osc[lbR] > ta.valuewhen(plFound, osc[lbR], 1) and inRangePl
priceLL = low[lbR] < ta.valuewhen(plFound, low[lbR], 1)
bullCondAlert = priceLL and oscHL and plFound
bullCond = plotBull and bullCondAlert
plot(plFound ? osc[lbR] : na, "Regular Bullish", color=bullCond ? bullColor : noneColor, offset=-lbR, display=display.pane, editable=plotBull)
//------------------------------------------------------------------------------
// Hidden Bullish
oscLL = osc[lbR] < ta.valuewhen(plFound, osc[lbR], 1) and inRangePl
priceHL = low[lbR] > ta.valuewhen(plFound, low[lbR], 1)
hiddenBullCondAlert = priceHL and oscLL and plFound
hiddenBullCond = plotHiddenBull and hiddenBullCondAlert
plot(plFound ? osc[lbR] : na, "Hidden Bullish", color=hiddenBullCond ? hiddenBullColor : noneColor, offset=-lbR, display=display.pane, editable=plotHiddenBull)
//------------------------------------------------------------------------------
// Regular Bearish
inRangePh = _inRange(phFound[1])
oscLH = osc[lbR] < ta.valuewhen(phFound, osc[lbR], 1) and inRangePh
priceHH = high[lbR] > ta.valuewhen(phFound, high[lbR], 1)
bearCondAlert = priceHH and oscLH and phFound
bearCond = plotBear and bearCondAlert
plot(phFound ? osc[lbR] : na, "Regular Bearish", color=bearCond ? bearColor : noneColor, offset=-lbR, display=display.pane, editable=plotBear)
//------------------------------------------------------------------------------
// Hidden Bearish
oscHH = osc[lbR] > ta.valuewhen(phFound, osc[lbR], 1) and inRangePh
priceLH = high[lbR] < ta.valuewhen(phFound, high[lbR], 1)
hiddenBearCondAlert = priceLH and oscHH and phFound
hiddenBearCond = plotHiddenBear and hiddenBearCondAlert
plot(phFound ? osc[lbR] : na, "Hidden Bearish", color=hiddenBearCond ? hiddenBearColor : noneColor, linewidth=2, offset=-lbR, display=display.pane, editable=plotHiddenBear)
// Alerts
alertcondition(bullCondAlert, "Regular Bullish Divergence", "Regular Bullish Divergence")
alertcondition(hiddenBullCondAlert, "Hidden Bullish Divergence", "Hidden Bullish Divergence")
alertcondition(bearCondAlert, "Regular Bearish Divergence", "Regular Bearish Divergence")
alertcondition(hiddenBearCondAlert, "Hidden Bearish Divergence", "Hidden Bearish Divergence")
MACD
//@version=6
indicator("MACD_RD", timeframe="", timeframe_gaps=true)
// MACD_RD - Moving Average Convergence Divergence (Ryan DeBraal)
// This indicator plots a standard MACD along with a color-adaptive histogram and
// integrated momentum-shift alerts. It preserves the normal MACD structure while
// improving visual clarity and signal recognition.
//
// FEATURES
// -----------------------------------------------------------------------------
// • Standard MACD Calculation
// - Fast MA (12 by default)
// - Slow MA (26)
// - Signal line (9)
// - Choice between SMA/EMA for both MACD and Signal smoothing
//
// • Color-Changing Histogram
// - Green shades for positive momentum
// - Red shades for negative momentum
// - Lighter/darker tones depending on whether momentum is increasing or fading
// - 50% opacity for improved readability
//
// • Crossover-Based MACD Line Coloring
// - MACD line turns green on bullish cross (MACD > Signal)
// - MACD line turns red on bearish cross (MACD < Signal)
// - Default blue when no crossover occurs
//
// • Momentum-Shift Alerts
// - Alerts when histogram flips direction
//
// PURPOSE
// -----------------------------------------------------------------------------
// This MACD version emphasizes momentum shifts and trend transitions by
// highlighting subtle histogram changes and providing clean crossover visuals.
// Ideal for:
// • Identifying early momentum reversals
// • Filtering breakout/trend setups
// • Confirming trend continuation vs exhaustion
// Inputs
lineThickness = input.int(2)
fast_length = input.int(title="Fast Length", defval=12)
slow_length = input.int(title="Slow Length", defval=26)
src = input(title="Source", defval=close)
signal_length = input.int(title="Signal Smoothing", minval=1, maxval=50, defval=9, display=display.data_window)
sma_source = input.string(title="Oscillator MA Type", defval="EMA", options=["SMA","EMA"], display=display.data_window)
sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA","EMA"], display=display.data_window)
// MACD Calculations
fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist = macd - signal
// Histogram reversal alerts
alertcondition(hist[1] >= 0 and hist < 0, title="Rising to falling", message="MACD histogram switched from rising to falling")
alertcondition(hist[1] <= 0 and hist > 0, title="Falling to rising", message="MACD histogram switched from falling to rising")
// Zero line
hline(0, "Zero Line", color=color.new(#787B86, 50))
// Histogram with opacity 50%
plot(hist, title="Histogram", style=plot.style_columns,
color=color.new(hist >= 0 ? (hist[1] < hist ? #26A69A : #B2DFDB)
: (hist[1] < hist ? #FFCDD2 : #FF5252), 80))
// MACD crossover logic
bullCross = ta.crossover(macd, signal)
bearCross = ta.crossunder(macd, signal)
// MACD line color on crossovers
macdColor = bullCross ? color.new(color.white, 0) : bearCross ? color.new(color.white, 0) : color.new(color.orange, 0)
// Plot MACD and Signal
plot(macd, title="MACD", color=macdColor, linewidth=lineThickness)
plot(signal, title="Signal", color=color.new(color.gray, 0), linewidth=lineThickness)
Trend 34 EMA
//@version=6
indicator("TREND_34EMA_RD", overlay = true)
// TREND_34EMA_RD — Enhanced 34 EMA Trend Suite (Ryan DeBraal)
// DESCRIPTION
//--------------------------------------------------------------------------------------------------
// This indicator visualizes market trend behavior using a trend-adaptive 34-period EMA combined
// with ATR-based volatility analysis, trend-strength grading, and optional crossover signals.
// It is designed to deliver a fast, intuitive read on market direction, momentum quality,
// and volatility conditions.
//
// FEATURES
//--------------------------------------------------------------------------------------------------
// • 34 EMA Trend Line
// - Standard 34-period exponential moving average
// - Clean aqua color scheme for immediate visibility
// - Adjustable line thickness
//
// • Trend Strength Grading
// - Measures the absolute percent distance between price and the 34 EMA
// - Converts trend strength into a letter grade (A through F) or percent distance
// - Grade scale based on realistic 34-EMA deviation thresholds
// - Auto-updates on the last bar with a color-coded label:
// • Gray = weak trend
// • Orange = moderate trend
// • Green = strong trend
//
// • Optional Crossover Signals
// - Detects when price crosses above or below the 34 EMA
// - Displays up/down arrows at crossover points
// - Includes built-in alert conditions for bullish and bearish crossovers
//
// PURPOSE
//--------------------------------------------------------------------------------------------------
// This tool provides a clear, minimalistic framework for monitoring:
// • Early trend shifts
// • Trend continuation
// • Trend strength and momentum quality
// • Price over-extension via volatility bands
//
// The indicator is ideal for traders seeking a clean, high-signal trend-reading tool suited for
// discretionary, algorithmic, or confirmation-based trading approaches.
// Inputs
lineThickness = input.int(1)
emaLength = input.int(34, "EMA Length", minval = 1)
showTrendLabel = input.bool(true, "Show Trend Strength Label")
labelMode = input.string("Grade", "Label Mode", options = ["Grade", "Percent"])
showCrossMarks = input.bool(false, "Show Crossover Arrows")
// EMA
emaLine = ta.ema(close, emaLength)
plot(emaLine, "34 EMA", color.new(color.orange, 50), lineThickness)
// Trend Strength (distance from EMA)
distancePct = emaLine != 0 ? math.abs(close - emaLine) / emaLine * 100.0 : 0.0
// Grade mapping
grade = distancePct >= 20 ? "A" : distancePct >= 14 ? "A-" : distancePct >= 11 ? "B+" : distancePct >= 8.5 ? "B" : distancePct >= 6.5 ? "B-" : distancePct >= 5 ? "C+" : distancePct >= 3.5 ? "C" : distancePct >= 2.5 ? "C-" : distancePct >= 1.5 ? "D+" : distancePct >= 0.75 ? "D" : distancePct >= 0.25 ? "D-" : "F"
// Label color
labelColor = distancePct < 2.5 ? color.new(color.gray, 10) : distancePct < 6.5 ? color.new(color.orange, 0) : color.new(color.green, 0)
// Trend label
var label trendLabel = na
if showTrendLabel and barstate.islast
if not na(trendLabel)
label.delete(trendLabel)
labelText = labelMode == "Percent" ? str.tostring(distancePct, "#.0") + "%" : grade
trendLabel := label.new(bar_index, emaLine, labelText, style=label.style_label_left, color=labelColor, textcolor=color.white, size=size.small)
// Crossovers
bullCross = ta.crossover(close, emaLine)
bearCross = ta.crossunder(close, emaLine)
plotshape(showCrossMarks and bullCross, title="Bullish", color=color.new(color.green, 0), style=shape.triangleup, location=location.belowbar, size=size.tiny)
plotshape(showCrossMarks and bearCross, title="Bearish", color=color.new(color.red, 0), style=shape.triangledown, location=location.abovebar, size=size.tiny)
// Alerts
alertcondition(bullCross, "Bullish EMA Crossover", "Price crossed ABOVE the 34 EMA")
alertcondition(bearCross, "Bearish EMA Crossover", "Price crossed BELOW the 34 EMA")
ORB
//@version=6
indicator("ORB_RD", overlay = true)
// ORB_RD - Opening Range Box (Ryan DeBraal)
// This indicator automatically draws a high/low box for the first portion of
// each trading day, stepping the range window from 15 to 30 minutes after
// the session starts. The box updates live as the range forms, then
// optionally extends across the rest of the session.
//
// FEATURES
// -----------------------------------------------------------------------------
// • Opening Range Detection
// - Automatically ladders the range window: 0-15, then 0-30 minutes
// - Automatic reset at each new trading day
// - Live high/low updates while inside the 0-30 minute window
//
// • Auto-Drawing Range Box
// - Draws a dynamic rectangle as the range forms
// - Top and bottom update with every new high/low
// - Extends sideways in real time during formation
// - Optional full-day extension after the 30-minute range finalizes
//
// • Customizable Visuals
// - Adjustable fill transparency
// - Mild green tint by default for clarity
//
// PURPOSE
// -----------------------------------------------------------------------------
// This tool highlights the evolving opening range, a widely used intraday
// reference for breakout traders, mean-reversion setups, and session structure
// analysis. Ideal for:
// • Identifying early support and resistance
// • Framing breakout and pullback decisions
// • Tracking intraday trend bias after the morning range
extend_today = input.bool(true, "Extend today's box across day")
fill_transp = input.int(95, "Box transparency", minval = 0, maxval = 100)
box_color = color.new(color.green, 80)
var int first_bar_index = na
var int day_start_ts = na
var float rng_hi = na
var float rng_lo = na
var box rng_box = na
new_day = ta.change(time("D")) != 0
if new_day
// New day starts: clear old box and start a new 0-15 minute laddered window
if not na(rng_box)
box.delete(rng_box)
rng_box := na
first_bar_index := bar_index
rng_hi := high
rng_lo := low
day_start_ts := time
// Compute elapsed minutes since the first bar of the day
elapsed_ms = not na(day_start_ts) ? time - day_start_ts : 0
elapsed_min = elapsed_ms / 60000.0
// Active opening range window: update from 0-15 and 0-30 minutes
in_window = elapsed_min <= 30
if in_window
// While inside the first 30 minutes, keep updating the growing range
rng_hi := na(rng_hi) ? high : math.max(rng_hi, high)
rng_lo := na(rng_lo) ? low : math.min(rng_lo, low)
if na(rng_box)
rng_box := box.new(left = first_bar_index, top = rng_hi, right = bar_index, bottom = rng_lo, xloc = xloc.bar_index, border_color = box_color, bgcolor = color.new(box_color, fill_transp))
else
box.set_top(rng_box, rng_hi)
box.set_bottom(rng_box, rng_lo)
box.set_right(rng_box, bar_index)
// After the 30-minute window ends, just extend the finalized box to the right if desired
if extend_today and not na(rng_box) and not in_window
box.set_right(rng_box, bar_index)
Daytrading 01. SMX
2025-11-28
Today was the day after thanksgiving which means the market would close at 2 PM EST instead of 4 PM EST. My plan was to buy SMX, a gapper that was up >100%.

I hesitated in the first 30 minutes and didn’t buy the dip. The MACD had crossed over the signal line, the histogram was in the green, the RSI Divergence had just plunged into the middle of the stream (not overbought or oversold) and yet I did nothing with this information. I froze. I was all set to make the order when a scary red candle dropped; I immediatly assumed some institution was shorting the stock. However, it turned out to be a false flag; just an indication that someone, somewhere dumped a bunch of stock because they had thought that it had already reached the top of the mountain. In a few hours, it would become apparent that this had been merely a molehill.

I was forced to shrug it off and wait for a breakout (a green candle closes higher than the First 30 minutes high/low). After about an hour it had but this time I jumped the gun and didn’t wait for the MACD to cross all the way over the signal line; I didn’t think it mattered so I bought ($50.00/share) it and then there was an immediate sell-off.

It fwll down about -$600! Not a great feeling.
I had to take my cat to the vet at 11 AM EST and it was already 10:30 AM and the right opportunity just hadn’t presented itself; so I ended up breaking my own rules. I left my house just feeling sick and hoping things would somehow work themselves out.
However, before I left, I adjusted the stop loss to just below the top of the 30-minute high/low box (the breakout, once confirmed, became the new support). My thinking was: if things got this bad, there was no hope of it ever coming back so I might as well cut my losses. I also set the take-profit at just below 60 (psychological resistance).
Looking at the chart now it appears the “Perfect Buy” was at 10 AM before the MACD and RSI confirmations occured. This is an important lesson. The “Perfect Buy” would have been impossible, because it happened before any indicators even confirmed the direction of the market.
When I came home, my take profit had executed at $58.87 and my shares had thankfully sold off for +$9.87/share.
It wasn’t a perfect execution by any means, but it did confirm that the rules (if followed) do indeed work.

Lessons Learn
- Don’t hesitate after the morning dip, if the signs are right take action.
- Don’t try to “will” the perfect buy into existence, even though this worked out for me today it was not the right call.
- Trading without evidence is gambling. Getting lucky isn’t a skill you can rely on.
- Wait for at least 2 confirmation signals. MACD & RSI, not just one or the other; not just candles or volume. Charts look very different when you come back to them a few hours later. Bad choices you make in the moment look much worse later on because all the correct choices look obvious in hindsight.
Lesson 14. The $25,000 Barrier to Entry
This lesson is gonna be a major bummer, but it’s better to find out now rather than the hard way (like I did). Essentially when you first start trading you can’t just buy and sell stocks all day long. Your broker will only allow you to do that three times in a work week before they “punish you” with the dreaded Pattern Day Trader Rule (PDT Rule).

TL;DR
- To day trade a lot, you must change your account into a margin account.
- You must put 25,000 dollars or more into the account.
- You must keep your total money and stocks above 25,000 dollars so you do not get blocked.
- A margin account lets you borrow up to half of what you own.
- When you short a stock, you are borrowing it, and that uses up part of that borrowing limit.
Rules No One Told You
If you trade stocks actively, you will run into a rule that stops a lot of beginners in their tracks: the Pattern Day Trader Rule (PDT Rule). Most people do not learn about it until it freezes their account and forces them to sit out for days. This was my first encounter with the rule:

What the PDT Rule Actually Is
The Pattern Day Trader Rule comes from FINRA. It says that if you make four or more round-trip day trades in a rolling five day period while using a margin account, you will be flagged as a Pattern Day Trader.
A day trade is a buy and a sell of the same stock on the same day.
Once flagged, your broker must require your account to maintain at least twenty five thousand dollars in equity at all times. Drop below that level and your broker can restrict your trading to only closing positions. This rule was designed to protect inexperienced traders from blowing up, but in practice it limits small accounts far more than it protects them.
Why the Number Is Twenty Five Thousand
Brokers do not pick this number. It is built into the rule. FINRA requires a minimum of $25,000 in a margin account if you want unlimited day trades. Think of it as a barrier to entry. If your account sits at twelve thousand, for example, you only get three day trades per rolling five day window. After the third, your account is locked until the window resets. Many new traders run into this because they do not realize each quick buy and sell counts as a day trade.
Reg T Explained
Regulation T, often called Reg T, is a Federal Reserve rule that governs how margin (shorting stocks, generally) works. It sets two things:
- Initial Margin
You can borrow up to 50 percent of a stock’s price when you open a position. If a stock costs one hundred dollars, you can open the position with fifty dollars of your own money and borrow the rest. - Settlement and Buying Power
Reg T also controls how much buying power you have in a margin account and how long trades must settle before your cash becomes usable again.
Most beginners do not know that using margin, even accidentally, can trigger PDT classification. Many brokers default accounts to margin by default unless you change them.
Margin Maintenance
Once you open a margin position, you need to maintain a certain level of equity or your broker can issue a margin call. This is called Maintenance Margin. If the value of your position drops and your equity falls below the required percentage, you must deposit more cash or close positions. This means your broker just starts selling off your stock without you even knowing it!
I logged on one day and someone had sold 20x shares of NVDA for $180. I had bought it for $200; violating this rule, that I had never heard of, cost me $400!

This affects new traders who overextend. They buy too much size, the stock pulls back, equity drops, and suddenly they owe money or lose their position without intending to.
How New Traders Get Burned
Most beginners fall into one of these traps:
- They use a margin account without realizing it, triggering PDT limits.
- They take more than three day trades in five days and get restricted.
- They overuse borrowed buying power and get a margin call.
- They assume cash settles instantly and run into “good faith violations.”
No broker sits you down and explains this. The warnings are usually buried in legal text during account creation.
How to Avoid These Pitfalls
Here is the simple way to protect yourself:
1. Use a Cash Account if Your Account Is Under 25,000
A cash account is the easiest way to avoid PDT. You can day trade as much as you want as long as the cash has settled. Stocks settle in two days. Options settle next day. No PDT rule applies to cash accounts.
2. If You Use a Margin Account, Track Your Day Trades
Many platforms show a counter so you do not accidentally hit four in five days. Use it.
3. Avoid Overusing Margin
Borrowed buying power feels great until the market moves against you. Start small.
4. Know Your Settlement Times
Plan your trades around when your cash becomes available again. This avoids good faith violations.
5. Keep a Buffer Above Twenty Five Thousand
If you are close to the threshold and the market pulls back, you can fall under the minimum and get restricted even if you did nothing wrong. People often keep a two thousand dollar buffer.
6. Read Your Broker’s Settings
Many brokers, including IBKR, open new accounts as margin by default. Change it if you want to avoid PDT.
The Bottom Line
The trading world has rules that can stop you cold if you do not know they exist. The twenty five thousand dollar barrier to entry is one of the biggest shockers for new traders. Understanding PDT, Reg T, and Maintenance Margin keeps you from stepping on the same landmines that catch thousands of beginners every year. Once you know the rules, you can work within them, build your account, and avoid unnecessary restrictions while you learn.
Lesson 13. Psychological Support & Resistance
Which of these numbers are nicer?
$0.25 $0.68 $0.75 $0.81 $1.00 $1.19 $1.25 $1.44 $1.50 $1.75 $1.88 $2.00
Why Traders Gravitate Toward Round Numbers
Psychological patterns shape market behavior more than most traders admit. One of the strongest patterns is the human tendency to anchor decisions around crisp, round numbers. These levels become magnets for price action and often act as resistance or support.
The Brain Prefers Simplicity
Round numbers are easier to process. In a fast environment full of noise and risk, traders naturally choose simple targets like 50 or 100 instead of odd numbers. This reduces mental effort and feels more comfortable.

Round Numbers Create Crowd Behavior
Because so many traders think this way, whole numbers attract clusters of orders. Stops, limits, and take profits pile up around clean levels. This concentration of activity creates visible hesitation, sharp bounces, or sudden breakouts.
Algorithms Exploit This Bias
Modern trading systems monitor these psychological hotspots. They know stops are stacked near whole numbers and often trigger fast sweeps through these levels before price settles.
How Traders Can Use This
- Expect stalls or fakeouts near clean levels
- Place stops slightly above or below obvious round numbers
- Treat crisp levels as planning markers, not fixed rules
Round numbers are not magical. They simply reflect how people think. Once you understand that pattern, you start seeing the market with clearer eyes.
Lesson 12. Trailing Stop Loss
A trailing stop loss is one of the simplest ways to protect gains without constantly babysitting your chart. Instead of keeping a fixed stop at a single price, a trailing stop moves up automatically as your trade becomes profitable. This lets you lock in gains while still giving the trade room to breathe.
What many traders don’t realize is that in TradingView you can manually drag your stop loss above your entry price, turning it into a guaranteed-profit stop. Once the stop is above your buy price, you no longer risk losing money on the trade. If the market reverses and hits that stop, you exit with profit instead of a loss.

This is powerful, but it comes with a catch. If you drag your stop too close to the current price action, the market might tag it during a normal pullback and sell your position. You take profit but you’re out of the game. The chart continues in your direction, and you’re left watching the trade run without you. It’s an easy mistake that newer traders make when they try to “lock in every penny” instead of letting the trend develop.
When adjusting a trailing stop, think in terms of structure, not emotion. Place your stop below meaningful swing lows or support levels—the areas where the trend would actually be invalidated. This gives the trade enough space to fluctuate without shaking you out. Only bump the stop up when the chart makes a new structural higher low (uptrend) or lower high (downtrend).
TradingView’s draggable stop loss tool makes this process simple: click your stop line, drag it above your entry, and confirm the new price. Just remember that the goal is to protect profit, not to choke the trade. A trailing stop works best when it follows the market at a respectful distance, letting winners grow while removing the stress of watching every candle tick.
Used wisely, trailing stops keep you in strong moves longer, secure your gains, and remove a lot of emotional decision-making. Used too tightly, they cut great trades short. Balance is everything.
Lesson 11. How to trade “Gappers”
A “gapper” is a stock that has experienced a significant price gap, meaning its opening price is much higher or lower than the previous day’s closing price, with little or no trading in between. These movements are often driven by news, such as earnings reports, and are watched by traders for potential opportunities, but they also carry higher risk due to volatility.

Entry
- Buy the first serious pullback after the initial blast.
- Confirm with:
- MACD still rising
- RSI still strong
- Volume still heavy
- Price holding above VWAP
Exit
You do not wait for “confirmation.”
You exit on the first sign of momentum failure:
- MACD crosses down
- RSI drops below 60
- A lower low forms on 5 or 10 minute
- VWAP breaks
- Volume dies
You get off fast.
These stocks give zero mercy once the wave ends.
Lesson 10. How to Buy Stock
Finnaly, after 10 grueling lessons here is how to place an order and enter the world of trading:


TOP SECTION (Order Type)
Order Type: Limit
You are placing a limit buy order, which means:
“Only buy this stock at $175.00 or better.”
It will not buy higher than 175.
BUY SIDE / PRICE
Price: 175.00
This is the price you are willing to buy NVDA at.
If NVDA never falls to 175, the order will not fill.
SHARES
Shares: 1
You are buying 1 share.
EXITS (automated closing rules
This is where you tell the broker how to automatically close the trade when it hits your profit or loss levels.
TAKE PROFIT (closes when price rises)
✔ Take Profit: 180.00
If NVDA rises from 175 to 180, your broker will automatically sell your share to lock in profit.
Profit = 180 − 175 = +5 dollars
This is your reward target.
Ticks: 500
Think of this as the distance measured in small increments (ticks).
It’s optional; the dollar price is what matters.
STOP LOSS (closes when price falls)
✔ Stop Loss: 172.50
If NVDA drops to 172.50, your broker will automatically sell your share to limit your loss.
Loss = 175 − 172.50 = 2.50 dollars
This protects you from a bigger drop.
Ticks: 250
Again, the tick number doesn’t matter to you — the 172.50 stop price is the important part.
TIME IN FORCE
Day
The order is active only for today.
If it does not fill during today’s session (buy at 175), it disappears at the market close.
ROUTING
ZERO
This tells the broker which route to use to execute the trade.
“ZERO” is just the routing method — no impact on the logic of your trade.
OUTSIDE RTH
You left these unchecked, which means:
- Your order will only work during normal market hours
- No premarket or after-hours trading
ORDER INFO (summary)
Tick Value: 0.01 USD
Smallest price movement for NVDA = 1 cent.
Trade Value: 175.00 USD
Total cost to buy 1 share at 175.
Reward: 0.02% / 5.00 USD
Your potential profit per share is $5 if price hits 180.
Risk: 0.01% / 2.50 USD
Your max loss per share is $2.50 if price hits 172.50.
This creates a Risk/Reward ratio of 2:1
You risk 2.50 to make 5.00.
BOTTOM BUTTON
Buy 1 NVDA @ 175.00 LMT
If you click this, you send the order:
- Buy at 175.00
- TP at 180.00
- SL at 172.50
Everything else happens automatically.
Lesson 09. RSI Divergence Indicator
RSI (Relative Strength Index) Divergence is a momentum indicator that measures how fast and how much a price has moved recently to show whether a stock is overbought or oversold.
It ranges from 0 to 100.
Above 70 usually means overbought (price may pull back).
Below 30 usually means oversold (price may bounce).
50 is neutral — balance between buying and selling pressure.
Traders use RSI to spot trend strength and possible reversal points. For example:
- RSI rising from 30 → 50 → 70 = momentum building up.
- RSI falling from 70 → 50 → 30 = momentum fading, possible downturn.

Lesson 08. VWAP Indicator

VWAP (Volume Weighted Average Price) tells you the average price traders paid, weighted by volume, for the entire day.
It answers one question: “Where is the real fair price?”
Because it factors in volume, it’s more accurate than a simple moving average.
How to Think About It
- Above VWAP: buyers are in control
- Below VWAP: sellers are in control
Institutional traders (hedge funds, market makers, algos) often use VWAP to guide buys and sells.
Why It’s Important
VWAP is used for:
1. Trend direction
- Price above VWAP = bullish
- Price below VWAP = bearish
2. Support and resistance
VWAP acts as:
- A magnet
- A bounce level
- A rejection level
3. Institutional behavior
Big players try to buy at or below VWAP to avoid moving the market too much.
How Day Traders Use VWAP
A. Buy setups
Buy when:
- Price dips to VWAP
- Holds it
- Then turns upward
B. Short setups
Short when:
- Price rallies up to VWAP
- Rejects
- Then turns downward
C. Avoiding bad entries
If you buy far above VWAP, you’re often buying an overextended move.
If you short far below VWAP, you’re chasing.
Simple Summary
VWAP shows the true average price today, weighted by volume.
Above = bullish, below = bearish.
Great for support, resistance, and trend confirmation.
Lesson 07. MACD Indicator
MACD (Moving Average Convergence Divergence) is a trend-following momentum indicator that shows the relationship between two moving averages of a stock’s price.
How it works:
- It calculates the difference between a fast (short-term) and a slow (long-term) Exponential Moving Average (EMA).
- Common settings: 12-period (fast) and 26-period (slow).
- A signal line (usually a 9-period EMA of the MACD) is plotted to show buy/sell signals.
Interpretation:
- MACD line crosses above signal line → possible buy signal.
- MACD line crosses below signal line → possible sell signal.
- Histogram bars show the distance between MACD and signal line — larger bars mean stronger momentum.
In short:
MACD helps traders see trend direction, momentum strength, and potential reversals.

Lesson 06. Stop Loss & Take Profit
You can protect yourself against losing money, this is called risk management.
You do this by specifying a “stop loss” and/or “take profit” when placing your order.

Stop Loss
A stop loss automatically buys back (covers) your short position if the stock rises to a certain price, limiting your losses.
Example:
- You short at $100, expecting it to fall.
- You set a stop loss at $110.
- If the price rises to $110, your broker automatically closes the trade.
- You lose $10 per share, but you avoid unlimited losses if the price keeps rising.
Using a stop loss is the main way to protect yourself when shorting
Take Profit
A take profit automatically closes your position when the stock reaches a target price, locking in gains before the market can reverse.
Example
You short at $100, expecting it to fall.
You set a take profit at $90.
If the price drops to $90, your broker automatically buys back the shares and closes the trade.
You make $10 per share, and you avoid the risk of the price bouncing back up and erasing your profit.
Using a take profit is the main way to secure gains without having to watch the chart constantly.
Lesson 05: Breakouts
The first 30 minutes after the market opens often set the tone for the day. Traders mark the high and low of this period to form the 30-minute box, a simple range that shows the first real battle between buyers and sellers. The top of the box acts as resistance and the bottom acts as support. Many intraday trends begin the moment price finally leaves this range.

A breakout happens when price moves outside the box. What matters most is not the wick, but the candle body closes outside the box. A close above the 30-minute high signals that buyers were strong enough to hold price beyond resistance, and sellers could not push it back inside. This shift often triggers momentum and opens the door for a trend to develop.
Once a candle closes above the top of the box, the old resistance commonly becomes new support. This is the classic support-resistance flip. Traders who shorted at resistance get trapped and are forced to buy back. Breakout traders add positions. Dip buyers step in on the retest. Together, this creates fresh demand at the breakout level, causing price to bounce when it pulls back.
Most traders approach this setup in one of two ways: entering on the candle close above the box, or waiting for the retest of the breakout level and entering when it holds as support. Either way, the logic is the same. The first 30-minute range shows the early balance of power, and the breakout marks the moment the market picks a side.
Lesson 04. Support and Resistance
Support and Resistance are key price levels where a stock tends to pause or reverse its movement.
- Support:
The price level where buying pressure is strong enough to stop the price from falling further.
→ Think of it as a floor where buyers step in.
Example: A stock keeps bouncing up near $50 — that’s support. - Resistance:
The price level where selling pressure stops the price from rising higher.
→ Think of it as a ceiling where sellers take profits.
Example: A stock keeps falling back down near $70 — that’s resistance.
When price breaks through one of these levels, it often becomes the opposite:
- Old resistance can become new support.
- Old support can become new resistance.
Traders use these zones to plan entries, exits, and stop losses.
The First 30 Minutes Rule
The first 30 minutes of the trading day often create strong support and resistance levels because this period contains a surge of volume and institutional activity, reflecting the market’s initial reaction to overnight news and establishing where major buyers and sellers are willing to transact.
Notice how stocks tend to “ping-pong” off the first 30 minute box?

These opening-range highs and lows represent the earliest and most meaningful price extremes of the session, formed during heightened volatility and heavy order flow; as the day progresses and volatility typically contracts, traders widely reference these well-known levels, reinforcing them psychologically and mechanically as key areas where price frequently pauses, reverses, or breaks with significance.
A good example of Support and Resistance is the First 30 Minutes High/Low Box which can be automatically drawn on your charts by utilizing the following script written in PineScript:

First 30 Minutes High/Low Box
//@version=6
indicator("First 30 Minutes High/Low Box", overlay = true)
range_minutes = input.int(30, "Range length (minutes)", minval = 1, maxval = 120)
extend_today = input.bool(true, "Extend today's 15m box across day")
fill_transp = input.int(95, "Box transparency", minval = 0, maxval = 100)
box_color = color.green
var int first_bar_index = na
var int window_end_ts = na
var float rng_hi = na
var float rng_lo = na
var box rng_box = na
new_day = ta.change(time("D")) != 0
if (new_day)
// New day starts: clear old box and start a new 15m window
if not na(rng_box)
box.delete(rng_box)
rng_box := na
first_bar_index := bar_index
rng_hi := high
rng_lo := low
window_end_ts := time + range_minutes * 60 * 1000
else
// While still inside the first 15 minutes, keep updating the range
in_window = not na(window_end_ts) and time <= window_end_ts
if in_window
rng_hi := na(rng_hi) ? high : math.max(rng_hi, high)
rng_lo := na(rng_lo) ? low : math.min(rng_lo, low)
if na(rng_box)
rng_box := box.new(left = first_bar_index, top = rng_hi, right = bar_index, bottom = rng_lo, xloc = xloc.bar_index, border_color = box_color, bgcolor = color.new(box_color, fill_transp))
else
box.set_top(rng_box, rng_hi)
box.set_bottom(rng_box, rng_lo)
box.set_right(rng_box, bar_index)
// After the window ends, just extend the box to the right if desired
if extend_today and not na(rng_box) and not in_window
box.set_right(rng_box, bar_index)
Lesson 03. Fair Value Gap
A Fair Value Gap (FVG) is an imbalance in price movement that shows where buying and selling weren’t equal — often caused by strong momentum from institutions.
In a candlestick chart, it’s a gap between candles where price moved too fast and skipped over levels with few or no trades.
Example
Candle A’s high is lower than Candle C’s low (with Candle B in between).
That leaves a gap between A’s high and C’s low.
It suggests inefficient price movement — price might later retrace into that gap before continuing upward.
Why traders care
Price often returns to fill part or all of the FVG before resuming its trend, making it a popular entry or retracement zone for smart money traders.

Lesson 02. Long & Short Positions
When buying stocks, there are two main positions you can take: long and short.
They’re called positions because you are taking a specific stance in the market; you are choosing to either benefit from prices going up or from prices going down.

Long
A long position means you buy shares because you expect the price to rise and plan to sell later at a profit.
Example
- You buy 10 shares at $50 each (go long).
- The price rises to $60.
- You sell and make $10 per share profit.
So “going long” = a normal buy trade.
It’s the opposite of shorting, where you profit if the price falls.
Short
A short position means you borrow shares and sell them right away because you expect the price to drop, then buy them back later at a lower price to return them.
Here’s how it works
You borrow shares from your broker and sell them at the current price.
Later, you buy them back (called “covering”) at a lower price.
You return the shares to the broker and keep the difference as profit.
Example
You short 10 shares at $100 → you get $1,000.
The stock drops to $80.
You buy them back for $800.
You return the shares and keep $200 profit.
If the stock price rises instead, you lose money — and losses can be unlimited, since prices can rise indefinitely.
Lesson 01. Candlestick Patterns
Candlestick patterns help traders quickly understand who is in control of a stock during any time period. Each candle shows the open, high, low, and close. A green candle means buyers pushed the price up, while a red candle shows sellers pushed it down. The body shows where price stayed, and the wicks show where price only passed through.

When several candles form a pattern, they reveal momentum and possible turning points. Many have fun names but none of them are decisive signals. Bullish patterns like hammers and engulfing candles suggest buyers are stepping in. Bearish patterns like shooting stars and bearish engulfing candles hint that sellers are gaining strength. Some candles show indecision, such as doji and spinning tops.

Candlestick patterns are not perfect signals, but they give valuable insight into pressure, emotion, and trend direction. With practice, you can use them to confirm entries, improve timing, and understand market behavior more clearly.
The Candlestick Bible (168 pages)




Lesson 00: TradingView
If you’re new to trading, one of the first tools you’ll hear about is TradingView. It’s the charting platform almost everyone uses—from beginners learning their first candlestick to professionals running complex strategies. Most modern trading education, including the lessons you’ll see here, uses TradingView as the visual foundation for examples, screenshots, and demonstrations. Learning how to navigate it early will make everything that follows far more intuitive.

TradingView is a charting platform that lets you analyze price action for stocks, crypto, forex, and futures. The charts are fast, customizable, and packed with tools. You can draw trendlines, mark support and resistance, add indicators, and replay price history to practice your strategy. It also comes with a social component: traders publish ideas, scripts, and setups that you can study to understand how others approach the market.
The real strength of TradingView is how easy it is to use. You can drag stop loss levels, zoom in and out smoothly, switch timeframes instantly, and organize your charts into watchlists. Whether you’re learning breakouts, trailing stops, supply and demand zones, or anything in between, TradingView gives you the clean visual environment you need to see the concepts in action.
Because of that, every lesson in this series relies on TradingView for demonstrations. If you’re not comfortable with it yet, the examples might feel abstract or confusing. Once you understand the basics—drawing tools, candles, timeframes, chart settings, and how to enter simulated trades—the concepts will click much faster.
So before you go deeper into strategy, take a little time to learn the platform. Spend an afternoon exploring its tools, watching a few beginner tutorials, and practicing simple chart markup. The better you know TradingView, the more value you’ll get from every trading lesson that follows.
You can download TradingView from https://www.tradingview.com