| 12345678910111213141516171819202122232425262728293031323334 |
- """
- 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()
|