mirror of
https://github.com/mihakralj/QuanTAlib.git
synced 2026-08-18 02:28:05 +00:00
1.6 KiB
1.6 KiB
DWMA - Double Weighted Moving Average
DWMA is a moving average that applies the Weighted Moving Average (WMA) twice. It provides a smoother curve than a standard WMA but with slightly more lag.
Core Concepts
- Double Smoothing: Applies WMA smoothing twice to reduce noise further.
- Weighted: Gives more weight to recent data points, similar to WMA.
- Recursive Calculation: Uses the efficient O(1) WMA implementation.
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
period |
int |
- | The lookback period for both WMA passes. |
Formula
DWMA_t = WMA(WMA(Price, n), n)
Where:
WMAis the Weighted Moving Average.nis the period.
C# Implementation
Standard Usage
// Create DWMA with period 14
var dwma = new Dwma(14);
// Update with new value
var result = dwma.Update(new TValue(DateTime.Now, 123.45));
Console.WriteLine($"DWMA: {result.Value}");
Span API (High Performance)
// Calculate on a span of data
ReadOnlySpan<double> input = ...;
Span<double> output = new double[input.Length];
Dwma.Calculate(input, output, 14);
Bar Correction
// Update with a value
dwma.Update(new TValue(time, 100), isNew: true);
// Correct the last value
dwma.Update(new TValue(time, 101), isNew: false);
Interpretation
DWMA is used similarly to other moving averages to identify trends. Due to the double smoothing, it is less susceptible to whipsaws than WMA but reacts slower to price changes.