Lean
$LEAN_TAG$
AccumulationDistribution.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 Accumulation/Distribution (AD)
22
/// The Accumulation/Distribution is calculated using the following formula:
23
/// AD = AD + ((Close - Low) - (High - Close)) / (High - Low) * Volume
24
/// </summary>
25
public
class
AccumulationDistribution
:
TradeBarIndicator
,
IIndicatorWarmUpPeriodProvider
26
{
27
/// <summary>
28
/// Initializes a new instance of the <see cref="AccumulationDistribution"/> class using the specified name.
29
/// </summary>
30
public
AccumulationDistribution
()
31
: this(
"AD"
)
32
{
33
}
34
35
/// <summary>
36
/// Initializes a new instance of the <see cref="AccumulationDistribution"/> class using the specified name.
37
/// </summary>
38
/// <param name="name">The name of this indicator</param>
39
public
AccumulationDistribution
(
string
name)
40
: base(name)
41
{
42
}
43
44
/// <summary>
45
/// Gets a flag indicating when this indicator is ready and fully initialized
46
/// </summary>
47
public
override
bool
IsReady
=> Samples > 0;
48
49
/// <summary>
50
/// Required period, in data points, for the indicator to be ready and fully initialized.
51
/// </summary>
52
public
int
WarmUpPeriod
=> 1;
53
54
/// <summary>
55
/// Computes the next value of this indicator from the given state
56
/// </summary>
57
/// <param name="input">The input given to the indicator</param>
58
/// <returns>A new value for this indicator</returns>
59
protected
override
decimal
ComputeNextValue
(
TradeBar
input)
60
{
61
var range = input.
High
- input.
Low
;
62
return
Current.Value + (range > 0 ? ((input.
Close
- input.
Low
) - (input.
High
- input.
Close
)) / range * input.
Volume
: 0m);
63
}
64
}
65
}
Indicators
AccumulationDistribution.cs
Generated by
1.8.17