Overall Statistics
Total Orders
3
Average Win
49.10%
Average Loss
0%
Compounding Annual Return
0%
Drawdown
100.500%
Expectancy
-1
Start Equity
10000
End Equity
-76
Net Profit
-100.760%
Sharpe Ratio
-0.109
Sortino Ratio
0
Probabilistic Sharpe Ratio
0%
Loss Rate
100%
Win Rate
0%
Profit-Loss Ratio
0
Alpha
43.565
Beta
57.628
Annual Standard Deviation
9.237
Annual Variance
85.33
Information Ratio
-0.025
Tracking Error
9.077
Treynor Ratio
-0.017
Total Fees
$0.00
Estimated Strategy Capacity
$190000.00
Lowest Capacity Asset
SPXW 31UKA22P964XA|SPX 31
Portfolio Turnover
25.26%
#region imports
using System;
using System.Collections.Generic;
using System.Linq;
using QuantConnect.Util;
using QuantConnect.Data;
using QuantConnect.Orders;
using QuantConnect.Orders.Fees;
using QuantConnect.Orders.Fills;
using QuantConnect.Securities;
using QuantConnect.Securities.Option;
#endregion
namespace QuantConnect.Algorithm.CSharp
{    
    class MySecurityInitializer : BrokerageModelSecurityInitializer
    {
        public MySecurityInitializer(Brokerages.IBrokerageModel brokerageModel, ISecuritySeeder securitySeeder)
            : base(brokerageModel, securitySeeder) { }

        public override void Initialize(Security security)
        {
            base.Initialize(security);

            if (security.Type is SecurityType.IndexOption)
            {
                // Uncomment next line to fix
                //(security as Option).SetOptionAssignmentModel(new NullOptionAssignmentModel());
            }
        }
    }

    public class LogicalBlueLemur : QCAlgorithm
    {
        private Symbol _spxw;

        private bool _done;

        public override void Initialize()
        {
            SetSecurityInitializer(new MySecurityInitializer(BrokerageModel, new FuncSecuritySeeder(GetLastKnownPrices)));

            SetStartDate(2022, 1, 21);
            SetEndDate(2022, 1, 26);

            SetCash(10000);

            var index = AddIndex("SPX", Resolution.Minute).Symbol;

            var option = AddIndexOption(index, "SPXW", Resolution.Minute);

            option.SetFilter((x) => x.IncludeWeeklys().Strikes(-5, 5).Expiration(1, 4));

            _spxw = option.Symbol;
        }

        public override void OnData(Slice slice)
        {            
            if (_done) return;

            if (!slice.OptionChains.TryGetValue(_spxw, out var chain)) return;

            var spread = OptionStrategies.BullPutSpread(_spxw, 4490, 4485, new DateTime(2022, 1, 24));

            Buy(spread, 1);

            _done = true;
        }
    }
}