Smart Trader, Episode 05
Concentric Candles & Aristotelian Cycloids
by Ata Sabanci
The Spark — How a 2,000-Year-Old Paradox Found the Charts
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
It started with a film about Aristotle's Wheel
Paradox — a problem that puzzled mathematicians
for two millennia. The setup is deceptively
simple: two circles, one inside the other, share
the same center and roll together along a
straight line. The outer circle traces a distance
equal to its circumference. But the inner circle,
attached rigidly to the outer, also travels the
same distance — yet its circumference is smaller.
How?
The answer lies in slipping. The inner circle
doesn't truly roll — it is dragged. And as it
moves, a point on its rim traces a beautiful
curve called a curtate cycloid — a compressed
wave that never reaches the full height of the
outer wheel's standard cycloid.
The moment I saw those curves being drawn in the
film — the elegant, rhythmic arches of the
cycloid — a thought struck me: what if this
geometry lives inside price charts too? What if
each candle, with its High, Low, Open, and Close,
could be mapped onto a rolling circle — and the
resulting cycloid curves could reveal hidden
structure in market behavior?
That question became this indicator.
The Problem — Why Raw Charts Break Geometry
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
A financial chart has two axes that measure
completely different things: the horizontal
axis counts bars (time), the vertical axis
measures price (currency). Drawing a circle on
such a chart is meaningless — it stretches and
distorts with every zoom or rescale. A "circle"
on a 1-minute chart looks nothing like the same
"circle" on a daily chart.
To draw real geometry on a price chart, both
axes must speak the same language. I needed a
scientifically rigorous way to convert between
time and price — not an arbitrary ratio, but one
derived from the market itself.
The Bridge — Volatility-Diffusion Normalization (σ√t)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
The answer comes from the σ√t scaling law in
financial mathematics. Under Geometric Brownian
Motion, the standard deviation of log-returns
scales as the square root of time:
std(Δ ln P) = σ × √Δt
This means 1 bar of time is equivalent to
σ_bar units of log-price. Once you know σ_bar,
both axes measure the same thing. Geometry
becomes invariant — it doesn't distort with
zoom, timeframe, or instrument.
For σ_bar, I use the Yang-Zhang volatility
estimator — the most statistically efficient
single-bar estimator in the literature. It uses
all four OHLC prices plus the overnight gap
between consecutive bars, combining three variance
components into one optimal estimate. After
extensive testing, a lookback of 20 bars proved
to be the best balance between responsiveness and
stability for geometric calibration.
Candle Selection — Finding the Dominant Voices
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Not every candle deserves a rolling wheel. The
indicator selects maxima candles — candles whose
H−L range is strictly larger than their immediate
chronological predecessor. These represent
volatility expansion events — moments when the
market spoke louder than the bar before it.
Two selection methods work in parallel:
1. Predecessor-Comparison (M0, M1): The scanner
walks backward from the basis candle. At each
step, it compares a candle's range to its
predecessor. When it finds one that is strictly
larger, that candle becomes a maxima. Two are
found this way.
2. Period Largest (M2): A separate scan finds
the single biggest candle (by H−L range) within
the last N bars (default 20). If it differs from
M0 and M1, it's appended as a third maxima — the
"biggest voice in the room."
Live vs. Closed Basis: The user can choose
whether the scanner starts from the live candle
(real-time, updates every tick) or the last closed
candle (stable, confirmed data). This affects both
the backward scan starting point and the CVCA
contact detection basis.
The Geometry — Three Concentric Circles per Candle
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Each selected maxima candle defines three
concentric circles in the normalized space — all
sharing the same center (the geometric midpoint
of the candle):
Outer Circle — diameter = H − L (full candle
range). This is the primary rolling wheel. A point
at its apex (the High) traces a standard cycloid.
Upper Wick Circle — diameter = H − max(O, C)
(upper wick). This inner wheel is dragged by the
outer — it slips along the baseline (Aristotle's
paradox). Traces a curtate cycloid with reduced
amplitude.
Lower Wick Circle — diameter = min(O, C) − L
(lower wick). Also dragged. Also traces a curtate
cycloid.
How the candle maps to circles:
⊚ Outer circle: diameter = H − L (full range)
→ traces a standard cycloid
▲ Upper wick circle: diameter = H − max(O,C)
→ traces a curtate cycloid
▼ Lower wick circle: diameter = min(O,C) − L
→ traces a curtate cycloid
All three share the same center (candle midpoint).
The outer circle is the driving wheel. The two
inner circles are dragged — they slip along the
rolling surface (Aristotle's paradox in action).
Drawing these curves in Pine Script was itself a
challenge — there's no native circle or parametric
curve function. By defining the normalized
coordinate space (where 1 bar = σ_bar units of
log-price) and using polylines with a hybrid
Newton-Bisection root solver to invert x(θ) → θ
at each bar index, I was able to render the
cycloid curves directly on the price chart with
high fidelity.
The parametric equations for each curve follow the
two-radius Aristotle's Wheel formulation:
x(θ) = R·θ − r·sin(θ+φ₀) + r·sin(φ₀)
y(θ) = R − r·cos(θ+φ₀)
Where R = outer rolling radius, r = traced
point's circle radius, and φ₀ = π (apex start,
clockwise rolling). The inverse transform
price = exp(lnLow + y_norm × σ_bar) maps the
normalized cycloid back to the price chart —
geometry anchored at the candle's Low.
On the chart, the curves appear as follows:
⊚ Outer Apex (y = 2R): highest cycloid point
▲ Upper Pin Apex (y = R + r_up): curtate peak
▲ Upper Pin Trough (y = R − r_up): curtate min
⊚ Outer Trough (y = 0): the rolling surface
= candle's Low price
The outer cycloid arches from Low up to 2R and
back. The pin cycloids oscillate within the outer
envelope with reduced amplitude — visible as
nested waves inside the main curve.
The Signal — Cycloid-Volume Contact Analysis (CVCA)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Drawing beautiful curves is one thing. The real
question is: what happens when price touches a
cycloid curve?
The CVCA engine detects real-time intersections
between the live candle and all active cycloid
curves. When contact is detected, it runs a
7-axis prediction matrix that combines geometry
with volume analysis:
Axis 1 — Contact Direction: Did the body cross
the curve? Did a wick test it? Five states: Passed
Up, Passed Down, Stopped, Wick Bounce, Wick
Reject.
Axis 2 — Curve Type: Which circle generated
this curve? Outer (strongest), Upper Pin, or Lower
Pin.
Axis 3 — Curve Zone: Is the contact near the
Apex (peak), Trough (bottom), or Mid-range of the
cycloid?
Axis 4 — Volume Magnitude: How does current
volume at the contact price compare to the maxima
candle's volume at the same price? Amplified,
Proportional, or Depleted.
Axis 5 — Delta Character: How has the buy/sell
imbalance changed since the maxima candle?
Continued, Weakened, or Flipped.
Axis 6 — Absorption Detection: Is heavy
opposing volume being absorbed while price holds?
Buy Absorption, Sell Absorption, or None.
Axis 7 — Multi-Cycloid Confluence: How many
other cycloid curves pass through the same price
level? Single, Double, or Triple+ confluence.
All seven axes feed into a continuous scoring
engine using logistic-sigmoid soft-clamping — no
hard thresholds, no cliff-edge label flips. The
output is a directional probability P(↑), a
conviction score, and a behavior classification
(Strong Bounce, Breakout, Exhaustion, Absorption,
Battle Zone, Delta Flip, Confluence Wall, and
more).
When footprint data is available (TradingView
Premium/Ultimate), CVCA operates at tick-level
precision — comparing buy and sell volume at the
exact contact price row between the maxima candle
and the current candle. Without footprint, it
falls back to geometry-only analysis using the
first three axes.
Scientific Foundations
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
This indicator draws on the following mathematical
and statistical frameworks:
• Geometric Brownian Motion — dS/S = μdt + σdW
— the σ√t diffusion scaling law that bridges
time and price axes.
• Yang-Zhang Volatility Estimator — Uses
O/H/L/C + overnight gaps; the most statistically
efficient single-bar σ estimator in the
literature.
• Rogers-Satchell Volatility — Drift-independent
variance component inside the Yang-Zhang
estimator.
• Aristotle's Wheel Paradox — Concentric circles
rolling together — the inner circle slips,
creating curtate cycloids.
• Cycloid Curves — Standard (outer) + curtate
(inner pin circles) — called the "Helen of
Geometry" by Galileo.
• Parametric Phase-Anchored Equations —
Two-radius cycloid:
x(θ)=Rθ−r·sin(θ+φ₀), y(θ)=R−r·cos(θ+φ₀).
• Hybrid Newton-Bisection Root Solver —
Numerical inversion of x(θ)→θ at each bar for
accurate curve rendering.
• Kyle-Obizhaeva Impact Law — σ√(Q/V) —
volume magnitude analysis for CVCA Axis 4.
• Easley-O'Hara PIN/VPIN — Delta as informed
trading proxy — CVCA Axis 5.
• Cont et al. (2014) OFI — Order Flow Imbalance
linear impact model — absorption detection in
CVCA Axis 6.
• Xu et al. (2019) MLOFI — Multi-Level Order
Flow Imbalance — confluence scoring for CVCA
Axis 7.
• Logistic Sigmoid Soft-Clamping — Continuous
scoring without cliff-edge thresholds — used
across all CVCA axes.
Architecture — How It All Connects
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
The indicator processes data in the following
pipeline:
Stage 1: Raw Input
OHLC price data + volume arrive per bar.
Stage 2: Two Parallel Engines
→ Yang-Zhang σ_bar Estimator (Lookback = N):
Computes overnight variance, close-open
variance, and Rogers-Satchell variance.
Combines them into σ_bar.
→ Volume Engine (Geometric or Intrabar):
Splits total volume into buy/sell.
Stores per-bar for historical comparison.
Stage 3: Normalization
Converts axes: 1 bar = σ_bar, Y = ln(P) / σ.
Both axes now measure the same units.
Stage 4: Candle Selection
→ Predecessor-Comparison scan → M0, M1
→ Period-Largest scan → M2 (if unique)
Stage 5: Concentric Circles
Per maxima candle, 3 circles are defined:
⊚ Outer (H−L)
▲ Upper (H−max(O,C))
▼ Lower (min(O,C)−L)
Stage 6: Cycloid Math
Parametric equations + Newton-Bisection solver.
Phase φ₀ = π. Auto-revolutions extend curves
to the live bar.
Stage 7: Two Outputs
→ Polyline Render: 3 curves per Mi, bowl fill,
reference lines, geometric markers.
→ CVCA Engine: Contact detection, 7-axis
matrix, P(↑), conviction, behavior label.
Stage 8: Dashboard Table
Title + σ_bar info
Mi blocks (Offset, Length, Mid, Levels)
S/R Detection (Nearest Above/Below)
CVCA Contact Analysis (3-row layout)
Volume Engine (Buy/Sell/Delta/FP Status)
Settings Guide
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Core Settings
σ_bar Lookback Period: Rolling window for the
Yang-Zhang volatility estimator. Controls how many
bars are used to compute σ_bar — the bridge
between time and price axes. Larger values produce
more robust geometric calibration but respond
slower to regime changes. Default: 20.
Range: 1–2500.
Cycloid Display
Show Outer/Upper/Lower Traces: Toggle
visibility of each of the three concentric cycloid
curves. The Outer (H−L) is the primary rolling
wheel — the strongest geometric curve. Upper and
Lower Pin curves trace the wick circles and show
internal candle structure.
Show Period Largest Candle: Enables the
period-based maxima scanner (M2). Scans the last N
bars for the single biggest candle. If it already
matches M0 or M1, no duplicate is drawn.
Period Lookback Length: Number of bars to scan
for the period-based largest candle. Default: 20.
Range: 5–200.
Show Reference Lines: Draws horizontal dashed
lines at cycloid apex and trough levels — the
geometric S/R framework. Six individual toggles
control which levels are drawn: Outer Apex (2R),
Outer Trough (0), Upper Pin Apex/Trough, Lower
Pin Apex/Trough.
Curve Color — Above/Below Price: When the
Outer Apex level is above current close, all
curves for that maxima use the "Above" color
(default: orange). When below, they use the
"Below" color (default: cyan). This gives an
instant visual read of the curve's S/R context.
Volume Engine
Calculation Method: Two engines — Geometric
(estimates buy/sell from OHLC price action) and
Intrabar (uses lower timeframe tick data via
TradingView's ta library for precise
decomposition).
Intrabar Timeframe: Lower timeframe for
precise volume calculation. Only active in Intrabar
mode. 15S (15-second) recommended for most
instruments.
Calculation Basis: Current Candle uses live bar
data. Closed Candle uses only the last confirmed
bar — more stable, avoids intrabar noise.
Footprint & Contact Analysis
Show Contact Analysis (CVCA): Enables the
7-axis prediction engine in the dashboard. Detects
cycloid curve intersections and outputs directional
probability, conviction score, and behavior
classification. Requires TradingView
Premium or Ultimate for full footprint data; falls
back to Volume Engine data when footprint is
unavailable.
Dashboard Settings
Show Dashboard: Projects the full data
dashboard onto the main price chart. Shows σ_bar
info, all Mi blocks with reference levels, S/R
detection, CVCA contact analysis, and volume
metrics.
Dashboard Position: Four corners: Top Right
(default), Top Left, Bottom Right, Bottom Left.
Dashboard Language: English, Türkçe, or
العربية. Full localization of all labels,
tooltips, and natural-language sentences.
Show Mi Reference Prices: Expands each Mi
block in the dashboard to show all 6 reference
price levels (3 apex + 3 trough). Default: OFF to
keep the dashboard compact.
A Theory, Not a System — An Invitation to Explore
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
This indicator is a theoretical exploration,
not a proven trading system. The idea that
Aristotle's Wheel geometry maps meaningfully onto
price structure is a hypothesis — one that I
find compelling enough to build, share, and test
publicly, but one that requires far more data,
analysis, and community scrutiny to validate or
refute.
I chose to publish it on TradingView precisely
because this platform is a living laboratory —
constantly moderated, reviewed, and challenged by
a global community of traders, developers, and
analysts. If the cycloid geometry holds predictive
value, this community will find it. If it doesn't,
this community will expose it.
Use this indicator as a research tool, not as a
signal generator. Combine it with your own
analysis. Question its assumptions. Test it across
instruments and timeframes. And if you discover
something — share it.
The mathematics is beautiful. Whether the market
agrees is an open question.
Информация о релизе
📌 Update — Based on Community FeedbackThank you to everyone who reported issues via TradingView comments and direct messages. Two runtime errors have been identified and resolved based on your feedback:
Fix 1 — "Histogram is too large, please increase Ticks Per Row"
This error appeared on high-volatility instruments such as BTCUSD, NAS100, and XAUUSD when the CVCA (Contact Analysis) engine was enabled. The footprint histogram exceeded TradingView's internal 500-row limit due to the extreme price range within a single bar.
What changed:
— CVCA is now OFF by default. The indicator loads cleanly on every instrument without any settings adjustment.
— A new input "Ticks Per Row (Footprint Resolution)" has been added to give you full control over footprint granularity.
— Default value is 500,000, which is safe for all instruments including crypto and volatile indices.
Recommended usage:
— For crypto and indices (BTC, NAS100, etc.): keep the default 500,000 or lower gradually for more precision.
— For stocks and forex: lower to 1–10 for maximum tick-level precision, since these instruments have much smaller bar ranges.
— If you still see the error after adjusting, or if you are not on a Premium or Ultimate plan, simply disable the "Show Contact Analysis (CVCA)" toggle in settings. The CVCA engine requires TradingView Premium or Ultimate for tick-level footprint data — this is a platform requirement, not a script limitation.
Fix 2 — "This script uses seconds-based timeframes"
This error affected users on Basic and Plus plans. The previous default Intrabar Timeframe was set to 15S (15 seconds), which requires a Premium or higher-tier plan.
What changed:
— Default Intrabar Timeframe changed from 15S to 1 (1-minute), which works on all TradingView plans.
— Default Calculation Method remains "Geometry (Approx)", which has zero plan restrictions and works universally across all instruments and all plans.
Summary
All core features — Concentric Candles, Cycloid Curves, S/R Detection, Volume Engine, and Dashboard — work on all TradingView plans without any restrictions. The CVCA engine is an advanced opt-in feature that requires Premium or Ultimate plan access for full functionality.
Информация о релизе
What's NewPlan Compatibility & Volume Data Access
TradingView provides volume data at different levels of granularity depending on your plan. The deepest level — tick-level volume footprint — gives you the actual exchange-recorded buy and sell volume at every price row inside each candle. This data is accessed through Pine Script's request.footprint() function and is available on Premium and Ultimate plans.
In the previous version, this data request executed on every bar regardless of user settings. This update introduces conditional dynamic execution — the request now fires only when you explicitly enable CVCA in the settings. When OFF (default), the function never executes. The same gating is applied to the lower timeframe volume request, which now activates only when "Intrabar (Precise)" is selected.
The script now runs cleanly on all TradingView plans including Free, with zero configuration required.
How Volume Analysis Works Across Plans
On Free, Essential, and Plus plans, the script uses geometric volume decomposition — a mathematical model that estimates buy and sell pressure from each candle's shape. Buying pressure is derived from the close-to-low proportion of the bar's range; selling pressure from the high-to-close proportion. Total reported volume is then split accordingly. This approach works on every instrument, every timeframe, every plan — no external data dependency.
On Premium and Ultimate plans with CVCA enabled, the script additionally reads real exchange-level tick data — the actual buy and sell volume recorded at each price level within the bar. This is the most granular volume information available on TradingView, and it powers the full 7-axis CVCA prediction matrix.
Both paths produce meaningful analysis. The geometric method gives you a solid directional read from price structure alone. The footprint path adds order-flow precision on top of it.
No Functional Changes
All existing calculations, signals, dashboard outputs, and visual elements remain exactly as they were. This update is strictly about smarter resource management and broader accessibility.
Скрипт с открытым кодом
В истинном духе TradingView, создатель этого скрипта сделал его открытым исходным кодом, чтобы трейдеры могли проверить и убедиться в его функциональности. Браво автору! Вы можете использовать его бесплатно, но помните, что перепубликация кода подчиняется нашим Правилам поведения.
Uncovering hidden market depth through Volume Dynamics & Data-Driven Logic.
Follow the flow:
x.com/sabanci_ata
Follow the flow:
x.com/sabanci_ata
Отказ от ответственности
Информация и публикации не предназначены для предоставления и не являются финансовыми, инвестиционными, торговыми или другими видами советов или рекомендаций, предоставленных или одобренных TradingView. Подробнее читайте в Условиях использования.
Скрипт с открытым кодом
В истинном духе TradingView, создатель этого скрипта сделал его открытым исходным кодом, чтобы трейдеры могли проверить и убедиться в его функциональности. Браво автору! Вы можете использовать его бесплатно, но помните, что перепубликация кода подчиняется нашим Правилам поведения.
Uncovering hidden market depth through Volume Dynamics & Data-Driven Logic.
Follow the flow:
x.com/sabanci_ata
Follow the flow:
x.com/sabanci_ata
Отказ от ответственности
Информация и публикации не предназначены для предоставления и не являются финансовыми, инвестиционными, торговыми или другими видами советов или рекомендаций, предоставленных или одобренных TradingView. Подробнее читайте в Условиях использования.
