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

【暴力量化】查找最优均线

搜索逻辑

代码主要以支撑概率和压力概率来判断均线的优劣
判断为压力: 当日线与测试均线发生金叉或即将发生金叉后继续下行
判断为支撑: 当日线与测试均线发生死叉或即将发生死叉后继续上行
判断结果的天数: 小于6日均线,用金叉或死叉后2个交易日的结果判断;大于等于6日的n日均线,用n/2个交易日判断
判断逻辑: 使用判断点(金叉 or 死叉)后n/2个交易日的收盘价的一次回归线的斜率,大于0为上行,小于0为下行
补充: 把判断点由近似点改成准确点(即日线与均线发生交叉)后,1-压力概率 即为金叉概率,1-压力概率 即为死叉概率

数据处理

数据来源: tushare 或 通信达,我使用的是通信达导出的2015年至今的日线数据
数据处理: 把每只股票的数据按照日期从小到大排列后,取出收盘价即可
如果你有分钟数据,也可以搜索分钟级别的均线压力和支撑

数据处理代码
def readData(self,r_path):'''1、r_path: 通信达导出的日线数据所在的目录2、生成函数,每次获取一支股票2015年至今的收盘数据'''files = os.listdir(r_path)for f_path in files:f_path = os.path.join('日线_data',f_path)df = pd.read_csv(f_path,header=None,index_col=False,encoding='gbk',names=['trade_date','open','high','low','close','vol','amount']).dropna()df = df.sort_values('trade_date').reset_index(drop=True)yield df['close']

查找代码

判断金叉和死叉的逻辑

判断金叉和死叉的代码逻辑一开始属实让我难理解,看四五遍才清除,下面给一个我觉得比较清楚的示例

# 计算均线
ma = data.rolling(5).mean() # 计算5日均线
cmp = data > ma * 0.97 # 有时不触及均线也会有支撑和压力,但不会有金叉和死叉,所以要适当抬高或降低均线,自己设置
'''计算金叉和死叉,金叉用于计算压力,死叉用于计算支撑金叉计算逻辑cmp: F F F T T T F F F(~cmp).shift(1):   T T T F F F T T Tgolden_idx: F F F T F F F F F # 金叉结果反过来就是死叉
'''
golden_idx = cmp & (~cmp).shift(1) #金叉
cmp = data > ma * 1.03 # 计算死叉,抬高均线
death_idx = ~cmp & cmp.shift(1) # 死叉

整体搜索代码

