Overall Statistics
Total Orders
2
Average Win
0%
Average Loss
0%
Compounding Annual Return
71.819%
Drawdown
0.400%
Expectancy
0
Start Equity
100000
End Equity
101143.4
Net Profit
1.143%
Sharpe Ratio
14.258
Sortino Ratio
0
Probabilistic Sharpe Ratio
0%
Loss Rate
0%
Win Rate
0%
Profit-Loss Ratio
0
Alpha
0.462
Beta
-0.333
Annual Standard Deviation
0.037
Annual Variance
0.001
Information Ratio
7.151
Tracking Error
0.102
Treynor Ratio
-1.59
Total Fees
$2.60
Estimated Strategy Capacity
$120000.00
Lowest Capacity Asset
SPY 32UMX5ALG3L2E|SPY R735QTJ8XC9X
Portfolio Turnover
0.25%
Drawdown Recovery
3
#region imports
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using QuantConnect;
    using QuantConnect.Util;
    using QuantConnect.Algorithm;
    using QuantConnect.Data;
    using QuantConnect.Orders;
    using QuantConnect.Securities;
using QuantConnect.Indicators;
#endregion

public class TradeStationComboLimitOrder : QCAlgorithm
{
    private List<Leg> _legs;
    private List<OrderTicket> _tickets;

    public override void Initialize()
    {
        SetStartDate(2025, 8, 27);
        
        var underlying = QuantConnect.Symbol.Create("SPY", SecurityType.Equity, Market.USA);
        
        Leg getLeg(OptionRight right)
        {
            var symbol = QuantConnect.Symbol.CreateOption(
                underlying, underlying.ID.Market, OptionStyle.American, 
                right, 641, new DateTime(2025,9,4));
            AddOptionContract(symbol);
            return Leg.Create(symbol, 1);
        }
        
        _legs = [.. new []{ OptionRight.Call, OptionRight.Put }.Select(getLeg)];
        NoDataYet();
    }

    public override void OnData(Slice data)
    {
        if (!_tickets.IsNullOrEmpty() || NoDataYet()) return;
        _tickets = ComboLimitOrder(_legs, -2, 1m);
    }

    private bool NoDataYet()
    {
        var noData = _legs.All(leg => Securities[leg.Symbol].Price == 0);
        if (noData) Log("No data yet");
        return noData;
    }
}