Overall Statistics |
Total Orders 32 Average Win 1.30% Average Loss -2.01% Compounding Annual Return -46.609% Drawdown 25.900% Expectancy -0.780 Start Equity 2000000 End Equity 1538406.64 Net Profit -23.080% Sharpe Ratio -1.752 Sortino Ratio -1.289 Probabilistic Sharpe Ratio 0.211% Loss Rate 87% Win Rate 13% Profit-Loss Ratio 0.65 Alpha -0.361 Beta -0.163 Annual Standard Deviation 0.223 Annual Variance 0.05 Information Ratio -2.329 Tracking Error 0.247 Treynor Ratio 2.403 Total Fees $1881.98 Estimated Strategy Capacity $24000000.00 Lowest Capacity Asset ROKU WO9FGTL2I89X Portfolio Turnover 10.03% |
from AlgorithmImports import * class SMA20MomentumROKU(QCAlgorithm): def Initialize(self): self.SetStartDate(2023, 12, 20) self.SetEndDate(2024, 5, 20) self.SetWarmUp(30) self.SetCash(2000_000) self.ticker = "ROKU" 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].IsLong and self.sym.Price< ind or \ self.Portfolio[self.ticker].IsShort and self.sym.Price> ind: self.SetHoldings(self.sym.Symbol, 0.0)