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

别再只看K线了!用Python复刻同花顺里的VR、VMA等10个量价指标(附完整代码) 用Python实战10大量价指标从同花顺公式到可运行代码在量化交易领域技术指标是决策的重要参考。同花顺作为国内主流交易软件内置了多种经过市场验证的量价指标。本文将带您用Python完整实现VR、VMA等10个核心指标不仅提供可运行的代码还会深入解析每个指标背后的数学逻辑和实际应用场景。1. 环境准备与数据获取在开始指标实现前我们需要搭建Python环境并准备历史行情数据。推荐使用Anaconda创建独立环境conda create -n quant python3.8 conda activate quant pip install pandas numpy matplotlib tushare backtrader对于数据源我们使用Tushare Pro获取高质量的A股历史数据。首先需要注册获取API tokenimport tushare as ts pro ts.pro_api(你的token) # 获取贵州茅台日线数据 df pro.daily(ts_code600519.SH, start_date20190101, end_date20231231) 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 VR指标波动风险区间VR(Volatility and Range)通过统计学方法计算股价的波动区间帮助判断当前价格在统计意义上的位置。计算原理取250个交易日的收盘价涨跌幅标准差波动带宽度 1.65 × 标准差对应95%置信区间上轨 收盘价 波动带宽度下轨 收盘价 - 波动带宽度Python实现def calculate_vr(df, window250): 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, window20): df[vstd] df[vol].rolling(window).std() return df使用技巧价格创新高但VSTD未创新高警惕顶背离VSTD突破长期均线预示趋势可能加速极端低值往往出现在市场底部区域3. 量价结合指标实现3.1 VMA变异平均线VMA(Variable Moving Average)通过改进传统均线算法提高了对价格变化的敏感度。计算步骤计算变异价VV (最高价开盘价最低价收盘价)/4对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[fvma_{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, window24): 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关键阈值VR40%可能形成市场底部VR250%警惕市场过热风险150%为常态分布中值4.2 VRSI量相对强弱VRSI(Volume Relative Strength Index)是成交量版的RSI指标。计算过程def calculate_vrsi(df, window14): 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使用法则VRSI70为超买区域VRSI30为超卖区域与价格走势背离时信号更强5. 指标集成与回测将自定义指标集成到Backtrader回测框架中class VRStrategy(bt.Strategy): params ((vr_period, 24), (vr_oversold, 40), (vr_overbought, 250)) def __init__(self): self.vr VRIndicator(self.data, periodself.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, periodself.p.period) sum_down bt.indicators.SumN(down_vol, periodself.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], labelClose) for p in [5,20,60]: plt.plot(df[fvma_{p}], labelfVMA {p}) plt.legend() # 成交量与VSTD ax2 plt.subplot(312) plt.bar(df.index, df[vol], colorgray, alpha0.3) plt.plot(df[vstd], labelVSTD, colorpurple) plt.legend() # VRSI ax3 plt.subplot(313) plt.plot(df[vrsi], labelVRSI, colororange) plt.axhline(30, linestyle--, colorgreen) plt.axhline(70, linestyle--, colorred) plt.legend()通过多指标协同分析可以更全面把握市场状态。例如当出现价格突破VMA均线系统VSTD显示成交量放大VRSI从超卖区回升 这种多指标共振时交易信号可靠性更高。