📑 查看全课大纲(第 2 / 59 节)
- 1.量化投资必备基础知识
- 2.趋势型策略及模型原理
- 3.均值回复型策略及模型原理
- 4.配对交易策略及模型原理
- 5.量化策略研发流程与基本技能
- 6.常用的量化平台概述及如何选择
- 7.如何量化一个主观策略思路
- 8.常用技术指标及指标计算过程
- 9.如何编写指标代码
- 10.指标的物理意义
- 11.技术指标的应用技巧
- 12.更多的交易决策
- 13.编写程序去量化一个趋势型技术指标
- 14.编写趋势型技术指标的性能评价
- 15.策略对交易成本和持仓周期的影响
- 16.股票池策略的原理及基本框架
- 17.基于多因子分析的股票池设计与实现
- 18.股票池的性能评估
- 19.使用定制化财务因子构建股票池
- 20.趋势型策略原理及股票池机制的设计
- 21.趋势型择时信号的设计方法与编程实现
- 22.趋势型策略的回测与性能评估
- 23.优化趋势型策略的思路及方法
- 24.量化体系中的风险控制思想
- 25.风险的度量-波动率
- 26.常用的风险控制方法
- 27.实现止盈止损模块以提高策略性能
- 28.策略性能的评估与优化
- 29.探讨波动率与风险的关系
- 30.量化策略中的经典资金管理模型
- 31.用python编程实现资金管理模块
- 32.构建一个完善的量化交易策略
- 33.趋势型量化策略必备的期货知识
- 34.期货量化工具介绍
- 35.商品期货趋势型策略原理
- 36.用TB编写商品期货趋势型策略(上)
- 37.用TB编写商品期货趋势型策略(下)
- 38.分析优化商品期货趋势型策略的方法思路
- 39.期货交易策略的注意事项
- 40.均值回复型策略的原理
- 41.A股市场有没有稳定的均值回复效应?
- 42.编写一个均值回复型股票量化策略
- 43.编写多空组合策略进行策略改进
- 44.在策略中实现头寸管理进行策略优化
- 45.套利策略原理及常见套利类型
- 46.用MC开发一个跨品种套利交易策略(上)
- 47.用MC开发一个跨品种套利交易策略(下)
- 48.统计套利之股票配对交易策略
- 49.实盘中的细节问题:加减仓
- 50.关于高频交易
- 51.如何评价实盘量化策略的性能
- 52.量化系统的工作过程及研发流程
- 53.运气or实力
- 54.量化实盘交易需要满足什么条件
- 55.未来函数的坑
- 56.实盘数据接口异常的自动报警
- 57.交易系统的压力测试
- 58.自动运行的交易策略,什么时候需要人工干预
- 59.预案准备和实盘心理建设
趋势型策略及模型原理
约 18 分钟
趋势型策略及模型原理
小象实战讲义 · 进阶量化交易实战:迭代式的量化策略研发 本讲义仅用于编程与量化方法教学,不构成任何投资建议。
在量化交易的策略体系中,趋势跟踪策略(Trend Following)是历经数十年市场牛熊考验的最经典流派之一。许多初学者在构建策略时,往往陷入对高胜率的执着追求,然而在真实的金融市场中,趋势型策略的核心盈利哲学并非依靠高胜率,而是依靠在趋势主升浪中捕捉超高盈亏比(Profit-Loss Ratio)。本讲系统梳理趋势型策略的物理机制、供求关系与收益分布特征,帮助开发者建立科学的量化研发认知。
💡 核心导读
- 什么是趋势的内在动力学机制?
- 供求关系不平衡(Supply & Demand):价格运动的本质是买卖双方筹码与资金力量的不对等,增量资金的持续流入形成单边价格推动力;
- 因果关系(Cause & Effect):没有无缘无故的暴涨暴跌,主升浪趋势形成之前必定经历长期的底部横盘吸筹或能量积聚;
- 努力与结果(Effort vs Result):成交量代表主力的资金努力,价格幅度代表市场结果;若天量成交却价格滞涨,往往预示着趋势即将反转。
- 趋势型策略的典型收益分布特征:
- 胜率偏低(35% ~ 45%):在震荡市中需要承受频繁的均线缠绕与小额假突破止损磨损;
- 盈亏比极高(3:1 ~ 5:1 以上):一旦抓住单边趋势行情,单笔盈利足以覆盖数十次试错成本,呈现典型的”右侧肥尾”特征。
- 趋势策略四大核心工程模块:
- 趋势识别与入场信号:唐奇安通道突破、双均线金叉;
- 顺势头寸加仓(Pyramiding):随趋势确立阶梯式追加 Unit;
- 防御性硬性止损:入场后设定初始风险底线(如 2×ATR);
- 浮动跟踪止盈离场:自最高点回撤一定比例或跌破关键均线离场。
┌─────────────────────────────────────────────────────────────┐
│ 趋势型策略收益非对称分布模型 │
└──────────────────────────────┬──────────────────────────────┘
│
概率密度 P(R) ▲
▲ │
│ │ [震荡市试错磨损: -2% ~ -5%]
│ │ ┌─────────┐
│ │ │ 胜率 40% │
────────────────────────────┼─┼───┴─────────┴────────────────► 收益率 R
-5% 0 │ +5% +20% +50%
│ └───────────────────────┘
│ [单边趋势爆发: +20% ~ +50%] (盈亏比 4:1)一、趋势识别与唐奇安通道(Donchian Channel)模型
唐奇安通道是趋势跟踪系统中最具代表性的突破判定工具。其数学定义如下:
t = \max(High{t-1}, High_{t-2}, \dots, High_{t-N}) t = \min(Low{t-1}, Low_{t-2}, \dots, Low_{t-N})
当最新价格突破过去 日最高价时,代表市场打破震荡箱体,多头动能占据绝对优势,系统生成顺势做多信号。
import pandas as pd
import numpy as np
def calculate_donchian_channels(prices_df, window=20):
"""
计算标准唐奇安通道 (Donchian Channels)
- UpperBand: 过去 N 日最高价 (不含当日)
- LowerBand: 过去 N 日最低价 (不含当日)
- MiddleBand: 上下轨均值
"""
df = prices_df.copy()
df['donchian_high'] = df['high'].rolling(window=window).max().shift(1)
df['donchian_low'] = df['low'].rolling(window=window).min().shift(1)
df['donchian_mid'] = (df['donchian_high'] + df['donchian_low']) / 2.0
return df二、从物理学视角理解量化指标的三大物理量
在量化建模中,技术指标本质上是对行情时序物理特征的降维提取:
- 位移(Position):价格偏离均线的绝对距离,对应乖离率(BIAS);
- 速度(Velocity):价格在一阶时间差分上的变动率,对应动量指标(Momentum / ROC);
- 加速度(Acceleration):动量指标的变化率(如 MACD 柱状图的斜率变化),预示着趋势动能的衰竭或爆发。
def calculate_price_kinematics(close_series, n=10):
"""
计算价格时序的物理学特征量: 位移、速度、加速度
"""
displacement = close_series - close_series.rolling(n).mean()
velocity = close_series.pct_change(periods=n)
acceleration = velocity.diff()
return pd.DataFrame({
'displacement': displacement,
'velocity': velocity,
'acceleration': acceleration
})📝 动手练一练
下面我们用 Python 编写一段 趋势跟踪策略收益特征与唐奇安通道突破模拟引擎,从持仓序列中逐笔还原真实交易明细,统计胜率、平均盈亏与盈亏比,并对比策略与基准的全周期收益:
import pandas as pd
import numpy as np
def run_trend_following_simulation():
"""
趋势型策略核心收益分布与唐奇安通道突破模拟
- 从持仓序列还原真实交易明细, 统计胜率与盈亏比
"""
np.random.seed(42)
dates = pd.date_range("2023-01-01", periods=120, freq="B")
# 构造含有一段主升浪趋势的合成行情
returns = np.random.normal(0.0005, 0.015, 120)
returns[40:70] += 0.012 # 模拟主升浪趋势波段
prices = 100.0 * np.exp(np.cumsum(returns))
df = pd.DataFrame({'close': prices, 'high': prices * 1.01, 'low': prices * 0.99}, index=dates)
# 计算 20 日唐奇安通道 (标准定义基于最高价/最低价, 与正文 calculate_donchian_channels 一致)
df['donchian_high'] = df['high'].rolling(20).max().shift(1)
df['donchian_low'] = df['low'].rolling(10).min().shift(1)
# 生成持仓信号: 突破 20 日高点做多, 跌破 10 日低点离场
df['signal'] = np.nan
df.loc[df['close'] > df['donchian_high'], 'signal'] = 1
df.loc[df['close'] < df['donchian_low'], 'signal'] = 0
df['position'] = df['signal'].ffill().fillna(0)
# 策略收益
df['pct_change'] = df['close'].pct_change()
df['strat_ret'] = df['position'].shift(1) * df['pct_change']
df['cum_ret'] = (1 + df['strat_ret'].fillna(0)).cumprod()
# 从持仓序列还原真实交易明细: 0→1 当日收盘建仓, 1→0 当日收盘平仓
pos = df['position'].values
closes = df['close'].values
trade_returns = []
entry_price = None
entry_bar = None
for i in range(1, len(df)):
if pos[i] == 1 and pos[i - 1] == 0:
entry_price = closes[i] # 突破确认日收盘建仓
entry_bar = i
elif pos[i] == 0 and pos[i - 1] == 1 and entry_price is not None:
trade_returns.append(closes[i] / entry_price - 1.0) # 离场日收盘平仓
entry_price = None
# 期末仍持仓按最后收盘价结算; 但末日才建仓的零持有期交易不产生收益, 不计入样本
if entry_price is not None and entry_bar < len(df) - 1:
trade_returns.append(closes[-1] / entry_price - 1.0)
total_trades = len(trade_returns)
wins = [r for r in trade_returns if r > 0]
losses = [r for r in trade_returns if r <= 0]
win_rate = len(wins) / total_trades if total_trades > 0 else 0.0
avg_win = float(np.mean(wins)) if wins else 0.0
avg_loss = float(np.mean(losses)) if losses else 0.0
profit_loss_ratio = f"{avg_win / abs(avg_loss):.2f} : 1" if avg_loss < 0 else "N/A (样本内无亏损交易)"
res = {
"Total_Trades": total_trades,
"Win_Rate": f"{win_rate * 100:.1f}%",
"Avg_Win": f"{avg_win * 100:.2f}%",
"Avg_Loss": f"{avg_loss * 100:.2f}%" if avg_loss < 0 else "N/A",
"Profit_Loss_Ratio": profit_loss_ratio,
"Benchmark_Return": f"{(df['close'].iloc[-1]/df['close'].iloc[0] - 1)*100:.2f}%",
"Strategy_Return": f"{(df['cum_ret'].iloc[-1] - 1)*100:.2f}%"
}
return res
def test_trend_run():
res = run_trend_following_simulation()
print("================ 趋势型量化策略收益特征模拟 ================")
for k, v in res.items():
print(f" - {k:<20}: {v}")
print("----------------------------------------------------------")
print("量化精髓: 趋势型策略不追求高胜率,核心依赖大盈亏比抓住主升浪!")
print("==========================================================")
if __name__ == "__main__":
test_trend_run()运行结果输出:
================ 趋势型量化策略收益特征模拟 ================
- Total_Trades : 1
- Win_Rate : 100.0%
- Avg_Win : 29.86%
- Avg_Loss : N/A
- Profit_Loss_Ratio : N/A (样本内无亏损交易)
- Benchmark_Return : 30.94%
- Strategy_Return : 29.86%
----------------------------------------------------------
量化精髓: 趋势型策略不追求高胜率,核心依赖大盈亏比抓住主升浪!
==========================================================⚠️ 统计显著性警示:本次合成行情仅触发 1 笔交易(胜率 100%),策略收益 29.86% 甚至略逊基准 30.94%。1 笔样本完全不具有统计意义——实盘中趋势策略的典型胜率仅 35%~45%,本例的全胜只是”主升浪恰好被通道完整捕捉”的幸运结果。这也解释了为什么量化统计必须从持仓序列真实还原交易明细(而非预设数字):只有样本量足够大(数百笔以上),胜率与盈亏比的分布特征才会收敛到策略的真实期望。
本章小结
- 重塑盈利思维:趋势跟踪的核心是用小额且可控的试错成本,博取单边主升浪的超额回报,不盲目追求高胜率。
- 严守纪律四部曲:在实际工程中必须严格固化入场确认、阶梯加仓、硬性止损与跟踪止盈的完整闭环。
- 理解市场物理特性:从供需失衡、因果积累与量价共振三个维度辅助研判趋势的可持续性。
📋 行动清单 (Action Checklist)
- 运行本讲唐奇安通道模拟代码,观察低胜率与高盈亏比的数学协同关系;
- 在真实行情历史数据中绘制 20 日唐奇安通道与 10 日出场线,统计震荡期与单边期的交易次数;
- 预习下一节,探讨均值回复型(Mean Reversion)策略的统计特性与模型架构。
— 小象教研组
- 第1章课件:实战量化投资必备基础知识(PDF · 4.5MB)下载
领取《小象 11GB VIP 课件资料包与大厂真题手册》
包含全套实战 Jupyter 源码、清洗后数据集、大厂高频面试真题与专属学员答疑交流群。
- ✔完整 Python / 数据分析 Jupyter 实战源码
- ✔大厂真实业务数据集与练习题
- ✔微信扫码添加课程顾问,免费获取网盘下载链接
微信扫码添加顾问