1.13 重叠因子:简单移动平均线(Simple Moving Average, SMA)概念与Python实战

devtools/2025/2/25 10:06:43/

目录

      • 0. 本栏目因子汇总表
      • 1. 因子简述
      • 2. 因子计算逻辑
      • 3. 因子应用场景
      • 4. 因子优缺点
      • 5. 因子代码实现
      • 6. 因子取值范围及其含义
      • 7. 因子函数参数建议

0. 本栏目因子汇总表

【量海航行】

1. 因子简述

简单移动平均线(Simple Moving Average, SMA)是最基础且应用最广泛的技术指标之一。它通过计算一定周期内价格的算术平均值来平滑价格波动,帮助识别价格趋势。SMA的简单性和直观性使其成为技术分析中不可或缺的工具。

2. 因子计算逻辑

SMA的计算公式如下:

S M A t = 1 n ∑ i = 0 n − 1 C l o s e t − i S M A f a c t o r = C l o s e − S M A σ n ( C l o s e ) \begin{align*} SMA_t &= \frac{1}{n} \sum_{i=0}^{n-1} Close_{t-i} \\ SMA_{factor} &= \frac{Close - SMA}{\sigma_n(Close)} \end{align*} SMAtSMAfactor=n1i=0n1Closeti=σn(Close)CloseSMA

其中:

  • n为移动平均的周期
  • Close_{t-i}为t-i时刻的收盘价
  • σ_n(Close)为n周期收盘价的滚动标准差

3. 因子应用场景

  1. 趋势判断:

    • 价格上穿SMA,上升趋势确立
    • 价格下穿SMA,下降趋势确立
  2. 支撑阻力:

    • SMA作为动态支撑位
    • SMA作为动态阻力位
  3. 均线系统:

    • 与其他周期SMA组合
    • 构建多重均线系统
  4. 市场状态:

    • 价格与SMA的关系反映市场状态
    • 用于判断趋势强度

4. 因子优缺点

优点:

  1. 简单直观:计算方法易于理解
  2. 应用广泛:适用于各类市场
  3. 稳定可靠:不易受异常值影响
  4. 参考价值:提供重要的技术参考位

缺点:

  1. 滞后性强:对价格变化反应较慢
  2. 权重均等:忽视了时间权重
  3. 单一维度:仅考虑收盘价
  4. 虚假信号:震荡市场易生成假信号

5. 因子代码实现

python">def SMA_factor(df, n=20):"""计算简单移动平均线(SMA)因子参数:df (DataFrame): 输入数据- code: 证券代码,如'600036.SH'- date: 日期,格式为'YYYY-MM-DD'- close: 收盘价n (int): 移动平均周期,默认20返回:DataFrame: 包含原有列和SMA因子值,理论取值范围(-∞,+∞),实际大多在[-3,3]之间注意:1. 返回数据包含所有输入列2. 新增SMA列为因子值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_sma(group):# 计算简单移动平均close = group['close'].valuessma = np.zeros_like(close)for i in range(len(close)):if i < n:sma[i] = np.mean(close[:i+1])else:sma[i] = np.mean(close[i-n+1:i+1])# 计算n周期滚动标准差rolling_std = group['close'].rolling(window=n).std()# 计算因子值:使用滚动标准差标准化的价格偏离度# 处理标准差为0的情况group['SMA'] = np.where(rolling_std != 0,(group['close'] - sma) / rolling_std,0)return groupdf_copy = df_copy.groupby('code', group_keys=False).apply(calculate_sma)# 按照最终要求重新排序并重置索引df_copy = df_copy.sort_values(['code', 'date'], ascending=[True, False]).reset_index(drop=True)return df_copy

测试数据:
在这里插入图片描述

6. 因子取值范围及其含义

SMA因子的取值范围理论上是(-∞,+∞),但实际上大多数值会落在[-3,3]区间内:

  • 取值 > 2:表示价格显著高于均线(超过2个标准差),强烈超买信号
  • 取值在(1,2]之间:表示价格高于均线一个标准差以上,偏多信号
  • 取值在[-1,1]之间:表示价格在均线一个标准差范围内波动,震荡区间
  • 取值在[-2,-1)之间:表示价格低于均线一个标准差以上,偏空信号
  • 取值 < -2:表示价格显著低于均线(超过2个标准差),强烈超卖信号

