4、交易策略智能体:趋势跟踪智能体、均值回归智能体、套利智能体的设计与实现

好,咱们今天来聊聊交易策略智能体。这部分内容,说白了就是给多智能体系统装上「大脑」——每个智能体得有自己的交易逻辑,知道什么时候该买,什么时候该卖。

我个人习惯把策略智能体分成三大类:趋势跟踪、均值回归、套利。这三种策略的逻辑完全不同,甚至可以说是「互斥」的。你想想看,趋势跟踪在追涨杀跌,均值回归在抄底逃顶,套利在吃价差——它们对同一段行情的判断可能截然相反。但正是这种多样性,才让多智能体协同有了意义。

4.1 趋势跟踪智能体

趋势跟踪,说白了就是「顺势而为」。它的核心假设是:趋势一旦形成,就会持续一段时间。我在项目中遇到过很多次,新手总想抄底摸顶,结果被趋势甩下车。嗯,这里要注意——趋势跟踪不是预测顶底,而是跟随趋势。

4.1.1 核心逻辑

趋势跟踪智能体的决策逻辑很简单:

  • 当价格突破某个阈值时,认为趋势启动,开仓
  • 当价格反向突破另一个阈值时,认为趋势结束,平仓

常用的技术指标包括:

  • 移动平均线(MA):金叉死叉判断趋势方向
  • MACD:DIF线与DEA线的交叉信号
  • 布林带(Bollinger Bands):价格突破上轨/下轨作为信号
  • ADX:衡量趋势强度,ADX > 25 才认为有趋势

4.1.2 代码实现

我习惯用 Python 写策略原型。下面是一个基于双均线交叉的趋势跟踪智能体:

class TrendFollowingAgent:
    def __init__(self, fast_period=10, slow_period=30):
        self.fast_period = fast_period
        self.slow_period = slow_period
        self.position = 0  # 0: 空仓, 1: 多头, -1: 空头

    def on_data(self, price_series):
        # 计算快慢均线
        fast_ma = price_series.rolling(self.fast_period).mean()
        slow_ma = price_series.rolling(self.slow_period).mean()

        # 获取最新值
        current_fast = fast_ma.iloc[-1]
        current_slow = slow_ma.iloc[-1]
        prev_fast = fast_ma.iloc[-2]
        prev_slow = slow_ma.iloc[-2]

        # 金叉:快线上穿慢线
        if prev_fast <= prev_slow and current_fast > current_slow:
            self.position = 1
            return {'action': 'BUY', 'reason': 'golden_cross'}

        # 死叉:快线下穿慢线
        elif prev_fast >= prev_slow and current_fast < current_slow:
            self.position = -1
            return {'action': 'SELL', 'reason': 'death_cross'}

        return {'action': 'HOLD', 'reason': 'no_signal'}
我的经验:双均线策略在趋势行情中表现很好,但在震荡市中会被反复打脸。我曾经在2018年的横盘行情中,用这个策略亏了3个月。后来我加了一个ADX过滤器——ADX低于25时不交易,这才把胜率提上来。

4.2 均值回归智能体

均值回归的逻辑和趋势跟踪正好相反。它认为:价格偏离均值太远时,最终会回归。说白了就是「涨多了会跌,跌多了会涨」。

你想想看,为什么会有均值回归?因为市场参与者的情绪会过度反应。恐慌时卖过头,贪婪时买过头——这些极端情绪总会消退。

4.2.1 核心逻辑

均值回归智能体的决策逻辑:

  • 当价格低于均值一定标准差时,认为超卖,买入
  • 当价格高于均值一定标准差时,认为超买,卖出

常用的指标:

  • 布林带:价格触及下轨买入,触及上轨卖出
  • RSI:RSI < 30 超卖,RSI > 70 超买
  • Z-Score:计算价格偏离均值的标准差倍数

4.2.2 代码实现

class MeanReversionAgent:
    def __init__(self, window=20, entry_z=2.0, exit_z=0.5):
        self.window = window
        self.entry_z = entry_z      # 开仓阈值
        self.exit_z = exit_z        # 平仓阈值
        self.position = 0

    def on_data(self, price_series):
        # 计算均值和标准差
        mean = price_series.rolling(self.window).mean()
        std = price_series.rolling(self.window).std()

        current_price = price_series.iloc[-1]
        current_mean = mean.iloc[-1]
        current_std = std.iloc[-1]

        # 计算Z-Score
        z_score = (current_price - current_mean) / current_std

        # 开仓逻辑
        if self.position == 0:
            if z_score < -self.entry_z:
                self.position = 1
                return {'action': 'BUY', 'reason': 'oversold'}
            elif z_score > self.entry_z:
                self.position = -1
                return {'action': 'SELL', 'reason': 'overbought'}

        # 平仓逻辑:回归到均值附近
        elif self.position == 1 and z_score > -self.exit_z:
            self.position = 0
            return {'action': 'SELL', 'reason': 'revert_to_mean'}
        elif self.position == -1 and z_score < self.exit_z:
            self.position = 0
            return {'action': 'BUY', 'reason': 'revert_to_mean'}

        return {'action': 'HOLD', 'reason': 'no_signal'}
