Overall Statistics
Total Trades
0
Average Win
0%
Average Loss
0%
Compounding Annual Return
0%
Drawdown
0%
Expectancy
0
Net Profit
0%
Sharpe Ratio
0
Probabilistic Sharpe Ratio
0%
Loss Rate
0%
Win Rate
0%
Profit-Loss Ratio
0
Alpha
0
Beta
0
Annual Standard Deviation
0
Annual Variance
0
Information Ratio
0.096
Tracking Error
0.143
Treynor Ratio
0
Total Fees
$0.00
Estimated Strategy Capacity
$0
Lowest Capacity Asset
Portfolio Turnover
0%
#region imports
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Linq;
    using System.Globalization;
    using System.Drawing;
    using QuantConnect;
    using QuantConnect.Algorithm.Framework;
    using QuantConnect.Algorithm.Framework.Selection;
    using QuantConnect.Algorithm.Framework.Alphas;
    using QuantConnect.Algorithm.Framework.Portfolio;
    using QuantConnect.Algorithm.Framework.Execution;
    using QuantConnect.Algorithm.Framework.Risk;
    using QuantConnect.Parameters;
    using QuantConnect.Benchmarks;
    using QuantConnect.Brokerages;
    using QuantConnect.Util;
    using QuantConnect.Interfaces;
    using QuantConnect.Algorithm;
    using QuantConnect.Indicators;
    using QuantConnect.Data;
    using QuantConnect.Data.Consolidators;
    using QuantConnect.Data.Custom;
    using QuantConnect.DataSource;
    using QuantConnect.Data.Fundamental;
    using QuantConnect.Data.Market;
    using QuantConnect.Data.UniverseSelection;
    using QuantConnect.Notifications;
    using QuantConnect.Orders;
    using QuantConnect.Orders.Fees;
    using QuantConnect.Orders.Fills;
    using QuantConnect.Orders.Slippage;
    using QuantConnect.Scheduling;
    using QuantConnect.Securities;
    using QuantConnect.Securities.Equity;
    using QuantConnect.Securities.Future;
    using QuantConnect.Securities.Option;
    using QuantConnect.Securities.Forex;
    using QuantConnect.Securities.Crypto;   
    using QuantConnect.Securities.Interfaces;
    using QuantConnect.Storage;
    using QuantConnect.Data.Custom.AlphaStreams;
    using QCAlgorithmFramework = QuantConnect.Algorithm.QCAlgorithm;
    using QCAlgorithmFrameworkBridge = QuantConnect.Algorithm.QCAlgorithm;
#endregion
namespace QuantConnect.Algorithm.CSharp
{
    public class FutureOptions : QCAlgorithm
    {
        Future ContinuousContract;
        Security CurrentContract, PreviousContract;
        Symbol ContinuousContractSymbol;
        Symbol OptionContract;
        Symbol CurrentContract_Symbol;
        ScheduledEvent BuySchedule;
        

        public override void Initialize()
        {
            SetStartDate(2023,01,20);  //Set Start Date
            SetCash(100000);             //Set Strategy Cash
            
            SetBrokerageModel(BrokerageName.QuantConnectBrokerage, AccountType.Margin);

            ContinuousContract = AddFuture(Futures.Indices.MicroSP500EMini,
                resolution: Resolution.Minute,
                market: Market.CME,
                fillDataForward: false,
                leverage: 0,
                extendedMarketHours: true,
                dataMappingMode: DataMappingMode.OpenInterest,
                DataNormalizationMode.Raw,             
                contractDepthOffset: 0);

            ContinuousContractSymbol = ContinuousContract.Symbol;

            AddFutureOption(ContinuousContractSymbol, OptionFilterUniverse => OptionFilterUniverse.Strikes(-10,+10).Expiration(4,4).WeeklysOnly().CallsOnly());

            BuySchedule = Schedule.On(DateRules.WeekStart(), TimeRules.AfterMarketOpen(ContinuousContractSymbol, 0, true), BuyContracts);

        }

        public override void OnData(Slice data)
        {
            //We only care about OnData if we have an open trade
            var chain = CurrentSlice.OptionChains.GetValue(ContinuousContract.Mapped.Value);
        }

        public void BuyContracts()
        {
            //CurrentSlice.OptionChains.GetValue(ContinuousContract.Mapped.Underlying);
        
        /*
            var chain = CurrentSlice.OptionChains.GetValue(ContinuousContract.Mapped.Value);
            var contracts = chain
                .OrderByDescending(x => x.Expiry)
                .ThenByDescending(x => x.Strike)
                .ToList();
            var oufOfTheMoneyCall = contracts.Last(contract => contract.Right == OptionRight.Call && contract.Strike > chain.Underlying.Price);
            var initialMargin = Portfolio.MarginRemaining;
            MarketOrder(oufOfTheMoneyCall.Symbol, 1);
        */
            Log($"SpecificTime: Fired at : {Time}");
        }
    }
}