Lean  $LEAN_TAG$
IPositionGroupResolver.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.Collections.Generic;
17 
19 {
20  /// <summary>
21  /// Resolves position groups from a collection of positions.
22  /// </summary>
23  public interface IPositionGroupResolver
24  {
25  /// <summary>
26  /// Attempts to group the specified positions into a new <see cref="IPositionGroup"/> using an
27  /// appropriate <see cref="IPositionGroupBuyingPowerModel"/> for position groups created via this
28  /// resolver.
29  /// </summary>
30  /// <param name="newPositions">The positions to be grouped</param>
31  /// <param name="currentPositions">The currently grouped positions</param>
32  /// <param name="group">The grouped positions when this resolver is able to, otherwise null</param>
33  /// <returns>True if this resolver can group the specified positions, otherwise false</returns>
34  bool TryGroup(IReadOnlyCollection<IPosition> newPositions, PositionGroupCollection currentPositions, out IPositionGroup group);
35 
36  /// <summary>
37  /// Resolves the position groups that exist within the specified collection of positions.
38  /// </summary>
39  /// <param name="positions">The collection of positions</param>
40  /// <returns>An enumerable of position groups</returns>
42 
43  /// <summary>
44  /// Determines the position groups that would be evaluated for grouping of the specified
45  /// positions were passed into the <see cref="Resolve"/> method.
46  /// </summary>
47  /// <remarks>
48  /// This function allows us to determine a set of impacted groups and run the resolver on just
49  /// those groups in order to support what-if analysis
50  /// </remarks>
51  /// <param name="groups">The existing position groups</param>
52  /// <param name="positions">The positions being changed</param>
53  /// <returns>An enumerable containing the position groups that could be impacted by the specified position changes</returns>
54  IEnumerable<IPositionGroup> GetImpactedGroups(
56  IReadOnlyCollection<IPosition> positions
57  );
58  }
59 }