1.9 重叠因子:中点价格(MidPoint over period, MIDPOINT)概念与Python实战

news/2025/2/25 8:24:02

目录

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

0. 本栏目因子汇总表

【量海航行】

1. 因子简述

中点价格(MidPoint over period, MIDPOINT)是一种简单但有效的技术指标,它计算指定周期内最高价和最低价的中间值。这种方法可以帮助平滑价格波动,提供一个更稳定的价格参考水平。MIDPOINT通过消除极端价格的影响,反映了一段时期内的价格中枢。

2. 因子计算逻辑

MIDPOINT的计算公式如下:

M I D P O I N T t = m a x ( C l o s e t − n + 1 : t ) + m i n ( C l o s e t − n + 1 : t ) 2 M I D P O I N T f a c t o r = C l o s e − M I D P O I N T σ n ( C l o s e ) \begin{align*} MIDPOINT_t &= \frac{max(Close_{t-n+1:t}) + min(Close_{t-n+1:t})}{2} \\ MIDPOINT_{factor} &= \frac{Close - MIDPOINT}{\sigma_n(Close)} \end{align*} MIDPOINTtMIDPOINTfactor=2max(Closetn+1:t)+min(Closetn+1:t)=σn(Close)CloseMIDPOINT

其中:

  • n为计算周期
  • Close_{t-n+1:t}表示从t-n+1到t时刻的收盘价序列
  • σ_n(Close)为n周期收盘价的滚动标准差

3. 因子应用场景

  1. 价格中枢判断:

    • 识别价格运行的中心位置
    • 判断价格偏离程度
  2. 趋势跟踪:

    • 价格上穿MIDPOINT,看多信号
    • 价格下穿MIDPOINT,看空信号
  3. 支撑阻力参考:

    • MIDPOINT作为动态支撑位
    • MIDPOINT作为动态阻力位
  4. 波动分析:

    • 价格与MIDPOINT的距离反映波动强度
    • 用于判断市场情绪变化

4. 因子优缺点

优点:

  1. 计算简单:实现容易,计算量小
  2. 直观明确:易于理解和使用
  3. 平滑特性:能有效过滤价格噪音
  4. 稳定性好:不易受极端值影响

缺点:

  1. 滞后性强:作为回溯性指标存在延迟
  2. 信号单一:仅提供价格中枢信息
  3. 参数依赖:周期选择影响指标效果
  4. 适用性限:在剧烈波动市场效果欠佳

5. 因子代码实现

python">def MIDPOINT_factor(df, n=14):
    """
    计算中点价格(MIDPOINT)因子
    
    参数:
    df (DataFrame): 输入数据
        - code: 证券代码,如'600036.SH'
        - date: 日期,格式为'YYYY-MM-DD'
        - close: 收盘价
    n (int): 计算周期,默认14
    
    返回:
    DataFrame: 包含原有列和MIDPOINT因子值,理论取值范围(-∞,+∞),实际大多在[-3,3]之间
    注意:
        1. 返回数据包含所有输入列
        2. 新增MIDPOINT列为因子值
        3. date列保持原有字符串格式'YYYY-MM-DD'
        4. 数据将按code分组、date倒序排列
    """
    import numpy as np
    import 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_midpoint(group):
        # 计算n周期内的最高价和最低价的中点
        close = group['close'].values
        midpoint = np.zeros_like(close)
        for i in range(len(close)):
            if i < n:
                window = close[:i+1]
            else:
                window = close[i-n+1:i+1]
            midpoint[i] = (np.max(window) + np.min(window)) / 2
        
        # 计算n周期滚动标准差
        rolling_std = group['close'].rolling(window=n).std()
        
        # 计算因子值:使用滚动标准差标准化的价格偏离度
        # 处理标准差为0的情况
        group['MIDPOINT'] = np.where(
            rolling_std != 0,
            (group['close'] - midpoint) / rolling_std,
            0
        )
        return group
    
    df_copy = df_copy.groupby('code', group_keys=False).apply(calculate_midpoint)
    
    # 按照最终要求重新排序并重置索引
    df_copy = df_copy.sort_values(['code', 'date'], ascending=[True, False]).reset_index(drop=True)
    
    return df_copy

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

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

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

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

