1.14 重叠因子:TRIMA三角移动平均线(Triangular Moving Average, TRIMA)概念与Python实战
目录
- 0. 本栏目因子汇总表
- 1. 因子简述
- 2. 因子计算逻辑
- 3. 因子应用场景
- 4. 因子优缺点
- 5. 因子代码实现
- 6. 因子取值范围及其含义
- 7. 因子函数参数建议
0. 本栏目因子汇总表
【量海航行】
1. 因子简述
三角移动平均线(Triangular Moving Average, TRIMA)是一种特殊的加权移动平均线。它通过对价格数据进行两次简单移动平均计算,自然形成三角形权重分布,使得中间数据的权重最大,两端数据的权重逐渐减小。这种权重分布使TRIMA具有更好的平滑效果,同时保持对中期趋势的敏感性。
2. 因子计算逻辑
TRIMA的计算公式如下:
N 1 = ⌊ ( n + 1 ) / 2 ⌋ S M A 1 = 1 N 1 ∑ i = 0 N 1 − 1 C l o s e t − i T R I M A = 1 N 1 ∑ i = 0 N 1 − 1 S M A 1 , t − i T R I M A f a c t o r = C l o s e − T R I M A σ n ( C l o s e ) \begin{align*} N_1 &= \lfloor (n + 1) / 2 \rfloor \\ SMA_1 &= \frac{1}{N_1} \sum_{i=0}^{N_1-1} Close_{t-i} \\ TRIMA &= \frac{1}{N_1} \sum_{i=0}^{N_1-1} SMA_{1,t-i} \\ TRIMA_{factor} &= \frac{Close - TRIMA}{\sigma_n(Close)} \end{align*} N1SMA1TRIMATRIMAfactor=⌊(n+1)/2⌋=N11i=0∑N1−1Closet−i=N11i=0∑N1−1SMA1,t−i=σn(Close)Close−TRIMA
其中:
- n为移动平均周期
- N_1为第一次SMA的周期
- SMA为简单移动平均
- σ_n(Close)为n周期收盘价的滚动标准差
- ⌊x⌋表示向下取整
3. 因子应用场景
-
趋势识别:
- 价格上穿TRIMA,上升趋势确立
- 价格下穿TRIMA,下降趋势确立
-
中期趋势:
- TRIMA走向反映中期趋势
- 用于中期趋势交易
-
支撑阻力:
- TRIMA作为动态支撑位
- TRIMA作为动态阻力位
-
市场周期:
- 判断市场所处周期
- 识别趋势转折点
4. 因子优缺点
优点:
- 平滑性强:三角形权重分布降低噪音
- 稳定可靠:不易受极端值影响
- 中庸特性:平衡了滞后性和敏感度
- 易于理解:计算逻辑直观简单
缺点:
- 滞后性大:双重平均增加了滞后
- 灵敏度低:对短期波动反应迟钝
- 信号延迟:趋势转折信号较晚
- 震荡不适:横盘市场效果欠佳
5. 因子代码实现
def TRIMA_factor(df, n=20):"""计算三角移动平均线(TRIMA)因子参数:df (DataFrame): 输入数据- code: 证券代码,如'600036.SH'- date: 日期,格式为'YYYY-MM-DD'- close: 收盘价n (int): 移动平均周期,默认20返回:DataFrame: 包含原有列和TRIMA因子值,理论取值范围(-∞,+∞),实际大多在[-3,3]之间注意:1. 返回数据包含所有输入列2. 新增TRIMA列为因子值3. date列保持原有字符串格式'YYYY-MM-DD'4. 数据将按code分组、date倒序排列"""import numpy as npimport pandas as pd# 创建副本避免修改原始数据df_copy = df.copy()# 检查code格式valid_codes = df_copy['code'].str.match(r'^(?:\d{6}\.(SH|SZ)|[A-Z]+/[A-Z]+|\w+\.(IB|CFE|US))$')if not valid_codes.all():raise ValueError("Invalid code format found")# 检查date格式valid_dates = df_copy['date'].str.match(r'^\d{4}-\d{2}-\d{2}$')if not valid_dates.all():raise ValueError("Invalid date format found, expected 'YYYY-MM-DD'")# 排序(使用字符串比较)df_copy = df_copy.sort_values(['code', 'date'], ascending=[True, False])# 按code分组计算def calculate_trima(group):close = group['close'].values# 计算三角权重n1 = (n + 1) // 2weights = np.array([min(i + 1, n - i) for i in range(n)])weights = weights / weights.sum()# 计算TRIMAtrima = np.zeros_like(close)for i in range(len(close)):if i < n:window = close[:i+1]w = weights[-(i+1):]w = w / w.sum()trima[i] = np.sum(window * w)else:trima[i] = np.sum(close[i-n+1:i+1] * weights)# 计算n周期滚动标准差rolling_std = group['close'].rolling(window=n).std()# 计算因子值:使用滚动标准差标准化的价格偏离度# 处理标准差为0的情况group['TRIMA'] = np.where(rolling_std != 0,(group['close'] - trima) / rolling_std,0)return groupdf_copy = df_copy.groupby('code', group_keys=False).apply(calculate_trima)# 按照最终要求重新排序并重置索引df_copy = df_copy.sort_values(['code', 'date'], ascending=[True, False]).reset_index(drop=True)return df_copy
测试数据:
6. 因子取值范围及其含义
TRIMA因子的取值范围理论上是(-∞,+∞),但实际上大多数值会落在[-3,3]区间内:
- 取值 > 2:表示价格显著高于TRIMA(超过2个标准差),强烈超买信号
- 取值在(1,2]之间:表示价格高于TRIMA一个标准差以上,偏多信号
- 取值在[-1,1]之间:表示价格在TRIMA一个标准差范围内波动,震荡区间
- 取值在[-2,-1)之间:表示价格低于TRIMA一个标准差以上,偏空信号
- 取值 < -2:表示价格显著低于TRIMA(超过2个标准差),强烈超卖信号
7. 因子函数参数建议
- n (移动平均周期):
- 默认值:20
- 建议范围:[15, 50]
- 参数说明:决定移动平均的平滑程度
- 选择建议:
- 日线数据建议使用:
- 中期:20-30天
- 长期:40-50天
- 小时线数据建议使用15-25
- 分钟线数据建议使用10-20
- 高波动市场使用较长周期
- 低波动市场可用较短周期
- 日线数据建议使用:
相关文章:

