| Overall Statistics |
|
Total Trades 18 Average Win 0% Average Loss 0.00% Compounding Annual Return -0.972% Drawdown 0.000% Expectancy -1 Net Profit -0.019% Sharpe Ratio -19.67 Probabilistic Sharpe Ratio 0% Loss Rate 100% Win Rate 0% Profit-Loss Ratio 0 Alpha -0.006 Beta -0.002 Annual Standard Deviation 0 Annual Variance 0 Information Ratio -10.602 Tracking Error 0.076 Treynor Ratio 4.338 Total Fees $18.00 Estimated Strategy Capacity $1200000000.00 |
class SPY_SMA(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2021, 4, 10) # Set Start Date
self.SetEndDate(2021, 4, 17) # Set End Date
self.SetCash(100000) # Set Strategy Cash
symbol = "SPY"
# spy = self.AddEquity(symbol , Resolution.Minute , extendedMarketHours = True)
spy = self.AddEquity(symbol , Resolution.Minute )
self.spy = spy.Symbol
fiveCountConsolidator = TradeBarConsolidator(TimeSpan.FromMinutes(5)) # 构建函数合成30min数据
fiveCountConsolidator.DataConsolidated += self.FiveBarHandler
self.SubscriptionManager.AddConsolidator(self.spy, fiveCountConsolidator)
self.sma_5min_window = RollingWindow[float](2)
self.sma_30min_window = RollingWindow[float](2)
self.close_window = RollingWindow[float](2)
self.sma_5min_5 = SimpleMovingAverage(5) # 计算基于5min 的MA5
self.sma_5min_30 = SimpleMovingAverage(30) # 计算基于30min 的MA30
self.RegisterIndicator(self.spy, self.sma_5min_5, fiveCountConsolidator) # 注册 sma5
self.RegisterIndicator(self.spy, self.sma_5min_30, fiveCountConsolidator)
self.initFinished = False
self.quantity = 0
self.SetWarmUp(30)
def OnData(self, data):
pass
def FiveBarHandler(self, sender, bar):
self.close_window.Add(bar.Close)
self.sma_5min_window.Add(self.sma_5min_5.Current.Value)
self.sma_30min_window.Add(self.sma_5min_30.Current.Value)
if self.initFinished and self.sma_30min_window.IsReady:
if (self.sma_5min_window[0] > self.sma_30min_window[0]) and (self.close_window[0] > self.sma_5min_window[0]):
self.OrderSecurity("Positive")
elif (self.sma_5min_window[0] < self.sma_30min_window[0]) and (self.close_window[0] < self.sma_5min_window[0]):
self.OrderSecurity("Negative")
def OrderSecurity(self, Tag):
if self.quantity >= 0 and Tag is "Negative":
self.MarketOrder(self.spy, -self.quantity - 1)
self.quantity = -1
if self.quantity < 0 and Tag is "Positive":
self.MarketOrder(self.spy, -self.quantity + 1 )
self.quantity = 1
def OnWarmupFinished(self):
self.initFinished = True