# QuantConnect from AlgorithmImports import * class BuyOnDrop(QCAlgorithm): def Initialize(self): self.SetStartDate(2024, 9, 24) # 回測開始日期,過去1年可改 self.SetEndDate(2025, 9, 24) # 回測結束日期 self.SetCash(1000000) # 初始資金 # 標的 self.symbols = { 'VOO': self.AddEquity("VOO", Resolution.Daily).Symbol, 'HYS': self.AddEquity("HYS", Resolution.Daily).Symbol, 'BND': self.AddEquity("BND", Resolution.Daily).Symbol, 'GLD': self.AddEquity("GLD", Resolution.Daily).Symbol } # 儲存歷史價格 self.history_days = 20 self.prices = {symbol: [] for symbol in self.symbols.values()} def OnData(self, data): for symbol in self.symbols.values(): if not data.ContainsKey(symbol): continue price = data[symbol].Close self.prices[symbol].append(price) # 保持只留過去20日資料 if len(self.prices[symbol]) > self.history_days: self.prices[symbol].pop(0) # 如果歷史資料不足20日,跳過 if len(self.prices[symbol]) < self.history_days: continue # 買入條件:最新價格 < 過去20日最高價 if price < max(self.prices[symbol][:-1]): quantity = 100000 // price # 每次買入10萬 self.MarketOrder(symbol, quantity)