当前位置: 首页 > article >正文

实战演练:基于Python的MA、MACD、KDJ、RSI、OBV技术指标计算与SVM预测模型构建

1. 技术指标计算基础与数据准备在开始构建预测模型之前我们需要先理解几个核心概念。技术指标就像是股市的体检报告通过数学公式对原始交易数据进行加工帮助我们更清晰地看到市场走势。这次我们要重点关注的五个指标各有特点MA移动平均线相当于股价的平均体温能平滑短期波动MACD指数平滑异同平均线像是股市的心电图反映多空力量变化KDJ随机指标测量股价的超买超卖状态类似温度计的过热过冷警示RSI相对强弱指数评估买卖力量的体力值范围在0-100之间OBV能量潮通过成交量观察资金的流动方向好比观测资金河流的流向我建议使用Anaconda环境它已经集成了我们需要的所有基础工具包。先安装几个关键库conda install pandas numpy matplotlib scikit-learn数据准备阶段有个容易踩坑的地方——日期格式处理。很多新手会忽略这一点导致后续计算全部出错。建议用这个方法来确保日期排序正确import pandas as pd data pd.read_excel(trd_data.xlsx) data[Trddt] pd.to_datetime(data[Trddt]) # 确保转为datetime类型 data data.sort_values(Trddt) # 按日期升序排列2. 五大技术指标的手动实现2.1 移动平均线(MA)的Python实现移动平均线是最基础也最实用的指标。我常把它比作股市的近视眼镜能帮我们过滤掉日常波动的小噪音。计算5日、10日、20日均线的完整代码如下def calculate_ma(data): ma pd.DataFrame() ma[5日MA] data[收盘价].rolling(window5).mean() ma[10日MA] data[收盘价].rolling(window10).mean() ma[20日MA] data[收盘价].rolling(window20).mean() # 处理前几日不足窗口大小的NaN值 ma[5日MA].iloc[:4] data[收盘价].iloc[:4].cumsum() / np.arange(1,5) ma[10日MA].iloc[:9] data[收盘价].iloc[:9].cumsum() / np.arange(1,10) return ma实际应用中我建议同时观察三条均线的排列关系。当短期均线从下向上穿过长期均线时金叉往往是买入信号反之死叉则是卖出信号。2.2 MACD指标的编程实现MACD由三部分组成DIF快线、DEA慢线和MACD柱。计算时有个技巧先算12日和26日EMA再用它们的差值得到DIF。完整实现如下def calculate_macd(data): # 计算EMA ema12 data[收盘价].ewm(span12, adjustFalse).mean() ema26 data[收盘价].ewm(span26, adjustFalse).mean() # 计算DIF和DEA dif ema12 - ema26 dea dif.ewm(span9, adjustFalse).mean() macd (dif - dea) * 2 return pd.DataFrame({DIF: dif, DEA: dea, MACD: macd})我在实际使用中发现MACD在震荡市中容易产生假信号最好配合其他指标一起使用。当DIF上穿DEA且MACD柱由负转正时是比较可靠的买入时机。2.3 KDJ指标的计算方法KDJ指标计算相对复杂需要先找出9日内的最高价和最低价。这里有个优化技巧用rolling方法同时计算极值可以提升效率def calculate_kdj(data): low_min data[最低价].rolling(9).min() high_max data[最高价].rolling(9).max() rsv (data[收盘价] - low_min) / (high_max - low_min) * 100 k rsv.ewm(com2).mean() # 相当于2/3权重 d k.ewm(com2).mean() j 3 * k - 2 * d return pd.DataFrame({K: k, D: d, J: j})KDJ指标在80以上为超买区20以下为超卖区。但要注意在强势上涨行情中KDJ可能会长时间停留在超买区此时不宜简单卖出。3. 构建SVM预测模型3.1 特征工程与数据整合把前面计算的所有指标合并成一个特征矩阵这是建模的关键步骤。我通常会这样处理def prepare_features(ma, macd, kdj, rsi, obv): features pd.concat([ ma.add_prefix(MA_), macd.add_prefix(MACD_), kdj.add_prefix(KDJ_), rsi.add_prefix(RSI_), obv.add_prefix(OBV_) ], axis1) # 处理缺失值 features features.dropna() return features特别注意要确保特征和标签的对齐。我遇到过因为索引错位导致模型效果异常的情况后来养成了每次合并数据后都重置索引的习惯features features.reset_index(dropTrue) labels labels.reset_index(dropTrue)3.2 SVM模型的训练与调优支持向量机对特征缩放很敏感务必先做标准化。这是我的标准处理流程from sklearn.preprocessing import StandardScaler from sklearn.svm import SVC from sklearn.model_selection import GridSearchCV # 数据标准化 scaler StandardScaler() X_train_scaled scaler.fit_transform(X_train) X_test_scaled scaler.transform(X_test) # 参数网格 param_grid { C: [0.1, 1, 10], gamma: [0.01, 0.1, 1], kernel: [rbf, linear] } # 网格搜索 grid GridSearchCV(SVC(), param_grid, cv5) grid.fit(X_train_scaled, y_train) # 最佳模型 best_svc grid.best_estimator_在实际项目中我发现RBF核函数通常表现最好但线性核训练速度更快。如果数据量很大可以先用线性核试跑再考虑更复杂的核函数。3.3 模型评估与结果分析不要只看准确率特别是当数据不平衡时比如上涨下跌天数不均。我建议使用混淆矩阵和分类报告from sklearn.metrics import classification_report, confusion_matrix y_pred best_svc.predict(X_test_scaled) print(confusion_matrix(y_test, y_pred)) print(classification_report(y_test, y_pred))还可以计算策略收益率来验证模型的实用性# 假设test_data包含实际收盘价 test_data[预测信号] y_pred test_data[每日收益率] test_data[收盘价].pct_change() test_data[策略收益率] test_data[预测信号].shift(1) * test_data[每日收益率] cumulative_return (1 test_data[策略收益率]).cumprod()4. 实战经验与优化建议在长期实践中我总结了几个提升模型效果的关键点特征选择不是所有指标都有用。可以用递归特征消除(RFE)来选择重要特征from sklearn.feature_selection import RFE selector RFE(best_svc, n_features_to_select10) selector.fit(X_train_scaled, y_train)参数调优除了网格搜索还可以尝试随机搜索或贝叶斯优化。我常用的参数范围param_dist { C: loguniform(1e-3, 1e3), gamma: loguniform(1e-4, 1e1), kernel: [rbf, linear] }样本平衡如果涨跌天数不平衡可以使用类别权重class_weight {1: len(y_train)/(2*np.sum(y_train1)), -1: len(y_train)/(2*np.sum(y_train-1))} model SVC(class_weightclass_weight)模型融合单一模型总有局限可以尝试结合多个模型from sklearn.ensemble import VotingClassifier from sklearn.ensemble import RandomForestClassifier models [ (svm, SVC(probabilityTrue)), (rf, RandomForestClassifier()) ] ensemble VotingClassifier(models, votingsoft)最后提醒一点市场环境会变化模型需要定期重新训练。我通常每3个月就会用新数据重新训练一次模型同时保留旧模型作为对照。

