Files
QuanTAlib/Source/Basics/TR_Series.cs
T

40 lines
1.3 KiB
C#
Raw Normal View History

2022-04-19 22:34:42 -07:00
namespace QuanTAlib;
using System;
/* <summary>
TR: True Range
True Range was introduced by J. Welles Wilder in his book New Concepts in Technical Trading Systems.
It measures the daily range plus any gap from the closing price of the preceding day.
Calculation:
d1 = ABS(High - Low)
d2 = ABS(High - Previous close)
d3 = ABS(Previous close - Low)
TR = MAX(d1,d2,d3)
Sources:
https://www.macroption.com/true-range/
</summary> */
public class TR_Series : Single_TBars_Indicator
{
2022-11-18 21:05:14 -08:00
private double _cm1, _cm1_o;
2022-04-19 22:34:42 -07:00
public TR_Series(TBars source, bool useNaN = false) : base(source, period:0, useNaN:useNaN) {
2022-11-18 21:05:14 -08:00
_cm1 =_cm1_o = double.NaN;
2022-04-19 22:34:42 -07:00
if (this._bars.Count > 0) { base.Add(this._bars); }
}
2022-04-19 23:29:04 -07:00
public override void Add((DateTime t, double o, double h, double l, double c, double v) TBar, bool update)
2022-04-19 22:34:42 -07:00
{
2022-11-18 21:05:14 -08:00
if (update) {_cm1 = _cm1_o; } else { _cm1_o = _cm1; }
if (_cm1 is double.NaN) { _cm1 = TBar.c; } //first bar
2022-04-19 22:34:42 -07:00
2022-04-19 23:29:04 -07:00
double d1 = Math.Abs(TBar.h - TBar.l);
double d2 = Math.Abs(_cm1 - TBar.h);
double d3 = Math.Abs(_cm1 - TBar.l);
var ret = (TBar.t, (base.Count==0 && base._NaN) ? double.NaN : Math.Max(d1,Math.Max(d2,d3)) );
2022-04-19 22:34:42 -07:00
base.Add(ret, update);
2022-04-19 23:29:04 -07:00
_cm1 = TBar.c;
2022-04-19 22:34:42 -07:00
}
}