查看全课大纲(第 7 / 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.预案准备和实盘心理建设
如何量化一个主观策略思路
约 9 分钟
📺 正在播放小象学院官方高清录播(支持倍速与清晰度调节)
小象实战讲义 · 进阶量化交易实战:迭代式的量化策略研发 本讲义仅用于编程与量化方法教学,不构成任何投资建议。
在从人工主观交易向程序化量化交易跨越的征途中,绝大多数交易者面临的第一道天堑是语言与思维范式的转换。主观交易者习惯使用”放巨量”、“底部横盘突破”、“主力资金强势介入”或”质地优良的白马股”等充满主观色彩的描述。然而,在量化系统的世界里,计算机不理解模糊的形容词,也不存在虚无缥缈的盘感,代码的世界里只允许存在严格的定量数值、关系比较运算符(, , , , )与布尔逻辑组合(AND / OR / NOT)。本讲系统阐述如何将主观模糊经验彻底转化为可验证、无歧义、严谨的量化算法模型。
💡 核心导读
- 量化思维第一铁律:彻底消灭”形容词”与”模糊感觉”:
- 主观形容词 定量关系运算符:
- “放巨量” ;
- “低位窄幅横盘” ;
- “大阳线强势突破” ;
- 主观感觉 统计学概率与因子度量:
- “市场情绪高涨” 全市场换手率处于近 1 年 80% 分位以上且上涨家数占比 ;
- “公司质地优良” 且 扣非净利润连续 3 年增速 且 资产负债率 。
- 主观形容词 定量关系运算符:
- 主观交易系统量化转化的四大标准构件:
- 市场状态定义(Market Regime):通过波动率与均线斜率切分当前属于牛市、熊市或震荡市;
- 触发事件与入场判定(Entry Triggers):严密的时间戳与一阶差分金叉/突破判断;
- 退出矩阵(Exit Matrix):明确硬性止损线、跟踪止盈线与持仓时间上限(Time Stop);
- 头寸与风险预算(Position Sizing):根据 ATR 动态风险分配资金,坚决杜绝固定手数。
┌─────────────────────────────────────────────────────────────┐
│ 主观交易向定量算法转化四阶模型 │
└──────────────────────────────┬──────────────────────────────┘
│
┌───────────────┬─────────────┼─────────────┬───────────────┐
▼ ▼ ▼ ▼ ▼
┌─────────────┐ ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌─────────────┐
│ 1. 状态定义 │ │2. 触发条件│ │3. 仓位管理│ │4. 退出矩阵│ │ 5. 算法闭环 │
├─────────────┤ ├───────────┤ ├───────────┤ ├───────────┤ ├─────────────┤
│ • 振幅<15% │ │ • 突破高点│ │ • CPR 模型│ │ • 跌破止损│ │ • 向量化 │
│ • 过滤杂波 │ │ • 放量>2x │ │ • 锁定1%风│ │ • 跟踪止盈│ │ • 杜绝未来函│
└─────────────┘ └───────────┘ └───────────┘ └───────────┘ └─────────────┘一、主观概念定量化映射字典
| 主观口语描述 | 致命缺陷 | 工业级量化严密定义 |
|---|---|---|
| “底部放量大涨” | 什么是底?多少算大? | 过去 60 日最低价上浮 10% 范围内,当日成交量超 20 日均量 2.5 倍,收盘涨幅 |
| “均线多头排列” | 几根均线?什么顺序? | 且 斜率大于 0 |
| “低估值高分红” | 缺乏绝对阈值标准 | 动态市盈率 且 股息率 且 过去 3 年连续分红 |
| “破位果断止损” | 极易受心理侥幸干扰 | 收盘价跌破建仓日前低(或跌破买入价向下 )毫秒级挂单清仓 |
import pandas as pd
import numpy as np
def check_ma_bullish_alignment(close_series):
"""
量化检测均线多头排列: MA5 > MA10 > MA20 > MA60 且 MA60 向上
(教学示例,历史形态不代表未来表现)
"""
ma5 = close_series.rolling(5).mean()
ma10 = close_series.rolling(10).mean()
ma20 = close_series.rolling(20).mean()
ma60 = close_series.rolling(60).mean()
is_aligned = (ma5 > ma10) & (ma10 > ma20) & (ma20 > ma60)
is_ma60_rising = ma60 > ma60.shift(1)
return is_aligned & is_ma60_rising
# 合成价格序列(包含趋势与盘整阶段)
rng = np.random.default_rng(42)
dates = pd.date_range('2024-01-01', periods=100, freq='D')
base_trend = np.linspace(100, 120, 100)
noise = rng.normal(0, 2, 100)
close_prices = pd.Series(base_trend + noise, index=dates)
# 计算多头排列信号
bullish_signals = check_ma_bullish_alignment(close_prices)
signal_dates = bullish_signals[bullish_signals].index
print("===== 均线多头排列信号检测 =====")
print(f"数据周期: {len(close_prices)} 个交易日")
print(f"触发多头排列信号的天数: {bullish_signals.sum()}")
if not signal_dates.empty:
print("最近一次信号日期:", signal_dates[-1].strftime('%Y-%m-%d'))
print("当日收盘价:", f"{close_prices.loc[signal_dates[-1]]:.2f}")
else:
print("未检测到多头排列信号")===== 均线多头排列信号检测 =====
数据周期: 100 个交易日
触发多头排列信号的天数: 27
最近一次信号日期: 2024-04-03
当日收盘价: 118.63二、主观突破策略向自动化状态机重构
通过引入结构化有限状态机(FSM),将主观盯盘过程固化为无缝运行的程序:
import pandas as pd
import numpy as np
def quantify_breakout_signals(df, box_len=20, vol_mult=2.0):
"""
标准量化箱体突破检测逻辑
(教学示例,合成数据,实际应用需警惕未来函数与过拟合风险)
"""
res = df.copy()
high_box = res['high'].rolling(box_len).max().shift(1)
low_box = res['low'].rolling(box_len).min().shift(1)
vma = res['volume'].rolling(box_len).mean().shift(1)
box_width = (high_box - low_box) / (low_box + 1e-6)
is_consolidating = box_width < 0.15
is_volume_spike = res['volume'] >= (vol_mult * vma)
is_price_breakout = res['close'] > high_box
res['buy_signal'] = is_consolidating & is_volume_spike & is_price_breakout
return res
# 合成行情数据(模拟盘整后突破)
rng = np.random.default_rng(2024)
n_days = 50
dates = pd.date_range('2024-03-01', periods=n_days, freq='D')
# 前30日窄幅盘整,后20日趋势上行
base_price = 50.0
prices = []
for i in range(n_days):
if i < 30:
price = base_price + rng.uniform(-1.5, 1.5)
else:
trend = (i - 30) * 0.3
price = base_price + trend + rng.uniform(-2.0, 2.0)
prices.append(price)
close = np.array(prices)
open_ = close - rng.uniform(-0.5, 0.5, n_days)
high = close + rng.uniform(0.1, 0.8, n_days)
low = close - rng.uniform(0.1, 0.8, n_days)
volume = rng.integers(80000, 120000, n_days)
# 在第31日制造一个放量突破
volume[30] = 300000
high[30] = max(high[30], np.max(close[:30]) + 0.5)
df = pd.DataFrame({
'open': open_, 'high': high, 'low': low, 'close': close, 'volume': volume
}, index=dates)
# 检测突破信号
result_df = quantify_breakout_signals(df)
signals = result_df[result_df['buy_signal']]
print("===== 箱体突破信号检测 =====")
print(f"数据总天数: {len(df)}")
print(f"检测到突破信号天数: {len(signals)}")
if not signals.empty:
for idx, row in signals.iterrows():
print(f"信号日期: {idx.strftime('%Y-%m-%d')}, 收盘价: {row['close']:.2f}, 成交量: {row['volume']:.0f}")===== 箱体突破信号检测 =====
数据总天数: 50
检测到突破信号天数: 0📝 动手练一练
下面我们用 Python 编写一段 主观策略定量化转换测试引擎,模拟验证如何将”底部放量突破”主观形态转化为 100% 确定性的计算机代码执行:
import pandas as pd
import numpy as np
def quantify_subjective_breakout_strategy(df):
"""
主观'底部放量突破'彻底定量化算法:
1. 底部箱体定义: 过去 20 日最高价与最低价振幅 < 15% (低波盘整)
2. 放巨量定义: 当日成交量 > 过去 20 日均量的 2.0 倍 (增量资金入场)
3. 快速突破定义: 当日收盘价突破过去 20 日最高价
(教学示例,合成数据,历史回测不代表未来收益,存在过拟合风险)
"""
res = df.copy()
res['high_20'] = res['high'].rolling(20).max().shift(1)
res['low_20'] = res['low'].rolling(20).min().shift(1)
res['box_amplitude'] = (res['high_20'] - res['low_20']) / (res['low_20'] + 1e-6)
res['vma_20'] = res['volume'].rolling(20).mean().shift(1)
res['vol_ratio'] = res['volume'] / (res['vma_20'] + 1e-6)
cond_box = res['box_amplitude'] < 0.15
cond_vol = res['vol_ratio'] >= 2.0
cond_breakout = res['close'] > res['high_20']
res['buy_signal'] = cond_box & cond_vol & cond_breakout
return res
# 合成测试数据:模拟一个典型的底部盘整后放量突破场景
rng = np.random.default_rng(12345)
dates = pd.date_range("2024-05-01", periods=60, freq="B")
# 价格序列:前40日窄幅震荡,第41日突破,随后趋势上行
price_base = np.zeros(60)
# 前40日:10.0 ~ 10.8 窄幅震荡
price_base[:40] = 10.0 + rng.uniform(0.0, 0.8, 40)
# 第41日:突破至11.5
price_base[40] = 11.5
# 后19日:趋势上行至13.0附近
price_base[41:] = np.linspace(11.6, 13.0, 19) + rng.normal(0, 0.2, 19)
close = price_base
open_ = close - rng.uniform(-0.05, 0.05, 60)
high = close + rng.uniform(0.05, 0.15, 60)
low = close - rng.uniform(0.05, 0.15, 60)
volume = rng.integers(5000, 10000, 60)
# 在第41日制造放量(约3倍)
volume[40] = 28000
df = pd.DataFrame({
'open': open_,
'high': high,
'low': low,
'close': close,
'volume': volume
}, index=dates)
# 执行定量化策略
signals_df = quantify_subjective_breakout_strategy(df)
hits = signals_df[signals_df['buy_signal']]
print("================ 主观策略定量化转换测试报告 ================")
print(f"全周期 Bar 数量: {len(df)} 根 | 触发定量买入信号: {len(hits)} 次")
if not hits.empty:
for dt, row in hits.iterrows():
print(f"触发日期: {dt.strftime('%Y-%m-%d')} | 价格: {row['close']:.2f} | 箱体振幅: {row['box_amplitude']*100:.2f}% | 放量倍数: {row['vol_ratio']:.2f}x")
else:
print("未触发任何买入信号")
print("----------------------------------------------------------")
print("量化精髓: 策略代码中绝无形容词与主观感觉,只有清晰的数学关系与逻辑算子!")
print("==========================================================")运行结果输出:
================ 主观策略定量化转换测试报告 ================
全周期 Bar 数量: 60 根 | 触发定量买入信号: 1 次
触发日期: 2024-06-26 | 价格: 11.50 | 箱体振幅: 9.11% | 放量倍数: 3.88x
----------------------------------------------------------
量化精髓: 策略代码中绝无形容词与主观感觉,只有清晰的数学关系与逻辑算子!
==========================================================👉 点击查看解析
将主观策略思路量化的核心,是把“感觉”或经验判断转写成明确可计算的指标、阈值和买卖规则,使策略能够被代码回测和验证。代码演示的关键在于观察量化后逻辑是否保留原策略意图,并检验参数变化对结果的影响。
本章小结
- 坚持无形容词法则:任何模糊的主观直觉必须拆解为明确的数值区间与关系表达式。
- 构建四阶闭环架构:严谨定义状态、触发点、头寸风险与退出矩阵,杜绝盘中临时主观干预。
- 夯实第一章全景基石:完成多资产认知、趋势与均值回复原理、配对套利、研发流程与平台选型的全面筑基。
📋 行动清单 (Action Checklist)
- 运行本讲定量化测试代码,观察系统如何精准捕捉 2023-02-13 突破日的定量买点;
- 复盘第一章全部 7 篇讲义,建立完整的主观向定量化转型的知识图谱;
- 预习第二章《从技术的角度重新认识技术指标》,开启技术指标数学物理内涵与编程实现的深度进阶。
—— 小象教研组
配套资料 · 直接下载
课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。
- 下载第1章课件:实战量化投资必备基础知识PDF · 4.5MB