Lean
$LEAN_TAG$
AverageDirectionalMovementIndexRating.cs
1
/*
2
* QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals.
3
* Lean Algorithmic Trading Engine v2.0. Copyright 2014 QuantConnect Corporation.
4
*
5
* Licensed under the Apache License, Version 2.0 (the "License");
6
* you may not use this file except in compliance with the License.
7
* You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
8
*
9
* Unless required by applicable law or agreed to in writing, software
10
* distributed under the License is distributed on an "AS IS" BASIS,
11
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
* See the License for the specific language governing permissions and
13
* limitations under the License.
14
*/
15
16
using
QuantConnect
.
Data
.
Market
;
17
18
namespace
QuantConnect.Indicators
19
{
20
/// <summary>
21
/// This indicator computes the Average Directional Movement Index Rating (ADXR).
22
/// The Average Directional Movement Index Rating is calculated with the following formula:
23
/// ADXR[i] = (ADX[i] + ADX[i - period + 1]) / 2
24
/// </summary>
25
public
class
AverageDirectionalMovementIndexRating
:
BarIndicator
,
IIndicatorWarmUpPeriodProvider
26
{
27
private
readonly
int
_period;
28
private
readonly
RollingWindow<decimal>
_adxHistory;
29
30
/// <summary>
31
/// Initializes a new instance of the <see cref="AverageDirectionalMovementIndexRating"/> class using the specified name and period.
32
/// </summary>
33
/// <param name="name">The name of this indicator</param>
34
/// <param name="period">The period of the ADXR</param>
35
public
AverageDirectionalMovementIndexRating
(
string
name,
int
period)
36
: base(name)
37
{
38
_period = period;
39
ADX
=
new
AverageDirectionalIndex
(name +
"_ADX"
, period);
40
_adxHistory =
new
RollingWindow<decimal>
(period);
41
}
42
43
/// <summary>
44
/// Initializes a new instance of the <see cref="AverageDirectionalMovementIndexRating"/> class using the specified period.
45
/// </summary>
46
/// <param name="period">The period of the ADXR</param>
47
public
AverageDirectionalMovementIndexRating
(
int
period)
48
: this($
"ADXR({period})"
, period)
49
{
50
}
51
52
/// <summary>
53
/// The Average Directional Index indicator instance being used
54
/// </summary>
55
public
AverageDirectionalIndex
ADX
{
get
; }
56
57
/// <summary>
58
/// Gets a flag indicating when this indicator is ready and fully initialized
59
/// </summary>
60
public
override
bool
IsReady
=> _adxHistory.IsReady;
61
62
/// <summary>
63
/// Required period, in data points, for the indicator to be ready and fully initialized.
64
/// </summary>
65
public
int
WarmUpPeriod
=> _period * 3 - 1;
66
67
/// <summary>
68
/// Computes the next value of this indicator from the given state
69
/// </summary>
70
/// <param name="input">The input given to the indicator</param>
71
/// <returns>A new value for this indicator</returns>
72
protected
override
decimal
ComputeNextValue
(
IBaseDataBar
input)
73
{
74
ADX
.Update(input);
75
76
if
(
ADX
.
IsReady
)
77
{
78
_adxHistory.Add(
ADX
.Current.Value);
79
}
80
81
return
IsReady
? (
ADX
.Current.Value + _adxHistory[_period - 1]) / 2 : 50m;
82
}
83
84
/// <summary>
85
/// Resets this indicator to its initial state
86
/// </summary>
87
public
override
void
Reset
()
88
{
89
ADX
.
Reset
();
90
_adxHistory.Reset();
91
base.Reset();
92
}
93
}
94
}
Indicators
AverageDirectionalMovementIndexRating.cs
Generated by
1.8.17