当前位置: 首页 > 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.jsqmd.com/news/989213/

相关文章:

  • 为什么你的视频文件总是太大?CompressO帮你5分钟解决存储难题
  • 如何高效管理微信聊天数据:开源工具的完全指南
  • 2026证件照蓝底制作工具推荐:保姆级教程(免费在线+手机App)
  • 上海 GEO 服务商权威推荐:2026 年五大实力品牌与全意图 GEO 战略意义 - GEO优化
  • 开源数据恢复:当数字记忆丢失时,PhotoRec如何成为你的救星?
  • 用不到5000块DIY一个四自由度气动机械臂?开源硬件+PLC模拟器实战指南
  • Manus为人形机器人训练提供可靠数据支持
  • 2026优质塘桥办理公司注册业务公司排行参考 - 品牌排行榜
  • 告别混乱!用Quicker+Zotero6打造你的五星级文献管理系统(附详细配置脚本)
  • 工厂照明节能改造:成本控制、分区设计与零碳工厂照明指标
  • 神经网络场论与弦论路径积分的融合研究
  • 2026年q2成都社区文化墙设计可靠服务商技术解析:成都党建文化墙定制公司/成都公司前台形象墙设计公司/实力盘点 - 优质品牌商家
  • Vue.js从零到精通系列(四):前端路由与Vue Router——打造多页单页应用
  • 别再只看K线了!用Python复刻同花顺的VR和VSTD指标,量化你的风险感知力
  • MC9S12XE Flash操作实战:从寄存器配置到安全编程避坑指南
  • OpenGL实战:用中点Bresenham算法手搓一个椭圆(附完整C++代码)
  • STC8H1K17的EEPROM读写:官方库只能存1字节?手把手教你封装16位数据读写函数
  • FireRedTTS2实战指南:5步构建专属多说话人对话语音模型
  • Kodi PVR IPTV Simple:3个核心痛点与专业解决方案
  • 2026免费证件照在线生成工具推荐:保姆级对比教程,手把手教你3分钟搞定!
  • 如何快速提升戴森球计划工厂效率:3000+专业蓝图库完整指南
  • 国内专业球阀厂家实力排行:四川特殊不锈钢管厂家/四川球阀厂家/四川离心泵厂家/选型核心参考推荐 - 优质品牌商家
  • 用STM32F103和Proteus 8.9仿真一个光控智能窗帘(附完整C代码和避坑指南)
  • YOLOv5 6.0轻量手势数字检测包:1908张清洗图+4MB终版权重+完整训练可视化
  • AI 生成电商短视频的工具有哪些,哪个最划算?
  • Synagis帕利佐单抗给药季节为11月至次年4月,过敏体质者需备肾上腺素
  • MC9S12XE Flash模块实战:从底层驱动到安全解锁与EEE仿真
  • 2026年 PLC控制柜实力厂家推荐榜:技术硬核与稳定可靠之选,plc控制柜源头厂家、自动化控制系统厂家专业榜单解析 - 品牌发掘
  • 如何用VDesk实现3倍工作效率提升:Windows虚拟桌面的智能管理实践
  • SAP BOM查询实战:CS11到CS15,哪个事务码才是你的菜?(附BAPI调用避坑点)