def find_best_ma(self,r_path,days:tuple):assert days[0] <= days[1],'计算均线日期错误,格式(起始,结束)'assert days[0] > 1,'最小天数要大于1'datas = self.readData(r_path)# 保存结果result = pd.DataFrame({'MA':[*range(days[0],days[1]+1)],'支撑成功率':np.zeros(days[1]-days[0]+1),'支撑成功次数':np.zeros(days[1]-days[0]+1),'支撑总次数':np.zeros(days[1]-days[0]+1),'压力成功率':np.zeros(days[1]-days[0]+1),'压力成功次数':np.zeros(days[1]-days[0]+1),'压力总次数':np.zeros(days[1]-days[0]+1)})result = result.set_index('MA')for data in datas:data_len = len(data) # 数据长度for day in range(days[0],days[1]+1):# 计算均线ma = data.rolling(day).mean()'''计算金叉和死叉,金叉用于计算压力,死叉用于计算支撑金叉计算逻辑cmp: F F F T T T F F F(~cmp).shift(1):   T T T F F F T T Tgolden_idx: F F F T F F F F F'''cmp = data > ma * 0.97 # 有时不触及均线也会有支撑和压力,但不会有金叉和死叉,所以要适当抬高或降低均线golden_idx = cmp & (~cmp).shift(1)cmp = data > ma * 1.03 # 计算死叉,抬高均线death_idx = ~cmp & cmp.shift(1)# 转成索引golden_idx = golden_idx[golden_idx].indexdeath_idx = death_idx[death_idx].index# 把长度加进总数里result.loc[day,['压力总次数']] += len(golden_idx)result.loc[day,['支撑总次数']] += len(golden_idx)'''设置参考天数,用于判断后续涨跌如果均线小于等于5天,则用后2天判断如果均线大于5天,则n天均线准确率用后n/2天的涨势判断'''pre_day = 2 if day <=5 else int(day/2)'''支撑成功判断:死叉当天到后续pre_day天计算回归,斜率大于0死叉成功判断:死叉当天到后续pre_day天计算回归,斜率大于0'''for idx in golden_idx:if idx >= data_len-1:result.loc[day,['压力总次数']] -= 1continue # 位置太靠后,没有结果参考,跳过if data_len-idx < pre_day:pre_day = data_len-idx # 后续数据不足以参考天数,改为用后面剩的几天判断y = data[idx:idx + pre_day + 1]x = range(1,len(y)+1)k,b = np.polyfit(x,y,deg=1) # 线性回归预测if k < 0:result.loc[day,['压力成功次数']] += 1 # 小于0则说明均线有压力for idx in death_idx:if idx >= data_len-1:result.loc[day,['支撑总次数']] -= 1continue # 位置太靠后,没有结果参考,跳过if data_len-idx < pre_day:pre_day = data_len-idx # 后续数据不足以参考天数,改为用后面剩的几天判断y = data[idx:idx + pre_day + 1]x = range(1,len(y)+1)k,b = np.polyfit(x,y,deg=1) # 线性回归预测if k > 0:result.loc[day,['支撑成功次数']] += 1 # 小于0则说明均线有压力result['压力成功率'] = round(result['压力成功次数']/result['压力总次数'],4) # 更新一次结果result['支撑成功率'] = round(result['支撑成功次数']/result['支撑总次数'],4) # 更新一次结果os.system('cls')max = result.idxmax()max_support = result['支撑成功率'].max()max_presure = result['压力成功率'].max()print(tabulate(result.head(15), headers='keys', tablefmt='psql'),flush=True)         print('当前最优值',flush=True)print('支撑\t','MA {}\t'.format(max['支撑成功率']),max_support,flush=True)print('压力\t','MA {}\t'.format(max['压力成功率']),max_presure,end='',flush=True) result.to_csv('最优均线.csv',encoding='utf-8-sig')

效果展示,以5到30天均线搜索为例

在这里插入图片描述

相关文章:

【暴力量化】查找最优均线

搜索逻辑 代码主要以支撑概率和压力概率来判断均线的优劣 判断为压力&#xff1a; 当日线与测试均线发生金叉或即将发生金叉后继续下行 判断为支撑&#xff1a; 当日线与测试均线发生死叉或即将发生死叉后继续上行 判断结果的天数&#xff1a; 小于6日均线&#xff0c;用金叉或…...

Java读取mysql导入的文件时中文字段出现�??的乱码如何解决

今天在写程序时遇到了一个乱码问题&#xff0c;困扰了好久&#xff0c;事情是这样的&#xff0c; 在Mapper层编写了查询语句&#xff0c;然后服务处调用&#xff0c;结果控制器返回一堆乱码 然后查看数据源头处&#xff1a; 由重新更改解码的字符集&#xff0c;在数据库中是正…...

k8s核心概念—Pod Controller Service介绍——20230213

文章目录一、Pod1. pod概述2. pod存在意义3. Pod实现机制4. pod镜像拉取策略5. pod资源限制6. pod重启机制7. pod健康检查8. 创建pod流程9. pod调度二、Controller1. 什么是Controller2. Pod和Controller关系3. deployment应用场景4. 使用deployment部署应用&#xff08;yaml&a…...

Tensorflow的数学基础

