Overall Statistics |
Total Trades 2 Average Win 0.63% Average Loss 0% Compounding Annual Return 12.119% Drawdown 0.800% Expectancy 0 Net Profit 0.630% Sharpe Ratio 2.177 Probabilistic Sharpe Ratio 60.926% Loss Rate 0% Win Rate 100% Profit-Loss Ratio 0 Alpha 0.106 Beta -0.049 Annual Standard Deviation 0.043 Annual Variance 0.002 Information Ratio -1.741 Tracking Error 0.101 Treynor Ratio -1.905 Total Fees $661.30 Estimated Strategy Capacity $590000000.00 Lowest Capacity Asset SPY R735QTJ8XC9X |
from AlgorithmImports import * class BrokerageModelAlgorithm(QCAlgorithm): def Initialize(self): self.SetCash(10000000) # Set Strategy Cash self.SetStartDate(2013,10,20) # Set Start Date self.SetEndDate(2013,11,10) # Set End Date self.AddEquity("SPY", Resolution.Daily) self.SetBrokerageModel(RebateBalanceBrokerageModel(self, 1000000, 100)) self.last = 1 def OnData(self, slice): # Simple buy and hold template if not self.Portfolio.Invested: self.SetHoldings("SPY", self.last) # should see a rebate on first trade day of November for testing if self.Time.month == 11: self.Liquidate() # example: if certain trading volume is reached, rebate set amount of USD reward class RebateBalanceBrokerageModel(DefaultBrokerageModel): def __init__(self, algorithm, rebateThreshold, rebateAmount): self.algorithm = algorithm self.rebateThreshold = rebateThreshold self.rebateAmount = rebateAmount # say the rebate volume is counted every month, so we set a timestamp for taring self.monthEnd = Expiry.EndOfMonth(algorithm.Time) # volume counter self.volumeTraded = 0 # check if rebated yet self.rebated = False def CanSubmitOrder(self, security, order, message): # check if need to rebalance volume count and move timestamp if self.algorithm.Time > self.monthEnd: self.volumeTraded = 0 self.monthEnd = Expiry.EndOfMonth(self.algorithm.Time) self.rebated = False # add up the trading volume self.volumeTraded += order.GetValue(security) # if threhold reached, rebate the rebate the reward amount if not self.rebated and self.volumeTraded >= self.rebateThreshold: self.algorithm.Portfolio.CashBook["USD"].AddAmount(self.rebateAmount) self.rebated = True # message self.algorithm.Debug(f"{self.algorithm.Time.date()} Reaching the rebate threshold, rebate ${self.rebateAmount}") return True