7. 因子函数参数建议

  1. n (计算周期):
    • 默认值:14
    • 建议范围:[5, 30]
    • 参数说明:决定中点价格的计算范围和平滑程度
    • 选择建议:
      • 日线数据建议使用:
        • 短期:5-10天
        • 中期:10-20天
        • 长期:20-30天
      • 小时线数据建议使用8-16
      • 分钟线数据建议使用5-10
      • 高波动市场使用较短周期
      • 低波动市场使用较长周期

http://www.niftyadmin.cn/n/5865249.html

相关文章

前端性能优化面试题及参考答案

如何通过合并文件减少 HTTP 请求次数&#xff1f; 在前端开发中&#xff0c;减少 HTTP 请求次数是优化页面性能的重要手段之一&#xff0c;通过合并文件来实现这一目标主要有以下几种方式&#xff1a; 合并 CSS 文件&#xff1a;将多个 CSS 文件合并为一个&#xff0c;可以使用…

【OMCI实践】ONT上线过程的omci消息(五)

引言 在前四篇文章中&#xff0c;主要介绍了ONT上线过程的OMCI交互的第一、二、三个阶段omci消息&#xff0c;本篇介绍第四个阶段&#xff0c;OLT下发配置到ONT。前三个阶段&#xff0c;每个厂商OLT和ONT都遵循相同标准&#xff0c;OMCI的交换过程大同小异。但第四个阶段&…

Mac 中与PyCharm 中的单步调试快捷键

1. 在Mac上安装了pycharm&#xff0c;调试程序的时候常用的单步调试功能&#xff0c;pycharm默认的是F8&#xff0c;但按下F8&#xff0c;iTunes会自动弹出&#xff0c;必须使用FnF8才能有效&#xff0c;但键盘上Fn与F8的距离太远了&#xff0c;十分不方便&#xff0c;所以现在…

15.1 智能销售顾问系统架构与业务价值解析:AI 如何重塑销售流程

智能销售顾问系统架构与业务价值解析:AI 如何重塑销售流程 关键词:AI 销售顾问、RAG 技术应用、知识库驱动销售、业务流程优化、客户转化率提升 1. 传统销售流程痛点与智能系统革新路径 1.1 传统销售流程瓶颈分析 #mermaid-svg-k1ZI1U7adIp8z2nc {font-family:"trebuc…

2.2 STM32F103C8T6最小系统板的四种有关固件的开发方式

2.2.1 四种有关固件的开发方式 四种有关于固件的开发方式从时间线由远及近分别是&#xff1a; 寄存器开发 标准外设驱动库开发 硬件抽象层库开发 底层库开发 四种开发方式各有优缺点&#xff0c;可以参考ST官方的测试与说明。 1.寄存器开发 寄存器编程对于从51等等芯片过渡过来…

赛前启航 | 三场重磅直播集结,予力微软 AI 开发者挑战赛!

随着微软 AI 开发者挑战赛的火热进行&#xff0c;赛前指导直播已成为众多参赛者获取技术干货、灵感碰撞和实战技巧的绝佳平台。继前两期的精彩呈现&#xff0c;第三、四、五期直播即将接连登场&#xff0c;为开发者们带来更加深入的 AI 技术剖析和项目实战指引。无论你是想进一…

设计模式-解释器模式、装饰器模式

解释器模式 定义 给分析对象定义一个语言&#xff0c;并定义语言的文法表示&#xff0c;再设计一个解释器来解释语言中的句子。也就是说&#xff0c;用编译语言的方式来分析应用中的实例。这种模式实现了文法表达式处理的接口&#xff0c;该接口解释一个特定的上下文。 类图 …

网络安全入门|从防护到溯源:HTTP慢速攻击的深度对抗

一、深度对抗中的四大核心问题 在HTTP慢速攻击的防护与溯源过程中,以下问题尤为突出: 检测精度不足 问题:传统基于阈值(如连接数、请求速率)的检测易被攻击者绕过(如分布式IP、动态调整攻击速率)。 案例:攻击者使用1000个代理IP,每个IP仅建立1个连接并发送1字节/分钟…