7. 因子函数参数建议

  1. n (移动平均周期):
    • 默认值:20
    • 建议范围:[5, 120]
    • 参数说明:决定移动平均的平滑程度
    • 选择建议:
      • 短期:5-10天,用于日内交易
      • 中期:20-60天,用于中期趋势
      • 长期:120天以上,用于长期趋势
      • 常用周期:
        • 5日(一周)
        • 20日(一月)
        • 60日(一季)
        • 120日(半年)
        • 250日(一年)

选择建议:

  1. 不同市场特点:

    • 股票:20日、60日最常用
    • 期货:5日、10日更敏感
    • 外汇:10日、20日较合适
  2. 不同交易周期:

    • 日线:参考上述周期
    • 小时线:使用较小周期(5-20)
    • 分钟线:使用更小周期(3-10)
  3. 不同交易风格:

    • 短线:偏好短周期
    • 波段:使用中周期
    • 长线:采用长周期

http://www.ppmy.cn/devtools/161561.html

相关文章

Android TextView 使用.9图片文字不展示

参考文章 Android的TextView设置padding无效。 实现如上图效果的时候,选择框使用了.9,代码如下: LinearLayout.LayoutParams layoutParams=new LinearLayout.LayoutParams(0,

硬件加速与技术创新双轮驱动:DeepSeek和ChatGPT性能进阶的未来蓝图

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;Linux网络编程 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 ​ Linux网络编程笔记&#xff1a; https://blog.cs…

Prometheus中ServiceMonitor 配置示例

以下是一个完整的 ServiceMonitor 配置示例&#xff08;用于 Prometheus Operator&#xff09;&#xff0c;用于监控 Kubernetes 中的服务&#xff08;如 Flink JobManager/TaskManager&#xff09;&#xff1a; 1. ServiceMonitor 配置示例 apiVersion: monitoring.coreos.co…

Python在大数据AI领域的优势分析【为什么使用Python开发】

大数据分析、大模型和 AI 领域主要采用 Python&#xff0c;并非其他语言完全不能使用&#xff0c;而是 Python 在以下方面形成了显著优势&#xff0c;形成了一个正反馈循环的生态系统。我们可以从多个角度分析&#xff1a; 1. 语法简洁&#xff1a;开发效率优先 特点&#xff…

知识管理系统实施优化路径

内容概要 现代知识管理系统的实施优化路径呈现出多维整合特征&#xff0c;其核心在于系统集成与组织适配的动态平衡。从技术架构层面&#xff0c;系统需突破信息孤岛桎梏&#xff0c;通过语义网络优化实现非结构化数据的智能解析&#xff0c;例如运用Baklib这类支持API接口的知…

【MySQL】表的增删查改(CRUD)(上)

个人主页&#xff1a;♡喜欢做梦 欢迎 &#x1f44d;点赞 ➕关注 ❤️收藏 &#x1f4ac;评论 CRUD&#xff1a;Create&#xff08;新增数据&#xff09;、Retrieve&#xff08;查询数据&#xff09;、Update&#xff08;修改数据&#xff09;、Delete&#xff08;修改数据…

【Kafka系列】Kafka 消息传递保障机制

Kafka 消息传递保障机制 在现代分布式系统中&#xff0c;消息队列扮演着至关重要的角色。Kafka 作为一款高性能、高吞吐量的消息队列系统&#xff0c;提供了多种消息传递保障机制来满足不同的业务需求。本文将详细介绍 Kafka 的三种主要消息传递保障机制&#xff1a;最多一次&a…

智能交通系统(Intelligent Transportation Systems):智慧城市中的交通革新

智能交通系统&#xff08;Intelligent Transportation Systems, ITS&#xff09;是利用先进的信息技术、通信技术、传感技术、计算机技术以及自动化技术等&#xff0c;来提升交通系统效率和安全性的一种交通管理方式。ITS通过收集和分析交通数据&#xff0c;智能化地调度、控制…