双均线策略

双均线策略是最经典的趋势跟踪策略之一

策略原理

双均线策略通过计算两条不同周期的移动平均线,利用它们的金叉和死叉信号来判断买卖时机:

  • 短期均线:反映近期价格趋势(如 MA5、MA10)

  • 长期均线:反映中长期价格趋势(如 MA20、MA50、MA200)

核心逻辑

  • 短期均线上穿长期均线 → 金叉 → 买入信号(趋势转多)

  • 短期均线下穿长期均线 → 死叉 → 卖出信号(趋势转空)

策略实现

class DualMovingAverageCrossStrategy(BaseStrategy):
    """双均线趋势跟踪策略"""
    
    VALID_FUNCS = [ta.sma, ta.ema, ta.wma]

    def __init__(self, func: Callable, fast: int=20, slow: int=50):
        """
        参数:
            fast: 短期均线周期
            long_window: 长期均线周期
        """
        
        if func not in self.VALID_FUNCS:
            raise ValueError(f"不支持该函数: {func.__name__}")

        self.fast = fast
        self.slow = slow
        self.func = func

    def generate_signals(self, df: pd.DataFrame) -> tuple:
        """生成交易信号"""

        close = df['close']

        # 计算两条移动平均线
        fast_ma: pd.DataFrame = self.func(close=close, length=self.fast)
        slow_ma: pd.DataFrame = self.func(close=close, length=self.slow)
        entries = (fast_ma > slow_ma) & (fast_ma.shift(1) <= slow_ma.shift(1))
        exits = (fast_ma < slow_ma) & (fast_ma.shift(1) >= slow_ma.shift(1))
        return entries, exits

总收益率

夏普比率

最大回撤

胜率

交易次数

年化收益

卡尔马比率

买入持有

2.790476

-15.453520

-0.931408

1.000000

1

0.351919

0.377835

SMA双均线(5/30)

2.298606

-22.702762

-0.845784

0.333333

33

0.310060

0.366595