五个从简单到进阶的完整策略示例:双均线趋势、布林带均值回归、RSI 超买超卖、加密网格交易、统计**套利**雏形。每个都讲清核心逻辑、给代码骨架、标注适用市场与风险,最后聊参数边界、组合思维与个人路线图。
免责声明:本站全部内容仅用于学习与研究,不构成任何投资建议。市场有风险,投资需谨慎。
策略总览
| # | 策略 | 类型 | 适用市场 | 难度 | 核心收益来源 |
|---|---|---|---|---|---|
| ① | 双均线趋势 | 趋势跟踪 | 期货、加密、主流股 | ★ | 抓住中长趋势,截断亏损 |
| ② | 布林带均值回归 | 震荡反转 | 股票、ETF、加密现货 | ★★ | 价格偏离后回归 |
| ③ | RSI 超买超卖 | 震荡反转 | 波动区间稳定的品种 | ★★ | 极端情绪回归 |
| ④ | 网格交易 | 区间震荡 | 加密现货(最适合自动化) | ★★ | 反复收割区间波动 |
| ⑤ | 统计套利雏形 | 配对/中性 | 相关标的对(同板块股、主流币对) | ★★★ | 价差偏离后收敛 |
一、双均线趋势(经典入门)
核心逻辑:快线(短均线)上穿慢线(长均线)做多,下穿平仓/做空。吃趋势、忍受震荡期磨损。
Python 片段(完整回测见 03-第一个回测,示例代码仅教学用,实盘风险自负):
import pandas as pd
def dual_ma_signal(df, fast=5, slow=20):
df = df.copy()
df["ma_fast"] = df["close"].rolling(fast).mean()
df["ma_slow"] = df["close"].rolling(slow).mean()
df["signal"] = (df["ma_fast"] > df["ma_slow"]).astype(int)
df["position"] = df["signal"].shift(1) # 次日生效,防未来函数
return df
- 适用市场:有明确趋势周期的市场(商品期货、主流加密、大盘股)。
- 风险:震荡市连续打脸(假突破),回撤期长、体验差;胜率天然只有 30-40%,靠盈亏比取胜,拿不住就做不成。
二、布林带均值回归(震荡)
核心逻辑:价格跌破下轨认为超卖、买入;涨破上轨认为超买、卖出/做空;回归中轨是止盈目标。
Python 片段:
def boll_revert_signal(df, n=20, k=2.0):
df = df.copy()
df["mid"] = df["close"].rolling(n).mean()
std = df["close"].rolling(n).std()
df["upper"], df["lower"] = df["mid"] + k * std, df["mid"] - k * std
df["signal"] = 0
df.loc[df["close"] < df["lower"], "signal"] = 1 # 下轨买
df.loc[df["close"] > df["upper"], "signal"] = -1 # 上轨卖
return df
- 适用市场:区间震荡的品种(波动稳定的股票、横盘的加密现货)。
- 风险:单边行情里是接飞刀——价格持续跌破下轨时,均值回归会越买越套。必须配硬止损(如价格再偏离中轨 X% 即离场),并确认品种处于区间状态(可先检测历史波动率是否收敛)。
三、RSI 超买超卖(震荡变体)
核心逻辑:RSI(相对强弱指数)衡量涨跌动能比例,>70 超买、<30 超卖,反向交易。
Python 片段:
def rsi(close, n=14):
diff = close.diff()
up = diff.clip(lower=0).rolling(n).mean()
down = (-diff.clip(upper=0)).rolling(n).mean()
rs = up / down
return 100 - 100 / (1 + rs)
def rsi_signal(df, over=70, under=30):
df = df.copy()
df["rsi"] = rsi(df["close"])
df["signal"] = 0
df.loc[df["rsi"] < under, "signal"] = 1 # 超卖买入
df.loc[df["rsi"] > over, "signal"] = -1 # 超买卖出
return df
- 适用市场:与布林带类似,偏好震荡区间稳定的标的;加密高波动品种上需放大阈值(如 25/75)并小心「RSI 钝化」。
- 风险:强趋势中 RSI 长期停留在超买区(牛市)或超卖区(熊市),反向做单会被趋势碾过。与策略②本质同类,别同时重仓两个同构的震荡策略。
四、网格交易(加密现货自动化)
核心逻辑:在价格区间内预设多个挂单价位,跌到某档买入、涨到某档卖出,反复收割震荡利润。天然适合程序化:全程挂单、无需预测方向。
下单循环思路(示例代码仅教学用,实盘风险自负):
import time
from binance.spot import Spot
GRID_LO, GRID_HI = 55000, 75000 # 网格区间(按行情重设)
GRID_STEP = 500 # 网格间距
BASE_QTY = "0.01" # 每格数量(先校验最小下单量与步长)
def build_grid():
"""生成区间内所有网格价格"""
prices = []
p = GRID_LO
while p <= GRID_HI:
prices.append(round(p, 2))
p += GRID_STEP
return prices
def run_grid(client, symbol="BTCUSDT"):
grid = build_grid()
while True:
# 1. 查询现有挂单,与理论网格比对,缺哪档补哪档
open_orders = client.get_open_orders(symbol=symbol)
price_set = {float(o["price"]) for o in open_orders}
# 2. 理论网格中尚未挂单的价位 → 补挂限价单
for price in grid:
if price in price_set:
continue
client.new_order(symbol=symbol, side="BUY", type="LIMIT",
timeInForce="GTC", price=str(price),
quantity=BASE_QTY)
# 3. 成交回报由 WebSocket/轮询捕获,触发「卖出该档」再挂回
time.sleep(5) # 限频内轮询间隔
if __name__ == "__main__":
client = Spot(api_key=os.environ["BINANCE_API_KEY"],
api_secret=os.environ["BINANCE_API_SECRET"])
run_grid(client)
- 适用市场:加密现货(7×24 + 无涨跌停 + 免费 API)是网格的天堂;期货/带**资金费率**的合约别用现货思路硬套。
- 风险:① 单边暴跌时网格全数买套、占用资金无限加大 → 必须设网格区间与资金上限;② 单边暴涨时只吃到一格就跑、踏空 → 设顶部清仓线;③ 网格是「区间震荡提取器」,区间破了策略就失效,要持续监测价格是否仍在区间内。
五、统计套利雏形(配对交易)
核心逻辑:找两个长期同向的标的(同板块股票、BTC 与主流币),价差偏离历史均值时做空高者、做多低者,价差回归后平仓,赚相对运动的钱(市场中性)。
📖 协整概念
配对的核心不是「价格相关」,而是「协整」——价差序列是否围绕稳定均值波动。可用 statsmodels 做协整检验(示例代码仅教学用):
import numpy as np
from statsmodels.tsa.stattools import coint
# a、b 为两个标的价格序列(需对齐)
def zscore(s):
return (s - s.mean()) / s.std()
def pair_spread(a, b):
s = a - b # 简单价差(也可用回归残差)
z = zscore(s)
return z
# 协整检验:p 值 < 0.05 认为存在协整关系,可配对
_, pvalue, _ = coint(a, b)
print("协整 p 值:", pvalue)
# 交易规则:z > 1.5 做空价差(卖 a 买 b);z < -1.5 反向;|z| < 0.5 平仓
- 适用市场:同板块/同主题股票对、强相关加密对(BTC/ETH)、ETF 与成分股。
- 风险:① 价差关系会失效(基本面变化后不再收敛)——必须动态监控 zscore 的统计特征,失效就停;② 做空 A 股有门槛(融券),个人起步用加密现货对或仅做多腿模拟;③ 容量与配对数量受限,别过度加码。
六、每个策略的「参数与边界」
| 策略 | 常用参数起点 | 不适用行情 | 失效特征 |
|---|---|---|---|
| 双均线 | fast=5 | 长期横盘 | 连续小亏、回撤长期贴着止损线 |
| 布林带 | n=20, k=2.0 | 单边趋势 | 止损频繁触发、亏损集中在趋势段 |
| RSI | n=14, 30/70 | 强趋势(钝化) | RSI 长期 70 以上/30 以下 |
| 网格 | 区间取近期高低点 | 突破区间的趋势 | 价格冲出区间、资金被套比例超限 |
| 配对 | z 阈值 1.5/0.5 | 相关性崩塌期 | 价差持续不回归、协整 p 值显著升高 |
⚠️ 通用边界纪律
- 任何策略的参数都应在**样本外**验证(见 03-第一个回测 第七节),参数灵敏度高 = 不可靠;
- 为每个策略预写「停止条件」:回撤到 X% 停用、失效特征出现即复盘,而不是死扛;
- 策略说明书(适用行情、失效特征、停止条件)与研究代码同等重要。
七、策略组合思维
单一策略的收益曲线都有「牛市不赚、熊市亏」的缺陷,组合的核心是**低相关**:
| 组合方式 | 效果 | 例子 |
|---|---|---|
| 多市场 | 不同市场趋势/震荡周期错开 | 加密趋势 + 商品趋势 |
| 多类型 | 趋势与均值回归天然互补(一个在趋势期赚、一个在震荡期赚) | 双均线 + 布林带 |
| 多标的 | 单一标的事件风险摊薄 | 3-5 个主流币分别跑同一策略 |
- 验证方式:把各策略的日收益序列画在一起,看相关性矩阵;两两相关性 > 0.7 的组合没有分散意义;
- 组合后的总回撤小于最差单策略是目标——但注意:组合也不会让期望收益叠加,它是降低波动,不是放大收益。
💡 真正值钱的是检测、维护、迭代流程
写出策略代码只需要几天,让它长期活下去却需要持续的投入。真正值钱的是你围绕策略建立起来的检测、维护、迭代流程——也是个人量化长期做下去的核心能力。 一次回测的漂亮曲线是研究起点,不是资产。
八、「策略是 20% 代码 80% 维护」的现实
写出策略代码只需要几天,让它长期活下去却需要持续的投入:
| 维护项 | 频率 | 内容 |
|---|---|---|
| 数据修正 | 不定期 | 接口源变更、历史数据错误重拉,数据要版本化 |
| 接口变动 | 随交易所更新 | Binance/OKX API 改字段、改限频,脚本要跟上 |
| 市场风格切换 | 持续 | 策略适用的市场环境会变,失效检测要一直跑 |
| 平台条款 | 随时 | 加密平台服务条款、地区限制变化 |
| 参数复审 | 月度 | 用滚动窗口重估参数是否仍在有效区间 |
💡 认知修正
一次回测的「漂亮曲线」是研究起点,不是资产。真正值钱的是你围绕策略建立起来的**检测、维护、迭代流程**——这也是「个人量化」长期做下去的核心能力。
九、个人量化路线图
第 1 周 跑通回测:工具链 + 取数 + 第一个双均线回测(本篇 01-03)
↓
第 1 个月 做出一致性策略:2-3 个策略完成样本外验证、实验留档
↓
第 3 个月 模拟盘:策略全流程跑模拟(或信号推送 + 记录),累计至少 100 笔信号
↓
小资金实盘:只放「亏光也不影响生活」的钱,跑 3 个月以上
↓
持续迭代:月度复盘 → 失效检测 → 新策略研究 → 仓位渐进
每个阶段都有明确的「通关条件」:模拟盘阶段「信号记录完整、执行无 bug」才允许进入小资金;小资金阶段「回撤可控、无重大操作事故」才允许加仓。跳阶段的人,最后都会在下一个阶段补交学费。
⚠️ 风险提示
本文五个策略均为教学示例:参数是起点不是答案,历史收益不代表未来表现,任何策略都可能失效并造成亏损。网格与配对交易在极端行情下风险会被快速放大(单边破区间、价差不回归);自动化执行策略时,限频、断线、接口变动同样会制造真实损失。请务必完成样本外验证、设置停止条件、以模拟盘与小资金长期验证后再考虑加仓。本文内容仅用于学习与研究,不构成任何投资建议;涉及实盘与合规的执行细节,以最新监管规定与各平台官方文档为准。