
程序化交易模型的主要类型
程序化交易依赖数学模型自动生成买卖信号。股票与期货市场中常见的模型分类如下。
趋势跟踪模型
捕捉价格单向运动。使用移动平均线交叉、布林带突破、唐奇安通道等指标。期货市场因杠杆效应,趋势跟踪应用广泛。
import pandas as pd
def trend_signal(data, short=5, long=20):
data['short_ma'] = data['close'].rolling(short).mean()
data['long_ma'] = data['close'].rolling(long).mean()
data['signal'] = 0
data.loc[data['short_ma'] > data['long_ma'], 'signal'] = 1
data.loc[data['short_ma'] < data['long_ma'], 'signal'] = -1
return data['signal']
均值回归模型
假设价格偏离均值后会回归。股票配对交易、期货跨期价差回归属于此类。常用指标包括z-score、RSI、布林带上下轨。

import numpy as np
def mean_reversion_signal(data, window=20):
data['ma'] = data['close'].rolling(window).mean()
data['std'] = data['close'].rolling(window).std()
data['z_score'] = (data['close'] - data['ma']) / data['std']
data['signal'] = 0
data.loc[data['z_score'] > 1.5, 'signal'] = -1
data.loc[data['z_score'] < -1.5, 'signal'] = 1
return data['signal']
套利模型
利用相关资产价差偏离。股票期权与正股、期货近远月合约、跨品种(如螺纹钢与热卷)均存在套利机会。统计套利依赖协整检验。
高频交易模型
以毫秒级速度捕捉订单流不平衡、做市报价。期货市场(如股指期货、国债期货)适合高频。需要低延迟基础设施与交易所托管。
机器学习模型
使用随机森林、LSTM、Transformer预测价格方向或波动率。股票多因子模型常用梯度提升树。
建立程序化交易模型的步骤
数据获取与清洗
股票数据来自Tushare、Yahoo Finance;期货数据来自交易所API、Wind、聚宽。处理缺失值、除权除息、主力合约拼接。
import tushare as ts
pro = ts.pro_api('your_token')
df = pro.daily(ts_code='000001.SZ', start_date='20200101', end_date='20231231')
策略逻辑设计
明确入场、出场、仓位管理规则。期货需考虑保证金、合约乘数、交割规则。股票需考虑T+1、涨跌停限制。
# 期货ATR止损逻辑
atr = df['high'].rolling(14).max() - df['low'].rolling(14).min()
df['stop_loss'] = df['close'] - 2 * atr
回测引擎选择
开源框架包括Backtrader、vn.py、Zipline。商业平台提供聚宽、米筐。回测需避免未来函数、幸存者偏差。
import backtrader as bt
class MyStrategy(bt.Strategy):
def __init__(self):
self.sma = bt.indicators.SimpleMovingAverage(self.data.close, period=15)
def next(self):
if self.data.close[0] > self.sma[0] and not self.position:
self.buy(size=1)
elif self.data.close[0] < self.sma[0] and self.position:
self.sell(size=1)
参数优化与过拟合防范
网格搜索、遗传算法可用于参数寻优。使用样本外测试、交叉验证。期货多品种组合可降低过拟合风险。
风险管理
设定最大回撤阈值、单笔风险比例、相关性约束。股票组合使用风险平价,期货使用波动率目标。
# 波动率目标仓位
target_vol = 0.15
realized_vol = df['returns'].rolling(20).std() * np.sqrt(252)
df['position_size'] = target_vol / realized_vol
实盘执行
连接券商或期货公司API。股票使用华泰、国泰君安接口;期货使用CTP、飞马。监控滑点、成交延迟。
# 模拟CTP下单
from ctp import TraderApi
trader = TraderApi('broker_id', 'investor_id', 'password')
trader.connect()
trader.order('rb2310', 'buy', 'open', 4000, 1)
监控与迭代
每日记录交易日志、绩效归因。逐步淘汰失效因子,加入另类数据(如新闻情绪、卫星图像)。
股票与期货模型差异
股票模型侧重选股与行业轮动,期货模型侧重杠杆与展期。股票回测需处理分红送股,期货回测需处理主力合约换月。程序化交易在期货市场更易实现T+0与做空。
常见陷阱与对策
回测过度拟合历史数据。对策:使用滚动窗口、样本外测试。忽略交易成本。对策:加入手续费、滑点、冲击成本。期货保证金不足导致强平。对策:动态计算可用资金。
起步建议
从单一品种、简单趋势模型开始。使用Backtrader回测螺纹钢期货5分钟数据。逐步加入多因子、机器学习。每日复盘信号与执行偏差。