Overall Statistics
Total Trades
2
Average Win
0%
Average Loss
0.00%
Compounding Annual Return
-0.023%
Drawdown
0.000%
Expectancy
-1
Net Profit
-0.002%
Sharpe Ratio
0
Sortino Ratio
0
Probabilistic Sharpe Ratio
0%
Loss Rate
100%
Win Rate
0%
Profit-Loss Ratio
0
Alpha
0
Beta
0
Annual Standard Deviation
0
Annual Variance
0
Information Ratio
-5.496
Tracking Error
0.156
Treynor Ratio
0
Total Fees
$2.00
Estimated Strategy Capacity
$8200000.00
Lowest Capacity Asset
SPY R735QTJ8XC9X
Portfolio Turnover
0.02%
# region imports
from AlgorithmImports import *
# endregion

class CustomSettlementModelAlgorithm(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2022, 7, 1)
        self.SetEndDate(2022, 8, 1)
        self.SetCash(100000)
        
        security = self.AddEquity("SPY")
        security.SetSettlementModel(MySettlementModel())

        self.Schedule.On(
            self.DateRules.EveryDay("SPY"),
            self.TimeRules.Every(timedelta(minutes=30)),
            self.plot_cash
        )

        self.traded = False

    def plot_cash(self):
        self.Plot("Settled Cash", "USD", self.Portfolio.CashBook["USD"].Amount)
        self.Plot("Unsettled Cash", "USD", self.Portfolio.UnsettledCashBook["USD"].Amount)

    def OnData(self, data: Slice):
        if self.traded:
            return

        self.MarketOrder("SPY", 1)
        self.MarketOrder("SPY", -1)
        self.traded = True

class MySettlementModel:
    def ApplyFunds(self, applyFundsParameters: ApplyFundsSettlementModelParameters) -> None:
        currency = applyFundsParameters.CashAmount.Currency
        amount = applyFundsParameters.CashAmount.Amount
        applyFundsParameters.Portfolio.CashBook[currency].AddAmount(amount)

    def Scan(self, settlementParameters: ScanSettlementModelParameters) -> None:
        pass

    def GetUnsettledCash(self) -> CashAmount:
        return CashAmount(0, 'USD')