Overall Statistics |
Total Trades 1 Average Win 0% Average Loss 0% Compounding Annual Return 0% Drawdown 0% Expectancy 0 Net Profit 0% Sharpe Ratio 0 Sortino Ratio 0 Probabilistic Sharpe Ratio 0% Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0 Beta 0 Annual Standard Deviation 0 Annual Variance 0 Information Ratio 0 Tracking Error 0 Treynor Ratio 0 Total Fees $274.15 Estimated Strategy Capacity $63000000.00 Lowest Capacity Asset AAPL R735QTJ8XC9X Portfolio Turnover 98.06% |
# region imports from AlgorithmImports import * # endregion class FocusedYellowGorilla(QCAlgorithm): def Initialize(self): self.SetStartDate(2024, 1, 8) self.SetEndDate(2024, 1, 8) self.SetCash(10000000) # 添加股票数据,以5分钟为间隔合并数据 self.aapl = self.AddEquity("AAPL", Resolution.Minute, extendedMarketHours = True).Symbol fiveMinuteConsolidator = TradeBarConsolidator(timedelta(minutes=5)) fiveMinuteConsolidator.DataConsolidated += self.FiveMinuteBarHandler self.SubscriptionManager.AddConsolidator(self.aapl, fiveMinuteConsolidator) # Calculate the EMA with 5 5-minute bars self.fast_ema = ExponentialMovingAverage(5) # Calculate the EMA with 20 5-minut bars self.slow_ema = ExponentialMovingAverage(20) self.SetWarmup(100) chart = Chart("Trade") self.AddChart(chart) chart.AddSeries(Series("EMA-5", SeriesType.Line,"", Color.Purple)) chart.AddSeries(Series("EMA-20", SeriesType.Line, "", Color.Black)) chart.AddSeries(Series('Candle', SeriesType.Bar)) chart = Chart("Candlestick") self.AddChart(chart) chart.AddSeries(CandlestickSeries("AAPL", "$")) def FiveMinuteBarHandler(self, sender, consolidated): # '''This is our event handler for our 5 minute trade bar defined above in Initialize(). So each time the # consolidator produces a new 5 minute bar, this function will be called automatically. The 'sender' parameter # will be the instance of the IDataConsolidator that invoked the event, but you'll almost never need that!''' self.fast_ema.Update(consolidated.Time, consolidated.Close) self.slow_ema.Update(consolidated.Time, consolidated.Close) # 获取当前快慢均线值 fast_ema_value = self.fast_ema.Current.Value slow_ema_value = self.slow_ema.Current.Value self.Plot("Trade", 'EMA-5', fast_ema_value) self.Plot("Trade", 'EMA-20', slow_ema_value) self.Plot("Trade", "AAPL", consolidated) # 判断快慢均线交叉 if fast_ema_value > slow_ema_value and self.fast_ema.Previous.Value <= self.slow_ema.Previous.Value: # 发出买入信号 self.SetHoldings("AAPL", 1) self.Debug("买入 AAPL") elif fast_ema_value < slow_ema_value and self.fast_ema.Previous.Value >= self.slow_ema.Previous.Value: # 发出卖出信号 self.Liquidate("AAPL") self.Debug("卖出 AAPL") def OnData(self, slice): pass