避坑指南:我曾经在2015年股灾期间用均值回归策略抄底,结果被连续跌停板打爆了。为什么?因为极端行情下,均值回归可能失效——趋势会持续到让你怀疑人生。所以,均值回归策略一定要加止损,而且止损要设得比正常情况更宽。

4.3 套利智能体

套利智能体,说白了就是「吃价差」。它不关心价格涨跌,只关心两个或多个相关资产之间的价差是否合理。

套利的核心是:价差偏离均值时,做多低估资产、做空高估资产,等待价差回归。这其实也是一种均值回归,只不过回归的对象是「价差」而不是「价格」。

4.3.1 核心逻辑

常见的套利模式:

  • 跨期套利:同一品种不同合约月份之间的价差
  • 跨品种套利:相关性高的两个品种(如螺纹钢和热卷)
  • 期现套利:期货价格与现货价格之间的基差

套利智能体的决策流程:

  1. 计算价差:Spread = Price_A - Price_B × 系数
  2. 计算价差的均值和标准差:判断当前价差是否偏离
  3. 开仓:价差偏离超过阈值时,做多价差或做空价差
  4. 平仓:价差回归到均值附近时平仓

4.3.2 代码实现

class ArbitrageAgent:
    def __init__(self, window=60, entry_z=2.0, hedge_ratio=1.0):
        self.window = window
        self.entry_z = entry_z
        self.hedge_ratio = hedge_ratio  # 对冲比例
        self.position = 0  # 1: 做多价差, -1: 做空价差

    def on_data(self, price_a_series, price_b_series):
        # 计算价差
        spread = price_a_series - self.hedge_ratio * price_b_series

        # 计算价差的均值和标准差
        mean = spread.rolling(self.window).mean()
        std = spread.rolling(self.window).std()

        current_spread = spread.iloc[-1]
        current_mean = mean.iloc[-1]
        current_std = std.iloc[-1]

        z_score = (current_spread - current_mean) / current_std

        # 开仓逻辑
        if self.position == 0:
            if z_score < -self.entry_z:
                self.position = 1
                return {
                    'action': 'BUY_SPREAD',
                    'leg1': ('BUY', 'asset_a'),
                    'leg2': ('SELL', 'asset_b'),
                    'reason': 'spread_too_low'
                }
            elif z_score > self.entry_z:
                self.position = -1
                return {
                    'action': 'SELL_SPREAD',
                    'leg1': ('SELL', 'asset_a'),
                    'leg2': ('BUY', 'asset_b'),
                    'reason': 'spread_too_high'
                }

        # 平仓逻辑
        elif self.position == 1 and z_score > -0.5:
            self.position = 0
            return {'action': 'CLOSE_SPREAD', 'reason': 'spread_reverted'}
        elif self.position == -1 and z_score < 0.5:
            self.position = 0
            return {'action': 'CLOSE_SPREAD', 'reason': 'spread_reverted'}

        return {'action': 'HOLD', 'reason': 'no_signal'}
关键点:套利策略看似「无风险」,其实风险不小。我遇到过的问题包括:
- 流动性风险:价差偏离时,可能其中一个品种流动性不足,无法成交
- 执行风险:两个腿的成交时间差可能导致滑点
- 价差持续偏离:比如2015年股指期货贴水,价差几个月不回归

4.4 三种策略的对比与协同

这三种策略,各有各的适用场景。我整理了一个对比表:

维度 趋势跟踪 均值回归 套利
适用行情 趋势行情 震荡行情 价差偏离行情
持仓周期 中长线(天/周) 短线(小时/天) 极短线(分钟/小时)
风险来源 趋势反转 趋势延续 价差持续偏离
胜率 较低(30%-40%) 较高(50%-60%) 较高(60%-70%)
盈亏比 高(3:1以上) 低(1:1左右) 中等(1.5:1左右)

在多智能体系统中,这三种策略可以协同工作:

  • 趋势跟踪智能体负责捕捉大行情,赚大钱
  • 均值回归智能体负责在震荡市中赚小钱,平滑收益曲线
  • 套利智能体负责捕捉价差机会,提供低风险收益

我个人习惯让它们共享一个「市场状态判断器」——当市场处于趋势状态时,提高趋势跟踪的权重;当市场处于震荡状态时,提高均值回归的权重。这样就能实现「自适应」的策略切换。

一个小技巧:你可以给每个智能体分配一个「置信度」分数。比如趋势跟踪智能体在ADX很高时置信度高,均值回归智能体在布林带宽度很窄时置信度高。然后让决策层根据置信度加权投票——这样比简单的「谁先出信号就听谁的」要稳健得多。

好了,三种策略智能体的核心逻辑和实现就讲到这里。记住,策略本身没有好坏,关键看你怎么用、用在什么市场环境下。下一节我们会聊到这些智能体之间如何通信、如何协调决策——那才是多智能体系统的精髓所在。


专注资料整理