public void OrderByMarginImpactDoesNotReturnTargetsForWhichUnorderedQuantityIsZeroBecauseOpenOrder()
        {
            var algorithm      = new FakeAlgorithm();
            var orderProcessor = new FakeOrderProcessor();

            algorithm.Transactions.SetOrderProcessor(orderProcessor);
            var symbol = new Symbol(SecurityIdentifier.GenerateEquity(_symbol, Market.USA), _symbol);
            var equity = algorithm.AddEquity(symbol);

            equity.Cache.AddData(new TradeBar(DateTime.UtcNow, symbol, 1, 1, 1, 1, 1));
            var collection = new PortfolioTargetCollection();
            var target     = new PortfolioTarget(symbol, 1);

            collection.Add(target);

            var openOrderRequest = new SubmitOrderRequest(OrderType.Market, symbol.SecurityType, symbol, 1, 0, 0, DateTime.UtcNow, "");

            openOrderRequest.SetOrderId(1);
            var openOrderTicket = new OrderTicket(algorithm.Transactions, openOrderRequest);

            orderProcessor.AddOrder(new MarketOrder(symbol, 1, DateTime.UtcNow));
            orderProcessor.AddTicket(openOrderTicket);

            var targets = collection.OrderByMarginImpact(algorithm);

            Assert.AreEqual(collection.Count, 1);
            Assert.IsTrue(targets.IsNullOrEmpty());
        }
示例#2
0
        public void WontRemoveBecauseOpenOrder_Add()
        {
            var orderProvider   = new FakeOrderProcessor();
            var pendingRemovals = new PendingRemovalsManager(orderProvider);
            var security        = SecurityTests.GetSecurity();
            var universe        = new TestUniverse();

            orderProvider.AddOrder(new LimitOrder(security.Symbol, 1, 1, DateTime.UtcNow));

            Assert.IsNull(pendingRemovals.TryRemoveMember(security, universe));
            Assert.AreEqual(1, pendingRemovals.PendingRemovals.Keys.Count());
            Assert.AreEqual(1, pendingRemovals.PendingRemovals.Values.Count());
            Assert.AreEqual(universe, pendingRemovals.PendingRemovals.Keys.First());
            Assert.AreEqual(security, pendingRemovals.PendingRemovals.Values.First().First());
        }
示例#3
0
        public void WontRemoveBecauseTarget_Add()
        {
            var orderProvider   = new FakeOrderProcessor();
            var pendingRemovals = new PendingRemovalsManager(orderProvider);
            var security        = SecurityTests.GetSecurity();
            var universe        = new TestUniverse();

            security.Holdings.Target = new PortfolioTarget(security.Symbol, 10);

            Assert.IsNull(pendingRemovals.TryRemoveMember(security, universe));
            Assert.AreEqual(1, pendingRemovals.PendingRemovals.Keys.Count());
            Assert.AreEqual(1, pendingRemovals.PendingRemovals.Values.Count());
            Assert.AreEqual(universe, pendingRemovals.PendingRemovals.Keys.First());
            Assert.AreEqual(security, pendingRemovals.PendingRemovals.Values.First().First());
        }
        public void WontRemoveBecauseHoldings_Add()
        {
            var orderProvider   = new FakeOrderProcessor();
            var pendingRemovals = new PendingRemovalsManager(orderProvider);
            var security        = SecurityTests.GetSecurity();
            var universe        = new TestUniverse();

            security.Holdings.SetHoldings(10, 10);

            Assert.IsFalse(pendingRemovals.TryRemoveMember(security, universe).Any());
            Assert.AreEqual(1, pendingRemovals.PendingRemovals.Keys.Count());
            Assert.AreEqual(1, pendingRemovals.PendingRemovals.Values.Count());
            Assert.AreEqual(universe, pendingRemovals.PendingRemovals.Keys.First());
            Assert.AreEqual(security, pendingRemovals.PendingRemovals.Values.First().First());
        }
示例#5
0
        public void NonAccountCurrencyOption_Exercise()
        {
            var reference = new DateTime(2016, 02, 16, 11, 53, 30);
            SecurityPortfolioManager portfolio;
            var security = InitializeTest(reference, out portfolio);

            var cash = new Cash("EUR", 0, 10);

            portfolio.CashBook.Add("EUR", cash);
            var option = new Option(
                Symbols.SPY_C_192_Feb19_2016,
                SecurityExchangeHours.AlwaysOpen(DateTimeZone.Utc),
                cash,
                new OptionSymbolProperties(SymbolProperties.GetDefault("EUR")),
                portfolio.CashBook,
                RegisteredSecurityDataTypesProvider.Null,
                new SecurityCache()
                );

            option.Underlying = security;
            security.SetMarketPrice(new Tick {
                Value = 1000
            });
            portfolio.Securities.Add(option);
            var fakeOrderProcessor = new FakeOrderProcessor();

            portfolio.Transactions.SetOrderProcessor(fakeOrderProcessor);

            var fillPrice    = 1000m;
            var fillQuantity = 1;

            option.ExerciseSettlement = SettlementType.Cash;
            var orderFee = new OrderFee(new CashAmount(1, "EUR"));
            var order    = new OptionExerciseOrder(Symbols.SPY_C_192_Feb19_2016, fillQuantity, DateTime.UtcNow);

            fakeOrderProcessor.AddOrder(order);
            var orderDirection = fillQuantity > 0 ? OrderDirection.Buy : OrderDirection.Sell;
            var fill           = new OrderEvent(order.Id, option.Symbol, reference, OrderStatus.Filled, orderDirection, fillPrice, fillQuantity, orderFee);

            portfolio.ProcessFill(fill);

            // (1000 (price) - 192 (call strike)) * 1 quantity => 808 EUR
            Assert.AreEqual(10, option.Holdings.TotalFees); // 1 * 10 (conversion rate to account currency)
            // 808 - 1000 (price) - 1 fee
            Assert.AreEqual(-193, portfolio.CashBook["EUR"].Amount);
            // 100000 initial amount, no fee deducted
            Assert.AreEqual(100000, portfolio.CashBook[Currencies.USD].Amount);
        }
