当前位置: 首页 > news >正文

别再只看K线了!用Python复刻同花顺里的VR、VMA等10个量价指标(附完整代码)

用Python实战10大量价指标:从同花顺公式到可运行代码

在量化交易领域,技术指标是决策的重要参考。同花顺作为国内主流交易软件,内置了多种经过市场验证的量价指标。本文将带您用Python完整实现V&R、VMA等10个核心指标,不仅提供可运行的代码,还会深入解析每个指标背后的数学逻辑和实际应用场景。

1. 环境准备与数据获取

在开始指标实现前,我们需要搭建Python环境并准备历史行情数据。推荐使用Anaconda创建独立环境:

conda create -n quant python=3.8 conda activate quant pip install pandas numpy matplotlib tushare backtrader

对于数据源,我们使用Tushare Pro获取高质量的A股历史数据。首先需要注册获取API token:

import tushare as ts pro = ts.pro_api('你的token') # 获取贵州茅台日线数据 df = pro.daily(ts_code='600519.SH', start_date='20190101', end_date='20231231') df = df.sort_values('trade_date') df.index = pd.to_datetime(df['trade_date'])

为方便后续计算,我们预处理基础数据字段:

df['pre_close'] = df['close'].shift(1) # 前收盘价 df['pct_change'] = df['close'].pct_change() # 涨跌幅 df['avg_price'] = (df['high'] + df['low'] + df['close']) / 3 # 平均价

2. 波动性指标实现

2.1 V&R指标:波动风险区间

V&R(Volatility and Range)通过统计学方法计算股价的波动区间,帮助判断当前价格在统计意义上的位置。

计算原理

  • 取250个交易日的收盘价涨跌幅标准差
  • 波动带宽度 = 1.65 × 标准差(对应95%置信区间)
  • 上轨 = 收盘价 + 波动带宽度
  • 下轨 = 收盘价 - 波动带宽度

Python实现

def calculate_vr(df, window=250): df['vr_std'] = df['pct_change'].rolling(window).std() df['vr_band'] = 1.65 * df['vr_std'] * df['close'] df['vr_upper'] = df['close'] + df['vr_band'] df['vr_lower'] = df['close'] - df['vr_band'] return df df = calculate_vr(df)

应用场景

  • 当股价触及上轨,可能面临回调压力
  • 当股价触及下轨,可能具备反弹潜力
  • 波动带收窄往往预示变盘在即

2.2 VSTD指标:成交量标准差

VSTD(Volume Standard Deviation)衡量成交量波动的剧烈程度,识别异常放量或缩量。

计算逻辑

def calculate_vstd(df, window=20): df['vstd'] = df['vol'].rolling(window).std() return df

使用技巧

  • 价格创新高但VSTD未创新高,警惕顶背离
  • VSTD突破长期均线预示趋势可能加速
  • 极端低值往往出现在市场底部区域

3. 量价结合指标实现

3.1 VMA:变异平均线

VMA(Variable Moving Average)通过改进传统均线算法,提高了对价格变化的敏感度。

计算步骤

  1. 计算变异价VV = (最高价+开盘价+最低价+收盘价)/4
  2. 对VV计算不同周期的简单移动平均
def calculate_vma(df, periods=[5, 10, 20, 60, 120]): df['vv'] = (df['high'] + df['open'] + df['low'] + df['close']) / 4 for p in periods: df[f'vma_{p}'] = df['vv'].rolling(p).mean() return df

交易信号

  • 短期VMA上穿长期VMA,买入信号
  • 价格在VMA上方运行为强势特征
  • 多根VMA聚拢后发散预示趋势启动

3.2 VPT:量价曲线

VPT(Volume Price Trend)将价格变化与成交量结合,反映资金流向。

算法实现

def calculate_vpt(df): df['vpt'] = df['vol'] * (df['close'] - df['pre_close']) / df['pre_close'] df['vpt_cum'] = df['vpt'].cumsum() df['vpt_ma'] = df['vpt_cum'].rolling(20).mean() return df

应用要点

  • VPT由下向上穿越0轴为买入信号
  • 价格与VPT出现背离时需警惕反转
  • 配合均线使用可过滤虚假信号

4. 动量类指标实现

4.1 VR:容量比率

VR(Volatility Ratio)通过成交量强弱判断市场超买超卖状态。

Python代码

def calculate_vr(df, window=24): up_vol = df['vol'].where(df['close'] > df['pre_close'], 0) down_vol = df['vol'].where(df['close'] < df['pre_close'], 0) df['vr'] = up_vol.rolling(window).sum() / down_vol.rolling(window).sum() return df

关键阈值

  • VR<40%:可能形成市场底部
  • VR>250%:警惕市场过热风险
  • 150%为常态分布中值

4.2 VRSI:量相对强弱

VRSI(Volume Relative Strength Index)是成交量版的RSI指标。

计算过程

def calculate_vrsi(df, window=14): vol_up = df['vol'].where(df['close'] > df['pre_close'], 0) vol_down = df['vol'].where(df['close'] < df['pre_close'], 0) avg_up = vol_up.rolling(window).mean() avg_down = vol_down.rolling(window).mean() df['vrsi'] = 100 - 100 / (1 + avg_up / avg_down) return df

