Lean
$LEAN_TAG$
Momentum.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
namespace
QuantConnect.Indicators
17
{
18
/// <summary>
19
/// This indicator computes the n-period change in a value using the following:
20
/// value_0 - value_n
21
/// </summary>
22
public
class
Momentum
:
WindowIndicator
<IndicatorDataPoint>,
IIndicatorWarmUpPeriodProvider
23
{
24
/// <summary>
25
/// Required period, in data points, for the indicator to be ready and fully initialized.
26
/// </summary>
27
public
override
int
WarmUpPeriod
=>
Period
+ 1;
28
29
/// <summary>
30
/// Gets a flag indicating when this indicator is ready and fully initialized
31
/// </summary>
32
public
override
bool
IsReady
=> Samples >
Period
;
33
34
/// <summary>
35
/// Creates a new Momentum indicator with the specified period
36
/// </summary>
37
/// <param name="period">The period over which to perform to computation</param>
38
public
Momentum
(
int
period)
39
: base($
"MOM({period})"
, period)
40
{
41
}
42
43
/// <summary>
44
/// Creates a new Momentum indicator with the specified period
45
/// </summary>
46
/// <param name="name">The name of this indicator</param>
47
/// <param name="period">The period over which to perform to computation</param>
48
public
Momentum
(
string
name,
int
period)
49
: base(name, period)
50
{
51
}
52
53
/// <summary>
54
/// Computes the next value for this indicator from the given state.
55
/// </summary>
56
/// <param name="window">The window of data held in this indicator</param>
57
/// <param name="input">The input value to this indicator on this time step</param>
58
/// <returns>A new value for this indicator</returns>
59
protected
override
decimal
ComputeNextValue
(
IReadOnlyWindow<IndicatorDataPoint>
window,
IndicatorDataPoint
input)
60
{
61
if
(window.
Samples
<= window.
Size
)
62
{
63
// keep returning the delta from the first item put in there to init
64
return
input.
Value
- window[window.
Count
- 1].Value;
65
}
66
67
return
input.
Value
- window.
MostRecentlyRemoved
.Value;
68
}
69
}
70
}
Indicators
Momentum.cs
Generated by
1.8.17