2025/12/31 21:01:35
网站建设
项目流程
泰安网站建设哪家快,手机网站开发成本,wordpress hacker主题,1685.top贵阳网站建设搭建说明这个系列中#xff0c;我们用Python从#xff10;开始一步步搭建出一套ETF量化交易系统
#xff08;选择ETF标的是因为对于普通交易者来说#xff0c;ETF相对于选强势股难度要小#xff0c;而且没有退市风险#xff09;。大家可以跟随着我们的实现路径来一起学习…搭建说明这个系列中我们用Python从开始一步步搭建出一套ETF量化交易系统 选择ETF标的是因为对于普通交易者来说ETF相对于选强势股难度要小而且没有退市风险。大家可以跟随着我们的实现路径来一起学习从过程中掌握方法。掌握了方法之后你可以换成期货系统、比特币系统、美股系统然后在实战中不断去完善自己的系统了。DAY1-DAY15链接如下15天搭建ETF量化交易系统我们对“15天搭建ETF量化交易系统”系列的学习进行升级进阶系列链接如下[进阶]21天搭建ETF量化交易系统Day16—用DeepSeek学习数据处理[进阶]21天搭建ETF量化交易系统Day17—Backtrader回测马丁格尔补仓法[进阶]21天搭建ETF量化交易系统Day18—爆改backtrader升级为实盘交易[进阶]21天搭建ETF量化交易系统Day19—基于Dash“平民网页版”量化交易框架[进阶]21天搭建ETF量化交易系统Day20—BackTrader回测动量趋势成交量三因子轮动(年化近50%随着AI技术的飞速发展Day21我们将引入机器学习用它来玩转ETF量化投资——这标志着我们的系统从传统策略正式迈入智能交易的新时代。机器学习的优势什么是机器学习简单地理解就是先给机器看一大堆带答案的题目(数据)机器自己琢磨这些题目总结出解题规律模型。碰到新题目时机器就用总结的规律去猜答案。猜错了就回头调整规律猜得越多规律越准下次就更可能猜对。量化交易机器学习相比于传统的方法有什么优势呢传统方法做量化是这样的MACD金叉是买入信号价格上涨伴随成交量放大是加仓信号跌到支撑位买涨到压力位卖。现实的问题是金叉出现时往往已上涨一段追高容易被套放量突破后立即回调的假突破很常见不同股票、不同时期的最佳参数不同。机器学习一般用以下三步操作。第一步给电脑喂食全维度(基本面、技术面、资金面、情绪面、宏观面、行业面)历史案例上涨案例1000次大涨前的市场状态下跌案例1000次大跌前的预警信号震荡案例1000次鸡肋行情的特征第二步机器自动识别复杂投资规律。比如买入规律示例当以下6条件同时满足→上涨概率73%1. 北向资金连续5日流入2. 板块热度排名前3 3. 估值处历史30%分位以下4. 业绩增速连续2季度提升5. 技术面刚突破关键位6. 市场情绪从悲观回升风险信号示例出现以下模式→下跌概率68%1. 大股东密集减持2. 研报唱多但股价滞涨3. 放量不创新高4. 热度高但业绩差5. 融资余额暴增第三步实时动态监控概率化输出。比如给出决策上涨概率73%建议仓位15%。可见传统方法是单线思维机器学习是多维决策同时分析上百个因子更复杂的模式。传统方法是固定规则而机器学习是动态适应能不断从新数据中学习进化自动调整投资策略。机器学习模型介绍机器学习模型主要根据训练数据的方式分为三种类型。第一种是监督学习。模型使用有明确答案的数据进行学习。数据中既包含输入信息也包含对应的正确结果。模型通过学习这两者之间的关系从而能够对新的输入信息给出预测判断。在量化场景中这通常用于预测市场未来的涨跌方向或具体价格点位。第二种是无监督学习。模型使用没有答案的数据进行学习。数据仅包含输入信息不提供任何预设的结果标签。模型的任务是在这些数据中自行发现内在的结构规律或自然分组。这可以帮助我们将大量金融产品归类或将复杂的市场指标简化为少数核心维度。第三种是强化学习。模型通过与环境的互动来学习。模型采取不同行动后会获得相应的奖励或惩罚反馈通过不断尝试来学习能使长期累积回报最大化的行动策略。在交易中这相当于让模型直接学习何时买入、何时卖出的完整决策流程。机器学习模型根据具体的算法分类如下每种都有其特点和适用场景。模型类别核心思想常见算法特点与适用场景线性模型用一条直线或超平面来拟合数据或分类。线性回归、逻辑回归简单、可解释性强。是很好的基线模型适合特征与目标关系近似线性的情况。树模型通过一系列“如果...那么...”的规则树枝分叉做决策。决策树、随机森林、梯度提升树强大、最常用。能捕捉复杂关系对数据要求低在表格数据上表现极佳是量化领域的主流模型。支持向量机 (SVM)寻找一个最宽的“间隔带”来划分不同类别的数据。SVM在高维空间表现好适用于中小规模数据集。贝叶斯模型基于概率论结合已有知识和观察到的数据来推断。朴素贝叶斯计算高效常用于文本分类、垃圾邮件过滤等概率推断场景。神经网络模仿人脑神经元网络通过多层连接学习复杂模式。MLP、CNN、RNN、Transformer强大且灵活。是深度学习的核心特别擅长处理图像、文本、序列等非结构化数据。在量化中常用于处理高频数据、另类数据或作为复杂的预测引擎。集成模型“三个臭皮匠顶个诸葛亮”。将多个弱模型组合成一个强模型。随机森林并行集成、梯度提升树串行集成效果通常优于单一模型能有效降低过拟合风险是实战中的“冠军模型”。目前市面上比较常用的量化模型主要分为两大类它们各有侧重相互补充提升树模型。这是当前量化领域应用最广泛、效果最稳健的主力模型以XGBoost、LightGBM为代表。它们通过组合大量简单的决策树来工作能自动捕捉市场数据中复杂的非线性关系常用于多因子选股和价格预测。一个具体的例子是通过构建基于数百个因子的LightGBM模型进行选股其投资组合在回测中取得了显著超越基准指数的收益。深度学习模型。这类模型属于“特种兵”主要处理传统模型不擅长的复杂数据。例如长短期记忆网络擅长处理时间序列数据可用于分析价格走势、盘口信息等序列数据而卷积神经网络等则可以处理另类的图像或文本信息如从新闻中提取市场情绪。除了预测模型量化系统通常还需要以下两类模型逻辑回归/弹性网络模型作为基础模型和筛选工具因其可解释性强常用来为更复杂的模型筛选有效的因子和特征。强化学习模型不直接预测价格而是直接学习交易策略何时买、何时卖像一个在模拟市场中通过试错来学习如何最大化收益的智能体。案例介绍接下来我们结合miniqmt数据接口设计一个完整的ETF机器学习量化例程。传统的量化交易大多基于技术指标和统计规律而我们的系统将机器学习引入到ETF投资决策中通过历史数据训练模型让AI学会识别市场模式从而预测未来走势。数据驱动不再依赖主观判断完全由数据说话多因子模型构建丰富的特征体系多模型对比5种机器学习模型同台竞技动态学习模型能够随着新数据不断进化案例的大致流程是数据获取 → 特征工程 → 模型训练 → 信号生成 → 回测验证。特征工程的本质将原始的价格、成交量数据转化为机器能够理解的语言。基础价格特征。多时间尺度同时考虑短期(5日)、中期(20日)、长期(60日)趋势。相对位置用价格/均线表示价格在趋势中的位置。动量变化用均线斜率捕捉趋势加速度# 收益类特征df_feat[收益率] df_feat[收盘].pct_change()df_feat[对数收益率] np.log(df_feat[收盘] / df_feat[收盘].shift(1)) # 移动平均线特征多时间窗口windows [5, 10, 20, 30, 60]for w in windows: df_feat[fMA{w}] df_feat[收盘].rolling(w).mean() df_feat[fMA比率_{w}] df_feat[收盘] / df_feat[fMA{w}]技术指标特征。RSI识别超买超卖范围0-10070超买30超卖MACD捕捉趋势变化金叉死叉信号布林带衡量波动率和价格相对位置# RSI相对强弱指标delta df_feat[收盘].diff()gain (delta.where(delta 0, 0)).rolling(window14).mean()loss (-delta.where(delta 0, 0)).rolling(window14).mean()rs gain / (loss 1e-8)df_feat[RSI] 100 - (100 / (1 rs)) # MACD指标趋势跟踪exp1 df_feat[收盘].ewm(span12, adjustFalse).mean()exp2 df_feat[收盘].ewm(span26, adjustFalse).mean()df_feat[MACD] exp1 - exp2波动率与动量特征。高波动率往往伴随高风险动量效应过去涨的继续涨过去跌的继续跌不同周期的动量可能产生冲突需要模型去权衡# 波动率特征风险度量df_feat[波动率_5] df_feat[收益率].rolling(5).std()df_feat[波动率_20] df_feat[收益率].rolling(20).std() # 动量特征惯性效应for period in [5, 10, 20]: df_feat[f动量_{period}] df_feat[收盘] / df_feat[收盘].shift(period) - 1我们设计的目标是预测未来5日的收益率并将其转化为二分类问题。def create_target_variable(df, horizon5): 创建目标变量未来N日收益率 # 计算未来收益率 df[目标收益率] df[收盘].shift(-horizon) / df[收盘] - 1 # 转化为分类问题1上涨0下跌 df[目标分类] (df[目标收益率] 0).astype(int) return df模型选择五大机器学习算法对比class ETFMLPredictor: def __init__(self): # 初始化5种不同类型的模型 self.models { 逻辑回归: LogisticRegression(max_iter1000, random_state42), # 线性模型基准 随机森林: RandomForestClassifier(n_estimators100, random_state42), # 集成学习 XGBoost: xgb.XGBClassifier(n_estimators100, learning_rate0.1), # 梯度提升 LightGBM: lgb.LGBMClassifier(n_estimators100, learning_rate0.1), # 高效梯度提升 梯度提升: GradientBoostingClassifier(n_estimators100) # 传统梯度提升 }时间序列分割处理。def train_and_evaluate(self, X, y, test_size0.2): 时间序列分割训练 # 时间序列分割用前面80%训练后面20%测试 split_idx int(len(X) * (1 - test_size)) X_train, X_test X[:split_idx], X[split_idx:] y_train, y_test y[:split_idx], y[split_idx:] # 训练所有模型并对比 for name, model in self.models.items(): model.fit(X_train, y_train) y_pred model.predict(X_test) # 评估指标 accuracy accuracy_score(y_test, y_pred) f1 f1_score(y_test, y_pred)分析哪些特征对预测最重要。def feature_importance_analysis(self, model, feature_names): 分析哪些特征对预测最重要 if hasattr(model, feature_importances_): importances model.feature_importances_ # 创建重要性排名 feat_importance pd.DataFrame({ 特征: feature_names, 重要性: importances }).sort_values(重要性, ascendingFalse)接下来是信号生成。将概率预测转化为具体的买卖信号。def generate_signals(self, df_features, X_test): 生成交易信号 test_data[预测概率] self.predictor.best_model.predict_proba(X_test)[:, 1] # 生成信号规则 test_data[信号] 0 # 0持有 test_data.loc[test_data[预测概率] 0.6, 信号] 1 # 买入 test_data.loc[test_data[预测概率] 0.4, 信号] -1 # 卖出0.6以上买入只有模型很确信时才行动0.4以下卖出及时止损0.4-0.6持有避免频繁交易减少摩擦成本运行日志如下所示我们打印其中一个5GETF的日志看下 开始运行 5GETF(159994.SZ) 机器学习策略 步骤1: 获取历史数据... 步骤2: 特征工程... 原始数据: 500 条 特征数据: 440 条, 47 个特征⚙️ 步骤3: 准备机器学习数据... 开始训练机器学习模型...训练 逻辑回归... 逻辑回归 - 准确率: 0.443, 精确率: 0.518, F1: 0.542训练 随机森林... 随机森林 - 准确率: 0.443, 精确率: 0.523, F1: 0.484训练 XGBoost... XGBoost - 准确率: 0.443, 精确率: 0.523, F1: 0.484训练 LightGBM...[LightGBM] [Info] Number of positive: 206, number of negative: 146[LightGBM] [Info] Auto-choosing col-wise multi-threading, the overhead of testing was 0.000154 seconds.You can set force_col_wisetrue to remove the overhead.[LightGBM] [Info] Total Bins 4468[LightGBM] [Info] Number of data points in the train set: 352, number of used features: 39[LightGBM] [Info] [binary:BoostFromScore]: pavg0.585227 - initscore0.344270[LightGBM] [Info] Start training from score 0.344270 LightGBM - 准确率: 0.398, 精确率: 0.478, F1: 0.454训练 梯度提升... 梯度提升 - 准确率: 0.466, 精确率: 0.540, F1: 0.535 最佳模型: 逻辑回归测试集F1分数: 0.542 步骤4: 特征重要性分析... 特征重要性排名 (Top 15):--------------------------------------------------MA比率_60 : 1.0703MA斜率_30 : 0.7728动量_10 : 0.6376RSI : 0.5853MA比率_30 : 0.5648MA比率_5 : 0.4690动量_5 : 0.4616成交量_MA10 : 0.431320日高点 : 0.3698成交量_MA5 : 0.3561价格位置 : 0.3076波动率_20 : 0.2708MA比率_20 : 0.2633MA比率_10 : 0.2386成交量比率 : 0.2234 步骤5: 生成交易信号... 步骤6: 策略回测分析... 5GETF 回测结果汇总回测期间: 2025-08-05 至 2025-12-12回测天数: 88 天 收益表现: 策略总收益: 53.63% 买入持有总收益: 58.75% 超额收益: -5.12% 策略年化收益: 241.97% 买入持有年化: 275.61% 风险指标: 策略年化波动率: 45.03% 买入持有波动率: 50.44% 策略夏普比率: 5.306 买入持有夏普: 5.405 策略最大回撤: -18.49% 买入持有最大回撤: -18.93% 交易统计: 买入信号次数: 44 卖出信号次数: 19 总交易次数: 6 胜率: 66.67%本次策略回测显示基于机器学习的交易策略在5GETF上实现了66.67%的胜率和241.97%的年化收益其风险控制能力最大回撤-18.49%略优于买入持有策略-18.93%但整体超额收益-5.12%与基准夏普比率5.306 vs 5.405表现基本持平表明模型具备一定的选时能力但在本测试周期内未能持续跑赢市场。本案例重在展示机器学习的整体流程对于模型在择时精度与持仓周期优化上仍有提升空间。比如因子体系深化引入更多宏观、舆情及产业链数据弥补当前技术因子的局限性模型集成与参数调优结合各模型优势并针对波动市况进行动态参数适配可视化特征重要性排名如下所示可视化机器学习策略分析如下所示总结我们的系统不是要准确预测每一天的涨跌而是要找到风险调整后具有正期望收益的交易机会。机器学习在这里的作用是处理高维数据同时考虑数十个因子发现非线性关系捕捉技术指标间的复杂交互自适应学习随着市场变化调整模式识别没有圣杯只有不断进化的工具。机器学习提供了强大的分析能力但最终的投资决策还需要结合风险管理、资金管理和对市场的深刻理解。说明此系列为连载专栏完整代码会上传知识星球《Python量化编程基础》作为《玩转股票量化交易》会员们的学习资料。想要加入知识星球《玩转股票量化交易》或者《Python量化编程基础》的小伙伴记得先微信call我获取福利(记得说明下是哪个星球两个内容和价格不一样)知识星球介绍点击知识星球《玩转股票量化交易》精华内容概览