| Overall Statistics |
|
Total Orders 42 Average Win 3.23% Average Loss -21.16% Compounding Annual Return -99.998% Drawdown 99.600% Expectancy -0.800 Net Profit -99.548% Sharpe Ratio -0.542 Sortino Ratio -0.245 Probabilistic Sharpe Ratio 0.003% Loss Rate 83% Win Rate 17% Profit-Loss Ratio 0.15 Alpha 0 Beta 0 Annual Standard Deviation 1.826 Annual Variance 3.333 Information Ratio -0.541 Tracking Error 1.826 Treynor Ratio 0 Total Fees $42.09 Estimated Strategy Capacity $5200000.00 Lowest Capacity Asset GME SC72NCBXXAHX Portfolio Turnover 19.23% |
#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.Algorithm.Selection;
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 QCAlgorithmFramework = QuantConnect.Algorithm.QCAlgorithm;
using QCAlgorithmFrameworkBridge = QuantConnect.Algorithm.QCAlgorithm;
#endregion
using QuantConnect.Data.Shortable;
namespace QuantConnect
{
public class ShortAvailabilityDataAlgorithm : QCAlgorithm
{
private Equity _equity;
public override void Initialize()
{
SetStartDate(2021, 1, 1);
SetEndDate(2021, 7, 1);
SetCash(1000);
SetBrokerageModel(new InteractiveBrokersBrokerageModelWithShortable());
_equity = AddEquity("GME");
Schedule.On(
DateRules.EveryDay(_equity.Symbol),
TimeRules.AfterMarketOpen(_equity.Symbol, 10),
Rebalance);
}
public void Rebalance()
{
var symbol = _equity.Symbol;
Plot("Total Shortable Quantity", symbol, _equity.TotalShortableQuantity ?? 0m);
// First, let's not rebalance if there are no shares to short
if (ShortableQuantity(symbol) < 0) return;
// Then, test whether we can short the desired quantity
var quantity = CalculateOrderQuantity(symbol, -1m);
if (Shortable(symbol, quantity))
{
MarketOrder(symbol, quantity);
}
}
public override void OnMarginCallWarning()
{
Liquidate();
}
public class InteractiveBrokersBrokerageModelWithShortable : InteractiveBrokersBrokerageModel
{
public override IShortableProvider GetShortableProvider(Security security)
{
return new InteractiveBrokersShortableProvider();
}
}
}
}