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)