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