量化交易策略怎么写?从构想到代码的实战范例(2026完整教学)
最后更新:2026年2月 | 阅读时间:16分钟 | 难度:中级
核心关键词:量化策略、策略撰写、代码范例、技术指标、交易逻辑、RSI策略、策略优化、量化交易教学
目录
好策略 vs 烂策略
你花了三个月写出一个「完美」的策略,回测报酬率 300%,兴奋地投入实盘——结果一个月亏掉 20%。问题出在哪?
烂策略的特征:
- 过度拟合历史数据,对未来行情毫无抵抗力
- 只有进场逻辑,没有明确的出场与风控
- 参数随意设定,缺乏统计验证
- 忽视手续费、滑价等交易成本
好策略的特征:
- 逻辑简洁,能在不同市场环境存活
- 进场、出场、滤网、仓位管理四位一体
- 经过样本外测试与压力测试
- 风险可控,单笔亏损有限
关键洞察: 好的量化策略不是预测未来,而是管理风险与期望值。
策略的 4 大要素
一个完整的交易策略必须包含以下四个核心组件:
1. 进场条件(Entry Signal)
决定何时开仓。常见的进场逻辑包括:
- 技术指标交叉(如均线黄金交叉)
- 价格突破(突破前高/前低)
- 统计套利(价差回归均值)
- 机器学习预测讯号
2. 出场条件(Exit Signal)
决定何时平仓。包含两种类型:
- 止盈出场:达到目标价位或条件
- 止损出场:触及风险上限,保护本金
3. 滤网条件(Filter)
用于过滤低品质讯号,避免在不利环境交易:
- 趋势滤网:只在多头/空头趋势中交易
- 波动率滤网:避开低波动或极端高波动时段
- 时间滤网:避开重大财经事件或盘整时段
4. 仓位管理(Position Sizing)
决定每笔交易投入多少资金:
- 固定金额:每笔交易固定投入 $X
- 固定比例:每次投入总资金的 X%
- 波动率调整:根据 ATR 动态调整仓位
- 凯利公式:根据胜率与赔率计算最佳仓位
实战范例:RSI 超买超卖策略
以下是一个完整的 RSI 均值回归策略,使用 Python 与 Sentinel 框架撰写:
from sentinel import Strategy, Order
import pandas as pd
import numpy as np
class RSIMeanReversion(Strategy):
"""
RSI 超买超卖均值回归策略
逻辑:当 RSI 超买(>70)做空,超卖(<30)做多
"""
def __init__(self):
super().__init__()
# 策略参数
self.rsi_period = 14
self.overbought = 70
self.oversold = 30
self.stop_loss_pct = 0.02 # 2% 止损
self.take_profit_pct = 0.04 # 4% 止盈
self.position_size = 0.1 # 每次投入 10% 资金
def calculate_rsi(self, prices, period=14):
"""计算 RSI 指标"""
deltas = np.diff(prices)
gains = np.where(deltas > 0, deltas, 0)
losses = np.where(deltas < 0, -deltas, 0)
avg_gain = np.mean(gains[:period])
avg_loss = np.mean(losses[:period])
for i in range(period, len(gains)):
avg_gain = (avg_gain * (period - 1) + gains[i]) / period
avg_loss = (avg_loss * (period - 1) + losses[i]) / period
rs = avg_gain / avg_loss if avg_loss != 0 else 0
rsi = 100 - (100 / (1 + rs))
return rsi
def on_bar(self, data):
"""每根 K 线触发的逻辑"""
# 取得历史价格
closes = data['close'].values
if len(closes) < self.rsi_period + 1:
return
# 计算 RSI
rsi = self.calculate_rsi(closes, self.rsi_period)
current_price = closes[-1]
# 趋势滤网:只在有明确趋势时交易
sma_50 = np.mean(closes[-50:])
sma_200 = np.mean(closes[-200:]) if len(closes) >= 200 else sma_50
# 检查持仓
position = self.get_position()
# 进场逻辑
if position == 0:
# 超卖 + 多头趋势 → 做多
if rsi < self.oversold and sma_50 > sma_200:
stop_price = current_price * (1 - self.stop_loss_pct)
target_price = current_price * (1 + self.take_profit_pct)
self.buy(
size=self.position_size,
stop_loss=stop_price,
take_profit=target_price
)
# 超买 + 空头趋势 → 做空
elif rsi > self.overbought and sma_50 < sma_200:
stop_price = current_price * (1 + self.stop_loss_pct)
target_price = current_price * (1 - self.take_profit_pct)
self.sell(
size=self.position_size,
stop_loss=stop_price,
take_profit=target_price
)
# 出场逻辑(若未触及止损止盈,RSI 回归中线时出场)
elif position != 0:
if (position > 0 and rsi > 50) or (position < 0 and rsi < 50):
self.close_position()
# 策略配置
config = {
'strategy': RSIMeanReversion,
'symbols': ['BTCUSDT', 'ETHUSDT'],
'timeframe': '1h',
'start_date': '2023-01-01',
'end_date': '2024-01-01',
'initial_capital': 10000,
'commission': 0.001 # 0.1% 手续费
}
RSI 策略解析
| 策略要素 | 实现方式 | 作用 |
|------|----------|------|
| 进场条件 | RSI < 30 且多头趋势做多;RSI > 70 且空头趋势做空 | 捕捉均值回归机会 |
| 出场条件 | 固定 2% 止损 / 4% 止盈,或 RSI 回归 50 | 控制风险和锁定利润 |
| 滤网条件 | 50/200 均线趋势确认,避免逆势交易 | 提高胜率 |
| 仓位管理 | 固定 10% 资金比例,控制单笔风险 | 风险管理 |
如何优化策略
1. 参数优化(Walk-Forward Analysis)
避免过度拟合的最佳方法是使用滚动样本外测试:
# 将数据分为多个时段,每个时段独立优化与验证
for train_start, train_end, test_start, test_end in walk_forward_splits:
best_params = optimize_on_train(train_start, train_end)
results = test_on_out_of_sample(test_start, test_end, best_params)
2. 加入更多滤网条件
- 波动率滤网:ATR > 阈值时减少仓位
- 相关性滤网:避开与持仓高度相关的讯号
- 流动性滤网:只在成交量充足时交易
3. 动态仓位调整
# 根据波动率调整仓位
atr = calculate_atr(data, 14)
volatility_factor = base_atr / atr # 波动率越高,仓位越小
adjusted_size = base_position_size * volatility_factor
4. 多策略组合
将多个低相关性策略组合,降低整体回撤:
portfolio = StrategyPortfolio([
('rsi_mean_reversion', 0.3),
('trend_following', 0.4),
('breakout', 0.3)
])
Sentinel 策略市集
写好策略只是第一步,Sentinel 策略市集帮你将策略变现:
策略市集功能
| 功能 | 说明 | 收益模式 |
|------|------|------|
| 策略上架 | 一键部署策略到云端,24/7 自动运行 | 订阅费 |
| 订阅制变现 | 设定月费/季费,让其他用户跟单你的策略 | 月费分成 |
| 绩效展示 | 自动生成专业级回测报告与实盘曲线 | 提升信任 |
| 风险评级 | 系统自动评估策略风险等级,帮助用户选择 | 自动分类 |
| 分润机制 | 跟单获利时自动分润给策略作者 | 盈利分成 |
为什么选择 Sentinel 策略市集?
- 低门槛:无需管理服务器,专注策略开发
- 高弹性:支持 Python、C++、TradingView Pine Script
- 真实绩效:所有策略经过实盘验证,拒绝纸上谈兵
- 社群验证:用户评分与评论,好策略自然浮现
常见问题
Q: 策略优化到什么程度算过度拟合?
A: 如果策略在训练集上表现完美(胜率 > 70%、回撤 < 5%),但在测试集上表现差很多,就是过度拟合。建议保持简单,参数不超过 5 个。
Q: 如何测试策略的稳健性?
A: 使用以下方法:
- 样本外测试(Out-of-Sample)
- Walk-Forward Analysis
- 蒙特卡洛模拟
- 多市场验证
Q: 一个策略应该包含多少指标?
A: 建议 2-4 个指标。过多指标会导致曲线拟合,降低策略的泛化能力。
Q: Sentinel 支持哪些编程语言?
A: 主要支持 Python。我们也提供可视化策略编辑器,无需写程序即可建立策略。
Q: 策略上架市集需要什么条件?
A: 需要满足:
- 至少 6 个月的实盘或模拟交易记录
- 夏普比率 > 1.0
- 最大回撤 < 25%
- 通过 Sentinel 的风险评估
Q: 如何开始学习撰写量化策略?
A: 建议路径:1) 学习 Python 基础;2) 理解技术指标原理;3) 从简单策略开始(如均线交叉);4) 使用 Sentinel 回测验证;5) 逐步优化和扩展。
结论与行动呼吁
量化交易的本质不是追求完美的预测,而是建立一套可重复、可验证、可执行的交易系统。
下一步行动清单:
- 立即下载 Sentinel:注册免费帐号,取得完整策略模板
- 复制 RSI 策略:从本文范例开始,在模拟环境测试
- 加入 Discord 社群:与 5,000+ 量化交易者交流优化心得
- 上架你的策略:当策略通过回测验证,考虑在市集分享变现
🚀 限时优惠:新用户注册即送 30 天 Pro 会员,解锁进阶回测与即时数据!
相关文章推荐:
- 量化交易入门:新手如何用 Python 打造第一个交易策略
- 什么是回测?为什么 90% 的交易策略都应该先做回测
- 交易机器人完整指南:从原理到实作的 7 个步骤
- Sentinel 回测引擎教学:3 分钟完成你的第一个策略回测
- 技术指标大全:RSI、MACD、KD 策略回测比较
- Python 量化套件比较:Backtrader、Zipline、Sentinel 哪个适合你?
本文范例仅供教育用途,投资有风险,交易需谨慎。
相關閱讀
- 量化交易入门:新手如何用 Python 打造第一个交易策略(2026完整指南)
- 技術指標大全:RSI、MACD、KD策略回測比較(2026實戰數據)
- BTC量化交易策略:2026年比特币自动交易完整攻略
- 趋势vs逆势:两大经典量化策略回测绩效比较
- 什么是回测?为什么 90% 的交易策略在实盘前都应该先做回测(2026完整指南)
- Python程序交易教學:50行代碼打造自動下單機器人(2026完整版)