1.14 重叠因子:TRIMA三角移动平均线(Triangular Moving Average, TRIMA)概念与Python实战
目录 0. 本栏目因子汇总表1. 因子简述2. 因子计算逻辑3. 因子应用场景4. 因子优缺点5. 因子代码实现6. 因子取值范围及其含义7. 因子函数参数建议 0. 本栏目因子汇总表 【量海航行】 1. 因子简述 三角移动平均线(Triangular Moving Average, TRIMA)是一种特殊的加权移动平均…...

【tplink】校园网接路由器如何单独登录自己的账号,wan-lan和lan-lan区别
老式路由器TPLINK,接入校园网后一人登录,所有人都能通过连接此路由器上网,无法解决遂上网搜索,无果,幸而偶然看到一个帖子说要把信号源网线接入路由器lan口,开启新世界。 一、wan-lan,lan-lan区…...

PC 端连接安卓手机恢复各类数据:安装、操作步骤与实用指南
软件介绍 这款用于恢复安卓手机数据的软件,虽运行在 PC 端,却专为安卓手机数据恢复打造,使用时得用数据线把手机和电脑连接起来。它的功能相当强大,能帮你找回安卓手机里已删除的短信、联系人、通话记录、文档,还有照…...
【折线图 Line】——1
🌟 解锁数据可视化的魔法钥匙 —— pyecharts实战指南 🌟 在这个数据为王的时代,每一次点击、每一次交易、每一份报告背后都隐藏着无尽的故事与洞察。但你是否曾苦恼于如何将这些冰冷的数据转化为直观、吸引人的视觉盛宴? 🔥 欢迎来到《pyecharts图形绘制大师班》 �…...

SpringBoot 整合mongoDB并自定义连接池,实现多数据源配置
要想在同一个springboot项目中使用多个数据源,最主要是每个数据源都有自己的mongoTemplate和MongoDbFactory。mongoTemplate和MongoDbFactory是负责对数据源进行交互的并管理链接的。 spring提供了一个注解EnableMongoRepositories 用来注释在某些路径下的MongoRepo…...
TCP/IP的分层结构、各层的典型协议,以及与ISO七层模型的差别
1. TCP/IP的分层结构 TCP/IP模型是一个四层模型,主要用于网络通信的设计和实现。它的分层结构如下: (1) 应用层(Application Layer) 功能:提供应用程序之间的通信服务,处理特定的应用细节。 典型协议&am…...

FreeRTOS-中断管理
实验目的 创建一个队列及一个任务,按下按键 KEY1 触发中断,在中断服务函数里向队列里发送数据,任务则阻塞接 收队列数据。 实验代码 实验结果 这样就实现了,使用中断往队列的发送信息,用任务阻塞接收信息...

