策略逻辑建模:策略参数定义、信号生成逻辑、仓位计算模型、风险指标监控

好,我们进入第四章。这一章,说白了就是整个策略系统的「大脑」部分。

前面我们讲了数据怎么来、怎么清洗,但数据本身不会赚钱。真正让策略产生价值的,是这些逻辑建模的环节。我个人习惯把这一章看作「从数据到决策」的桥梁——你定义好参数,写好信号逻辑,算好仓位,再盯着风险指标,整个交易闭环就串起来了。

4.1 策略参数定义:别小看这些「数字」

策略参数是什么?就是那些你可以在策略运行前调整的「旋钮」。比如均线周期、阈值大小、止损比例等等。

我见过不少新手,上来就写死参数。嗯,这里要注意——写死参数等于给自己挖坑。你想想看,市场环境一变,你的策略可能就废了。

核心原则:所有可能变化的数值,都应该做成可配置的参数。

我个人习惯用字典或配置文件来管理参数。举个例子:

# 策略参数定义示例
strategy_params = {
    'entry_threshold': 0.05,      # 入场阈值(Delta变化比例)
    'exit_threshold': 0.02,       # 出场阈值
    'max_position': 100,          # 最大持仓数量
    'stop_loss_pct': 0.15,        # 止损比例
    'target_profit_pct': 0.30,    # 止盈比例
    'rebalance_interval': 3600,   # 再平衡间隔(秒)
    'volatility_window': 20,      # 波动率计算窗口
    'delta_neutral': True         # 是否保持Delta中性
}

为什么要这么做?因为实盘中你不可能每次改参数都重新编译代码。我在项目中遇到过,有一次参数写死在代码里,结果想改个阈值,得重新部署整个服务——那叫一个狼狈。

小技巧:建议把参数定义放在单独的配置文件中(比如JSON或YAML),运行时动态加载。这样改参数只需要改文件,不用动代码。

4.2 信号生成逻辑:什么时候动手?

信号生成,就是决定「什么时候进场、什么时候出场」。这是策略的核心。

说白了,信号就是一组条件判断。比如:

  • 当隐含波动率高于历史波动率20%时,考虑卖出期权
  • 当Delta绝对值超过0.3时,触发对冲信号
  • 当Theta衰减速度加快时,考虑平仓

我一般把信号生成拆成三步:

  1. 数据准备:把当前的市场数据、持仓数据、风险指标算好
  2. 条件判断:逐一检查每个信号条件是否满足
  3. 信号输出:生成「买入」「卖出」「持有」「对冲」等指令

来看一个简单的信号生成代码:

def generate_signals(current_data, params):
    signals = []
    
    # 计算当前指标
    iv = current_data['implied_vol']
    hv = current_data['historical_vol']
    delta = current_data['delta']
    theta = current_data['theta']
    
    # 信号1:波动率套利信号
    if iv > hv * (1 + params['entry_threshold']):
        signals.append({
            'type': 'SELL_OPTION',
            'reason': 'IV偏高',
            'confidence': 0.8
        })
    
    # 信号2:Delta对冲信号
    if abs(delta) > 0.3:
        signals.append({
            'type': 'HEDGE',
            'reason': f'Delta={delta:.2f}超出阈值',
            'target_delta': 0.0
        })
    
    # 信号3:Theta衰减出场信号
    if theta < -0.05 and current_data['days_to_expiry'] < 7:
        signals.append({
            'type': 'CLOSE_POSITION',
            'reason': '临近到期,Theta加速衰减'
        })
    
    return signals

你可能会问:信号多了怎么办?优先级怎么定?

嗯,这是个好问题。我个人习惯给每个信号加一个「置信度」或「优先级」字段,然后在执行层做排序。比如对冲信号的优先级永远高于套利信号——先保命,再赚钱。

避坑指南:我曾经犯过一个错误——信号生成频率太高,导致频繁交易。后来加了「最小间隔时间」限制,才把交易频率降下来。记住:不是信号越多越好,是信号越准越好。

4.3 仓位计算模型:下多少手?

信号告诉你「该动手了」,仓位计算告诉你「动多大的手」。

仓位管理,说白了就是风险管理。我见过太多人,信号对了但仓位没控制好,最后还是亏钱。

常用的仓位模型有几种:

模型名称 核心逻辑 适用场景
固定比例模型 每次投入固定比例的资金 新手、趋势策略
凯利公式模型 根据胜率和赔率计算最优仓位 高胜率策略
风险平价模型 让每个风险因子的贡献相等 多资产组合
Delta中性模型 根据当前Delta调整仓位 期权策略