Tensorflow的数学基础 在构建一个基本的TensorFlow程序之前&#xff0c;关键是要掌握TensorFlow所需的数学思想。任何机器学习算法的核心都被认为是数学。某种机器学习算法的策略或解决方案是借助于关键的数学原理建立的。让我们深入了解一下TensorFlow的数学基础。 Scalar 标…...

IT培训就是“包就业”吗?内行人这么看

大部分人毕业后选择参加职业技能培训&#xff0c;都是为了学完之后能找到好工作&#xff0c;而“就业服务”也成为各家培训机构对外宣传的重点内容。那么&#xff0c;所谓的“就业服务”就是“包就业”和“包底薪”吗&#xff1f;学完就一定能拿到offer吗&#xff1f;今天&…...

【算法】【数组与矩阵模块】顺时针旋转打印矩阵

目录前言问题介绍解决方案代码编写java语言版本c语言版本c语言版本思考感悟写在最后前言 当前所有算法都使用测试用例运行过&#xff0c;但是不保证100%的测试用例&#xff0c;如果存在问题务必联系批评指正~ 在此感谢左大神让我对算法有了新的感悟认识&#xff01; 问题介绍 …...

Java中的锁概述

java中的锁java添加锁的两种方式&#xff1a;synchronized&#xff1a;关键字 修饰代码块&#xff0c;方法 自动获取锁、自动释放锁Reentrantlock&#xff1a;类 只能修饰代码块 手动加锁、释放锁java中锁的名词一些锁的名词指的是锁的特性&#xff0c;设计&#xff0c;状态&am…...

微电影行业痛点解决方案

在当下新媒体时代&#xff0c;微电影作为“微文化”的载体&#xff0c;具有“微”的特点&#xff0c;经过短短数年的快速发展&#xff0c;并获得了受众广泛的关注和喜爱&#xff0c;对人们的休闲娱乐方式也产生较大的影响。但在迅猛发展的同时也存在一些行业痛点&#xff0c;诸…...

使用Spring框架的好处是什么

使用Spring框架的好处是什么&#xff1f; 1、轻量&#xff1a;Spring 是轻量的&#xff0c;基本的版本大约2MB。 2、控制反转&#xff1a;Spring通过控制反转实现了松散耦合&#xff0c;对象们给出它们的依赖&#xff0c;而不是创建或查找依赖的对象们。 3、面向切面的编程(AOP…...

【表格单元格可编辑】vue-elementul简单实现table表格点击单元格可编辑,点击单元格变成弹框修改数据

前言 这是继我另一个帖子就是单元格点击变成输入框后添加的功能 因为考虑到有些时候修改单元格的信息可能点击后要修改很多&#xff0c;那一个输入框不好用 所以这时候就需要一个弹框可以把所有表单都显示出来修改 所以这里就专门又写了一个demo&#xff0c;用于处理这种情况 …...

vue3.0 响应式数据

目录1.什么是响应式2. 选项式 API 的响应式数据3.组合式 API 的响应式数据3.1 reactive() 函数3.2 toref() 函数3.3 toRefs() 函数3.4ref() 函数总结1.什么是响应式 这个术语在今天的各种编程讨论中经常出现&#xff0c;但人们说它的时候究竟是想表达什么意思呢&#xff1f;本质…...

uni-app ①

文章目录一、uni-app简介学习 uniapp 本质uniapp 优势uni-app 和 vue 的关系uni-app 和小程序有什么关系uniapp 与 web 代码编写区别课程内容学习重点知识点一、uni-app 简介 uni-app 是一个使用 Vue.js 进行 开发所有前端应用的框架。开发者编写一套代码&#xff0c;即可发布…...

20个 Git 命令玩转版本控制

想要在团队中处理代码时有效协作并跟踪更改&#xff0c;版本控制发挥着至关重要的作用。Git 是一个版本控制系统&#xff0c;可以帮助开发人员跟踪修订、识别文件版本&#xff0c;并在必要的时候恢复旧版本。Git 对于有一定编程经验的用户来说虽然不算太难&#xff0c;但是想要…...