ShenNiusModularity项目源码学习(15:ShenNius.Admin.API项目分析)
ShenNius.Admin.Mvc项目是MVC模式的入口,ShenNius.Admin.Hosting项目是前后端分离模式的后台服务入口,这两个项目都依赖ShenNius.Admin.API项目,前者使用ShenniusAdminApiModule类注册服务及配置管道,而后者的webapi实现都在ShenN…...
Express + MongoDB 实现文件上传
使用 multer 中间件来处理文件上传,同时将文件的元数据存储到 MongoDB 中。 一、安装依赖 npm install multer 二、核心代码 // 定义文件模型const fileSchema new mongoose.Schema({originalname: String,mimetype: String,size: Number,path: String,});cons…...

计算机毕业设计SpringBoot+Vue.js作业管理系统(源码+文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...

Odoo免费开源CRM技术实战:从商机线索关联转化为售后工单的应用
文 / 开源智造 Odoo金牌服务 Odoo:功能强大且免费开源的CRM Odoo 引入了一种高效的客户支持管理方式,即将 CRM 线索转换为服务台工单。此功能确保销售和支持团队能够无缝协作,从而提升客户满意度并缩短问题解决时间。通过整合 CRM 模块与服…...

2025年如何实现安卓、iOS、鸿蒙跨平台开发
2025年如何实现安卓、iOS、鸿蒙跨平台开发 文章目录 2025年如何实现安卓、iOS、鸿蒙跨平台开发1. 使用统一开发框架2. 华为官方工具链支持3. 代码适配策略4. 生态兼容性处理5. 性能与体验优化总结:方案选择建议 本文首发地址 https://h89.cn/archives/324.html 最新…...

萌新学 Python 之 os 模块
os 模块:主要提供程序与操作系统进行交互的接口 先导入模块:import os 1. os.listdir(),获取当前目录的文件,返回到列表中 2. os.mkdir(文件目录, mode 0o777),创建目录,777 表示读写程序 在当前目录下…...
IPoIB源码深度解析:如何基于TCP/IP协议栈实现高性能InfiniBand通信
一、IPoIB的核心设计理念 IPoIB(IP over InfiniBand)是一种在InfiniBand网络上承载IP流量的技术,其核心目标是在不修改上层应用的前提下,利用InfiniBand的高带宽和低延迟特性。与自定义协议栈不同,IPoIB通过深度集成到Linux内核TCP/IP协议栈中,将InfiniBand设备抽象为标…...

本地部署阿里万象2.1文生视频模型(Wan2.1-T2V)完全指南
在生成式AI技术爆发式发展的今天,阿里云开源的万象2.1(Wan2.1)视频生成模型,为创作者提供了从文字/图像到高清视频的一站式解决方案。本文针对消费级显卡用户,以RTX 4060 Ti 16G为例,详解本地部署全流程与性能调优方案,涵盖环境配置、多模型选择策略、显存优化技巧及实战…...
information_schema.processlist 表详解
information_schema.processlist 表(或 SHOW PROCESSLIST; 命令)用于查看 MySQL 当前所有的连接进程,帮助管理员监控数据库活动并排查性能问题。以下是该表的字段及其具体含义: 🔹 information_schema.processlist 字段…...

P8623 [蓝桥杯 2015 省 B] 移动距离
P8623 [蓝桥杯 2015 省 B] 移动距离 题目 解析代码 题目 解析 完了完了T.T,这个题我做了20分钟 解题思路就是分组,但是编写的时候最好把边界值过一遍【题目提供的测试数据肯定是最好通过的数据,需要你自己过一遍特殊数据,然后再…...
2025年Linux主力系统选择指南:基于最新生态的深度解析(附2025年发行版对比速查表)
Linux发行版生态在2025年持续演进,既有经典系统的迭代升级,也有新兴项目的崛起。本文结合最新行业动态,从个人用户到企业场景,梳理主力系统选择策略,助你找到最适合的Linux发行版。 一、新手友好型:平滑过渡…...

[密码学实战]Java实现国密(SM2)密钥协商详解:原理、代码与实践
一、代码运行结果 二、国密算法与密钥协商背景 2.1 什么是国密算法? 国密算法是由中国国家密码管理局制定的商用密码标准,包括: SM2:椭圆曲线公钥密码算法(非对称加密/签名/密钥协商)SM3:密码杂凑算法(哈希)SM4:分组密码算法(对称加密)2.2 密钥协商的意义 在安全…...
015--基于STM32F103ZET6的智能风扇设计
1.实物视频演示 智能风扇演示视频 2.程序代码讲解 STM32F103ZET6智能风扇_哔哩哔哩_bilibili 3源代码获取 https://download.csdn.net/download/weixin_41011452/90440545...

CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...

【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...

免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

Razor编程中@Html的方法使用大全
文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...

R 语言科研绘图第 55 期 --- 网络图-聚类
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...