相关文章:

实战演练:基于Python的MA、MACD、KDJ、RSI、OBV技术指标计算与SVM预测模型构建

1. 技术指标计算基础与数据准备 在开始构建预测模型之前,我们需要先理解几个核心概念。技术指标就像是股市的"体检报告",通过数学公式对原始交易数据进行加工,帮助我们更清晰地看到市场走势。这次我们要重点关注的五个指标各有特点…...

Z-Image-Turbo-辉夜巫女保姆级部署教程:Windows系统安装与配置全攻略

Z-Image-Turbo-辉夜巫女保姆级部署教程:Windows系统安装与配置全攻略 你是不是也眼馋那些AI生成的精美图片,但一看到复杂的Linux命令和服务器配置就头疼?别担心,今天咱们就来点不一样的。我手把手带你,在你自己最熟悉…...

Python3.12虚拟环境踩坑记:为什么安装pwntools会报错ModuleNotFoundError?

Python 3.12虚拟环境疑难解析:从ModuleNotFoundError到安全开发环境搭建 最近在安全研究项目中尝试使用Python 3.12创建虚拟环境时,遇到了一个令人困惑的问题——安装pwntools后运行ROPgadget时提示ModuleNotFoundError: No module named distutils。这个…...

OpenClaw+GLM-4.7-Flash自动化社交媒体管理:从创作到发布

OpenClawGLM-4.7-Flash自动化社交媒体管理:从创作到发布 1. 为什么需要自动化社交媒体管理 去年夏天,当我决定认真运营个人技术博客的社交媒体账号时,很快发现手动管理成了时间黑洞。每天要花两小时写文案、配图、定时发布,还要…...

卡梅德生物技术快报:基于噬菌体展示的骆驼纳米抗体筛选流程解析——以FlgE蛋白为例

在生物计算与合成生物学深度融合的当下,纳米抗体筛选已成为高通量抗体工程领域的核心研究方向,而骆驼纳米抗体凭借分子量小、稳定性强、亲和力高、易重组表达等独特优势,成为病原蛋白靶向检测、抗菌分子研发的理想工具。本文结合实操案例&…...

