| 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)