技术指标详解)
OverlapMIDPOINT中值通道线技术指标详解一、MIDPOINT的定义MIDPOINTMidpoint中值通道线是一种基础的趋势跟踪指标在指定周期内分别找出最高价的最高值和最低价的最低值然后取两者的平均值。核心设计理念MIDPOINT的本质是价格通道的中心线。它不直接对价格进行平滑如移动平均线那样而是追踪一段时间内价格区间的“中心”。这一中心值在趋势行情中可作为动态的参考线。MIDPOINT的核心特征特征说明理论基础价格区间中值统计指标类型趋势跟踪/重叠指标核心原理(滚动窗口内最高价的最大值 滚动窗口内最低价的最小值) / 2默认参数length2或10计算方式滚动窗口统计核心优势计算简洁能快速反映价格区间变化二、MIDPOINT的计算方法1. 核心计算公式对于长度为nnn的滚动窗口MIDPOINT 的计算公式为MIDPOINTHighest PriceLowest Price2 \mathrm{MIDPOINT} \frac{\text{Highest Price} \text{Lowest Price}}{2}MIDPOINT2Highest PriceLowest Price其中Highest Price过去nnn个周期内的最高价的最大值Rolling High MaxLowest Price过去nnn个周期内的最低价的最小值Rolling Low Min2. 详细计算步骤第一步确定滚动窗口设定计算周期nnn如n10n10n10对每个时间点取过去nnn个周期的价格数据。第二步查找区间极值在当前窗口中查找KaTeX parse error: Got function \max with no arguments as subscript at position 3: H_\̲m̲a̲x̲ ̲ \max(\mathrm…KaTeX parse error: Got function \min with no arguments as subscript at position 3: L_\̲m̲i̲n̲ ̲ \min(\mathrm…第三步计算中值KaTeX parse error: Got function \max with no arguments as subscript at position 32: …T}_t \frac{H_\̲m̲a̲x̲ ̲ L_\min}{2}3. pandas_ta中的实现在pandas_ta库中midpoint()函数位于overlap模块中。默认使用收盘价作为输入价格length参数默认为2。函数内部大致等价于df[MID](df[close].rolling(length).max()df[close].rolling(length).min())/24. 计算示例假设窗口长度 n5n5收盘价序列如下时间收盘价窗口内最高价窗口内最低价MIDPOINTt-4100———t-3102———t-2105———t-1103———t108108100104计算过程窗口内最高价 max(100, 102, 105, 103, 108) 108窗口内最低价 min(100, 102, 105, 103, 108) 100MIDPOINT (108 100) / 2 1045. 参数说明参数默认值说明length10部分平台默认2计算窗口周期offset0结果偏移周期数三、MIDPOINT的使用方法1. 价格中心参考线MIDPOINT最基础的用法是作为价格波动的中心参考线价格与MIDPOINT的关系市场含义操作倾向价格远高于MIDPOINT价格接近区间上沿多头强势警惕超买关注阻力位价格接近MIDPOINT价格处于区间中心观察趋势方向价格远低于MIDPOINT价格接近区间下沿空头强势关注支撑位可能出现反弹2. 动态支撑与阻力MIDPOINT结合区间极值可形成动态通道上轨 滚动最高价最大值可作为动态阻力中轨 MIDPOINT中心线下轨 滚动最低价最小值可作为动态支撑3. 趋势方向判断MIDPOINT的斜率方向可辅助判断趋势MIDPOINT状态趋势含义操作倾向MIDPOINT持续上升价格区间中心上移上升趋势偏多思维MIDPOINT持续下降价格区间中心下移下降趋势偏空思维MIDPOINT走平区间震荡高抛低吸4. 注意事项与局限性使用MIDPOINT前需了解以下要点局限性说明本质仍是滞后指标基于历史窗口内的最高/最低值对价格变化反应滞后窗口长度敏感短窗口更灵敏但噪声多长窗口更平滑但滞后明显适合配合其他指标MIDPOINT作为单一指标信号有限建议与均线、通道指标配合使用四、使用pandas_ta计算MIDPOINT1. 函数参数pandas_ta.overlap.midpoint(close,lengthNone,talibNone,offsetNone,**kwargs)参数详解参数类型默认值说明closepd.Series必需收盘价序列lengthint10部分平台默认2计算窗口周期talibboolTrue若安装TA-Lib则使用其版本offsetint0结果偏移周期数2. 示例代码importpandasaspdimportpandas_taastaimportnumpyasnpimportmatplotlib.pyplotasplt# 第一步准备数据 np.random.seed(42)datespd.date_range(start2023-01-01,end2024-12-31,freqD)nlen(dates)# 生成带趋势和周期波动的价格序列trendnp.linspace(0,45,n)cyclenp.sin(np.linspace(0,6*np.pi,n))*15noisenp.random.randn(n)*3price_series100trendcyclenoise# 添加趋势变化区间price_seriesprice_series.astype(float)foriinrange(300,450):price_series[i]price_series[300](i-300)*0.2# 强势上涨段foriinrange(450,600):price_series[i]price_series[450]-(i-450)*0.15# 强势下跌段dfpd.DataFrame(indexdates[:n])df[close]price_series[:n]df[high]df[close]np.abs(np.random.randn(n))*21df[low]df[close]-np.abs(np.random.randn(n))*2-1df[volume]np.random.randint(1000000,25000000,n)print(*60)print(数据预览)print(df.head())print(\n*60\n)# 第二步计算MIDPOINT # 使用默认参数 length10df[MIDPOINT]ta.midpoint(df[close])print(MIDPOINT计算结果最近10行)print(df[[close,MIDPOINT]].tail(10))print(\n*60\n)# 第三步不同周期的MIDPOINT对比 df[MID_5]ta.midpoint(df[close],length5)df[MID_10]ta.midpoint(df[close],length10)df[MID_20]ta.midpoint(df[close],length20)print(不同周期MIDPOINT对比最近5行)print(df[[close,MID_5,MID_10,MID_20]].tail())print(\n*60\n)# 第四步计算通道上下轨 df[HIGHEST]df[close].rolling(10).max()df[LOWEST]df[close].rolling(10).min()df[MID_verify](df[HIGHEST]df[LOWEST])/2print(上下轨与MIDPOINT验证最近5行)print(df[[close,HIGHEST,LOWEST,MID_10,MID_verify]].tail())print(\n*60\n)# 第五步策略回测 # 策略价格 MIDPOINT 时持仓多头df[position](df[close]df[MID_10]).astype(int)df[returns]df[close].pct_change()df[strategy_returns]df[position].shift(1)*df[returns]total_return_buyhold(1df[returns]).prod()-1total_return_strategy(1df[strategy_returns]).prod()-1print(*60)print(策略绩效统计MIDPOINT穿越策略回测)print(f买入持有策略总收益率{total_return_buyhold:.2%})print(fMIDPOINT穿越策略总收益率{total_return_strategy:.2%})print(\n注意此为简化回测仅供参考)print(*60\n)# 第六步可视化 plt.figure(figsize(14,10))plt.subplot(2,1,1)plt.plot(df.index[-200:],df[close][-200:],labelClose Price,linewidth1.5,colorblack)plt.plot(df.index[-200:],df[MID_10][-200:],labelMIDPOINT (10),linewidth1.5,colorblue)plt.plot(df.index[-200:],df[HIGHEST][-200:],labelRolling High Max,linewidth1,colorgreen,alpha0.7,linestyle--)plt.plot(df.index[-200:],df[LOWEST][-200:],labelRolling Low Min,linewidth1,colorred,alpha0.7,linestyle--)plt.title(MIDPOINT中值通道线- 价格区间中心参考线,fontsize14)plt.ylabel(Price)plt.legend()plt.grid(True,alpha0.3)plt.subplot(2,1,2)plt.plot(df.index[-200:],df[close][-200:],labelClose Price,linewidth1,alpha0.5,colorblack)plt.plot(df.index[-200:],df[MID_5][-200:],labelMIDPOINT (5) - 短线,linewidth1,alpha0.7)plt.plot(df.index[-200:],df[MID_10][-200:],labelMIDPOINT (10) - 标准,linewidth1.5,colorblue)plt.plot(df.index[-200:],df[MID_20][-200:],labelMIDPOINT (20) - 长线,linewidth1.5,colorgreen)plt.title(MIDPOINT不同周期对比,fontsize14)plt.xlabel(Date)plt.ylabel(Price)plt.legend(locupper left)plt.grid(True,alpha0.3)plt.tight_layout()plt.show()五、总结MIDPOINT中值通道线是一种基于价格区间极值的简洁趋势参考指标其核心价值与定位如下维度特点核心公式MIDPOINT (滚动最高价最大值 滚动最低价最小值) / 2默认参数length10核心功能提供价格波动的中心参考线辅助判断价格在区间中的相对位置最佳应用场景价格区间中心识别、动态支撑阻力判断主要局限滞后性、信号维度单一、需配合其他指标使用实战使用建议作为中心参考线MIDPOINT可辅助判断当前价格在近期波动区间中的相对位置结合上轨滚动最高价最大值和下轨滚动最低价最小值形成动态通道配合其他指标使用MIDPOINT作为单一指标信号有限建议与SMA、EMA或布林带等经典指标配合使用周期选择短周期如5更灵敏适合短线判断长周期如20更平滑适合中长线趋势参考