量化择时——均线策略及改进方法(第1部分—因子测算)
文章目录
- 道氏理论
- 个股股价走势阶段
- 板块、行业股价走势
- 均线策略交易逻辑
- 均线策略效果测算
- 改进一:设置策略信号偏移量
- 改进二:生成止盈止损信号
道氏理论
使用盘面数据,根据计算出的一条或多条均线,判断入场与离场的时机,基本上就是技术面分析。而技术面分析的思想我们可以借鉴比较经典的“道氏理论”。
道氏理论是由创办了华尔街日报,创建了道琼斯公司的【查尔斯·亨利·道】发展起来的一种交易方法,同时在当时美国市场上上市公司以工业企业为主的环境下发明了道琼斯工业指数。在他去世后,由后人总结出来并予以命名“道氏理论”。
个股股价走势阶段
道氏理论以有效市场假说为基础,认为任何市场都会有这3种趋势,透过分辨不同的趋势可以找到投资机会。
- 主要趋势:指长期趋势,持续一年及以上,大部分股票将随主要趋势上升或下跌,大致可以将市场分为牛市、熊市、盘整(横盘震荡)
- 次要趋势:持续数周或数月,指与主要趋势相反的中期走势,常见于走到主要趋势的1/3或2/3部分时
- 小型趋势:每日的波动,带有一定的随机性,难以分析
在上升趋势阶段,分为以下三个阶段:
- 筑底阶段:市场经过前期的大跌之后,此时普遍估值较低,盘面表现为持续震荡。市场看不到明天的太阳,不知道未来是震荡下跌还是震荡上涨,此时人们对未来的信心已经在逐渐恢复中
- 持续上涨:市场找到了上升动力,利好消息不断放出,买盘推动股价不断上涨。盘面表现是成交量随着股价的上涨不断增加。市场的向好也给予企业正反馈,企业与市场形成正向循环促进
- 探顶阶段:市场不断出现利好消息,参与者越来越分散,企业估值被不断推高,泡沫不断积累。此时的市场充斥着投机者,基于期待与希望支撑买方力量,但是预期已拉满,市场对于利空消息也逐渐敏感
在下跌趋势阶段,也分为以下三个阶段:
- 探顶阶段:紧接着上升阶段的尾巴,此时买方力量与卖方力量相互周旋,盘面表现为持续震荡,此时估值膨胀到买方力量难以支撑,卖方力量蠢蠢欲动
- 持续下跌:经济的恶化会导致高估值的企业因为未达预期,股价不断下跌,典型的持续下跌会表现在价格下跌的同时成交量逐渐减小,此时表明在卖方抛售的同时买方持续观望,对于估值的失望性抛售会不断拉低企业估值
- 探底阶段:此时市场虽然一片萧条,但是成交量逐渐恢复,企业估值整体偏低,买方蠢蠢欲动
板块、行业股价走势
我们通俗的理解牛市:行情好啊,啥啥都赚钱,熊市则是:经济完蛋了,啥啥都赔钱。同样还有一种情况,即一部分板块在大涨,而另一部分板块在暴跌,这就出现了板块之间的背离。使用道氏理论可以从宏观上佐证以下观点:
- 牛市:板块普涨
- 熊市:板块普跌
- 盘整:过去相关性很高的板块,此时出现了背离,这通常是一个反转的信号。也可以佐证“行业轮动”的现象。打个比方,比如新发现了一座金矿,那么这个地区的铲子和矿泉水预期被大量需要,价格也应该会同步上升。但是,如果铲子的价格上涨,但是矿泉水的价格下降,则出现走势“背离”的现象。此时需要细致的分析。如果分析出这个地方金矿开采难度大成本高,那么铲子的价格会因为需求不及预期导致价格下跌,当时听风就是雨进去的就被坑了。
均线策略交易逻辑
我们常见的是如下的策略:
- 以过去10个交易日的收盘价作为快线
- 以过去25个交易日的收盘价作为慢线
- 当快线向上突破慢线,表示上涨趋势势不可挡,此时买入
- 当快线下穿突破慢线,表示下跌趋势不可遏制,此时卖出
这是一快一慢两个指标相互作用的策略,而均线策略通常只使用一个指标,即根据自身指标过去一段时间的走势完成择时。
均线策略思想如下:
- 记录过去的一个时间窗口的收盘价均值
- 使用滑动窗口将均值变为一条时间序列数据(均线)
- 股价突破极小值时买入,突破极大值时卖出
由于极小值、极大值是交替出现的,因此每一对【极小值(买点),极大值(卖点)】都可以构成一个完整的交易
比如我们以20个交易日的收盘价的均值作为参考值,20个交易日的收盘价的均值与收盘价走势图如下图所示:

