Ejemplo n.º 1
0
        /// <summary>
        /// Slices this collection, returning a new collection containing only
        /// positions with the specified <paramref name="right"/>
        /// </summary>
        public OptionPositionCollection Slice(OptionRight right, bool includeUnderlying = true)
        {
            var rights = _rights.Remove(right.Invert());

            var positions = ImmutableDictionary <Symbol, OptionPosition> .Empty;

            if (includeUnderlying && HasUnderlying)
            {
                positions = positions.Add(Underlying, UnderlyingPosition);
            }

            var sides       = ImmutableDictionary <PositionSide, ImmutableHashSet <Symbol> > .Empty;
            var strikes     = ImmutableSortedDictionary <decimal, ImmutableHashSet <Symbol> > .Empty;
            var expirations = ImmutableSortedDictionary <DateTime, ImmutableHashSet <Symbol> > .Empty;

            foreach (var symbol in rights.SelectMany(kvp => kvp.Value))
            {
                var position = _positions[symbol];
                sides       = sides.Add(position.Side, symbol);
                positions   = positions.Add(symbol, position);
                strikes     = strikes.Add(position.Strike, symbol);
                expirations = expirations.Add(position.Expiration, symbol);
            }

            return(new OptionPositionCollection(positions, rights, sides, strikes, expirations));
        }
Ejemplo n.º 2
0
 private SecurityHolding CreateHolding(int quantity)
 => CreateHolding(Symbol.CreateOption(Symbols.SPY, Market.USA, OptionStyle.American, _previousRight.Invert(), _previousStrike + 1, Expirations.Dequeue()), quantity);