Files
Miha Kralj 35a6702b06 fix(docs): correct .md documentation across errors, dynamics, filters, forecasts, momentum, numerics, oscillators, reversals, statistics, trends, volatility, volume
Deep review of all indicator categories verified .md headers against .cs WarmupPeriod, parameters, inputs, and outputs. Fixes include warmup corrections, parameter documentation, output type accuracy, and Pine Script alignment.
2026-03-10 18:38:23 -07:00

68 lines
3.0 KiB
Plaintext

// Licensed under the Apache License, Version 2.0
// © mihakralj
//@version=6
indicator("TTM Wave (TTM_WAVE)", "TTM_WAVE", overlay=false)
//@function EMA — standard exponential moving average for MACD computation.
//@param src Source series
//@param length EMA period
//@returns EMA value
ema_calc(series float src, simple int length) =>
float alpha = 2.0 / (length + 1)
var float result = 0.0
result := bar_index == 0 ? src : alpha * src + (1 - alpha) * result
result
//@function MACD histogram — (fast_ema - slow_ema) - signal_ema(fast_ema - slow_ema)
// This is the second derivative of momentum: acceleration of the spread.
//@param src Source series
//@param fast Fast EMA period
//@param slow Slow EMA period
//@param signal Signal EMA period (same as slow for TTM Wave)
//@returns MACD histogram value
macd_hist(series float src, simple int fast, simple int slow, simple int signal) =>
float fast_ema = ema_calc(src, fast)
float slow_ema = ema_calc(src, slow)
float macd_line = fast_ema - slow_ema
float signal_line = ema_calc(macd_line, signal)
macd_line - signal_line
//@function TTM Wave — six parallel MACD histogram channels at Fibonacci periods.
// Wave A (short-term): channels 1 (8,34,34) and 2 (8,55,55)
// Wave B (medium-term): channels 3 (8,89,89) and 4 (8,144,144)
// Wave C (long-term): channels 5 (8,233,233) and 6 (8,377,377)
// All channels share fast period 8. Signal period equals slow period.
//@param src Source series (default: close)
//@returns [waveA1, waveA2, waveB1, waveB2, waveC1, waveC2]
//@reference John Carter, "Mastering the Trade" (2005, 2012)
//@optimized Six independent EMA cascades, O(1) per bar per channel
ttm_wave(series float src) =>
float waveA1 = macd_hist(src, 8, 34, 34)
float waveA2 = macd_hist(src, 8, 55, 55)
float waveB1 = macd_hist(src, 8, 89, 89)
float waveB2 = macd_hist(src, 8, 144, 144)
float waveC1 = macd_hist(src, 8, 233, 233)
float waveC2 = macd_hist(src, 8, 377, 377)
[waveA1, waveA2, waveB1, waveB2, waveC1, waveC2]
// ── Inputs ──
float i_src = input.source(close, "Source")
// ── Calculation ──
[waveA1, waveA2, waveB1, waveB2, waveC1, waveC2] = ttm_wave(i_src)
// ── Plot (thinkorswim color convention) ──
// Wave A: yellow/green (short-term momentum)
plot(waveA1, "Wave A1", color=color.yellow, style=plot.style_histogram, linewidth=2)
plot(waveA2, "Wave A2", color=color.lime, style=plot.style_histogram, linewidth=2)
// Wave B: magenta/pink (medium-term momentum)
plot(waveB1, "Wave B1", color=color.fuchsia, style=plot.style_histogram, linewidth=2)
plot(waveB2, "Wave B2", color=color.new(color.fuchsia, 40), style=plot.style_histogram, linewidth=2)
// Wave C: red/orange (long-term momentum)
plot(waveC1, "Wave C1", color=color.red, style=plot.style_histogram, linewidth=2)
plot(waveC2, "Wave C2", color=color.orange, style=plot.style_histogram, linewidth=2)
hline(0, "Zero", color=color.gray, linestyle=hline.style_dotted)