Overall Statistics |
Total Orders 27 Average Win 0.78% Average Loss -0.97% Compounding Annual Return 1.790% Drawdown 6.200% Expectancy 0.246 Start Equity 2000000 End Equity 2014891.58 Net Profit 0.745% Sharpe Ratio -0.502 Sortino Ratio -0.715 Probabilistic Sharpe Ratio 26.633% Loss Rate 31% Win Rate 69% Profit-Loss Ratio 0.80 Alpha -0.022 Beta -0.094 Annual Standard Deviation 0.079 Annual Variance 0.006 Information Ratio -1.753 Tracking Error 0.128 Treynor Ratio 0.418 Total Fees $342.91 Estimated Strategy Capacity $390000000.00 Lowest Capacity Asset MSFT R735QTJ8XC9X Portfolio Turnover 8.84% |
from AlgorithmImports import * class SMA20Momentum(QCAlgorithm): def Initialize(self): self.SetStartDate(2023, 12, 20) self.SetEndDate(2024, 5, 20) self.SetWarmUp(30) self.SetCash(2000_000) self.ticker = "MSFT" self.sym = self.AddEquity(self.ticker, Resolution.Daily) self.sma = self.SMA(self.ticker, 20, Resolution.Daily) def OnData(self, data): if self.IsWarmingUp: return ind = self.sma.Current.Value if not self.Portfolio[self.ticker].Invested: if self.sym.Price > ind: self.SetHoldings(self.sym.Symbol, -0.5) elif self.sym.Price <ind: self.SetHoldings(self.sym.Symbol, 0.5) elif self.Portfolio[self.ticker].IsShort and self.sym.Price< ind or \ self.Portfolio[self.ticker].IsLong and self.sym.Price> ind: self.SetHoldings(self.sym.Symbol, 0.0)