避坑指南:Python解析Cyber Record时常见的3个错误及解决方法(基于cyber_py3)

Python解析Cyber Record避坑实战:3个高频错误与深度解决方案 在自动驾驶和机器人开发领域,Cyber Record作为百度Apollo生态中的重要数据记录格式,承载着传感器数据、算法中间结果等关键信息。许多开发者选择Python作为快速原型开发语言&#…...

MySQL多表关系1

...

TouchGal:重新定义Galgame文化交流体验的现代化平台

TouchGal:重新定义Galgame文化交流体验的现代化平台 【免费下载链接】kun-touchgal-next TouchGAL是立足于分享快乐的一站式Galgame文化社区, 为Gal爱好者提供一片净土! 项目地址: https://gitcode.com/gh_mirrors/ku/kun-touchgal-next 对于视觉小说爱好者而…...

利用Spring Boot构建高效文学名著共享平台的技术实践

1. 为什么选择Spring Boot构建文学共享平台 第一次接触文学名著共享平台的需求时,我脑海中闪过的第一个念头就是:这玩意儿得扛得住高并发啊!想象一下《红楼梦》新版本上线时,成千上万书迷同时涌入的场景,传统Java EE架…...

如何实现Obsidian本地化:知识管理的图片链接稳定性保障指南

如何实现Obsidian本地化:知识管理的图片链接稳定性保障指南 【免费下载链接】obsidian-local-images 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-local-images 在数字笔记日益成为知识管理核心载体的今天,你是否曾因外部图片链接失效…...

终极解决方案:macOS Fiji启动失败的完整修复指南

终极解决方案:macOS Fiji启动失败的完整修复指南 【免费下载链接】fiji A "batteries-included" distribution of ImageJ :battery: 项目地址: https://gitcode.com/gh_mirrors/fi/fiji Fiji作为"开箱即用"的ImageJ发行版,是…...

下载 | Win11 官方精简版,系统占用空间极少!(3月更新、Win11 IoT物联网 LTSC版、适合老电脑安装使用)

⏩ 【资源A023】Win11 LTSC 2024 ISO系统映像 🔶Win11 物联网IoT LTSC版,默认无TPM等硬件限制,更方便老电脑安装使用。LTSC是长期服务渠道版本,网友俗称“老坛酸菜版”,相当于微软官方的精简版Win11,精简了…...

将Granite时间序列预测能力封装为智能体(Agent)的决策模块

将Granite时间序列预测能力封装为智能体(Agent)的决策模块 想象一下,你正在构建一个能自动帮你做决策的AI助手。比如,一个能帮你自动买卖股票的智能交易员,或者一个能提前发现服务器要出问题的运维管家。这些智能体的…...

SiameseUIE与Anaconda环境集成:Python开发最佳实践

SiameseUIE与Anaconda环境集成:Python开发最佳实践 本文将详细介绍如何在Anaconda环境中高效开发和部署SiameseUIE应用,涵盖虚拟环境配置、依赖管理、开发调试等全流程实践指南。 1. 环境准备与Anaconda安装 Anaconda是Python数据科学开发的利器&#x…...

文墨共鸣5分钟上手:StructBERT水墨风语义分析零基础教程

文墨共鸣5分钟上手:StructBERT水墨风语义分析零基础教程 1. 引言:当AI遇见水墨艺术 在数字时代,我们如何用技术解读文字背后的深意?文墨共鸣给出了一个独特的答案——将阿里达摩院先进的StructBERT大模型与中国传统水墨美学完美…...

VS Code搭建STM32嵌入式开发环境(GCC+OpenOCD+Makefile)

1. 基于 VS Code 的 STM32 嵌入式开发环境构建实践在工业级嵌入式产品开发中,开发工具链的稳定性、可复现性与团队协作能力,远比图形化界面的便捷性更为关键。Keil MDK 虽长期占据主流地位,但其商业授权模式在中小研发团队、高校教学及开源项…...

永磁同步电机基于非线性磁链观测器的转子位置估计策略及其SCI一区顶刊复现与SIMULINK仿真

永磁同步电机基于非线性磁链观测器的转子位置估计策略,利用非线性磁链观测器进行无位置传感器控制,SCI一区顶刊复现,SIMULINK仿真无位置传感器控制这玩意儿在电机控制圈子里算是经久不衰的热点了。今天咱们来唠唠基于非线性磁链观测器的转子位…...

LC谐振电路设计实战:如何用Multisim快速验证滤波器性能?

