
2026年重磅升级已全面落地!欢迎加入专注财经数据与量化投研的【数据科学实战】知识星球!您将获取持续更新的《财经数据宝典》与《量化投研宝典》,双典协同提供系统化指引;星球内含300篇以上独有高质量文章,深度覆盖策略开发、因子分析、风险管理等核心领域,内容基本每日更新;同步推出的「量化因子专题教程」系列(含完整可运行代码与实战案例),系统详解因子构建、回测与优化全流程,并实现日更迭代。我们持续扩充独家内容资源,全方位赋能您的投研效率与专业成长。无论您是量化新手还是资深研究者,这里都是助您少走弯路、事半功倍的理想伙伴,携手共探数据驱动的投资未来!
对于学习 Python 的交易爱好者来说,理解专业交易指标的设计思路是一件非常有价值的事情。今天我们来解读一个基于斐波那契数学原理的 MT5 指标——BLSH Bands(BuyLow SellHigh 波段指标),看看它背后的算法逻辑如何帮助交易者识别市场极端区域。
虽然这个指标是用 MQL5 语言编写的,但其核心算法思想完全可以用 Python 来实现和理解。让我们一起来拆解它的设计精髓。
BLSH 波段指标的核心思想是均值回归——当价格偏离正常区域太远时,往往会回归到中间水平。与传统的 RSI 或随机指标使用固定阈值(如 70 表示超买,30 表示超卖)不同,BLSH 使用动态自适应通道,根据市场实际波动范围来判断极端位置。
指标使用以下斐波那契比率将价格区间划分为 6 个区域:
让我们用 Python 来实现 BLSH 指标的核心计算逻辑:
import numpy as npimport pandas as pddef calculate_blsh_bands(high_prices, low_prices, close_prices, period=100, use_high_low=True): """ 计算 BLSH 波段指标 参数: high_prices: 最高价序列 low_prices: 最低价序列 close_prices: 收盘价序列 period: 回溯周期,默认 100 use_high_low: 是否使用最高最低价,False 则使用收盘价 返回: 包含各斐波那契水平的 DataFrame """ n = len(close_prices) # 初始化结果数组 highest = np.zeros(n) lowest = np.zeros(n) # 计算滚动最高价和最低价 for i in range(period - 1, n): if use_high_low: # 使用真实的最高价和最低价 highest[i] = np.max(high_prices[i - period + 1:i + 1]) lowest[i] = np.min(low_prices[i - period + 1:i + 1]) else: # 仅使用收盘价 highest[i] = np.max(close_prices[i - period + 1:i + 1]) lowest[i] = np.min(close_prices[i - period + 1:i + 1]) # 计算价格区间 price_range = highest - lowest # 计算斐波那契水平 level_786 = lowest + price_range * 0.786 # 极度超买边界 level_618 = lowest + price_range * 0.618 # 超买边界 level_500 = lowest + price_range * 0.500 # 中线 level_382 = lowest + price_range * 0.382 # 超卖边界 level_214 = lowest + price_range * 0.214 # 极度超卖边界 # 创建结果 DataFrame result = pd.DataFrame({ 'highest': highest, 'lowest': lowest, 'level_786': level_786, 'level_618': level_618, 'level_500': level_500, 'level_382': level_382, 'level_214': level_214 }) return resultdef get_price_zone(close_price, lowest, price_range): """ 判断当前价格所处的区域 参数: close_price: 当前收盘价 lowest: 区间最低价 price_range: 价格区间 返回: 区域编号和描述 """ if price_range == 0: return 3, "中性区域" # 计算价格在区间中的相对位置(0 到 1) position = (close_price - lowest) / price_range # 判断所处区域 if position > 0.786: return 1, "极度超买(红色区域)- 卖出信号" elif position > 0.618: return 2, "超买(橙色区域)- 警告" elif position > 0.500: return 3, "轻微超买(黄色区域)- 中性偏高" elif position > 0.382: return 4, "轻微超卖(青色区域)- 中性偏低" elif position > 0.214: return 5, "超卖(浅蓝区域)- 关注" else: return 6, "极度超卖(深蓝区域)- 买入信号"下面是一个完整的示例,展示如何使用这些函数:
import numpy as npimport pandas as pdimport matplotlib.pyplot as plt# 模拟 200 个交易日的价格数据np.random.seed(42)n_days = 200# 生成模拟价格数据(随机游走 + 均值回归特性)base_price = 100returns = np.random.normal(0, 0.02, n_days) # 日收益率close_prices = base_price * np.cumprod(1 + returns)# 生成最高价和最低价(在收盘价基础上波动)high_prices = close_prices * (1 + np.abs(np.random.normal(0, 0.01, n_days)))low_prices = close_prices * (1 - np.abs(np.random.normal(0, 0.01, n_days)))# 计算 BLSH 波段period = 50 # 使用 50 日回溯周期blsh_data = calculate_blsh_bands(high_prices, low_prices, close_prices, period=period)# 生成交易信号signals = []for i in range(period - 1, n_days): price_range = blsh_data['highest'].iloc[i] - blsh_data['lowest'].iloc[i] zone, description = get_price_zone( close_prices[i], blsh_data['lowest'].iloc[i], price_range ) signals.append({ 'day': i, 'price': close_prices[i], 'zone': zone, 'signal': description })signals_df = pd.DataFrame(signals)# 找出买卖信号buy_signals = signals_df[signals_df['zone'] == 6] # 极度超卖sell_signals = signals_df[signals_df['zone'] == 1] # 极度超买print("=== BLSH 波段指标分析结果 ===\n")print(f"分析周期:{n_days} 个交易日")print(f"回溯周期:{period} 日")print(f"\n买入信号(极度超卖)数量:{len(buy_signals)}")print(f"卖出信号(极度超买)数量:{len(sell_signals)}")# 显示最近 5 个信号print("\n最近 10 个交易日的区域判断:")for _, row in signals_df.tail(10).iterrows(): print(f" 第 {row['day']} 日 | 价格: {row['price']:.2f} | {row['signal']}")均值回归策略在震荡市场中表现最好。当价格在区间内来回波动时,触及极端区域后反转的概率较高。
在强趋势市场中,不要逆势操作:
仅仅进入极端区域不足以构成完整的交易信号,建议配合 K 线形态(如锤子线、吞没形态)来确认反转。
BLSH 波段指标的核心价值在于:
对于学习 Python 的朋友来说,这个指标是一个很好的练手项目——它涉及到数组操作、滚动窗口计算、条件判断等常见编程模式,同时又有明确的实际应用场景。
2026年全面升级已落地!【数据科学实战】知识星球核心权益如下:
星球已沉淀丰富内容生态——涵盖量化文章专题教程库、因子日更系列、高频数据集、PyBroker实战课程、专家深度分享与实时答疑服务。无论您是初探量化的学习者,还是深耕领域的从业者,这里都是助您少走弯路、高效成长的理想平台。诚邀加入,共探数据驱动的投资未来!
好文推荐
1. 用 Python 打造股票预测系统:Transformer 模型教程(一)
2. 用 Python 打造股票预测系统:Transformer 模型教程(二)
3. 用 Python 打造股票预测系统:Transformer 模型教程(三)
4. 用 Python 打造股票预测系统:Transformer 模型教程(完结)
6. YOLO 也能预测股市涨跌?计算机视觉在股票市场预测中的应用
9. Python 量化投资利器:Ridge、Lasso 和 Elastic Net 回归详解
好书推荐