策略逻辑建模:策略参数定义、信号生成逻辑、仓位计算模型、风险指标监控
好,我们进入第四章。这一章,说白了就是整个策略系统的「大脑」部分。
前面我们讲了数据怎么来、怎么清洗,但数据本身不会赚钱。真正让策略产生价值的,是这些逻辑建模的环节。我个人习惯把这一章看作「从数据到决策」的桥梁——你定义好参数,写好信号逻辑,算好仓位,再盯着风险指标,整个交易闭环就串起来了。
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衰减速度加快时,考虑平仓
我一般把信号生成拆成三步:
- 数据准备:把当前的市场数据、持仓数据、风险指标算好
- 条件判断:逐一检查每个信号条件是否满足
- 信号输出:生成「买入」「卖出」「持有」「对冲」等指令
来看一个简单的信号生成代码:
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瞬间翻倍,亏了不少。
核心建议:建立一个「风险仪表盘」,把四个指标实时显示出来。一旦某个指标越界,立即触发告警。自动化执行的前提,是你能「看到」风险。
知识体系总览
下面这张图,把本章的核心逻辑串起来了:
这张图展示了四个模块的关系:参数定义是基础,信号生成是决策,仓位计算是执行,风险监控是保障。缺一个,整个系统就不完整。
最后提醒:策略逻辑建模不是一次性的工作。市场在变,你的参数、信号、仓位模型都需要持续优化。我一般每个月复盘一次策略表现,看看哪些参数需要调整。记住:没有完美的策略,只有不断进化的策略。
公众号:蓝海资料掘金营,微信deep3321