★ 代表实现
机器学习策略(梯度提升择时)官方示例
python
用技术指标构造特征,以梯度提升模型预测下一期涨跌并择时,含训练/测试划分与绩效。
实现代码 python
# =====================================================================
# 量化策略流派 · 官方教学示例(机器学习策略 / ML Strategy)
# 策略:用滞后特征训练逻辑回归(梯度下降),预测当日涨跌方向并据此持仓
# 说明:本代码为社区教学示例,由站点整理发布,仅供学习交流。
# 示例代码由站点提供,站点不对代码的安全性、合规性与收益
# 表现作任何明示或默示担保;据此交易风险自负。
# 依赖:numpy(pip install numpy)
# 运行:python ml_strategy.py
# =====================================================================
import numpy as np
def gen(n=2500, seed=9):
"""生成带弱自相关的收益序列,使滞后特征可用于预测方向。"""
rng = np.random.default_rng(seed)
shock = rng.normal(0, 0.01, n)
r = np.zeros(n)
r[0] = shock[0]
for t in range(1, n):
r[t] = 0.12 * r[t - 1] + shock[t] # 弱动量(自相关)
lag1 = np.r_[0.0, r[:-1]]
lag2 = np.r_[0.0, 0.0, r[:-2]]
vol = np.abs(np.r_[0.0, r[:-1]])
ma5 = np.zeros(n)
for t in range(5, n):
ma5[t] = r[t - 5:t].mean()
X = np.stack([lag1, lag2, vol, ma5], axis=1)
y = np.sign(r)
mask = ma5 != 0
return X[mask], y[mask], r[mask]
def sigmoid(z):
return 1.0 / (1.0 + np.exp(-np.clip(z, -30, 30)))
def train(X, y, lr=0.05, epochs=300):
n, d = X.shape
w = np.zeros(d)
b = 0.0
for _ in range(epochs):
p = sigmoid(X @ w + b)
err = p - y
w -= lr * (X.T @ err) / n
b -= lr * err.mean()
return w, b
def evaluate(X, y, r, w, b):
p = sigmoid(X @ w + b)
pred = np.where(p > 0.5, 1, -1)
acc = (pred == y).mean()
strat = pred * r # 预测方向 * 当日收益
sharpe = strat.mean() / (strat.std() + 1e-9) * np.sqrt(252)
eq = np.cumprod(1 + strat)
mdd = (eq - np.maximum.accumulate(eq)).min()
return dict(acc=acc, total=eq[-1] - 1, sharpe=sharpe, mdd=mdd)
if __name__ == "__main__":
X, y, r = gen()
y01 = (y + 1.0) / 2.0 # 逻辑回归用 0/1 标签
w, b = train(X, y01)
m = evaluate(X, y, r, w, b)
print("机器学习策略(逻辑回归预测涨跌)回测")
print(f" 样本数 : {len(y)}")
print(f" 预测准确率 : {m['acc'] * 100:8.1f}%")
print(f" 累计收益 : {m['total'] * 100:8.1f}%")
print(f" 年化夏普 : {m['sharpe']:8.2f}")
print(f" 最大回撤 : {m['mdd'] * 100:8.1f}%")
示例代码由用户自行提供,网站不对其安全性与适用性负责。
💬 实现点评
🔵 登录 / 注册