程序化交易模型有哪些以及建立方式?

企业微信

程序化交易模型的主要类型

程序化交易依赖数学模型自动生成买卖信号。股票与期货市场中常见的模型分类如下。

趋势跟踪模型

捕捉价格单向运动。使用移动平均线交叉、布林带突破、唐奇安通道等指标。期货市场因杠杆效应,趋势跟踪应用广泛。


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分钟数据。逐步加入多因子、机器学习。每日复盘信号与执行偏差。

转载请注明出处:https://www.lianghuajiaoyi.top/wenzhang/chengxuhua-jiaoyi-qihuo-gupiao-650.html