对于期权策略,我个人最常用的是Delta中性模型。核心逻辑很简单:

def calculate_position(target_delta, current_delta, option_info):
    """
    计算需要交易的期权数量来达到目标Delta
    """
    delta_diff = target_delta - current_delta
    if abs(delta_diff) < 0.01:
        return 0  # 已经接近中性,不需要调整
    
    # 每手期权的Delta值
    delta_per_contract = option_info['delta'] * option_info['multiplier']
    
    # 需要交易的手数
    contracts_needed = delta_diff / delta_per_contract
    
    # 取整到整数手
    contracts_needed = round(contracts_needed)
    
    # 限制最大持仓
    max_contracts = 100
    contracts_needed = max(-max_contracts, min(max_contracts, contracts_needed))
    
    return contracts_needed

你想想看,如果不对仓位做限制,一次交易就可能把整个账户的风险敞口拉得很大。我建议至少加两个限制:

  • 单笔最大仓位:不超过总资金的20%
  • 总仓位上限:不超过总资金的80%

经验之谈:仓位计算最好和风险指标联动。比如当Gamma很高的时候,适当降低仓位——因为Gamma高意味着Delta变化快,风险更大。

4.4 风险指标监控:Delta、Gamma、Theta、Vega

这四个希腊字母,是期权交易者的「仪表盘」。你开车要看速度表、油表,做期权就要看这些指标。

简单说一下每个指标的含义:

  • Delta:标的价格每变动1元,期权价格变动多少。说白了就是「方向风险」。
  • Gamma:Delta的变化速度。Gamma高,说明Delta变得快,风险大。
  • Theta:时间每过一天,期权价值损失多少。这是期权卖方的「朋友」。
  • Vega:隐含波动率每变动1%,期权价格变动多少。波动率风险。

我一般会实时监控这些指标,并设置预警阈值:

class RiskMonitor:
    def __init__(self, thresholds):
        self.thresholds = thresholds
        self.alerts = []
    
    def check_risk(self, portfolio_greeks):
        alerts = []
        
        # 检查Delta
        if abs(portfolio_greeks['delta']) > self.thresholds['delta_max']:
            alerts.append(f"Delta风险: {portfolio_greeks['delta']:.2f}")
        
        # 检查Gamma
        if abs(portfolio_greeks['gamma']) > self.thresholds['gamma_max']:
            alerts.append(f"Gamma风险: {portfolio_greeks['gamma']:.2f}")
        
        # 检查Theta
        if portfolio_greeks['theta'] < self.thresholds['theta_min']:
            alerts.append(f"Theta衰减过快: {portfolio_greeks['theta']:.2f}")
        
        # 检查Vega
        if abs(portfolio_greeks['vega']) > self.thresholds['vega_max']:
            alerts.append(f"Vega风险: {portfolio_greeks['vega']:.2f}")
        
        return alerts

这里有个关键点:这些指标不是孤立的。比如Gamma高的时候,Delta会变得不稳定,这时候你的对冲频率就要提高。我曾经吃过这个亏——只盯着Delta,没注意Gamma已经很高了,结果市场一波动,Delta瞬间翻倍,亏了不少。

核心建议:建立一个「风险仪表盘」,把四个指标实时显示出来。一旦某个指标越界,立即触发告警。自动化执行的前提,是你能「看到」风险。

知识体系总览

下面这张图,把本章的核心逻辑串起来了:

策略逻辑建模知识体系 策略参数定义 信号生成逻辑 仓位计算模型 风险指标监控 入场/出场阈值 最大持仓限制 止损/止盈比例 波动率套利信号 Delta对冲信号 Theta衰减出场 固定比例模型 凯利公式模型 Delta中性模型 Delta方向风险 Gamma曲率风险 Theta/Vega风险 输出:可执行的交易指令 + 风险预警 四个模块环环相扣,共同构成完整的策略逻辑

这张图展示了四个模块的关系:参数定义是基础,信号生成是决策,仓位计算是执行,风险监控是保障。缺一个,整个系统就不完整。

最后提醒:策略逻辑建模不是一次性的工作。市场在变,你的参数、信号、仓位模型都需要持续优化。我一般每个月复盘一次策略表现,看看哪些参数需要调整。记住:没有完美的策略,只有不断进化的策略。

公众号:蓝海资料掘金营,微信deep3321