上面的图比较典型,可以观测到:
- 均线相对更容易描述趋势的走势
- 均线相对于收盘价有一定的滞后性
- 均线在大方向上的变动不是特别频繁
均线策略效果测算
我们基于均线策略,构建如下策略流程:
- 以20个交易日为滑动窗口长度,计算每个交易日的收盘价的均值,作为均线策略的参考值
- 如果上一个交易日的股价是极小值点,则以当日收盘价买入
- 如果上一个交易日的股价是极大值点,则以当日收盘价卖出
最后,统计每一次完整的交易,并把这期间的收益转换为年化收益率,以年化收益率>2%记为胜,胜率=胜的次数/总交易次数
买点、卖点如下图所示:

测算结果如下图所示:

但是,正如上图所示,因为当出现震荡行情时,极大值与极小值会交替出现。这时,极容易出现:
- 第一天是极小值,买入
- 第二天是极大值,卖出
- 第三天是极小值,买入
- 第四天是极大值,卖出
- …
加上对交易日相关数据的统计:

可以发现,有25%的交易是在2天以内,即“今天买明天卖”,这会造成短期大量的换手,增加摩擦成本。为了避免短期频繁的交易,我们我们需要针对极大值、极小值的择时策略做一些优化。
改进一:设置策略信号偏移量
当极小值出现时,对比上一次极小值出现的时点,需要当前的极小值点相对上一个极小值点偏移n%,才会作为新的价格信号;极大值同理
这里我们定3%,因此原有测算的买点与卖点修改为:
- 如果上一个交易日的股价是极小值点,且相对于上次的极小值点价格偏移超过3%,则以当日收盘价买入
- 如果上一个交易日的股价是极大值点,且相对于上次的极大值点价格偏移超过3%,则以当日收盘价卖出
回测效果如下:


改进二:生成止盈止损信号
在买点生成的同时,同步生成止盈与止损信号:
- 如果上一个交易日的股价是极小值点,则以当日收盘价买入
- 以当日收盘价的正负6%,为止盈止损点。即涨超6%发出止盈信号,跌超6%发出止损信号
- 如果上一个交易日的股价是极大值点,或收盘价突破止盈止损点,则以止盈、止损点买入
回测效果如下:


