""" Debug版本 - 检查指标计算 """ import backtrader as bt import pandas as pd import numpy as np class DebugStrategy(bt.Strategy): params = (('fast', 20), ('slow', 60)) def __init__(self): self.dataclose = self.datas[0].close self.sma_fast = bt.indicators.SMA(period=self.p.fast) self.sma_slow = bt.indicators.SMA(period=self.p.slow) self.crossover = bt.indicators.CrossOver(self.sma_fast, self.sma_slow) def next(self): # 每100天打印一次检查 if len(self) % 100 == 0: fast_val = self.sma_fast[0] slow_val = self.sma_slow[0] fast_str = f'{fast_val:.2f}' if not np.isnan(fast_val) else 'None' slow_str = f'{slow_val:.2f}' if not np.isnan(slow_val) else 'None' print(f'Day {len(self)}: Close={self.dataclose[0]:.2f}, FastMA={fast_str}, SlowMA={slow_str}, Cross={self.crossover[0]}') if __name__ == "__main__": cerebro = bt.Cerebro() df = pd.read_csv("chinext50.csv", parse_dates=['datetime'], index_col='datetime') data = bt.feeds.PandasData(dataname=df) cerebro.adddata(data) cerebro.addstrategy(DebugStrategy) cerebro.run()