Lean  $LEAN_TAG$
MidPrice.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 
17 
19 {
20  /// <summary>
21  /// This indicator computes the MidPrice (MIDPRICE).
22  /// The MidPrice is calculated using the following formula:
23  /// MIDPRICE = (Highest High + Lowest Low) / 2
24  /// </summary>
26  {
27  private readonly int _period;
28  private readonly Maximum _maximum;
29  private readonly Minimum _minimum;
30 
31  /// <summary>
32  /// Initializes a new instance of the <see cref="MidPrice"/> class using the specified name and period.
33  /// </summary>
34  /// <param name="name">The name of this indicator</param>
35  /// <param name="period">The period of the MIDPRICE</param>
36  public MidPrice(string name, int period)
37  : base(name)
38  {
39  _period = period;
40  _maximum = new Maximum(period);
41  _minimum = new Minimum(period);
42  }
43 
44  /// <summary>
45  /// Initializes a new instance of the <see cref="MidPrice"/> class using the specified period.
46  /// </summary>
47  /// <param name="period">The period of the MIDPRICE</param>
48  public MidPrice(int period)
49  : this($"MIDPRICE({period})", period)
50  {
51  }
52 
53  /// <summary>
54  /// Gets a flag indicating when this indicator is ready and fully initialized
55  /// </summary>
56  public override bool IsReady => Samples >= _period;
57 
58  /// <summary>
59  /// Required period, in data points, for the indicator to be ready and fully initialized.
60  /// </summary>
61  public int WarmUpPeriod => _period;
62 
63  /// <summary>
64  /// Computes the next value of this indicator from the given state
65  /// </summary>
66  /// <param name="input">The input given to the indicator</param>
67  /// <returns>A new value for this indicator</returns>
68  protected override decimal ComputeNextValue(IBaseDataBar input)
69  {
70  _maximum.Update(new IndicatorDataPoint { Value = input.High });
71  _minimum.Update(new IndicatorDataPoint { Value = input.Low });
72 
73  return (_maximum.Current.Value + _minimum.Current.Value) / 2;
74  }
75  }
76 }