及时的止盈与止损会导致交易天数明显缩短,对应的胜率也会下降,但是方差与原有策略相同。
有一点需要注意,有些改进是从以下两个角度出发:
- 改进思想1:买入后静默N天,再根据信号进行交易判断;(为了防止短期抖动)
- 改进思想2:第二次买入与上一次卖出至少相隔N天;(为了重置交易环境)
虽然上面两种方法的确可以降低交易频率,增加交易的持续时间。但是要注意,我们的目标不是为了【降低交易频率】,而是【降低频繁换手导致的摩擦成本】,只不过为了实现这个目标,“交易频率的降低”是一种可能得结果。
因此博主的建议是,如果我们是组合多种策略,上面两种思路是OK的,但我们在测算指标时,尽量在严格执行信号的情况下,引入外部的一些改进机制,而不是阉割掉原有的策略信号。
下一部分,我们将构建回测策略,对均线及其改进策略进行回测,并评估它的表现
相关文章:
量化择时——均线策略及改进方法(第1部分—因子测算)
文章目录道氏理论个股股价走势阶段板块、行业股价走势均线策略交易逻辑均线策略效果测算改进一:设置策略信号偏移量改进二:生成止盈止损信号道氏理论 使用盘面数据,根据计算出的一条或多条均线,判断入场与离场的时机,…...
封装几个有用的 Vue3 组合式API
本文将介绍如何使用Vue3来封装一些比较有用的组合API,主要包括背景、实现思路以及一些思考。 就我自己的感觉而言,Hook与Composition API概念是很类似的,事实上在React大部分可用的Hook都可以使用Vue3再实现一遍。 为了拼写方便,下文内容均使用Hook代替Composition API。相…...
MyBatisPlus中的条件构造器Wrapper
引言为什么要了解Wrapper?Wrapper解决的了什么问题?一、Wrapper:条件构造抽象类,用来解决单表操作出现的一些复杂问题,例如排序,和模糊查询等等结构图文字解释AbstractWrapper : 用于查询条件封装ÿ…...
类和对象及其构造方法
类和对象 现实世界的事物由什么组成? 属性 行为 类也可以包含属性和行为,所以使用类描述现实世界事物是非常合适的类和对象的关系是什么? 类是程序中的“设计图纸” 对象是基于图纸生产的具体实体什么是面向对象编程? 面向对象编…...
HStream Console、HStreamDB 0.14 发布
近两个月,HStreamDB 相继发布了 0.13 和 0.14 版本,包含多项已知问题修复。同时,我们也发布了全新的 HStream Console 组件,为 HStreamDB 带来了简洁友好的图形化管理界面,将帮助用户更轻松地使用和管理 HStreamDB. H…...
参考文献怎么查找,去哪里查找?一篇文章讲明白这些问题
在我们撰写论文查找参考文献时,往往不知道从哪里入手,本文小编就针对下面这三个方面给大家详细讲解下: 一、查找参考文献方法 二、参考文献资料查找网站 三、参考文献格式规范 一、查找参考文献方法: 1、知网全球最大的中文数据…...
docker-compose+HAProxy+Keepalived搭建高可用 RabbitMQ 集群
基础环境准备 系统环境:Centos7.6 Docker version: 1.13.1, build 7d71120/1.13.1 Docker Compose version: v2.2.2 三个节点: 10.10.11.79 (这一台做rabbitmq集群根节点) 10.10.11.80 (这台做haproxyke…...
自动化框架如何搭建?让10年阿里自动化测试老司机帮你搞定!自动化测试脚本怎么写?
一、何为框架?何为自动化测试框架? 无论是日常技术交流,还是在自动化测试实践中,经常会听到一个词叫:框架。之前对“框架”这个词知其然不知其所以然。现在看过一些资料以及加上我自己的一些实践有了我自己的一些看法…...
剑指 Offer 15. 二进制中1的个数
剑指 Offer 15. 二进制中1的个数 难度:easy\color{Green}{easy}easy 题目描述 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为 汉明重量).…...
CHAPTER 3 磁盘管理
磁盘管理1 磁盘管理1.1 块设备信息(lsblk)1.2 挂载硬盘1.2.1 挂载单个硬盘(mkfs、mount)1.2.2 磁盘分区工具(fdisk)1.2.3 创建分区1.2.4 相关命令1. df2. partprobe3. mkfs1.3 逻辑卷管理器(LVM)1. 涉及概念2. 使用LVM流程1.4 磁盘检测及修复(fsck)1 磁盘…...
MS python学习(7)
Managing Keys - dotenv Managing keys usage of .env module 项目地址:https://github.com/theskumar/python-dotenv Reads the key,value pair from .env and adds them to environment variable. 将key明文(hard code)形式写在script里…...
工业物联网“杀手级”应用—预测性维护
一、预测性维护的必要性 随着新一轮科技革命和产业变革的兴起,工业物联网、大数据、人工智能等技术正与经济社会各领域加速渗透融合。由于市场竞争对精细化成本管控的要求,设备的重要性越来越凸显,设备的维护对策也必然从响应式维护…...
Java代码弱点与修复之——Explicit null dereferenced(显式空间接引用)
弱点描述 Explicit null dereferenced, 显示空间接引用。是 Coverity 静态代码分析工具检测到的一种中风险缺陷。这种缺陷通常发生在尝试使用空指针引用调用对象上的方法或访问属性时。 Explicit null dereferenced的缺陷可能会导致程序崩溃或产生不可预测的结果。 在Java语…...
一元导数与多元求导数总结
前序:文章结构 1.一元导数 ①一般函数求导 因为太简单的原因,事实上一般函数求导不会单独出现,大多数都是出现在各种特殊的求导过程中。只要掌握16个基本求导公式没问题。 ②复合函数求导(主要链式法则) 这种一般是…...
通过堆栈分析深拷贝、浅拷贝、赋值的差异
前言数据类型分为:基本数据类型String、Number、Boolean、Null、Undefined、Symbol对象数据类型Object、Array基本数据类型的特点:直接存储在栈(stack)中的数据引用数据类型的特点:存储的是该对象在栈中引用,真实的数据存放在堆内…...
网络割接概述
网络割接概述割接背景企业网络的变化割接概述割接难点割接的操作流程情景模拟及解决方案常见的割接场景割接背景 随着企业业务的不断发展,企业网络为了适应业务的需求不断的改造和优化。无论是硬件的扩容、软件的升级、配置的变更,凡是影响现网运行业务…...
开放开源开先河(下)
目录 1.唯一性定义品牌 2.打造爆款塑造品牌 3.生态系统传播品牌 打造爆款塑造品牌 目前全球100多个开源基金会大部分都在美国,已成功孵化了800多个项目。而开放原子开源基金会现有136家捐赠单位,2020年9月,百度将区块链项目超级链࿰…...
maven的学习
为啥要用maven 1、不用认为添加jar包所依赖的其他jar包 2、能在本地仓库只保留一份jar包,避免了多个工程使用相同jar包,需要重复导入的问题,减少冗余 3、能够规范添加jar包,在下载需要的jar包时有多种方法,但是不能保…...
从前端到后端全面解析文件上传
从前端到后端全面解析文件上传1.前端准备(vueelement-ui)2.后端准备(SpringBootminiomysql)2.1解决跨域2.2配置minio与mysql2.3controller层2.4service层1.前端准备(vueelement-ui) <!DOCTYPE html> <html lang"en"> <head><meta charset"…...
全网火爆,软件测试面试题大全,接口测试题+回答 (18k+的offer)
目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 面试测试工程师的时…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