使用法则

  • VRSI>70为超买区域
  • VRSI<30为超卖区域
  • 与价格走势背离时信号更强

5. 指标集成与回测

将自定义指标集成到Backtrader回测框架中:

class VRStrategy(bt.Strategy): params = (('vr_period', 24), ('vr_oversold', 40), ('vr_overbought', 250)) def __init__(self): self.vr = VRIndicator(self.data, period=self.p.vr_period) def next(self): if not self.position: if self.vr[0] < self.p.vr_oversold: self.buy() elif self.vr[0] > self.p.vr_overbought: self.close() class VRIndicator(bt.Indicator): lines = ('vr',) def __init__(self): up_vol = bt.If(self.data.close > self.data.close(-1), self.data.volume, 0) down_vol = bt.If(self.data.close < self.data.close(-1), self.data.volume, 0) sum_up = bt.indicators.SumN(up_vol, period=self.p.period) sum_down = bt.indicators.SumN(down_vol, period=self.p.period) self.lines.vr = sum_up / sum_down

回测要点

  • 单一指标效果有限,建议组合使用
  • 参数优化需避免过度拟合
  • 需考虑交易成本和滑点影响

6. 可视化分析

使用Matplotlib绘制指标组合图表:

plt.figure(figsize=(16,12)) # 价格与VMA ax1 = plt.subplot(311) plt.plot(df['close'], label='Close') for p in [5,20,60]: plt.plot(df[f'vma_{p}'], label=f'VMA {p}') plt.legend() # 成交量与VSTD ax2 = plt.subplot(312) plt.bar(df.index, df['vol'], color='gray', alpha=0.3) plt.plot(df['vstd'], label='VSTD', color='purple') plt.legend() # VRSI ax3 = plt.subplot(313) plt.plot(df['vrsi'], label='VRSI', color='orange') plt.axhline(30, linestyle='--', color='green') plt.axhline(70, linestyle='--', color='red') plt.legend()

通过多指标协同分析,可以更全面把握市场状态。例如当出现:

  • 价格突破VMA均线系统
  • VSTD显示成交量放大
  • VRSI从超卖区回升 这种多指标共振时,交易信号可靠性更高。
http://www.gsyq.cn/news/1500959.html

相关文章:

  • 神经网络场论与弦论路径积分的融合研究
  • 别再只看K线了!用Python复刻同花顺的VR和VSTD指标,量化你的风险感知力
  • 工厂照明节能改造:成本控制、分区设计与零碳工厂照明指标
  • 告别混乱!用Quicker+Zotero6打造你的五星级文献管理系统(附详细配置脚本)
  • OpenGL实战:用中点Bresenham算法手搓一个椭圆(附完整C++代码)
  • MC9S12XE Flash模块实战:从底层驱动到安全解锁与EEE仿真
  • 如何快速提升戴森球计划工厂效率:3000+专业蓝图库完整指南
  • YOLOv5 6.0轻量手势数字检测包:1908张清洗图+4MB终版权重+完整训练可视化
  • 2026年 PLC控制柜实力厂家推荐榜:技术硬核与稳定可靠之选,plc控制柜源头厂家、自动化控制系统厂家专业榜单解析 - 品牌发掘
  • 如何用VDesk实现3倍工作效率提升:Windows虚拟桌面的智能管理实践
  • SAP BOM查询实战:CS11到CS15,哪个事务码才是你的菜?(附BAPI调用避坑点)
  • 怎样快速掌握AI全自动短视频制作:Pixelle-Video新手完整指南
  • CPT Markets:聚焦细节,看看外汇领域风控思路的关键路径
  • Android步行/驾车路线规划Demo:百度地图SDK集成即用工程
  • 还在人工剪视频?2026年五大跨境电商AI视频生成工具推荐
  • Visual Studio 2019编译报错MSB4018?别慌,一个空文件夹就能搞定
  • 2026 年 5 月开源模型 Token 服务性能榜出炉!实测 30 + 服务商,看清Token服务三层架构下真实服务实力
  • C++写的轻量QR码编码器,纯头文件+源码,不依赖第三方库
  • Vue项目里用SM4加密用户密码,我是这样和后端联调的(附完整代码)
  • 别再傻等在线工具了!手把手教你用FastANI本地批量计算基因组ANI(附避坑指南)
  • 成都会议桌定制实测评测:三家本土企业核心能力对比 - 优质品牌商家
  • 找标题AE模版不用愁!12个优质平台实用技巧汇总
  • Teachable Machine:浏览器端零代码机器学习平台架构深度解析
  • 3个步骤让Windows电脑变身AirPlay接收器:开源项目airplay2-win使用指南
  • 大模型本地部署,vLLM_推理优化,动手实验
  • 别再硬猜了!教你写一个智能的AES密钥内存扫描器(Java实现,支持128/256位)
  • 使用Qt6 QML以及第三方库FluentUI、PCapPlusPlus开发一个自定义抓包软件
  • 2026年近期临沂全季5.0千里书卷品牌厂商选型指南 - 品牌鉴赏官2026
  • 从排名到转化:2026年五大SEO服务商服务能力多维度测评 - GEO优化
  • 2026年东莞硅胶制品厂家推荐:硅胶洗澡刷/酒吧垫/家居用品/公仔/钥匙扣/企业吉祥物,定制源头实力榜 - 品牌发掘