2026-02-28 14:14:35 -08:00
// <auto-generated />
#nullable enable
using System ;
using System.Runtime.InteropServices ;
using QuanTAlib ;
namespace QuanTAlib.Python ;
feat: add new indicators (Decay, Edecay, MinusDi, MinusDm, PlusDi, PlusDm, Maxindex, Minindex, Sarext) and update pine scripts, core libs, validation tests, and python bindings
2026-03-09 13:45:46 -07:00
[System.Diagnostics.CodeAnalysis.SuppressMessage(
"Security Hotspot",
"S6640",
Justification = "Generated NativeAOT export helpers bridge unmanaged caller-owned buffers into managed series objects. The unsafe context is required by the ABI and remains constrained to pointer-to-span copies over validated inputs.")]
2026-02-28 14:14:35 -08:00
public static unsafe partial class Exports
{
private static TSeries BuildSeries ( double * src , int n )
{
var t = new long [ n ];
var v = new double [ n ];
new ReadOnlySpan < double >( src , n ). CopyTo ( v );
for ( int i = 0 ; i < n ; i ++) t [ i ] = i ;
return new TSeries ( t , v );
}
private static TBarSeries BuildBars ( double * open , double * high , double * low , double * close , double * volume , int n )
{
var t = new long [ n ];
var o = new double [ n ];
var h = new double [ n ];
var l = new double [ n ];
var c = new double [ n ];
var v = new double [ n ];
new ReadOnlySpan < double >( open , n ). CopyTo ( o );
new ReadOnlySpan < double >( high , n ). CopyTo ( h );
new ReadOnlySpan < double >( low , n ). CopyTo ( l );
new ReadOnlySpan < double >( close , n ). CopyTo ( c );
new ReadOnlySpan < double >( volume , n ). CopyTo ( v );
for ( int i = 0 ; i < n ; i ++) t [ i ] = i ;
var bars = new TBarSeries ( n );
bars . AddRange ( t , o , h , l , c , v );
return bars ;
}
[UnmanagedCallersOnly(EntryPoint = "qtl_abber")]
public static int QtlAbber ( double * source , double * middle , double * upper , double * lower , int n , int period , double multiplier )
{
if ( source == null || middle == null || upper == null || lower == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Aberr . Batch ( Src ( source , n ), Dst ( middle , n ), Dst ( upper , n ), Dst ( lower , n ), period , multiplier );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_ac")]
public static int QtlAc ( double * high , double * low , double * destination , int n , int fastPeriod , int slowPeriod , int acPeriod )
{
if ( high == null || low == null || destination == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Ac . Batch ( Src ( high , n ), Src ( low , n ), Dst ( destination , n ), fastPeriod , slowPeriod , acPeriod );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_accbands")]
public static int QtlAccBands ( double * high , double * low , double * close , double * middle , double * upper , double * lower , int n , int period , double factor )
{
if ( high == null || low == null || close == null || middle == null || upper == null || lower == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
AccBands . Batch ( Src ( high , n ), Src ( low , n ), Src ( close , n ), Dst ( middle , n ), Dst ( upper , n ), Dst ( lower , n ), period , factor );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_accel")]
public static int QtlAccel ( double * source , double * output , int n )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Accel . Batch ( Src ( source , n ), Dst ( output , n ));
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_acf")]
public static int QtlAcf ( double * source , double * output , int n , int period , int lag )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Acf . Batch ( Src ( source , n ), Dst ( output , n ), period , lag );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
2026-03-15 17:56:54 -07:00
[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 ; }
}
2026-03-16 12:45:13 -07:00
[UnmanagedCallersOnly(EntryPoint = "qtl_ad")]
public static int QtlAd ( double * high , double * low , double * close , double * volume , double * output , int n )
2026-02-28 14:14:35 -08:00
{
if ( high == null || low == null || close == null || volume == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
2026-03-16 12:45:13 -07:00
Ad . Batch ( Src ( high , n ), Src ( low , n ), Src ( close , n ), Src ( volume , n ), Dst ( output , n ));
2026-02-28 14:14:35 -08:00
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_adosc")]
public static int QtlAdosc ( double * high , double * low , double * close , double * volume , double * output , int n , int fastPeriod , int slowPeriod )
{
if ( high == null || low == null || close == null || volume == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Adosc . Batch ( Src ( high , n ), Src ( low , n ), Src ( close , n ), Src ( volume , n ), Dst ( output , n ), fastPeriod , slowPeriod );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_adr")]
public static int QtlAdr ( double * sourceOpen , double * sourceHigh , double * sourceLow , double * sourceClose , double * sourceVolume , int period , int method , int n , double * dst )
{
if ( sourceOpen == null || sourceHigh == null || sourceLow == null || sourceClose == null || sourceVolume == null || dst == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
var sourceBars = BuildBars ( sourceOpen , sourceHigh , sourceLow , sourceClose , sourceVolume , n );
var result = Adr . Batch ( sourceBars , period , ( AdrMethod ) method );
var values = result . Values ;
if ( values . Length > n ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
var outSpan = Dst ( dst , n );
outSpan . Fill ( double . NaN );
values . CopyTo ( outSpan );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_adx")]
public static int QtlAdx ( double * high , double * low , double * close , int period , int n , double * destination )
{
if ( high == null || low == null || close == null || destination == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Adx . Batch ( Src ( high , n ), Src ( low , n ), Src ( close , n ), period , Dst ( destination , n ));
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_adxr")]
public static int QtlAdxr ( double * high , double * low , double * close , int period , int n , double * destination )
{
if ( high == null || low == null || close == null || destination == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Adxr . Batch ( Src ( high , n ), Src ( low , n ), Src ( close , n ), period , Dst ( destination , n ));
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_adxvma")]
public static int QtlAdxvma ( double * sourceOpen , double * sourceHigh , double * sourceLow , double * sourceClose , double * sourceVolume , int period , int n , double * dst )
{
if ( sourceOpen == null || sourceHigh == null || sourceLow == null || sourceClose == null || sourceVolume == null || dst == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
var sourceBars = BuildBars ( sourceOpen , sourceHigh , sourceLow , sourceClose , sourceVolume , n );
var result = Adxvma . Batch ( sourceBars , period );
var values = result . Values ;
if ( values . Length > n ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
var outSpan = Dst ( dst , n );
outSpan . Fill ( double . NaN );
values . CopyTo ( outSpan );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_alligator")]
public static int QtlAlligator ( double * sourceOpen , double * sourceHigh , double * sourceLow , double * sourceClose , double * sourceVolume , int jawPeriod , int jawOffset , int teethPeriod , int teethOffset , int lipsPeriod , int lipsOffset , int n , double * dst )
{
if ( sourceOpen == null || sourceHigh == null || sourceLow == null || sourceClose == null || sourceVolume == null || dst == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
var sourceBars = BuildBars ( sourceOpen , sourceHigh , sourceLow , sourceClose , sourceVolume , n );
var result = Alligator . Batch ( sourceBars , jawPeriod , jawOffset , teethPeriod , teethOffset , lipsPeriod , lipsOffset );
var values = result . Values ;
if ( values . Length > n ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
var outSpan = Dst ( dst , n );
outSpan . Fill ( double . NaN );
values . CopyTo ( outSpan );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_amat")]
public static int QtlAmat ( double * source , double * trend , double * strength , int n , int fastPeriod , int slowPeriod )
{
if ( source == null || trend == null || strength == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Amat . Batch ( Src ( source , n ), Dst ( trend , n ), Dst ( strength , n ), fastPeriod , slowPeriod );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_ao")]
public static int QtlAo ( double * high , double * low , double * destination , int n , int fastPeriod , int slowPeriod )
{
if ( high == null || low == null || destination == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Ao . Batch ( Src ( high , n ), Src ( low , n ), Dst ( destination , n ), fastPeriod , slowPeriod );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_apz")]
public static int QtlApz ( double * sourceOpen , double * sourceHigh , double * sourceLow , double * sourceClose , double * sourceVolume , int period , double multiplier , int n , double * dstMiddle , double * dstUpper , double * dstLower )
{
if ( sourceOpen == null || sourceHigh == null || sourceLow == null || sourceClose == null || sourceVolume == null || dstMiddle == null || dstUpper == null || dstLower == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
var sourceBars = BuildBars ( sourceOpen , sourceHigh , sourceLow , sourceClose , sourceVolume , n );
var result = Apz . Batch ( sourceBars , period , multiplier );
var valuesMiddle = result . Middle . Values ;
if ( valuesMiddle . Length > n ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
var outSpanMiddle = Dst ( dstMiddle , n );
outSpanMiddle . Fill ( double . NaN );
valuesMiddle . CopyTo ( outSpanMiddle );
var valuesUpper = result . Upper . Values ;
if ( valuesUpper . Length > n ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
var outSpanUpper = Dst ( dstUpper , n );
outSpanUpper . Fill ( double . NaN );
valuesUpper . CopyTo ( outSpanUpper );
var valuesLower = result . Lower . Values ;
if ( valuesLower . Length > n ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
var outSpanLower = Dst ( dstLower , n );
outSpanLower . Fill ( double . NaN );
valuesLower . CopyTo ( outSpanLower );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_aroon")]
public static int QtlAroon ( double * high , double * low , int period , int n , double * destination )
{
if ( high == null || low == null || destination == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Aroon . Batch ( Src ( high , n ), Src ( low , n ), period , Dst ( destination , n ));
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_aroonosc")]
public static int QtlAroonOsc ( double * high , double * low , int period , int n , double * destination )
{
if ( high == null || low == null || destination == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
AroonOsc . Batch ( Src ( high , n ), Src ( low , n ), period , Dst ( destination , n ));
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
2026-03-17 08:35:29 -07:00
[UnmanagedCallersOnly(EntryPoint = "qtl_atrstop")]
public static int QtlAtrstop ( double * high , double * low , double * close , double * output , int n , int period , double multiplier )
{
if ( high == null || low == null || close == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
if ( period <= 0 ) return StatusCodes . QTL_ERR_INVALID_PARAM ;
try
{
Atrstop . Batch ( Src ( high , n ), Src ( low , n ), Src ( close , n ), Dst ( output , n ), period , multiplier );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
2026-02-28 14:14:35 -08:00
[UnmanagedCallersOnly(EntryPoint = "qtl_atr")]
public static int QtlAtr ( double * sourceOpen , double * sourceHigh , double * sourceLow , double * sourceClose , double * sourceVolume , int period , int n , double * dst )
{
if ( sourceOpen == null || sourceHigh == null || sourceLow == null || sourceClose == null || sourceVolume == null || dst == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
var sourceBars = BuildBars ( sourceOpen , sourceHigh , sourceLow , sourceClose , sourceVolume , n );
var result = Atr . Batch ( sourceBars , period );
var values = result . Values ;
if ( values . Length > n ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
var outSpan = Dst ( dst , n );
outSpan . Fill ( double . NaN );
values . CopyTo ( outSpan );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_atrn")]
public static int QtlAtrn ( double * sourceOpen , double * sourceHigh , double * sourceLow , double * sourceClose , double * sourceVolume , int period , int n , double * dst )
{
if ( sourceOpen == null || sourceHigh == null || sourceLow == null || sourceClose == null || sourceVolume == null || dst == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
var sourceBars = BuildBars ( sourceOpen , sourceHigh , sourceLow , sourceClose , sourceVolume , n );
var result = Atrn . Batch ( sourceBars , period );
var values = result . Values ;
if ( values . Length > n ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
var outSpan = Dst ( dst , n );
outSpan . Fill ( double . NaN );
values . CopyTo ( outSpan );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_bbs")]
public static int QtlBbs ( double * high , double * low , double * close , double * output , int n , int bbPeriod , double bbMult )
{
if ( high == null || low == null || close == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Bbs . Batch ( Src ( high , n ), Src ( low , n ), Src ( close , n ), Dst ( output , n ), bbPeriod , bbMult );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_bop")]
public static int QtlBop ( double * open , double * high , double * low , double * close , double * destination , int n )
{
if ( open == null || high == null || low == null || close == null || destination == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Bop . Batch ( Src ( open , n ), Src ( high , n ), Src ( low , n ), Src ( close , n ), Dst ( destination , n ));
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
2026-03-17 08:35:29 -07:00
[UnmanagedCallersOnly(EntryPoint = "qtl_bwmfi")]
public static int QtlBwMfi ( double * high , double * low , double * volume , double * mfiOutput , double * zoneOutput , int n )
{
if ( high == null || low == null || volume == null || mfiOutput == null || zoneOutput == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
var hi = Src ( high , n );
var lo = Src ( low , n );
var vol = Src ( volume , n );
var mfiTmp = new double [ n ];
var zoneTmp = new int [ n ];
BwMfi . Batch ( hi , lo , vol , mfiTmp . AsSpan (), zoneTmp . AsSpan ());
mfiTmp . AsSpan (). CopyTo ( Dst ( mfiOutput , n ));
var zoneDst = Dst ( zoneOutput , n );
for ( int i = 0 ; i < n ; i ++)
{
zoneDst [ i ] = zoneTmp [ i ];
}
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_dstoch")]
public static int QtlDstoch ( double * high , double * low , double * close , double * output , int n , int period )
{
if ( high == null || low == null || close == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
if ( period <= 0 ) return StatusCodes . QTL_ERR_INVALID_PARAM ;
try
{
Dstoch . Batch ( Src ( high , n ), Src ( low , n ), Src ( close , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
2026-02-28 14:14:35 -08:00
[UnmanagedCallersOnly(EntryPoint = "qtl_cci")]
public static int QtlCci ( double * sourceOpen , double * sourceHigh , double * sourceLow , double * sourceClose , double * sourceVolume , int period , int n , double * dst )
{
if ( sourceOpen == null || sourceHigh == null || sourceLow == null || sourceClose == null || sourceVolume == null || dst == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
var sourceBars = BuildBars ( sourceOpen , sourceHigh , sourceLow , sourceClose , sourceVolume , n );
var result = Cci . Batch ( sourceBars , period );
var values = result . Values ;
if ( values . Length > n ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
var outSpan = Dst ( dst , n );
outSpan . Fill ( double . NaN );
values . CopyTo ( outSpan );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_chandelier")]
public static int QtlChandelier ( double * open , double * high , double * low , double * close , double * output , int n , int period , double multiplier )
{
if ( open == null || high == null || low == null || close == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Chandelier . Batch ( Src ( open , n ), Src ( high , n ), Src ( low , n ), Src ( close , n ), Dst ( output , n ), period , multiplier );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_chop")]
public static int QtlChop ( double * sourceOpen , double * sourceHigh , double * sourceLow , double * sourceClose , double * sourceVolume , int period , int n , double * dst )
{
if ( sourceOpen == null || sourceHigh == null || sourceLow == null || sourceClose == null || sourceVolume == null || dst == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
var sourceBars = BuildBars ( sourceOpen , sourceHigh , sourceLow , sourceClose , sourceVolume , n );
var result = Chop . Batch ( sourceBars , period );
var values = result . Values ;
if ( values . Length > n ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
var outSpan = Dst ( dst , n );
outSpan . Fill ( double . NaN );
values . CopyTo ( outSpan );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_ckstop")]
public static int QtlCkstop ( double * open , double * high , double * low , double * close , double * output , int n , int atrPeriod , double multiplier , int stopPeriod )
{
if ( open == null || high == null || low == null || close == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Ckstop . Batch ( Src ( open , n ), Src ( high , n ), Src ( low , n ), Src ( close , n ), Dst ( output , n ), atrPeriod , multiplier , stopPeriod );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_coppock")]
public static int QtlCoppock ( double * source , double * output , int n , int longRoc , int shortRoc , int wmaPeriod )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Coppock . Batch ( Src ( source , n ), Dst ( output , n ), longRoc , shortRoc , wmaPeriod );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
2026-03-16 12:45:13 -07:00
[UnmanagedCallersOnly(EntryPoint = "qtl_dc")]
public static int QtlDc ( double * high , double * low , double * middle , double * upper , double * lower , int n , int period )
2026-02-28 14:14:35 -08:00
{
if ( high == null || low == null || middle == null || upper == null || lower == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
2026-03-16 12:45:13 -07:00
Dc . Batch ( Src ( high , n ), Src ( low , n ), Dst ( middle , n ), Dst ( upper , n ), Dst ( lower , n ), period );
2026-02-28 14:14:35 -08:00
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_decaychannel")]
public static int QtlDecaychannel ( double * high , double * low , double * middle , double * upper , double * lower , int n , int period )
{
if ( high == null || low == null || middle == null || upper == null || lower == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Decaychannel . Batch ( Src ( high , n ), Src ( low , n ), Dst ( middle , n ), Dst ( upper , n ), Dst ( lower , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
2026-03-17 13:35:03 -07:00
}
[UnmanagedCallersOnly(EntryPoint = "qtl_dmh")]
public static int QtlDmh ( double * high , double * low , int period , int n , double * destination )
{
if ( high == null || low == null || destination == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Dmh . Batch ( Src ( high , n ), Src ( low , n ), period , Dst ( destination , n ));
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
2026-02-28 14:14:35 -08:00
}
[UnmanagedCallersOnly(EntryPoint = "qtl_dmx")]
public static int QtlDmx ( double * high , double * low , double * close , int period , int n , double * destination )
{
if ( high == null || low == null || close == null || destination == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Dmx . Batch ( Src ( high , n ), Src ( low , n ), Src ( close , n ), period , Dst ( destination , n ));
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_dx")]
public static int QtlDx ( double * high , double * low , double * close , int period , int n , double * destination )
{
if ( high == null || low == null || close == null || destination == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Dx . Batch ( Src ( high , n ), Src ( low , n ), Src ( close , n ), period , Dst ( destination , n ));
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_eri")]
public static int QtlEri ( double * source , int period , int n , double * dst )
{
if ( source == null || dst == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
var sourceSeries = BuildSeries ( source , n );
var result = Eri . Batch ( sourceSeries , period );
var values = result . Values ;
if ( values . Length > n ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
var outSpan = Dst ( dst , n );
outSpan . Fill ( double . NaN );
values . CopyTo ( outSpan );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_fcb")]
public static int QtlFcb ( double * high , double * low , double * middle , double * upper , double * lower , int n , int period )
{
if ( high == null || low == null || middle == null || upper == null || lower == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Fcb . Batch ( Src ( high , n ), Src ( low , n ), Dst ( middle , n ), Dst ( upper , n ), Dst ( lower , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_fdist")]
public static int QtlFdist ( double * source , double * output , int n , int d1 , int d2 , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Fdist . Batch ( Src ( source , n ), Dst ( output , n ), d1 , d2 , period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_fft")]
public static int QtlFft ( double * src , double * output , int n , int windowSize , int minPeriod , int maxPeriod )
{
if ( src == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Fft . Batch ( Src ( src , n ), Dst ( output , n ), windowSize , minPeriod , maxPeriod );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_fi")]
public static int QtlFi ( double * source , int period , int n , double * dst )
{
if ( source == null || dst == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
var sourceSeries = BuildSeries ( source , n );
var result = Fi . Batch ( sourceSeries , period );
var values = result . Values ;
if ( values . Length > n ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
var outSpan = Dst ( dst , n );
outSpan . Fill ( double . NaN );
values . CopyTo ( outSpan );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_fractals")]
public static int QtlFractals ( double * high , double * low , double * upOutput , double * downOutput , int n )
{
if ( high == null || low == null || upOutput == null || downOutput == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Fractals . Batch ( Src ( high , n ), Src ( low , n ), Dst ( upOutput , n ), Dst ( downOutput , n ));
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_frama")]
2026-03-02 15:56:12 -08:00
public static int QtlFrama ( double * high , double * low , double * output , int n , int period )
2026-02-28 14:14:35 -08:00
{
2026-03-02 15:56:12 -08:00
if ( high == null || low == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
2026-02-28 14:14:35 -08:00
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
2026-03-02 15:56:12 -08:00
Frama . Batch ( Src ( high , n ), Src ( low , n ), period , Dst ( output , n ));
2026-02-28 14:14:35 -08:00
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_fwma")]
public static int QtlFwma ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Fwma . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_gammadist")]
public static int QtlGammadist ( double * source , double * output , int n , double alpha , double beta , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Gammadist . Batch ( Src ( source , n ), Dst ( output , n ), alpha , beta , period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_gator")]
public static int QtlGator ( double * source , double * output , int n , int jawPeriod , int jawShift , int teethPeriod , int teethShift , int lipsPeriod , int lipsShift )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Gator . Batch ( Src ( source , n ), Dst ( output , n ), jawPeriod , jawShift , teethPeriod , teethShift , lipsPeriod , lipsShift );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_gauss")]
public static int QtlGauss ( double * source , double * output , int n , double sigma )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Gauss . Batch ( Src ( source , n ), Dst ( output , n ), sigma );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_geomean")]
public static int QtlGeomean ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Geomean . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_ghla")]
public static int QtlGhla ( double * high , double * low , double * close , double * output , int n , int period )
{
if ( high == null || low == null || close == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Ghla . Batch ( Src ( high , n ), Src ( low , n ), Src ( close , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_gkv")]
public static int QtlGkv ( double * open , double * high , double * low , double * close , double * output , int n , int period , int annualize , int annualPeriods )
{
if ( open == null || high == null || low == null || close == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Gkv . Batch ( Src ( open , n ), Src ( high , n ), Src ( low , n ), Src ( close , n ), Dst ( output , n ), period , annualize != 0 , annualPeriods );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_granger")]
public static int QtlGranger ( double * seriesY , double * seriesX , double * output , int n , int period )
{
if ( seriesY == null || seriesX == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Granger . Batch ( Src ( seriesY , n ), Src ( seriesX , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_gwma")]
public static int QtlGwma ( double * source , double * output , int n , int period , double sigma )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Gwma . Batch ( Src ( source , n ), Dst ( output , n ), period , sigma );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_ha")]
public static int QtlHa ( double * open , double * high , double * low , double * close , double * haOpenOut , double * haHighOut , double * haLowOut , double * haCloseOut , int n )
{
if ( open == null || high == null || low == null || close == null || haOpenOut == null || haHighOut == null || haLowOut == null || haCloseOut == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Ha . Batch ( Src ( open , n ), Src ( high , n ), Src ( low , n ), Src ( close , n ), Dst ( haOpenOut , n ), Dst ( haHighOut , n ), Dst ( haLowOut , n ), Dst ( haCloseOut , n ));
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_hamma")]
public static int QtlHamma ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Hamma . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_hann")]
public static int QtlHann ( double * source , double * output , int n , int length )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Hann . Batch ( Src ( source , n ), Dst ( output , n ), length );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_harmean")]
public static int QtlHarmean ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Harmean . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_hend")]
public static int QtlHend ( double * source , double * output , int n , int period , double nanValue )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Hend . Batch ( Src ( source , n ), Dst ( output , n ), period , nanValue );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_highest")]
public static int QtlHighest ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Highest . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_hlv")]
public static int QtlHlv ( double * high , double * low , double * output , int n , int period , int annualize , int annualPeriods )
{
if ( high == null || low == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Hlv . Batch ( Src ( high , n ), Src ( low , n ), Dst ( output , n ), period , annualize != 0 , annualPeriods );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_holt")]
public static int QtlHolt ( double * source , double * output , int n , int period , double gamma )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Holt . Batch ( Src ( source , n ), Dst ( output , n ), period , gamma );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_homod")]
public static int QtlHomod ( double * source , double * output , int n , double minPeriod , double maxPeriod )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Homod . Batch ( Src ( source , n ), Dst ( output , n ), minPeriod , maxPeriod );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_hp")]
public static int QtlHp ( double * source , double * output , int n , double lambda )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Hp . Batch ( Src ( source , n ), Dst ( output , n ), lambda );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_hpf")]
public static int QtlHpf ( double * source , double * output , int n , int length )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Hpf . Batch ( Src ( source , n ), Dst ( output , n ), length );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_htdcperiod")]
public static int QtlHtDcperiod ( double * source , double * output , int n )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
HtDcperiod . Batch ( Src ( source , n ), Dst ( output , n ));
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_htdcphase")]
public static int QtlHtDcphase ( double * source , double * output , int n )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
HtDcphase . Batch ( Src ( source , n ), Dst ( output , n ));
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_htphasor")]
public static int QtlHtPhasor ( double * source , double * inPhase , double * quadrature , int n )
{
if ( source == null || inPhase == null || quadrature == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
HtPhasor . Batch ( Src ( source , n ), Dst ( inPhase , n ), Dst ( quadrature , n ));
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_htsine")]
public static int QtlHtSine ( double * source , double * sine , double * leadSine , int n )
{
if ( source == null || sine == null || leadSine == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
HtSine . Batch ( Src ( source , n ), Dst ( sine , n ), Dst ( leadSine , n ));
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_httrendmode")]
public static int QtlHtTrendmode ( double * source , double * output , int n )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
HtTrendmode . Batch ( Src ( source , n ), Dst ( output , n ));
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
2026-03-16 12:45:13 -07:00
[UnmanagedCallersOnly(EntryPoint = "qtl_httrendline")]
public static int QtlHtTrendline ( double * source , double * output , int n )
2026-02-28 14:14:35 -08:00
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
2026-03-16 12:45:13 -07:00
HtTrendline . Batch ( Src ( source , n ), Dst ( output , n ));
2026-02-28 14:14:35 -08:00
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_huber")]
public static int QtlHuber ( double * actual , double * predicted , double * output , int n , int period , double delta )
{
if ( actual == null || predicted == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Huber . Batch ( Src ( actual , n ), Src ( predicted , n ), Dst ( output , n ), period , delta );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_hurst")]
public static int QtlHurst ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Hurst . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_hv")]
public static int QtlHv ( double * prices , double * output , int n , int period , int annualize , int annualPeriods )
{
if ( prices == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Hv . Batch ( Src ( prices , n ), Dst ( output , n ), period , annualize != 0 , annualPeriods );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_hwma")]
public static int QtlHwma ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Hwma . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_ichimoku")]
public static int QtlIchimoku ( double * sourceOpen , double * sourceHigh , double * sourceLow , double * sourceClose , double * sourceVolume , int tenkanPeriod , int kijunPeriod , int senkouBPeriod , int displacement , int n , double * dstTenkan , double * dstKijun , double * dstSenkouA , double * dstSenkouB , double * dstChikou )
{
if ( sourceOpen == null || sourceHigh == null || sourceLow == null || sourceClose == null || sourceVolume == null || dstTenkan == null || dstKijun == null || dstSenkouA == null || dstSenkouB == null || dstChikou == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
var sourceBars = BuildBars ( sourceOpen , sourceHigh , sourceLow , sourceClose , sourceVolume , n );
var result = Ichimoku . Batch ( sourceBars , tenkanPeriod , kijunPeriod , senkouBPeriod , displacement );
var valuesTenkan = result . Tenkan . Values ;
if ( valuesTenkan . Length > n ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
var outSpanTenkan = Dst ( dstTenkan , n );
outSpanTenkan . Fill ( double . NaN );
valuesTenkan . CopyTo ( outSpanTenkan );
var valuesKijun = result . Kijun . Values ;
if ( valuesKijun . Length > n ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
var outSpanKijun = Dst ( dstKijun , n );
outSpanKijun . Fill ( double . NaN );
valuesKijun . CopyTo ( outSpanKijun );
var valuesSenkouA = result . SenkouA . Values ;
if ( valuesSenkouA . Length > n ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
var outSpanSenkouA = Dst ( dstSenkouA , n );
outSpanSenkouA . Fill ( double . NaN );
valuesSenkouA . CopyTo ( outSpanSenkouA );
var valuesSenkouB = result . SenkouB . Values ;
if ( valuesSenkouB . Length > n ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
var outSpanSenkouB = Dst ( dstSenkouB , n );
outSpanSenkouB . Fill ( double . NaN );
valuesSenkouB . CopyTo ( outSpanSenkouB );
var valuesChikou = result . Chikou . Values ;
if ( valuesChikou . Length > n ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
var outSpanChikou = Dst ( dstChikou , n );
outSpanChikou . Fill ( double . NaN );
valuesChikou . CopyTo ( outSpanChikou );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_ifft")]
public static int QtlIfft ( double * src , double * output , int n , int windowSize , int numHarmonics )
{
if ( src == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Ifft . Batch ( Src ( src , n ), Dst ( output , n ), windowSize , numHarmonics );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_iii")]
public static int QtlIii ( double * high , double * low , double * close , double * volume , double * output , int n , int period , int cumulative )
{
if ( high == null || low == null || close == null || volume == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Iii . Batch ( Src ( high , n ), Src ( low , n ), Src ( close , n ), Src ( volume , n ), Dst ( output , n ), period , cumulative != 0 );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_ilrs")]
public static int QtlIlrs ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Ilrs . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_imi")]
public static int QtlImi ( double * sourceOpen , double * sourceHigh , double * sourceLow , double * sourceClose , double * sourceVolume , int period , int n , double * dst )
{
if ( sourceOpen == null || sourceHigh == null || sourceLow == null || sourceClose == null || sourceVolume == null || dst == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
var sourceBars = BuildBars ( sourceOpen , sourceHigh , sourceLow , sourceClose , sourceVolume , n );
var result = Imi . Batch ( sourceBars , period );
var values = result . Values ;
if ( values . Length > n ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
var outSpan = Dst ( dst , n );
outSpan . Fill ( double . NaN );
values . CopyTo ( outSpan );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_impulse")]
public static int QtlImpulse ( double * source , int emaPeriod , int macdFast , int macdSlow , int macdSignal , int n , double * dst )
{
if ( source == null || dst == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
var sourceSeries = BuildSeries ( source , n );
var result = Impulse . Batch ( sourceSeries , emaPeriod , macdFast , macdSlow , macdSignal );
var values = result . Values ;
if ( values . Length > n ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
var outSpan = Dst ( dst , n );
outSpan . Fill ( double . NaN );
values . CopyTo ( outSpan );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_iqr")]
public static int QtlIqr ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Iqr . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_jb")]
public static int QtlJb ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Jb . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_jbands")]
public static int QtlJbands ( double * source , double * middle , double * upper , double * lower , int n , int period , int phase )
{
if ( source == null || middle == null || upper == null || lower == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Jbands . Batch ( Src ( source , n ), Dst ( middle , n ), Dst ( upper , n ), Dst ( lower , n ), period , phase );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_jerk")]
public static int QtlJerk ( double * source , double * output , int n )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Jerk . Batch ( Src ( source , n ), Dst ( output , n ));
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_jma")]
2026-03-01 22:14:30 -08:00
public static int QtlJma ( double * source , double * output , int n , int period , int phase )
2026-02-28 14:14:35 -08:00
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
2026-03-01 22:14:30 -08:00
Jma . Batch ( Src ( source , n ), Dst ( output , n ), period , phase );
2026-02-28 14:14:35 -08:00
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_jvolty")]
public static int QtlJvolty ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Jvolty . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_jvoltyn")]
public static int QtlJvoltyn ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Jvoltyn . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_kaiser")]
public static int QtlKaiser ( double * source , double * output , int n , int period , double beta , double nanValue )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Kaiser . Batch ( Src ( source , n ), Dst ( output , n ), period , beta , nanValue );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_kalman")]
public static int QtlKalman ( double * source , double * output , int n , double q , double r )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Kalman . Batch ( Src ( source , n ), Dst ( output , n ), q , r );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_kama")]
public static int QtlKama ( double * source , double * output , int n , int period , int fastPeriod , int slowPeriod )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Kama . Batch ( Src ( source , n ), Dst ( output , n ), period , fastPeriod , slowPeriod );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
2026-03-16 12:45:13 -07:00
[UnmanagedCallersOnly(EntryPoint = "qtl_kc")]
public static int QtlKc ( double * high , double * low , double * close , double * middle , double * upper , double * lower , int n , int period , double multiplier )
2026-02-28 14:14:35 -08:00
{
if ( high == null || low == null || close == null || middle == null || upper == null || lower == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
2026-03-16 12:45:13 -07:00
Kc . Batch ( Src ( high , n ), Src ( low , n ), Src ( close , n ), Dst ( middle , n ), Dst ( upper , n ), Dst ( lower , n ), period , multiplier );
2026-02-28 14:14:35 -08:00
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_kdj")]
public static int QtlKdj ( double * high , double * low , double * close , double * kOut , double * dOut , double * jOut , int n , int length , int signal )
{
if ( high == null || low == null || close == null || kOut == null || dOut == null || jOut == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Kdj . Batch ( Src ( high , n ), Src ( low , n ), Src ( close , n ), Dst ( kOut , n ), Dst ( dOut , n ), Dst ( jOut , n ), length , signal );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_kendall")]
public static int QtlKendall ( double * seriesX , double * seriesY , double * output , int n , int period )
{
if ( seriesX == null || seriesY == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Kendall . Batch ( Src ( seriesX , n ), Src ( seriesY , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_kst")]
public static int QtlKst ( double * source , double * kstOut , double * sigOut , int n , int r1 , int r2 , int r3 , int r4 , int s1 , int s2 , int s3 , int s4 , int sigPeriod )
{
if ( source == null || kstOut == null || sigOut == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Kst . Batch ( Src ( source , n ), Dst ( kstOut , n ), Dst ( sigOut , n ), r1 , r2 , r3 , r4 , s1 , s2 , s3 , s4 , sigPeriod );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_kurtosis")]
public static int QtlKurtosis ( double * source , double * output , int n , int period , int isPopulation )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Kurtosis . Batch ( Src ( source , n ), Dst ( output , n ), period , isPopulation != 0 );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_kvo")]
public static int QtlKvo ( double * high , double * low , double * close , double * volume , double * output , double * signal , int n , int fastPeriod , int slowPeriod , int signalPeriod )
{
if ( high == null || low == null || close == null || volume == null || output == null || signal == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Kvo . Batch ( Src ( high , n ), Src ( low , n ), Src ( close , n ), Src ( volume , n ), Dst ( output , n ), Dst ( signal , n ), fastPeriod , slowPeriod , signalPeriod );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_laguerre")]
public static int QtlLaguerre ( double * source , double * output , int n , double gamma )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Laguerre . Batch ( Src ( source , n ), Dst ( output , n ), gamma );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_lanczos")]
public static int QtlLanczos ( double * source , double * output , int n , int period , double nanValue )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Lanczos . Batch ( Src ( source , n ), Dst ( output , n ), period , nanValue );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_linreg")]
public static int QtlLinReg ( double * source , double * output , int n , int period , int offset , double initialLastValid )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
LinReg . Batch ( Src ( source , n ), Dst ( output , n ), period , offset , initialLastValid );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_lineartrans")]
public static int QtlLineartrans ( double * source , double * output , int n , double slope , double intercept )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Lineartrans . Batch ( Src ( source , n ), Dst ( output , n ), slope , intercept );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_lms")]
public static int QtlLms ( double * source , double * output , int n , int order , double mu )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Lms . Batch ( Src ( source , n ), Dst ( output , n ), order , mu );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_loess")]
public static int QtlLoess ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Loess . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_logcosh")]
public static int QtlLogCosh ( double * actual , double * predicted , double * output , int n , int period )
{
if ( actual == null || predicted == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
LogCosh . Batch ( Src ( actual , n ), Src ( predicted , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_lognormdist")]
public static int QtlLognormdist ( double * source , double * output , int n , double mu , double sigma , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Lognormdist . Batch ( Src ( source , n ), Dst ( output , n ), mu , sigma , period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_logtrans")]
public static int QtlLogtrans ( double * source , double * output , int n )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Logtrans . Batch ( Src ( source , n ), Dst ( output , n ));
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_lowest")]
public static int QtlLowest ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Lowest . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_ltma")]
public static int QtlLtma ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Ltma . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_lunar")]
public static int QtlLunar ( double * source , int n , double * dst )
{
if ( source == null || dst == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
var sourceSeries = BuildSeries ( source , n );
var result = Lunar . Batch ( sourceSeries );
var values = result . Values ;
if ( values . Length > n ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
var outSpan = Dst ( dst , n );
outSpan . Fill ( double . NaN );
values . CopyTo ( outSpan );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_maape")]
public static int QtlMaape ( double * actual , double * predicted , double * output , int n , int period )
{
if ( actual == null || predicted == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Maape . Batch ( Src ( actual , n ), Src ( predicted , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_macd")]
public static int QtlMacd ( double * source , double * destination , int n , int fastPeriod , int slowPeriod )
{
if ( source == null || destination == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Macd . Batch ( Src ( source , n ), Dst ( destination , n ), fastPeriod , slowPeriod );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_maenv")]
public static int QtlMaenv ( double * source , double * middle , double * upper , double * lower , int n , int period , double percentage , int maType )
{
if ( source == null || middle == null || upper == null || lower == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Maenv . Batch ( Src ( source , n ), Dst ( middle , n ), Dst ( upper , n ), Dst ( lower , n ), period , percentage , ( MaenvType ) maType );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_mama")]
public static int QtlMama ( double * source , double * output , double fastLimit , int n , double slowLimit , double * famaOutput )
{
if ( source == null || output == null || famaOutput == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Mama . Batch ( Src ( source , n ), Dst ( output , n ), fastLimit , slowLimit , Dst ( famaOutput , n ));
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_mapd")]
public static int QtlMapd ( double * actual , double * predicted , double * output , int n , int period )
{
if ( actual == null || predicted == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Mapd . Batch ( Src ( actual , n ), Src ( predicted , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_marketfi")]
public static int QtlMarketfi ( double * high , double * low , double * volume , double * output , int n )
{
if ( high == null || low == null || volume == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Marketfi . Batch ( Src ( high , n ), Src ( low , n ), Src ( volume , n ), Dst ( output , n ));
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_mase")]
public static int QtlMase ( double * actual , double * predicted , double * output , int n , int period )
{
if ( actual == null || predicted == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Mase . Batch ( Src ( actual , n ), Src ( predicted , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_massi")]
public static int QtlMassi ( double * source , double * output , int n , int emaLength , int sumLength )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Massi . Batch ( Src ( source , n ), Dst ( output , n ), emaLength , sumLength );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_mavp")]
public static int QtlMavp ( double * source , double * periods , double * output , int n , int minPeriod , int maxPeriod )
{
if ( source == null || periods == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Mavp . Batch ( Src ( source , n ), Src ( periods , n ), Dst ( output , n ), minPeriod , maxPeriod );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
feat: add new indicators (Decay, Edecay, MinusDi, MinusDm, PlusDi, PlusDm, Maxindex, Minindex, Sarext) and update pine scripts, core libs, validation tests, and python bindings
2026-03-09 13:45:46 -07:00
[UnmanagedCallersOnly(EntryPoint = "qtl_maxindex")]
public static int QtlMaxindex ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Maxindex . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
2026-02-28 14:14:35 -08:00
[UnmanagedCallersOnly(EntryPoint = "qtl_mcnma")]
public static int QtlMcnma ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Mcnma . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_mdae")]
public static int QtlMdae ( double * actual , double * predicted , double * output , int n , int period )
{
if ( actual == null || predicted == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Mdae . Batch ( Src ( actual , n ), Src ( predicted , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_mdape")]
public static int QtlMdape ( double * actual , double * predicted , double * output , int n , int period )
{
if ( actual == null || predicted == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Mdape . Batch ( Src ( actual , n ), Src ( predicted , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_me")]
public static int QtlMe ( double * actual , double * predicted , double * output , int n , int period )
{
if ( actual == null || predicted == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Me . Batch ( Src ( actual , n ), Src ( predicted , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_meandev")]
public static int QtlMeanDev ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
MeanDev . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_median")]
public static int QtlMedian ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Median . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_mgdi")]
public static int QtlMgdi ( double * source , double * output , int n , int period , double k )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Mgdi . Batch ( Src ( source , n ), Dst ( output , n ), period , k );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_midpoint")]
public static int QtlMidpoint ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Midpoint . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_midprice")]
public static int QtlMidprice ( double * high , double * low , double * output , int n , int period )
{
if ( high == null || low == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Midprice . Batch ( Src ( high , n ), Src ( low , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
feat: add new indicators (Decay, Edecay, MinusDi, MinusDm, PlusDi, PlusDm, Maxindex, Minindex, Sarext) and update pine scripts, core libs, validation tests, and python bindings
2026-03-09 13:45:46 -07:00
[UnmanagedCallersOnly(EntryPoint = "qtl_minindex")]
public static int QtlMinindex ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Minindex . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_minusdi")]
public static int QtlMinusDi ( double * sourceOpen , double * sourceHigh , double * sourceLow , double * sourceClose , double * sourceVolume , int period , int n , double * dst )
{
if ( sourceOpen == null || sourceHigh == null || sourceLow == null || sourceClose == null || sourceVolume == null || dst == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
var sourceBars = BuildBars ( sourceOpen , sourceHigh , sourceLow , sourceClose , sourceVolume , n );
var result = MinusDi . Batch ( sourceBars , period );
var values = result . Values ;
if ( values . Length > n ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
var outSpan = Dst ( dst , n );
outSpan . Fill ( double . NaN );
values . CopyTo ( outSpan );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_minusdm")]
public static int QtlMinusDm ( double * sourceOpen , double * sourceHigh , double * sourceLow , double * sourceClose , double * sourceVolume , int period , int n , double * dst )
{
if ( sourceOpen == null || sourceHigh == null || sourceLow == null || sourceClose == null || sourceVolume == null || dst == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
var sourceBars = BuildBars ( sourceOpen , sourceHigh , sourceLow , sourceClose , sourceVolume , n );
var result = MinusDm . Batch ( sourceBars , period );
var values = result . Values ;
if ( values . Length > n ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
var outSpan = Dst ( dst , n );
outSpan . Fill ( double . NaN );
values . CopyTo ( outSpan );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
2026-02-28 14:14:35 -08:00
[UnmanagedCallersOnly(EntryPoint = "qtl_mma")]
public static int QtlMma ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Mma . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_mmchannel")]
public static int QtlMmchannel ( double * high , double * low , double * upper , double * lower , int n , int period )
{
if ( high == null || low == null || upper == null || lower == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Mmchannel . Batch ( Src ( high , n ), Src ( low , n ), Dst ( upper , n ), Dst ( lower , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_mode")]
public static int QtlMode ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Mode . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_modf")]
public static int QtlModf ( double * source , double * output , int n , int period , double beta , int feedback , double fbWeight )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Modf . Batch ( Src ( source , n ), Dst ( output , n ), period , beta , feedback != 0 , fbWeight );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_mpe")]
public static int QtlMpe ( double * actual , double * predicted , double * output , int n , int period )
{
if ( actual == null || predicted == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Mpe . Batch ( Src ( actual , n ), Src ( predicted , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_mrae")]
public static int QtlMrae ( double * actual , double * predicted , double * output , int n , int period )
{
if ( actual == null || predicted == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Mrae . Batch ( Src ( actual , n ), Src ( predicted , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_msle")]
public static int QtlMsle ( double * actual , double * predicted , double * output , int n , int period )
{
if ( actual == null || predicted == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Msle . Batch ( Src ( actual , n ), Src ( predicted , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_mstoch")]
public static int QtlMstoch ( double * src , double * output , int n , int stochLength , int hpLength , int ssLength )
{
if ( src == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Mstoch . Batch ( Src ( src , n ), Dst ( output , n ), stochLength , hpLength , ssLength );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_natr")]
public static int QtlNatr ( double * sourceOpen , double * sourceHigh , double * sourceLow , double * sourceClose , double * sourceVolume , int period , int n , double * dst )
{
if ( sourceOpen == null || sourceHigh == null || sourceLow == null || sourceClose == null || sourceVolume == null || dst == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
var sourceBars = BuildBars ( sourceOpen , sourceHigh , sourceLow , sourceClose , sourceVolume , n );
var result = Natr . Batch ( sourceBars , period );
var values = result . Values ;
if ( values . Length > n ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
var outSpan = Dst ( dst , n );
outSpan . Fill ( double . NaN );
values . CopyTo ( outSpan );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_nlma")]
public static int QtlNlma ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Nlma . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_nma")]
public static int QtlNma ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Nma . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_normalize")]
public static int QtlNormalize ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Normalize . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_normdist")]
public static int QtlNormdist ( double * source , double * output , int n , double mu , double sigma , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Normdist . Batch ( Src ( source , n ), Dst ( output , n ), mu , sigma , period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_notch")]
public static int QtlNotch ( double * source , double * output , int n , int period , double q )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Notch . Batch ( Src ( source , n ), Dst ( output , n ), period , q );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_nw")]
public static int QtlNw ( double * source , double * output , int n , int period , double bandwidth )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Nw . Batch ( Src ( source , n ), Dst ( output , n ), period , bandwidth );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_nyqma")]
public static int QtlNyqma ( double * source , double * output , int n , int period , int nyquistPeriod )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Nyqma . Batch ( Src ( source , n ), Dst ( output , n ), period , nyquistPeriod );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_oneeuro")]
public static int QtlOneEuro ( double * source , double * output , int n , double minCutoff , double beta , double dCutoff )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
OneEuro . Batch ( Src ( source , n ), Dst ( output , n ), minCutoff , beta , dCutoff );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_pacf")]
public static int QtlPacf ( double * source , double * output , int n , int period , int lag )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Pacf . Batch ( Src ( source , n ), Dst ( output , n ), period , lag );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
2026-03-16 12:45:13 -07:00
[UnmanagedCallersOnly(EntryPoint = "qtl_pc")]
public static int QtlPc ( double * high , double * low , double * middle , double * upper , double * lower , int n , int period )
2026-02-28 14:14:35 -08:00
{
if ( high == null || low == null || middle == null || upper == null || lower == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
2026-03-16 12:45:13 -07:00
Pc . Batch ( Src ( high , n ), Src ( low , n ), Dst ( middle , n ), Dst ( upper , n ), Dst ( lower , n ), period );
2026-02-28 14:14:35 -08:00
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_percentile")]
public static int QtlPercentile ( double * source , double * output , int n , int period , double percent )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Percentile . Batch ( Src ( source , n ), Dst ( output , n ), period , percent );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_pfe")]
public static int QtlPfe ( double * source , double * output , int n , int period , int smoothPeriod )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Pfe . Batch ( Src ( source , n ), Dst ( output , n ), period , smoothPeriod );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_pgo")]
public static int QtlPgo ( double * high , double * low , double * close , double * destination , int n , int period )
{
if ( high == null || low == null || close == null || destination == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Pgo . Batch ( Src ( high , n ), Src ( low , n ), Src ( close , n ), Dst ( destination , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_pivot")]
public static int QtlPivot ( double * high , double * low , double * close , double * ppOutput , int n )
{
if ( high == null || low == null || close == null || ppOutput == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Pivot . Batch ( Src ( high , n ), Src ( low , n ), Src ( close , n ), Dst ( ppOutput , n ));
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_pivotcam")]
public static int QtlPivotcam ( double * high , double * low , double * close , double * ppOutput , int n )
{
if ( high == null || low == null || close == null || ppOutput == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Pivotcam . Batch ( Src ( high , n ), Src ( low , n ), Src ( close , n ), Dst ( ppOutput , n ));
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_pivotdem")]
public static int QtlPivotdem ( double * open , double * high , double * low , double * close , double * ppOutput , int n )
{
if ( open == null || high == null || low == null || close == null || ppOutput == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Pivotdem . Batch ( Src ( open , n ), Src ( high , n ), Src ( low , n ), Src ( close , n ), Dst ( ppOutput , n ));
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_pivotext")]
public static int QtlPivotext ( double * high , double * low , double * close , double * ppOutput , int n )
{
if ( high == null || low == null || close == null || ppOutput == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Pivotext . Batch ( Src ( high , n ), Src ( low , n ), Src ( close , n ), Dst ( ppOutput , n ));
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_pivotfib")]
public static int QtlPivotfib ( double * high , double * low , double * close , double * ppOutput , int n )
{
if ( high == null || low == null || close == null || ppOutput == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Pivotfib . Batch ( Src ( high , n ), Src ( low , n ), Src ( close , n ), Dst ( ppOutput , n ));
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_pivotwood")]
public static int QtlPivotwood ( double * high , double * low , double * close , double * ppOutput , int n )
{
if ( high == null || low == null || close == null || ppOutput == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Pivotwood . Batch ( Src ( high , n ), Src ( low , n ), Src ( close , n ), Dst ( ppOutput , n ));
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
feat: add new indicators (Decay, Edecay, MinusDi, MinusDm, PlusDi, PlusDm, Maxindex, Minindex, Sarext) and update pine scripts, core libs, validation tests, and python bindings
2026-03-09 13:45:46 -07:00
[UnmanagedCallersOnly(EntryPoint = "qtl_plusdi")]
public static int QtlPlusDi ( double * sourceOpen , double * sourceHigh , double * sourceLow , double * sourceClose , double * sourceVolume , int period , int n , double * dst )
{
if ( sourceOpen == null || sourceHigh == null || sourceLow == null || sourceClose == null || sourceVolume == null || dst == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
var sourceBars = BuildBars ( sourceOpen , sourceHigh , sourceLow , sourceClose , sourceVolume , n );
var result = PlusDi . Batch ( sourceBars , period );
var values = result . Values ;
if ( values . Length > n ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
var outSpan = Dst ( dst , n );
outSpan . Fill ( double . NaN );
values . CopyTo ( outSpan );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_plusdm")]
public static int QtlPlusDm ( double * sourceOpen , double * sourceHigh , double * sourceLow , double * sourceClose , double * sourceVolume , int period , int n , double * dst )
{
if ( sourceOpen == null || sourceHigh == null || sourceLow == null || sourceClose == null || sourceVolume == null || dst == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
var sourceBars = BuildBars ( sourceOpen , sourceHigh , sourceLow , sourceClose , sourceVolume , n );
var result = PlusDm . Batch ( sourceBars , period );
var values = result . Values ;
if ( values . Length > n ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
var outSpan = Dst ( dst , n );
outSpan . Fill ( double . NaN );
values . CopyTo ( outSpan );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
2026-02-28 14:14:35 -08:00
[UnmanagedCallersOnly(EntryPoint = "qtl_pma")]
public static int QtlPma ( double * source , double * pmaOutput , double * triggerOutput , int n , int period )
{
if ( source == null || pmaOutput == null || triggerOutput == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Pma . Batch ( Src ( source , n ), Dst ( pmaOutput , n ), Dst ( triggerOutput , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_pmo")]
public static int QtlPmo ( double * source , double * output , int n , int timePeriods , int smoothPeriods , int signalPeriods )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Pmo . Batch ( Src ( source , n ), Dst ( output , n ), timePeriods , smoothPeriods , signalPeriods );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_poissondist")]
public static int QtlPoissondist ( double * source , double * output , int n , double lambda , int period , int threshold )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Poissondist . Batch ( Src ( source , n ), Dst ( output , n ), lambda , period , threshold );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_polyfit")]
public static int QtlPolyfit ( double * source , double * output , int n , int period , int degree , double initialLastValid )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Polyfit . Batch ( Src ( source , n ), Dst ( output , n ), period , degree , initialLastValid );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_ppo")]
public static int QtlPpo ( double * source , double * destination , int n , int fastPeriod , int slowPeriod )
{
if ( source == null || destination == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Ppo . Batch ( Src ( source , n ), Dst ( destination , n ), fastPeriod , slowPeriod );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
2026-03-16 12:45:13 -07:00
[UnmanagedCallersOnly(EntryPoint = "qtl_rs")]
public static int QtlRs ( double * baseSeries , double * compSeries , double * output , int n , int smoothPeriod )
2026-02-28 14:14:35 -08:00
{
if ( baseSeries == null || compSeries == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
2026-03-16 12:45:13 -07:00
Rs . Batch ( Src ( baseSeries , n ), Src ( compSeries , n ), Dst ( output , n ), smoothPeriod );
2026-02-28 14:14:35 -08:00
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
2026-03-16 12:45:13 -07:00
[UnmanagedCallersOnly(EntryPoint = "qtl_sar")]
public static int QtlSar ( double * open , double * high , double * low , double * close , double * output , int n , double afStart , double afIncrement , double afMax )
2026-02-28 14:14:35 -08:00
{
if ( open == null || high == null || low == null || close == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
2026-03-16 12:45:13 -07:00
Sar . Batch ( Src ( open , n ), Src ( high , n ), Src ( low , n ), Src ( close , n ), Dst ( output , n ), afStart , afIncrement , afMax );
2026-02-28 14:14:35 -08:00
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_pseudohuber")]
public static int QtlPseudoHuber ( double * actual , double * predicted , double * output , int n , int period , double delta )
{
if ( actual == null || predicted == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
PseudoHuber . Batch ( Src ( actual , n ), Src ( predicted , n ), Dst ( output , n ), period , delta );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_pwma")]
public static int QtlPwma ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Pwma . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_qema")]
public static int QtlQema ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Qema . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_qqe")]
public static int QtlQqe ( double * source , double * output , int n , int rsiPeriod , int smoothFactor , double qqeFactor )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Qqe . Batch ( Src ( source , n ), Dst ( output , n ), rsiPeriod , smoothFactor , qqeFactor );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_qrma")]
public static int QtlQrma ( double * source , double * output , int n , int period , double initialLastValid )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Qrma . Batch ( Src ( source , n ), Dst ( output , n ), period , initialLastValid );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_qstick")]
public static int QtlQstick ( double * sourceOpen , double * sourceHigh , double * sourceLow , double * sourceClose , double * sourceVolume , int period , int useEma , int n , double * dst )
{
if ( sourceOpen == null || sourceHigh == null || sourceLow == null || sourceClose == null || sourceVolume == null || dst == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
var sourceBars = BuildBars ( sourceOpen , sourceHigh , sourceLow , sourceClose , sourceVolume , n );
var result = Qstick . Batch ( sourceBars , period , useEma != 0 );
var values = result . Values ;
if ( values . Length > n ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
var outSpan = Dst ( dst , n );
outSpan . Fill ( double . NaN );
values . CopyTo ( outSpan );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_quantile")]
public static int QtlQuantile ( double * source , double * output , int n , int period , double quantileLevel )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Quantile . Batch ( Src ( source , n ), Dst ( output , n ), period , quantileLevel );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_quantileloss")]
public static int QtlQuantileLoss ( double * actual , double * predicted , double * output , int n , int period , double quantile )
{
if ( actual == null || predicted == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
QuantileLoss . Batch ( Src ( actual , n ), Src ( predicted , n ), Dst ( output , n ), period , quantile );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_rae")]
public static int QtlRae ( double * actual , double * predicted , double * output , int n , int period )
{
if ( actual == null || predicted == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Rae . Batch ( Src ( actual , n ), Src ( predicted , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_ravi")]
public static int QtlRavi ( double * source , double * output , int n , int shortPeriod , int longPeriod )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Ravi . Batch ( Src ( source , n ), Dst ( output , n ), shortPeriod , longPeriod );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_regchannel")]
public static int QtlRegchannel ( double * source , double * middle , double * upper , double * lower , int n , int period , double multiplier )
{
if ( source == null || middle == null || upper == null || lower == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Regchannel . Batch ( Src ( source , n ), Dst ( middle , n ), Dst ( upper , n ), Dst ( lower , n ), period , multiplier );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_relu")]
public static int QtlRelu ( double * source , double * output , int n )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Relu . Batch ( Src ( source , n ), Dst ( output , n ));
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_rema")]
public static int QtlRema ( double * source , double * output , int n , int period , double lambda )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Rema . Batch ( Src ( source , n ), Dst ( output , n ), period , lambda );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_reverseema")]
public static int QtlReverseEma ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
ReverseEma . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_rgma")]
public static int QtlRgma ( double * source , double * output , int n , int period , int passes )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Rgma . Batch ( Src ( source , n ), Dst ( output , n ), period , passes );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_rls")]
public static int QtlRls ( double * source , double * output , int n , int order , double lambda )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Rls . Batch ( Src ( source , n ), Dst ( output , n ), order , lambda );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_rma")]
public static int QtlRma ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Rma . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_rmed")]
public static int QtlRmed ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Rmed . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_rmsle")]
public static int QtlRmsle ( double * actual , double * predicted , double * output , int n , int period )
{
if ( actual == null || predicted == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Rmsle . Batch ( Src ( actual , n ), Src ( predicted , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_rocp")]
public static int QtlRocp ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Rocp . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_rocr")]
public static int QtlRocr ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Rocr . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_roofing")]
public static int QtlRoofing ( double * source , double * output , int n , int hpLength , int ssLength )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Roofing . Batch ( Src ( source , n ), Dst ( output , n ), hpLength , ssLength );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_rse")]
public static int QtlRse ( double * actual , double * predicted , double * output , int n , int period )
{
if ( actual == null || predicted == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Rse . Batch ( Src ( actual , n ), Src ( predicted , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_rsquared")]
public static int QtlRsquared ( double * actual , double * predicted , double * output , int n , int period )
{
if ( actual == null || predicted == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Rsquared . Batch ( Src ( actual , n ), Src ( predicted , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_rsv")]
public static int QtlRsv ( double * open , double * high , double * low , double * close , double * output , int n , int period , int annualize , int annualPeriods )
{
if ( open == null || high == null || low == null || close == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Rsv . Batch ( Src ( open , n ), Src ( high , n ), Src ( low , n ), Src ( close , n ), Dst ( output , n ), period , annualize != 0 , annualPeriods );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_rv")]
public static int QtlRv ( double * prices , double * output , int n , int period , int smoothingPeriod , int annualize , int annualPeriods )
{
if ( prices == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Rv . Batch ( Src ( prices , n ), Dst ( output , n ), period , smoothingPeriod , annualize != 0 , annualPeriods );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_rvgi")]
public static int QtlRvgi ( double * open , double * high , double * low , double * close , double * rvgiOutput , double * signalOutput , int n , int period )
{
if ( open == null || high == null || low == null || close == null || rvgiOutput == null || signalOutput == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Rvgi . Batch ( Src ( open , n ), Src ( high , n ), Src ( low , n ), Src ( close , n ), Dst ( rvgiOutput , n ), Dst ( signalOutput , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_rvi")]
public static int QtlRvi ( double * prices , double * output , int n , int stdevLength , int rmaLength )
{
if ( prices == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Rvi . Batch ( Src ( prices , n ), Dst ( output , n ), stdevLength , rmaLength );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_rwma")]
public static int QtlRwma ( double * close , double * high , double * low , double * output , int n , int period )
{
if ( close == null || high == null || low == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Rwma . Batch ( Src ( close , n ), Src ( high , n ), Src ( low , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_sam")]
public static int QtlSam ( double * source , double * output , int n , double alpha , int cutoff )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Sam . Batch ( Src ( source , n ), Dst ( output , n ), alpha , cutoff );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
feat: add new indicators (Decay, Edecay, MinusDi, MinusDm, PlusDi, PlusDm, Maxindex, Minindex, Sarext) and update pine scripts, core libs, validation tests, and python bindings
2026-03-09 13:45:46 -07:00
[UnmanagedCallersOnly(EntryPoint = "qtl_sarext")]
public static int QtlSarext ( double * open , double * high , double * low , double * close , double * output , int n , double startValue , double offsetOnReverse , double afInitLong , double afLong , double afMaxLong , double afInitShort , double afShort , double afMaxShort )
{
if ( open == null || high == null || low == null || close == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Sarext . Batch ( Src ( open , n ), Src ( high , n ), Src ( low , n ), Src ( close , n ), Dst ( output , n ), n , startValue , offsetOnReverse , afInitLong , afLong , afMaxLong , afInitShort , afShort , afMaxShort );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
2026-02-28 14:14:35 -08:00
[UnmanagedCallersOnly(EntryPoint = "qtl_sdchannel")]
public static int QtlSdchannel ( double * source , double * middle , double * upper , double * lower , int n , int period , double multiplier )
{
if ( source == null || middle == null || upper == null || lower == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Sdchannel . Batch ( Src ( source , n ), Dst ( middle , n ), Dst ( upper , n ), Dst ( lower , n ), period , multiplier );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_sgf")]
public static int QtlSgf ( double * source , double * output , int n , int period , int polyOrder )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Sgf . Batch ( Src ( source , n ), Dst ( output , n ), period , polyOrder );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_sigmoid")]
public static int QtlSigmoid ( double * source , double * output , int n , double k , double x0 )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Sigmoid . Batch ( Src ( source , n ), Dst ( output , n ), k , x0 );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_skew")]
public static int QtlSkew ( double * source , double * output , int n , int period , int isPopulation )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Skew . Batch ( Src ( source , n ), Dst ( output , n ), period , isPopulation != 0 );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_slope")]
public static int QtlSlope ( double * source , double * output , int n )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Slope . Batch ( Src ( source , n ), Dst ( output , n ));
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_smape")]
public static int QtlSmape ( double * actual , double * predicted , double * output , int n , int period )
{
if ( actual == null || predicted == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Smape . Batch ( Src ( actual , n ), Src ( predicted , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_smi")]
public static int QtlSmi ( double * high , double * low , double * close , double * kOut , double * dOut , int n , int kPeriod , int kSmooth , int dSmooth , int blau )
{
if ( high == null || low == null || close == null || kOut == null || dOut == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Smi . Batch ( Src ( high , n ), Src ( low , n ), Src ( close , n ), Dst ( kOut , n ), Dst ( dOut , n ), kPeriod , kSmooth , dSmooth , blau != 0 );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_solar")]
public static int QtlSolar ( double * source , int n , double * dst )
{
if ( source == null || dst == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
var sourceSeries = BuildSeries ( source , n );
var result = Solar . Batch ( sourceSeries );
var values = result . Values ;
if ( values . Length > n ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
var outSpan = Dst ( dst , n );
outSpan . Fill ( double . NaN );
values . CopyTo ( outSpan );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_spbf")]
public static int QtlSpbf ( double * source , double * output , int n , int shortPeriod , int longPeriod , int rmsPeriod )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Spbf . Batch ( Src ( source , n ), Dst ( output , n ), shortPeriod , longPeriod , rmsPeriod );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_spearman")]
public static int QtlSpearman ( double * seriesX , double * seriesY , double * output , int n , int period )
{
if ( seriesX == null || seriesY == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Spearman . Batch ( Src ( seriesX , n ), Src ( seriesY , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_sqrttrans")]
public static int QtlSqrttrans ( double * source , double * output , int n )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Sqrttrans . Batch ( Src ( source , n ), Dst ( output , n ));
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_squeeze")]
public static int QtlSqueeze ( double * high , double * low , double * close , double * momOut , double * sqOut , int n , int period , double bbMult , double kcMult )
{
if ( high == null || low == null || close == null || momOut == null || sqOut == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Squeeze . Batch ( Src ( high , n ), Src ( low , n ), Src ( close , n ), Dst ( momOut , n ), Dst ( sqOut , n ), period , bbMult , kcMult );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
2026-03-17 08:35:29 -07:00
[UnmanagedCallersOnly(EntryPoint = "qtl_squeeze_pro")]
public static int QtlSqueezePro ( double * high , double * low , double * close , double * momOut , double * sqOut , int n , int period , double bbMult , double kcMultWide , double kcMultNormal , double kcMultNarrow , int momLength , int momSmooth , int useSma )
{
if ( high == null || low == null || close == null || momOut == null || sqOut == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
SqueezePro . Batch ( Src ( high , n ), Src ( low , n ), Src ( close , n ), Dst ( momOut , n ), Dst ( sqOut , n ), period , bbMult , kcMultWide , kcMultNormal , kcMultNarrow , momLength , momSmooth , useSma != 0 );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
2026-02-28 14:14:35 -08:00
[UnmanagedCallersOnly(EntryPoint = "qtl_ssf2")]
public static int QtlSsf2 ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Ssf2 . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_ssf3")]
public static int QtlSsf3 ( double * source , double * destination , int n , int period , double initialLast )
{
if ( source == null || destination == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Ssf3 . Batch ( Src ( source , n ), Dst ( destination , n ), period , initialLast );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_ssfdsp")]
public static int QtlSsfdsp ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Ssfdsp . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_starchannel")]
public static int QtlStarchannel ( double * high , double * low , double * close , double * middle , double * upper , double * lower , int n , int period , double multiplier , int atrPeriod )
{
if ( high == null || low == null || close == null || middle == null || upper == null || lower == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Starchannel . Batch ( Src ( high , n ), Src ( low , n ), Src ( close , n ), Dst ( middle , n ), Dst ( upper , n ), Dst ( lower , n ), period , multiplier , atrPeriod );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_stbands")]
public static int QtlStbands ( double * high , double * low , double * close , double * upper , double * lower , double * trend , int n , int period , double multiplier )
{
if ( high == null || low == null || close == null || upper == null || lower == null || trend == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Stbands . Batch ( Src ( high , n ), Src ( low , n ), Src ( close , n ), Dst ( upper , n ), Dst ( lower , n ), Dst ( trend , n ), period , multiplier );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_stc")]
public static int QtlStc ( double * source , double * output , int n , int kPeriod , int dPeriod , int fastLength , int slowLength , int smoothing )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Stc . Batch ( Src ( source , n ), Dst ( output , n ), kPeriod , dPeriod , fastLength , slowLength , ( StcSmoothing ) smoothing );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_stderr")]
public static int QtlStderr ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Stderr . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_stoch")]
public static int QtlStoch ( double * high , double * low , double * close , double * kOut , double * dOut , int n , int kLength , int dPeriod )
{
if ( high == null || low == null || close == null || kOut == null || dOut == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Stoch . Batch ( Src ( high , n ), Src ( low , n ), Src ( close , n ), Dst ( kOut , n ), Dst ( dOut , n ), kLength , dPeriod );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_stochf")]
public static int QtlStochf ( double * high , double * low , double * close , double * kOut , double * dOut , int n , int kLength , int dPeriod )
{
if ( high == null || low == null || close == null || kOut == null || dOut == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Stochf . Batch ( Src ( high , n ), Src ( low , n ), Src ( close , n ), Dst ( kOut , n ), Dst ( dOut , n ), kLength , dPeriod );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_stochrsi")]
public static int QtlStochrsi ( double * source , double * output , int n , int rsiLength , int stochLength , int kSmooth , int dSmooth )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Stochrsi . Batch ( Src ( source , n ), Dst ( output , n ), rsiLength , stochLength , kSmooth , dSmooth );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_sum")]
public static int QtlSum ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Sum . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_super")]
public static int QtlSuper ( double * sourceOpen , double * sourceHigh , double * sourceLow , double * sourceClose , double * sourceVolume , int period , double multiplier , int n , double * dst )
{
if ( sourceOpen == null || sourceHigh == null || sourceLow == null || sourceClose == null || sourceVolume == null || dst == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
var sourceBars = BuildBars ( sourceOpen , sourceHigh , sourceLow , sourceClose , sourceVolume , n );
var result = Super . Batch ( sourceBars , period , multiplier );
var values = result . Values ;
if ( values . Length > n ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
var outSpan = Dst ( dst , n );
outSpan . Fill ( double . NaN );
values . CopyTo ( outSpan );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_swings")]
public static int QtlSwings ( double * high , double * low , double * highOutput , double * lowOutput , int n , int lookback )
{
if ( high == null || low == null || highOutput == null || lowOutput == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Swings . Batch ( Src ( high , n ), Src ( low , n ), Dst ( highOutput , n ), Dst ( lowOutput , n ), lookback );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_t3")]
public static int QtlT3 ( double * source , double * output , int n , int period , double vfactor )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
T3 . Batch ( Src ( source , n ), Dst ( output , n ), period , vfactor );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_tdist")]
public static int QtlTdist ( double * source , double * output , int n , int nu , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Tdist . Batch ( Src ( source , n ), Dst ( output , n ), nu , period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_theil")]
public static int QtlTheil ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Theil . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_theilu")]
public static int QtlTheilU ( double * actual , double * predicted , double * output , int n , int period )
{
if ( actual == null || predicted == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
TheilU . Batch ( Src ( actual , n ), Src ( predicted , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_trama")]
public static int QtlTrama ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Trama . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_trim")]
public static int QtlTrim ( double * source , double * output , int n , int period , double trimPct )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Trim . Batch ( Src ( source , n ), Dst ( output , n ), period , trimPct );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_ttmlrc")]
public static int QtlTtmLrc ( double * source , double * midline , double * upper1 , double * lower1 , double * upper2 , double * lower2 , int n , int period )
{
if ( source == null || midline == null || upper1 == null || lower1 == null || upper2 == null || lower2 == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
TtmLrc . Batch ( Src ( source , n ), Dst ( midline , n ), Dst ( upper1 , n ), Dst ( lower1 , n ), Dst ( upper2 , n ), Dst ( lower2 , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_ttmscalper")]
public static int QtlTtmScalper ( double * high , double * low , double * close , double * highOutput , double * lowOutput , int n , int useCloses )
{
if ( high == null || low == null || close == null || highOutput == null || lowOutput == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
TtmScalper . Batch ( Src ( high , n ), Src ( low , n ), Src ( close , n ), Dst ( highOutput , n ), Dst ( lowOutput , n ), useCloses != 0 );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_ttmsqueeze")]
public static int QtlTtmSqueeze ( double * sourceOpen , double * sourceHigh , double * sourceLow , double * sourceClose , double * sourceVolume , int bbPeriod , double bbMult , int kcPeriod , double kcMult , int momPeriod , int n , double * dst )
{
if ( sourceOpen == null || sourceHigh == null || sourceLow == null || sourceClose == null || sourceVolume == null || dst == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
var sourceBars = BuildBars ( sourceOpen , sourceHigh , sourceLow , sourceClose , sourceVolume , n );
var result = TtmSqueeze . Batch ( sourceBars , bbPeriod , bbMult , kcPeriod , kcMult , momPeriod );
var values = result . Values ;
if ( values . Length > n ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
var outSpan = Dst ( dst , n );
outSpan . Fill ( double . NaN );
values . CopyTo ( outSpan );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_ttmtrend")]
public static int QtlTtmTrend ( double * sourceOpen , double * sourceHigh , double * sourceLow , double * sourceClose , double * sourceVolume , int period , int n , double * dst )
{
if ( sourceOpen == null || sourceHigh == null || sourceLow == null || sourceClose == null || sourceVolume == null || dst == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
var sourceBars = BuildBars ( sourceOpen , sourceHigh , sourceLow , sourceClose , sourceVolume , n );
var result = TtmTrend . Batch ( sourceBars , period );
var values = result . Values ;
if ( values . Length > n ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
var outSpan = Dst ( dst , n );
outSpan . Fill ( double . NaN );
values . CopyTo ( outSpan );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_ttmwave")]
public static int QtlTtmWave ( double * source , int n , double * dst )
{
if ( source == null || dst == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
var sourceSeries = BuildSeries ( source , n );
var result = TtmWave . Batch ( sourceSeries );
var values = result . Values ;
if ( values . Length > n ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
var outSpan = Dst ( dst , n );
outSpan . Fill ( double . NaN );
values . CopyTo ( outSpan );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_tukeybiweight")]
public static int QtlTukeyBiweight ( double * actual , double * predicted , double * output , int n , int period , double c )
{
if ( actual == null || predicted == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
TukeyBiweight . Batch ( Src ( actual , n ), Src ( predicted , n ), Dst ( output , n ), period , c );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_twap")]
public static int QtlTwap ( double * price , double * output , int n , int period )
{
if ( price == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Twap . Batch ( Src ( price , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_ubands")]
public static int QtlUbands ( double * source , double * upper , double * middle , double * lower , int n , int period , double multiplier )
{
if ( source == null || upper == null || middle == null || lower == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Ubands . Batch ( Src ( source , n ), Dst ( upper , n ), Dst ( middle , n ), Dst ( lower , n ), period , multiplier );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_uchannel")]
public static int QtlUchannel ( double * high , double * low , double * close , double * upper , double * middle , double * lower , int n , int strPeriod , int centerPeriod , double multiplier )
{
if ( high == null || low == null || close == null || upper == null || middle == null || lower == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Uchannel . Batch ( Src ( high , n ), Src ( low , n ), Src ( close , n ), Dst ( upper , n ), Dst ( middle , n ), Dst ( lower , n ), strPeriod , centerPeriod , multiplier );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_ui")]
public static int QtlUi ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Ui . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_ultosc")]
public static int QtlUltosc ( double * high , double * low , double * close , double * output , int n , int period1 , int period2 , int period3 )
{
if ( high == null || low == null || close == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Ultosc . Batch ( Src ( high , n ), Src ( low , n ), Src ( close , n ), Dst ( output , n ), period1 , period2 , period3 );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_usf")]
public static int QtlUsf ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Usf . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_va")]
public static int QtlVa ( double * high , double * low , double * close , double * volume , double * output , int n )
{
if ( high == null || low == null || close == null || volume == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Va . Batch ( Src ( high , n ), Src ( low , n ), Src ( close , n ), Src ( volume , n ), Dst ( output , n ));
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_vama")]
public static int QtlVama ( double * sourceOpen , double * sourceHigh , double * sourceLow , double * sourceClose , double * sourceVolume , int baseLength , int shortAtrPeriod , int longAtrPeriod , int minLength , int maxLength , int n , double * dst )
{
if ( sourceOpen == null || sourceHigh == null || sourceLow == null || sourceClose == null || sourceVolume == null || dst == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
var sourceBars = BuildBars ( sourceOpen , sourceHigh , sourceLow , sourceClose , sourceVolume , n );
var result = Vama . Batch ( sourceBars , baseLength , shortAtrPeriod , longAtrPeriod , minLength , maxLength );
var values = result . Values ;
if ( values . Length > n ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
var outSpan = Dst ( dst , n );
outSpan . Fill ( double . NaN );
values . CopyTo ( outSpan );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_vel")]
public static int QtlVel ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Vel . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_vhf")]
public static int QtlVhf ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Vhf . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_vidya")]
public static int QtlVidya ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Vidya . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_vo")]
public static int QtlVo ( double * volume , double * output , int n , int shortPeriod , int longPeriod )
{
if ( volume == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Vo . Batch ( Src ( volume , n ), Dst ( output , n ), shortPeriod , longPeriod );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_vortex")]
public static int QtlVortex ( double * high , double * low , double * close , int period , double * viPlus , int n , double * viMinus )
{
if ( high == null || low == null || close == null || viPlus == null || viMinus == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Vortex . Batch ( Src ( high , n ), Src ( low , n ), Src ( close , n ), period , Dst ( viPlus , n ), Dst ( viMinus , n ));
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_voss")]
public static int QtlVoss ( double * source , double * output , int n , int period , int predict , double bandwidth )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Voss . Batch ( Src ( source , n ), Dst ( output , n ), period , predict , bandwidth );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
2026-03-17 08:35:29 -07:00
[UnmanagedCallersOnly(EntryPoint = "qtl_vstop")]
public static int QtlVstop ( double * high , double * low , double * close , double * output , int n , int period , double multiplier )
{
if ( high == null || low == null || close == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
if ( period <= 0 ) return StatusCodes . QTL_ERR_INVALID_PARAM ;
try
{
Vstop . Batch ( Src ( high , n ), Src ( low , n ), Src ( close , n ), Dst ( output , n ), period , multiplier );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
2026-02-28 14:14:35 -08:00
[UnmanagedCallersOnly(EntryPoint = "qtl_vov")]
public static int QtlVov ( double * source , double * output , int n , int volatilityPeriod , int vovPeriod )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Vov . Batch ( Src ( source , n ), Dst ( output , n ), volatilityPeriod , vovPeriod );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_vr")]
public static int QtlVr ( double * high , double * low , double * close , double * output , int n , int period )
{
if ( high == null || low == null || close == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Vr . Batch ( Src ( high , n ), Src ( low , n ), Src ( close , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_vroc")]
public static int QtlVroc ( double * volume , double * output , int n , int period , int usePercent )
{
if ( volume == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Vroc . Batch ( Src ( volume , n ), Dst ( output , n ), period , usePercent != 0 );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_vwad")]
public static int QtlVwad ( double * high , double * low , double * close , double * volume , double * output , int n , int period )
{
if ( high == null || low == null || close == null || volume == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Vwad . Batch ( Src ( high , n ), Src ( low , n ), Src ( close , n ), Src ( volume , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_vwap")]
public static int QtlVwap ( double * high , double * low , double * close , double * volume , double * output , int n , int period )
{
if ( high == null || low == null || close == null || volume == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Vwap . Batch ( Src ( high , n ), Src ( low , n ), Src ( close , n ), Src ( volume , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_vwapbands")]
public static int QtlVwapbands ( double * price , double * volume , double * upper1 , double * lower1 , double * upper2 , double * lower2 , double * vwap , double * stdDev , int n , double multiplier )
{
if ( price == null || volume == null || upper1 == null || lower1 == null || upper2 == null || lower2 == null || vwap == null || stdDev == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Vwapbands . Batch ( Src ( price , n ), Src ( volume , n ), Dst ( upper1 , n ), Dst ( lower1 , n ), Dst ( upper2 , n ), Dst ( lower2 , n ), Dst ( vwap , n ), Dst ( stdDev , n ), multiplier );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_vwapsd")]
public static int QtlVwapsd ( double * price , double * volume , double * upper , double * lower , double * vwap , double * stdDev , int n , double numDevs )
{
if ( price == null || volume == null || upper == null || lower == null || vwap == null || stdDev == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Vwapsd . Batch ( Src ( price , n ), Src ( volume , n ), Dst ( upper , n ), Dst ( lower , n ), Dst ( vwap , n ), Dst ( stdDev , n ), numDevs );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_wad")]
public static int QtlWad ( double * high , double * low , double * close , double * volume , double * output , int n )
{
if ( high == null || low == null || close == null || volume == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Wad . Batch ( Src ( high , n ), Src ( low , n ), Src ( close , n ), Src ( volume , n ), Dst ( output , n ));
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_wavelet")]
public static int QtlWavelet ( double * source , double * output , int n , int levels , double threshMult )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Wavelet . Batch ( Src ( source , n ), Dst ( output , n ), levels , threshMult );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_wavg")]
public static int QtlWavg ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Wavg . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_wclprice")]
public static int QtlWclprice ( double * high , double * low , double * close , double * output , int n )
{
if ( high == null || low == null || close == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Wclprice . Batch ( Src ( high , n ), Src ( low , n ), Src ( close , n ), Dst ( output , n ));
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_weibulldist")]
public static int QtlWeibulldist ( double * source , double * output , int n , double k , double lambda , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Weibulldist . Batch ( Src ( source , n ), Dst ( output , n ), k , lambda , period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_wiener")]
public static int QtlWiener ( double * source , double * destination , int n , int period , int smoothPeriod )
{
if ( source == null || destination == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Wiener . Batch ( Src ( source , n ), Dst ( destination , n ), period , smoothPeriod );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_willr")]
public static int QtlWillr ( double * high , double * low , double * close , double * output , int n , int period )
{
if ( high == null || low == null || close == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Willr . Batch ( Src ( high , n ), Src ( low , n ), Src ( close , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_wins")]
public static int QtlWins ( double * source , double * output , int n , int period , double winPct )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Wins . Batch ( Src ( source , n ), Dst ( output , n ), period , winPct );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_wmape")]
public static int QtlWmape ( double * actual , double * predicted , double * output , int n , int period )
{
if ( actual == null || predicted == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Wmape . Batch ( Src ( actual , n ), Src ( predicted , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_wrmse")]
public static int QtlWrmse ( double * actual , double * predicted , double * output , int n , int period )
{
if ( actual == null || predicted == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Wrmse . Batch ( Src ( actual , n ), Src ( predicted , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_yzv")]
public static int QtlYzv ( double * open , double * high , double * low , double * close , double * output , int n , int period )
{
if ( open == null || high == null || low == null || close == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Yzv . Batch ( Src ( open , n ), Src ( high , n ), Src ( low , n ), Src ( close , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_yzvama")]
public static int QtlYzvama ( double * sourceOpen , double * sourceHigh , double * sourceLow , double * sourceClose , double * sourceVolume , int yzvShortPeriod , int yzvLongPeriod , int percentileLookback , int minLength , int maxLength , int n , double * dst )
{
if ( sourceOpen == null || sourceHigh == null || sourceLow == null || sourceClose == null || sourceVolume == null || dst == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
var sourceBars = BuildBars ( sourceOpen , sourceHigh , sourceLow , sourceClose , sourceVolume , n );
var result = Yzvama . Batch ( sourceBars , yzvShortPeriod , yzvLongPeriod , percentileLookback , minLength , maxLength );
var values = result . Values ;
if ( values . Length > n ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
var outSpan = Dst ( dst , n );
outSpan . Fill ( double . NaN );
values . CopyTo ( outSpan );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_zldema")]
public static int QtlZldema ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Zldema . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_zlema")]
public static int QtlZlema ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Zlema . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_zltema")]
public static int QtlZltema ( double * source , double * output , int n , int period )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Zltema . Batch ( Src ( source , n ), Dst ( output , n ), period );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
[UnmanagedCallersOnly(EntryPoint = "qtl_ztest")]
public static int QtlZtest ( double * source , double * output , int n , int period , double mu0 )
{
if ( source == null || output == null ) return StatusCodes . QTL_ERR_NULL_PTR ;
if ( n <= 0 ) return StatusCodes . QTL_ERR_INVALID_LENGTH ;
try
{
Ztest . Batch ( Src ( source , n ), Dst ( output , n ), period , mu0 );
return StatusCodes . QTL_OK ;
}
catch { return StatusCodes . QTL_ERR_INTERNAL ; }
}
}