LC谐振电路设计实战:Multisim高效验证与参数优化指南 在射频和音频滤波器设计中,LC谐振电路扮演着核心角色。无论是无线通信设备中的带通滤波器,还是音频处理系统中的陷波器,精准的谐振特性直接决定了系统性能。传统实验室验证方法…...

万字详解,手把手教你用UCP在RDKS100上部署量化模型

1. RDKS100与UCP平台概述 RDKS100是地平线推出的新一代边缘计算平台,搭载了全新设计的BPU架构和统一计算平台(UCP)接口。相比前代产品,它的最大变化在于引入了UCP这套异构编程框架,让开发者能够更高效地调用计算资源。…...

前端转行AI开发?别被这些「伪AI前端」骗了!收藏这份大厂级AI前端进阶指南

这一年我看了很多「前端 AI」的项目和代码,面试了 n 多候选人,说一句可能不太好听的话: 大多数所谓的 AI 前端,本质上只是把 大模型接口 包了一层 UI。 一个 textarea 一个 fetch 一段 prompt 再配个「智能」「AI 驱动」的标题&a…...

LeetCode 221. 最大正方形(动态规划详解 + C语言实现)

🧩 题目描述给定一个由 0 和 1 组成的二维矩阵,找到只包含 1 的最大正方形,并返回其面积。示例输入: [["1","0","1","0","0"],["1","0","1",&q…...

http和https的了解

一、HTTP 核心解析 HTTP(HyperText Transfer Protocol,超文本传输协议)是客户端与服务器之间传输数据的应用层协议,是 Web 通信的基础。 1. HTTP 的核心特点特点说明优势 / 问题无状态服务器不记录客户端的请求上下文&#xff0c…...

拆解实体生意增长闭环:告别低价促销,搭建可复制的运营模型

一、我的血泪史:靠打折续命,只会越做越亏 做实体的前两年,我陷入了一个死循环:新品上市:盲目囤货,怕断货,结果压了几十万库存;淡季来临:靠满减、秒杀拉客流,看…...

GPT-SoVITS v2ProPlus:工程化音质突破技术解析

GPT-SoVITS v2ProPlus:工程化音质突破技术解析 【免费下载链接】GPT-SoVITS 项目地址: https://gitcode.com/GitHub_Trending/gp/GPT-SoVITS 技术背景:语音合成的质量瓶颈与升级必要性 随着AI语音合成技术的普及,用户对合成语音的自…...

Java笔记——多态

在面向对象编程中,多态(Polymorphism)是三大核心特性之一,与封装、继承并驾齐驱。它赋予了程序在运行时动态选择行为的能力,让代码更加灵活、可扩展。可以说,多态是Java面向对象设计的灵魂。本文将全面剖析…...

告别平庸配图!用Nunchaku FLUX.1 CustomV3轻松制作社交媒体爆款图片

告别平庸配图!用Nunchaku FLUX.1 CustomV3轻松制作社交媒体爆款图片 你是不是也遇到过这样的烦恼?写好了精彩的社交媒体文案,却找不到一张能与之匹配、足够吸引眼球的配图。网上的图片要么版权不明,要么千篇一律,要么…...

Unity 应用动态化交付新思路:Shiply 插件化解决方案深度解析

Unity 应用动态化交付新思路:Shiply 插件化解决方案深度解析一、Unity 应用更新面临的几个问题使用 Unity 引擎的团队——无论是游戏开发者还是构建 3D 交互应用的团队——普遍会遇到以下困境:场景一:紧急 Bug 修复线上突发崩溃或渲染异常&am…...

3027:【例7.1】保留3位小数

#include<iostream> #include<iomanip> using namespace std; int main(){double a;cin>>a;cout<<fixed<<setprecision(3)<<a;return 0; }...

Kinetis L系列TSI电容触摸传感器库深度解析

1. TSI传感器库技术解析&#xff1a;面向Kinetis L系列MCU的电容式触摸感应实现1.1 库定位与工程适用性分析tsi_sensor是专为恩智浦&#xff08;原飞思卡尔&#xff09;Kinetis L系列微控制器设计的轻量级电容式触摸感应&#xff08;Touch Sensing Interface, TSI&#xff09;驱…...

嵌入式C/C++跨平台可移植性工程实践指南

1. 可移植C/C程序设计工程实践指南在嵌入式系统开发中&#xff0c;可移植性并非附加特性&#xff0c;而是架构设计的底层约束条件。当一个项目需要在ARM Cortex-M系列、RISC-V SoC、x86 Linux工控机甚至裸机环境间迁移时&#xff0c;代码层面的平台耦合度直接决定项目生命周期与…...