SAP NetWeaver版本和SAP Kernel版本的确定

SAP NetWeaver&#xff08;SAP NW&#xff09;描述了用于“业务启用”的所有软件和服务。SAP业务套件&#xff08;如ERP中央组件&#xff08;ECC&#xff09;或供应商关系管理&#xff08;SRM&#xff09;&#xff09;包含该特定业务解决方案的软件组件。 以下是SAP NetWeaver…...

面试23K字节测试开发岗被血虐,到底具有怎样的技术才算高级水平?

前几天我朋友跟我吐苦水&#xff0c;这波面试又把他打击到了&#xff0c;做了6年软件测试。。。 下面这条招聘是在腾讯招聘官网截图下来的&#xff0c;首先我们对高级水平下一个定义吧&#xff0c;那它应该是对标这个职级该有的能力 什么样的工程师才能算高级&#xff1f;至少…...

智云通CRM:买对了吗——大客户采购的方案实施

一旦采购合同签署后&#xff0c;供应商就要履行合同&#xff0c;按时交付产品进场使用&#xff0c;或实施服务方案。不过&#xff0c;无论对供应商还是客户来说&#xff0c;双方的合作并没有就此结束。 在这个阶段&#xff0c;客户会评估此次合作的供应商做事是否靠谱&#x…...

前后端开发过程中的跨域问题总结

1.何为跨域问题 出于浏览器的同源策略限制。同源策略是一种约定&#xff0c;它是浏览器最核心也最基本的安全功能&#xff0c;如果缺少了同源策略&#xff0c;则浏览器的正常功能不能使用。可以说web是构建在同源策略基础之上的&#xff0c;浏览器只是针对同源策略的一种实现。…...

爬虫:栖落的电影网站,利用requests和re模块

这是栖落的电影网站地址&#xff1a;https://xxx.xxx 进入网页&#xff0c;显示&#xff1a; 爬取目标&#xff1a;电影的名称、观影人数和评分。 易知本网站的url url "https://xxx.xxx" 本网站会识别出headers中的python请求而拒绝访问&#xff0c;所以需要更改…...

使用burpsuite抓包 + sql工具注入 dvwa靶场

使用burpsuite抓包 sql工具注入 dvwa靶场 记录一下自己重新开始学习web安全之路②。 一、准备工作 1.工具准备 sqlmap burpsuite 2.浏览器准备 火狐浏览器 设置代理。 首先&#xff0c;先设置一下火狐浏览器的代理 http代理地址为127.0.0.0.1 &#xff0c;端口为8080 …...

树与图中的dfs和bfs—— AcWing 846. 树的重心 AcWing 847. 图中点的层次

一、AcWing 846. 树的重心1.1题目1.2思路分析题意&#xff1a;什么是树的重心&#xff1f;树的重心是指&#xff0c;删除某个结点后剩下的最大连通子树的结点数目最小&#xff0c;如下图是根据样列生成的树&#xff0c;若删除结点1&#xff0c;则剩下三个子树最大的是中间那颗结…...

这份榜单够用!高效论文写作全流程AI论文软件推荐(2026 最新)

2026年AI论文软件持续升级&#xff0c;论文写作全流程可拆解为文献调研→选题/开题→大纲/初稿→文献综述→降重/去AI味→润色/格式→查重/投稿七大环节&#xff0c;以下工具按环节精准匹配&#xff0c;兼顾中文适配、降重能力、去AI痕迹、学术合规四大核心需求&#xff0c;覆盖…...

Lumerical圆锥建模避坑指南:从参数计算到3D旋转生成的完整流程

Lumerical圆锥建模避坑指南&#xff1a;从参数计算到3D旋转生成的完整流程 在光学仿真领域&#xff0c;精确的几何建模往往是获得可靠结果的第一步。对于圆锥结构这种在光子晶体、超表面和纳米天线设计中广泛应用的形状&#xff0c;其建模过程看似简单却暗藏玄机。许多研究人员…...