示例#6
0
        public void ReturnedRemoved_Add()
        {
            var orderProvider   = new FakeOrderProcessor();
            var pendingRemovals = new PendingRemovalsManager(orderProvider);
            var security        = SecurityTests.GetSecurity();
            var universe        = new TestUniverse();

            var result = pendingRemovals.TryRemoveMember(security, universe);

            Assert.IsTrue(result.Any());
            Assert.AreEqual(universe, result.First().Universe);
            Assert.AreEqual(security, result.First().Security);
            Assert.IsFalse(pendingRemovals.CheckPendingRemovals(new HashSet <Symbol>(), universe).Any());
            Assert.AreEqual(0, pendingRemovals.PendingRemovals.Keys.Count());
            Assert.AreEqual(0, pendingRemovals.PendingRemovals.Values.Count());
        }
示例#7
0
        public void WontBeReturnedBecauseReSelected()
        {
            var orderProvider   = new FakeOrderProcessor();
            var pendingRemovals = new PendingRemovalsManager(orderProvider);
            var security        = SecurityTests.GetSecurity();
            var universe        = new TestUniverse();

            orderProvider.AddOrder(new LimitOrder(security.Symbol, 1, 1, DateTime.UtcNow));
            pendingRemovals.TryRemoveMember(security, universe);

            Assert.IsFalse(pendingRemovals.CheckPendingRemovals(
                               new HashSet <Symbol> {
                security.Symbol
            }, universe).Any());

            // internally it was removed because it was reselected
            Assert.AreEqual(0, pendingRemovals.PendingRemovals.Keys.Count());
            Assert.AreEqual(0, pendingRemovals.PendingRemovals.Values.Count());
        }
示例#8
0
        public void GetUnorderedQuantityHoldingsOpenOrders(decimal holdings, decimal target, decimal filledQuantity, decimal expected)
        {
            var algo           = new AlgorithmStub();
            var orderProcessor = new FakeOrderProcessor();
            var orderRequest   = new SubmitOrderRequest(
                OrderType.Market,
                SecurityType.Future,
                Symbols.Future_CLF19_Jan2019,
                filledQuantity * 2,
                250,
                250,
                new DateTime(2020, 1, 1),
                "Pepe"
                );

            var order  = Order.CreateOrder(orderRequest);
            var ticket = new OrderTicket(algo.Transactions, orderRequest);

            ticket.SetOrder(order);

            ticket.AddOrderEvent(new OrderEvent(1,
                                                Symbols.Future_CLF19_Jan2019,
                                                new DateTime(2020, 1, 1),
                                                OrderStatus.Filled,
                                                filledQuantity > 0 ? OrderDirection.Buy : OrderDirection.Sell,
                                                250,
                                                filledQuantity,
                                                OrderFee.Zero));

            orderProcessor.AddTicket(ticket);
            algo.Transactions.SetOrderProcessor(orderProcessor);
            var security = algo.AddFutureContract(Symbols.Future_CLF19_Jan2019);

            security.SetMarketPrice(new TradeBar {
                Value = 250
            });
            security.Holdings.SetHoldings(250, holdings);

            var result = OrderSizing.GetUnorderedQuantity(algo,
                                                          new PortfolioTarget(Symbols.Future_CLF19_Jan2019, target));

            Assert.AreEqual(expected, result);
        }
示例#9
0
        public void WontRemoveBecauseOfUnderlying()
        {
            var orderProvider   = new FakeOrderProcessor();
            var pendingRemovals = new PendingRemovalsManager(orderProvider);
            var equity          = CreateSecurity(Symbols.SPY);
            var equityOption    = CreateSecurity(Symbols.SPY_C_192_Feb19_2016);

            // we add an order of the equity option
            orderProvider.AddOrder(new LimitOrder(equityOption.Symbol, 1, 1, DateTime.UtcNow));
            var universe = new TestUniverse();

            universe.AddMember(DateTime.UtcNow, equity);
            universe.AddMember(DateTime.UtcNow, equityOption);

            // we try to remove the equity
            Assert.IsNull(pendingRemovals.TryRemoveMember(equity, universe));
            Assert.AreEqual(1, pendingRemovals.PendingRemovals.Keys.Count());
            Assert.AreEqual(1, pendingRemovals.PendingRemovals.Values.Count());
            Assert.AreEqual(universe, pendingRemovals.PendingRemovals.Keys.First());
            Assert.AreEqual(equity, pendingRemovals.PendingRemovals.Values.First().First());
        }
示例#10
0
        private FakeOrderProcessor InitializeAndGetFakeOrderProcessor(QCAlgorithm algo)
        {
            algo.SetFinishedWarmingUp();
            algo.SetCash(100000);
            algo.AddEquity("SPY");
            var fakeOrderProcessor = new FakeOrderProcessor();

            algo.Transactions.SetOrderProcessor(fakeOrderProcessor);
            algo.Portfolio["SPY"].SetHoldings(1, 10);
            var security = algo.Securities["SPY"];

            security.SetMarketPrice(new TradeBar
            {
                Time   = DateTime.Now,
                Symbol = security.Symbol,
                Open   = 20,
                High   = 20,
                Low    = 20,
                Close  = 20
            });

            Assert.IsTrue(fakeOrderProcessor.ProcessedOrdersRequests.IsNullOrEmpty());
            return(fakeOrderProcessor);
        }