feat: add ADF (Augmented Dickey-Fuller) indicator

- Core implementation with Cholesky OLS, MacKinnon p-value, AIC lag selection
- Three regression models: NoConstant, Constant, ConstantAndTrend
- NormCdf via Abramowitz & Stegun 7.1.26 erf approximation
- Quantower adapter, Python bridge (NativeAOT export + ctypes + wrapper)
- 69 tests (41 unit + 12 validation + 14 Quantower + 2 consistency)
- Documentation with Schwert table, MacKinnon coefficients, PineScript ref
- All 19,095 tests pass, zero warnings
This commit is contained in:
Miha Kralj
2026-03-15 17:56:54 -07:00
parent 0468283d45
commit e3bd07aa87
17 changed files with 2790 additions and 2 deletions
+13
View File
@@ -105,6 +105,19 @@ public static unsafe partial class Exports
catch { return StatusCodes.QTL_ERR_INTERNAL; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_adf")]
public static int QtlAdf(double* source, double* output, int n, int period, int maxLag, int regression)
{
if (source == null || output == null) return StatusCodes.QTL_ERR_NULL_PTR;
if (n <= 0) return StatusCodes.QTL_ERR_INVALID_LENGTH;
try
{
Adf.Batch(Src(source, n), Dst(output, n), period, maxLag, (Adf.AdfRegression)regression);
return StatusCodes.QTL_OK;
}
catch { return StatusCodes.QTL_ERR_INTERNAL; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_adl")]
public static int QtlAdl(double* high, double* low, double* close, double* volume, double* output, int n)
{