| 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;
}
}