コード例 #1
0
        public void FutureOptionSecurityUsesFutureOptionMarginModel()
        {
            var underlyingFuture = Symbol.CreateFuture(
                QuantConnect.Securities.Futures.Indices.SP500EMini,
                Market.CME,
                new DateTime(2021, 3, 19));

            var futureOption = Symbol.CreateOption(underlyingFuture,
                                                   Market.CME,
                                                   OptionStyle.American,
                                                   OptionRight.Call,
                                                   2550m,
                                                   new DateTime(2021, 3, 19));

            var futureOptionSecurity = new QuantConnect.Securities.FutureOption.FutureOption(
                futureOption,
                MarketHoursDatabase.FromDataFolder().GetExchangeHours(Market.CME, futureOption, futureOption.SecurityType),
                new Cash("USD", 100000m, 1m),
                new OptionSymbolProperties(string.Empty, "USD", 1m, 0.01m, 1m),
                new CashBook(),
                new RegisteredSecurityDataTypesProvider(),
                new SecurityCache(),
                null);

            Assert.IsTrue(futureOptionSecurity.BuyingPowerModel is FuturesOptionsMarginModel);
        }
コード例 #2
0
        public void MarginRequirementEs(decimal strike, double expected, OptionRight optionRight, PositionSide positionSide, decimal underlyingRequirement)
        {
            var tz = TimeZones.NewYork;
            var expDate = new DateTime(2021, 3, 19);
            // For this symbol we dont have any history, but only one date and margins line
            var ticker = QuantConnect.Securities.Futures.Indices.SP500EMini;
            var future = Symbol.CreateFuture(ticker, Market.Globex, expDate);
            var symbol = Symbol.CreateOption(future, Market.Globex, OptionStyle.American, optionRight, strike,
                new DateTime(2021, 3, 19));

            var futureSecurity = new Future(
                SecurityExchangeHours.AlwaysOpen(tz),
                new SubscriptionDataConfig(typeof(TradeBar), future, Resolution.Minute, tz, tz, true, false, false),
                new Cash(Currencies.USD, 0, 1m),
                new OptionSymbolProperties(SymbolProperties.GetDefault(Currencies.USD)),
                ErrorCurrencyConverter.Instance,
                RegisteredSecurityDataTypesProvider.Null
            );
            var optionSecurity = new QuantConnect.Securities.FutureOption.FutureOption(symbol,
                SecurityExchangeHours.AlwaysOpen(tz),
                new Cash(Currencies.USD, 0, 1m),
                new OptionSymbolProperties(SymbolProperties.GetDefault(Currencies.USD)),
                ErrorCurrencyConverter.Instance,
                RegisteredSecurityDataTypesProvider.Null,
                new SecurityCache(),
                futureSecurity
            );
            optionSecurity.Underlying.SetMarketPrice(new Tick { Value = 4172, Time = new DateTime(2001, 01, 07) });
            var marginRequirement = FuturesOptionsMarginModel.GetMarginRequirement(optionSecurity, underlyingRequirement, positionSide);

            Log.Debug($"Side {positionSide}. Right {optionRight}. Strike {strike}. Margin: {marginRequirement}");
            Assert.AreEqual(expected, marginRequirement, (double)underlyingRequirement * 0.30d);
        }
コード例 #3
0
        public void MarginRequirementsAreSetCorrectly()
        {
            var expDate = new DateTime(2021, 3, 19);
            var tz      = TimeZones.NewYork;

            // For this symbol we dont have any history, but only one date and margins line
            var ticker = QuantConnect.Securities.Futures.Indices.SP500EMini;
            var future = Symbol.CreateFuture(ticker, Market.CME, expDate);
            var symbol = Symbol.CreateOption(future, Market.CME, OptionStyle.American, OptionRight.Call, 2550m,
                                             new DateTime(2021, 3, 19));

            var futureSecurity = new Future(
                SecurityExchangeHours.AlwaysOpen(tz),
                new SubscriptionDataConfig(typeof(TradeBar), future, Resolution.Minute, tz, tz, true, false, false),
                new Cash(Currencies.USD, 0, 1m),
                new OptionSymbolProperties(SymbolProperties.GetDefault(Currencies.USD)),
                ErrorCurrencyConverter.Instance,
                RegisteredSecurityDataTypesProvider.Null
                );
            var optionSecurity = new QuantConnect.Securities.FutureOption.FutureOption(symbol,
                                                                                       SecurityExchangeHours.AlwaysOpen(tz),
                                                                                       new Cash(Currencies.USD, 0, 1m),
                                                                                       new OptionSymbolProperties(SymbolProperties.GetDefault(Currencies.USD)),
                                                                                       ErrorCurrencyConverter.Instance,
                                                                                       RegisteredSecurityDataTypesProvider.Null,
                                                                                       new SecurityCache(),
                                                                                       futureSecurity
                                                                                       );

            var futureMarginModel = new FuturesOptionsMarginModel(futureOption: optionSecurity);

            optionSecurity.Underlying.SetMarketPrice(new Tick {
                Value = 1500, Time = new DateTime(2001, 01, 07)
            });

            var initialIntradayMarginRequirement     = futureMarginModel.InitialIntradayMarginRequirement;
            var maintenanceIntradayMarginRequirement = futureMarginModel.MaintenanceIntradayMarginRequirement;

            var initialOvernightMarginRequirement     = futureMarginModel.MaintenanceOvernightMarginRequirement;
            var maintenanceOvernightMarginRequirement = futureMarginModel.InitialOvernightMarginRequirement;

            Assert.AreNotEqual(0, initialIntradayMarginRequirement);
            Assert.AreNotEqual(0, maintenanceIntradayMarginRequirement);
            Assert.AreNotEqual(0, initialOvernightMarginRequirement);
            Assert.AreNotEqual(0, maintenanceOvernightMarginRequirement);
        }