Lean  $LEAN_TAG$
ConstantOptionStrategyLegPredicateReferenceValue.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 System;
17 using System.Collections.Generic;
18 
20 {
21  /// <summary>
22  /// Provides an implementation of <see cref="IOptionStrategyLegPredicateReferenceValue"/> that represents a constant value.
23  /// </summary>
25  {
26  private readonly T _value;
27 
28  /// <summary>
29  /// Gets the target of this value
30  /// </summary>
31  public PredicateTargetValue Target { get; }
32 
33  /// <summary>
34  /// Initializes a new instance of the <see cref="ConstantOptionStrategyLegPredicateReferenceValue{T}"/> class
35  /// </summary>
36  /// <param name="value">The constant reference value</param>
37  /// <param name="target">The value target in relation to the <see cref="OptionPosition"/></param>
39  {
40  _value = value;
41  Target = target;
42  }
43 
44  /// <summary>
45  /// Returns the constant value provided at initialization
46  /// </summary>
47  public object Resolve(IReadOnlyList<OptionPosition> legs)
48  {
49  return _value;
50  }
51  }
52 
53  /// <summary>
54  /// Provides methods for easily creating instances of <see cref="ConstantOptionStrategyLegPredicateReferenceValue{T}"/>
55  /// </summary>
57  {
58  /// <summary>
59  /// Creates a new instance of the <see cref="ConstantOptionStrategyLegPredicateReferenceValue{T}"/> class for
60  /// the specified <paramref name="value"/>
61  /// </summary>
63  {
64  if (value is DateTime)
65  {
67  }
68 
69  if (value is decimal)
70  {
72  }
73 
74  if (value is OptionRight)
75  {
77  }
78 
79  throw new NotSupportedException($"{value?.GetType().GetBetterTypeName()} is not supported.");
80  }
81  }
82 }