开源视觉模型推荐:GLM-4v-9B,高分辨率输入,中文OCR领先

开源视觉模型推荐&#xff1a;GLM-4v-9B&#xff0c;高分辨率输入&#xff0c;中文OCR领先 1. 引言 在当今多模态AI快速发展的时代&#xff0c;视觉-语言模型正成为技术前沿的热点。GLM-4v-9B作为智谱AI最新开源的90亿参数视觉-语言多模态模型&#xff0c;凭借其11201120高分…...

OpenClaw环境隔离方案:GLM-4.7-Flash多项目独立配置

OpenClaw环境隔离方案&#xff1a;GLM-4.7-Flash多项目独立配置 1. 为什么需要环境隔离&#xff1f; 去年夏天&#xff0c;我同时接手了两个截然不同的自动化项目&#xff1a;一个是帮朋友处理电商数据整理的私人需求&#xff0c;另一个是公司内部的知识库维护工作。当我兴冲…...

从零到一:Vision Pro工业视觉软件安装与配置实战指南

1. Vision Pro工业视觉软件入门指南 第一次接触Vision Pro的朋友可能会被这个强大的工业视觉软件震撼到。作为康耐视的拳头产品&#xff0c;它在汽车制造、电子检测、包装印刷等行业应用广泛。我刚开始用的时候也是一头雾水&#xff0c;但跟着正确的步骤走&#xff0c;其实安装…...

Leptin30;YQQVLTSLPSQNVLQIANDLENLRDLLHLL (mouse)

一、基本信息名称&#xff1a; Leptin30&#xff08;小鼠源瘦素功能片段肽&#xff09;单字母序列&#xff1a; YQQVLTSLPSQNVLQIANDLENLRDLLHLL三字母序列&#xff1a; Tyr-Gln-Gln-Val-Leu-Thr-Ser-Leu-Pro-Ser-Gln-Asn-Val-Leu-Gln-Ile-Ala-Asn-Asp-Leu-Glu-Asn-Leu-Arg-Asp…...

别再死记硬背了!用Python手把手教你实现数据库闭包自动计算器

用Python实现数据库闭包计算器&#xff1a;从理论到实战的自动化工具 闭包计算是数据库原理中的核心算法&#xff0c;但传统教材往往停留在抽象描述和手工演算阶段。作为曾经被各种箭头符号和递归推导折磨过的开发者&#xff0c;我决定用Python打造一个能自动计算闭包并可视化步…...

OpenClaw安全防护指南:百川2-13B-4bits量化模型权限管控实践

OpenClaw安全防护指南&#xff1a;百川2-13B-4bits量化模型权限管控实践 1. 为什么需要安全防护&#xff1f; 当我第一次把OpenClaw接入百川2-13B-4bits量化模型时&#xff0c;那种兴奋感至今难忘——终于可以在本地运行一个强大的AI助手了。但很快&#xff0c;一个意外让我意…...

[260326] x-cmd v0.8.10:跨 Shell 统一配置命令短名;自动装好依赖运行 WhisperLiveKit 实时语音转写

[260326] x-cmd v0.8.10&#xff1a;跨 Shell 统一配置命令短名&#xff1b;自动装好依赖运行 WhisperLiveKit 实时语音转写 开放 shortcut 内部模块&#xff0c;配置命令短名&#xff0c;支持跨 Shell 统一使用whisper 模块新增 livekit 命令&#xff0c;自动装好依赖&#x…...

s2-pro开源大模型实战:低成本GPU部署语音合成服务完整流程

s2-pro开源大模型实战&#xff1a;低成本GPU部署语音合成服务完整流程 1. 前言&#xff1a;语音合成技术的新选择 语音合成技术正在改变我们与数字世界的交互方式。今天要介绍的s2-pro是Fish Audio开源的一款专业级语音合成模型镜像&#xff0c;它让高质量语音合成服务的部署…...