实现代码 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}%")
示例代码由用户自行提供,网站不对其安全性与适用性负责。

💬 实现点评