Overall Statistics |
Total Trades 1 Average Win 0% Average Loss 0% Compounding Annual Return 0% Drawdown 100.200% Expectancy 0 Net Profit -100.575% Sharpe Ratio -0.286 Probabilistic Sharpe Ratio 17.049% Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha -1.849 Beta -1.452 Annual Standard Deviation 3.253 Annual Variance 10.58 Information Ratio -0.087 Tracking Error 3.39 Treynor Ratio 0.64 Total Fees $137.59 |
from clr import AddReference AddReference("System") AddReference("QuantConnect.Common") AddReference("QuantConnect.Algorithm") from System import * from QuantConnect import * from QuantConnect.Orders import * from QuantConnect.Algorithm import QCAlgorithm import numpy as np from datetime import datetime, timedelta class MarginCallEventsAlgorithm(QCAlgorithm): def Initialize(self): self.SetCash(100000) self.SetStartDate(2020,1,1) self.SetEndDate(2020,8,11) self.AddEquity("PCG", Resolution.Daily) self.Securities["PCG"].SetLeverage(100) self.AddEquity("SPY", Resolution.Daily) def OnData(self, data): if not self.Portfolio.Invested: self.SetHoldings("PCG",3) self.SetHoldings("SPY",3) def OnMarginCall(self, requests): self.Debug("Margin Call") for order in requests: newQuantity = int(np.sign(order.Quantity) * order.Quantity * 1.1) requests.remove(order) requests.append(SubmitOrderRequest(order.OrderType, order.SecurityType, order.Symbol, newQuantity, order.StopPrice, order.LimitPrice, self.Time, "OnMarginCall")) return requests def OnMarginCallWarning(self): pcgHoldings = self.Securities["PCG"].Holdings.Quantity shares = int(-pcgHoldings * 0.005) self.Error("{0} - OnMarginCallWarning(): Liquidating {1} shares of PCG to avoid margin call.".format(self.Time, shares)) self.MarketOrder("PCG", shares)