| Overall Statistics |
|
Total Orders 4 Average Win 0% Average Loss 0% Compounding Annual Return 7.973% Drawdown 11.200% Expectancy 0 Start Equity 1000000 End Equity 1166220.09 Net Profit 16.622% Sharpe Ratio 0.172 Sortino Ratio 0.205 Probabilistic Sharpe Ratio 29.228% Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0.003 Beta 0.232 Annual Standard Deviation 0.084 Annual Variance 0.007 Information Ratio -0.253 Tracking Error 0.137 Treynor Ratio 0.062 Total Fees $52.51 Estimated Strategy Capacity $130000000.00 Lowest Capacity Asset MWD R735QTJ8XC9X Portfolio Turnover 0.14% |
from AlgorithmImports import *
class ModifiedBuyAndHoldStrategy(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2022, 5, 1)
self.SetEndDate(2024, 5, 1)
self.SetCash(1_000_000)
self.gs = self.AddEquity("GS", Resolution.Daily).Symbol
self.ms = self.AddEquity("MS", Resolution.Daily).Symbol
self.amzn = self.AddEquity("AMZN", Resolution.Daily).Symbol
self.ko = self.AddEquity("KO", Resolution.Daily).Symbol
self.initial_portfolio_value = self.Portfolio.TotalPortfolioValue
self.max_drawdown = 200_000
self.trades_executed = False
def OnData(self, data):
if not self.trades_executed:
self.set_holdings(self.gs, 0.25)
self.set_holdings(self.ms, -0.25)
self.set_holdings(self.amzn, 0.25)
self.set_holdings(self.ko, -0.25)
self.trades_executed = True
current_loss = self.initial_portfolio_value - self.Portfolio.TotalPortfolioValue
if current_loss > self.max_drawdown:
self.Liquidate()
self.Debug("Liquidated positions due to stop-loss.")
def OnEndOfAlgorithm(self):
self.Debug(f"Initial Portfolio Value: {self.initial_portfolio_value}")
self.Debug(f"Final Portfolio Value: {self.Portfolio.TotalPortfolioValue}")