【量化交易必备】六大波动率指标深度解析

在量化交易中,波动率是衡量市场价格波动强度的一个重要指标。波动率高通常意味着市场的不确定性增加,而波动率低则可能表明市场处于平静期。不同的波动率指标在不同的市场环境中有着不同的应用场景,帮助交易者根据市场的变化做出更为精准的决策。本文将详细介绍六种常用的波动率指标,包括平均真实波幅(ATR)、布林带(Bollinger Bands)、唐奇安通道(Donchian Channels)、凯尔特纳通道(Keltner Channels)、波动率 Chaikin 和相对波动率指数(RVI),并通过 Python 代码展示如何计算这些指标,帮助你更好地理解和应用它们。

e693ea471ee44b83b86f5003d856f3d1.png

0d160c0e802a63e5bfae47781f1826ca.png

平均真实波幅(ATR)

ATR 通过对价格波动范围的平均来量化市场波动性。较高的 ATR 表示市场波动性增加,通常出现在市场的高点、低点或突破期。ATR 常用于设置止损订单。例如,交易者可能会将止损订单设置在当前价格下方的 1.5 倍 ATR 处,以适应波动性。它还常用于趋势跟随策略,当 ATR 增加时,可能强化趋势的强度。以下是 Python 实现 ATR 的代码:

import qstock as qs
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 计算平均真实波幅(ATR)的函数
defcalculate_atr(data, window=14):
# 计算每个周期的三种范围
    high_low = data['high']- data['low']
    high_close =abs(data['high']- data['close'].shift())
    low_close =abs(data['low']- data['close'].shift())

# 将三种范围合并,选择最大值作为真实波幅
    ranges = pd.concat([high_low, high_close, low_close], axis=1)
    true_range = ranges.max(axis=1)

# 计算 ATR:真实波幅的移动平均
    atr = true_range.rolling(window=window).mean()
return atr

# 获取数据
data = qs.get_data('中国平安', start="2021-01-01", end="2024-12-16")

# 计算 ATR 及其移动平均
data['ATR']= calculate_atr(data)
data['ATR_MA']= data['ATR'].rolling(window=14).mean()# ATR 的 14 天移动平均

# 定义买入和卖出信号
buy_signal =(data['ATR']> data['ATR_MA'])&(data['ATR'].shift(1)<= data['ATR_MA'].shift(1))
sell_signal =(data['ATR']< data['ATR_MA'])&(data['ATR'].shift(1)>= data['ATR_MA'].shift(1))

# 绘图
fig,(ax1, ax2)= plt.subplots(2,1, figsize=(18,8), sharex=True)# 共享 x 轴

# 绘制带有 ATR 基础买入和卖出信号的股票价格图
ax1.plot(data['close'], label='收盘价', alpha=0.5)
ax1.scatter(data.index[buy_signal], data['close'][buy_signal], label='买入信号(ATR)', marker='^', color='red', alpha=1)
ax1.scatter(data.index[sell_signal], data['close'][sell_signal], label='卖出信号(ATR)', marker='v', color='green', alpha=1)
for idx in data.index[buy_signal]:
    ax1.axvline(x=idx, color='green', linestyle='--', alpha=0.5)
for idx in data.index[sell_signal]:
    ax1.axvline(x=idx, color='red', linestyle='--', alpha=0.5)
ax1.set_title('股票价格与基于 ATR 的信号',size=18)
ax1.set_ylabel('价格',size=14)
ax1.legend()

# 绘制 ATR 子图,显示买入和卖出信号
ax2.plot(data['ATR'], label='平均真实波幅(ATR)', color='purple')
ax2.plot(data['ATR_MA'], label='14 天 ATR 移动平均', color='orange', alpha=0.6)
ax2.scatter(data.index[buy_signal], data['ATR'][buy_signal], label='买入信号(ATR)', marker='^', color='red')
ax2.scatter(data.index[sell_signal], data['ATR'][sell_signal], label='卖出信号(ATR)', marker='v', color='green')
for idx in data.index[buy_signal]:
    ax2.axvline(x=idx, color='green', linestyle='--', alpha=0.5)
for idx in data.index[sell_signal]:
    ax2.axvline(x=idx, color='red', linestyle='--', alpha=0.5)
ax2.set_title('平均真实波幅(ATR)与信号',size=18)
ax2.set_ylabel('ATR',size=14)
ax2.legend()

plt.tight_layout()
plt.show()

7319be270fde62c112f53e86e1c5ee54.png

7c84ab5783ed6c50e64722786dba0667.png

ffe14174e9ba21994b7d8028e96ed774.png

布林带(Bollinger Bands)

布林带提供了市场波动性和超买/超卖状态的洞察。布林带常用于均值回归策略:当价格触及下轨时买入,触及上轨时卖出。

中轨(MB):过去n期的简单移动平均(SMA)。MB = SMA(n) 上轨(UB):设置为中轨上方k个标准差(SD)。UB = MB + (k × SD) 下轨(LB):设置为中轨下方k个标准差(SD)。LB = MB - (k × SD) 带宽扩展意味着市场波动性增加,而带宽收窄则表明波动性减弱。

布林带的一个重要但不容易立刻显现的特点是,它能根据市场条件动态调整,就像ATR一样用于衡量波动性。然而,布林带通过将价格与近期价格区间的相对位置进行可视化,增加了趋势分析的层面。当带收缩(“挤压”)时,通常预示着价格会出现大幅波动,表明市场正在整理并且即将发生突破。

def calculate_bollinger_bands(data, window=20, num_of_std=2):
    rolling_mean = data['close'].rolling(window=window).mean()
    rolling_std = data['close'].rolling(window=window).std()
    upper_band = rolling_mean +(rolling_std*num_of_std)
    lower_band = rolling_mean -(rolling_std*num_of_std)
return rolling_mean, upper_band, lower_band

# 获取数据
# 计算布林带
data['Middle Band'], data['Upper Band'], data['Lower Band']= calculate_bollinger_bands(data)

# 定义买入和卖出信号
buy_signal =(data['close']< data['Lower Band'])&(data['close'].shift(1)>= data['Lower Band'].shift(1))
sell_signal =(data['close']> data['Upper Band'])&(data['close'].shift(1)<= data['Upper Band'].shift(1))

# 绘制图形
fig, ax = plt.subplots(figsize=(20,8))

# 绘制股票价格与布林带及买卖信号
ax.plot(data['close'], label='收盘价', alpha=1, linewidth=2)
ax.plot(data['Middle Band'], label='中轨(20日SMA)', color='blue', alpha=0.5)
ax.plot(data['Upper Band'], label='上轨(2倍标准差)', color='green', alpha=0.5)
ax.plot(data['Lower Band'], label='下轨(2倍标准差)', color='red', alpha=0.5)
ax.fill_between(data.index, data['Lower Band'], data['Upper Band'], color='grey', alpha=0.1)
ax.scatter(data.index[buy_signal], data['close'][buy_signal], label='买入信号', marker='^', color='red', alpha=1)
ax.scatter(data.index[sell_signal], data['close'][sell_signal], label='卖出信号', marker='v', color='green', alpha=1)
ax.set_title('股票价格与布林带',size=18)
ax.set_ylabel('价格',size=14)
ax.legend()

plt.tight_layout()
plt.show()

fa68d3dc4e99f100ad3233229ef74d0e.png

布林带内的股票价格运动,价格触及下轨时标记买入信号,触及上轨时标记卖出信号。带宽的扩张和收缩直观地表示了市场的波动性。

b3ea23aba72c37027bfab49ff6691a93.png

6df35e63ae55718f142e4a943a695dca.png

唐奇安通道(Donchian Channels)

唐奇安通道基于历史最高价和最低价,提供了市场范围和波动性的视角。通道的宽度反映了波动性;较宽的通道表明市场波动较大。唐奇安通道在突破策略中非常受欢迎。

当价格突破上轨时,会生成买入信号;当价格跌破下轨时,会生成卖出信号。这些通道也有助于趋势跟踪,当价格保持在通道的上方或下方时,表明存在强趋势。

上轨(UB):过去n期的最高价。下轨(LB):过去n期的最低价。唐奇安通道的一个细致之处是它在强调市场整理阶段的有效性。当通道收窄时,表明波动性减少,资产正在整理。这对寻找突破机会的交易者尤为重要,因为整理阶段通常会在价格大幅波动前发生。

def calculate_donchian_channel(data, window=20):
    data['Upper']= data['high'].rolling(window=window).max()
    data['Lower']= data['low'].rolling(window=window).min()
    data['Middle']=(data['Upper']+ data['Lower'])/2
return data

defgenerate_signals(data):
# 当收盘价突破上轨时买入
    buy_signals =(data['close']< data['Lower'].shift(1))&(data['close'].shift(1)>= data['Lower'].shift(1))
# 当收盘价跌破下轨时卖出
    sell_signals =(data['close']> data['Upper'].shift(1))&(data['close'].shift(1)<= data['Upper'].shift(1))
return buy_signals, sell_signals

# 获取数据参考第一个示例
# 计算唐奇安通道(20日周期)
window =60
data = calculate_donchian_channel(data, window)

# 生成买入和卖出信号
buy_signals, sell_signals = generate_signals(data)
data['Buy Signals']= buy_signals
data['Sell Signals']= sell_signals

# 绘制图形
fig, ax = plt.subplots(figsize=(20,8))

# 绘制股票价格与唐奇安通道及买卖信号
ax.plot(data['close'], label='收盘价', alpha=0.5)
ax.plot(data['Upper'], label='上轨唐奇安通道', linestyle='--', alpha=0.4)
ax.plot(data['Lower'], label='下轨唐奇安通道', linestyle='--', alpha=0.4)
ax.plot(data['Middle'], label='中轨唐奇安通道', linestyle='--', alpha=0.4)
ax.fill_between(data.index, data['Lower'], data['Upper'], color='grey', alpha=0.1)

# 标记买入和卖出信号
ax.scatter(data.index[data['Buy Signals']], data['close'][data['Buy Signals']], label='买入信号', marker='^', color='red', alpha=1)
ax.scatter(data.index[data['Sell Signals']], data['close'][data['Sell Signals']], label='卖出信号', marker='v', color='green', alpha=1)

ax.set_title('股票价格与唐奇安通道',size=18)
ax.set_ylabel('价格',size=14)
ax.legend()

plt.tight_layout()
plt.show()

214aa1addfc64355cd072e508828d8f5.png

带有唐奇安通道的股票价格走势,价格突破上轨时使用红色标记买入信号,跌破下轨时使用绿色标记卖出信号。

3e3f128c6c83cf2ef87945b1f5203737.png

cb2390886247f74f207952273c741855.png

Keltner通道(Keltner Channels)

凯尔特纳通道(Keltner Channels) 凯尔特纳通道使用平均真实范围(ATR)来设置通道边界,使其对市场波动性的尖峰反应敏感。在更加波动的市场中,通道会扩大;在平静的市场中,通道则会收缩。与布林带相似,凯尔特纳通道可以用于均值回归和突破策略。常见的方法是当价格从通道外部回归并关闭在通道内部时买入,这通常表明可能的价格反转。

中线(ML):最近n周期的指数移动平均(EMA)。ML = EMA(n) 上轨(UB):中线加上k倍的平均真实范围(ATR)。UB = ML + (k × ATR) 下轨(LB):中线减去k倍的ATR。LB = ML - (k × ATR) 凯尔特纳通道通过结合波动性的概念与指数移动平均(EMA)为市场趋势提供独到的洞见。尽管凯尔特纳通道和布林带在表示波动性方面看起来可能相似,但凯尔特纳通道使用ATR设置通道边界,由于ATR关注价格极端变动,因此提供了更一致的波动性测量。这使得凯尔特纳通道特别有用于区分正常价格波动和重大价格移动,为交易者提供基于波动性和价格趋势的明确信号,而不仅仅是基于移动平均线的价格行为。

# 计算凯尔特纳通道
defcalculate_keltner_channel(data, ema_period=20, atr_period=10, multiplier=2):
# 计算指数移动平均(EMA)
    data['EMA']= data['close'].ewm(span=ema_period, adjust=False).mean()

# 计算平均真实范围(ATR)
    high_low = data['high']- data['low']
    high_close =abs(data['high']- data['close'].shift())
    low_close =abs(data['low']- data['close'].shift())
    ranges = pd.concat([high_low, high_close, low_close], axis=1)
    true_range = ranges.max(axis=1)
    data['ATR']= true_range.rolling(window=atr_period).mean()

# 计算上轨和下轨
    data['Upper']= data['EMA']+(data['ATR']* multiplier)
    data['Lower']= data['EMA']-(data['ATR']* multiplier)
return data

# 生成买入和卖出信号
defgenerate_signals(data):
# 当收盘价高于上轨时买入
    buy_signals =(data['close']< data['Lower'])
# 当收盘价低于下轨时卖出
    sell_signals =(data['close']> data['Upper'])
return buy_signals, sell_signals

# 获取数据参考示例1
# 计算凯尔特纳通道
data = calculate_keltner_channel(data)

# 生成买入和卖出信号
data['Buy Signals'], data['Sell Signals']= generate_signals(data)

# 绘图展示
fig, ax = plt.subplots(figsize=(20,8))

# 绘制股票价格及凯尔特纳通道和买卖信号
ax.plot(data['close'], label='收盘价', alpha=0.5)
ax.plot(data['EMA'], label='EMA(20期)', color='blue', alpha=0.6)
ax.plot(data['Upper'], label='上轨凯尔特纳通道', linestyle='--', alpha=0.4)
ax.plot(data['Lower'], label='下轨凯尔特纳通道', linestyle='--', alpha=0.4)
ax.fill_between(data.index, data['Lower'], data['Upper'], color='grey', alpha=0.1)
ax.scatter(data.index[data['Buy Signals']], data['close'][data['Buy Signals']], label='买入信号', marker='^', color='red', alpha=1)
ax.scatter(data.index[data['Sell Signals']], data['close'][data['Sell Signals']], label='卖出信号', marker='v', color='green', alpha=1)
ax.set_title('股票价格与凯尔特纳通道',size=18)
ax.set_ylabel('价格',size=14)
ax.legend()

plt.tight_layout()
plt.show()

9d83d53af54a6dfc7c5d226e87a65e5e.png

9e2d70bd18c903abc71006c13641837d.png

61ac56c0117445750450ef95312f7f7a.png

Chaikin波动率(Chaikin Volatility)

Chaikin波动率指标通过高低价范围来衡量市场波动性。该指标的增加表明市场波动性上升,这可能预示着市场顶部或底部的形成。此指标用于识别市场波动性的极端情况。交易者可能会寻找波动性低的时期(可能的整合期)后跟随着波动性的激增(可能的突破)。

Chaikin波动率是通过计算一定时期n内高低价差的指数移动平均(EMA)的百分比变化与前一时期相比得出的。该指标可以深入洞察市场情绪的变化,通常在价格变动之前预示市场情绪的转换。虽然大多数交易者将高波动性与市场顶部关联,将低波动性与市场底部关联,但波动性的变化时机和方向可以提供识别潜在反转或持续的细微信号。例如,波动性的逐渐减少后突然增加,可能表明市场压力的积累,这可能预示着重大价格突破的前夕。这种模式表明,交易者可以使用查金波动率不仅仅是评估当前的市场波动状态,还可以预测未来的市场动态,使其成为一个战略性的预先交易决策工具。

def calculate_chaikin_volatility(data, ema_period=10, change_period=10):
# 计算高低差
    data['HL_Spread']= data['high']- data['low']

# 计算高低差的指数移动平均(EMA)
    data['EMA_HL_Spread']= data['HL_Spread'].ewm(span=ema_period, adjust=False).mean()
# 计算查金波动率
    data['Chaikin_Volatility']=(data['EMA_HL_Spread']- data['EMA_HL_Spread'].shift(change_period)
)/ data['EMA_HL_Spread'].shift(change_period)*100
return data

# 计算查金波动率
data = calculate_chaikin_volatility(data)

# 绘图
fig,(ax1, ax2)= plt.subplots(2,1, figsize=(20,10), gridspec_kw={'height_ratios':[2,1]})

# 绘制股票价格图
ax1.plot(data['close'], label='收盘价', color='blue')
ax1.set_title('股票价格',size=18)
ax1.set_ylabel('价格',size=14)
ax1.legend()

# 绘制查金波动率图
ax2.plot(data['Chaikin_Volatility'], label='查金波动率', color='orange')
ax2.set_title('Chaikin波动率指标',size=18)
ax2.set_ylabel('波动率 (%)',size=14)
ax2.legend()

plt.tight_layout()
plt.show()

e4e1b4c100496d724aaf121a79e79a66.png

60ae67f18d4dfa2154a0d720555e61a4.png

4b05155a7dc834039975eca8cca5d2da.png

相对波动指数(RVI)

相对波动指数(RVI)是一种衡量市场波动性的指标,其计算方法与相对强弱指数(RSI)相似,但RVI使用的是标准差而不是价格变动的幅度。该指标可以帮助识别市场顶部和底部的潜在区域。RVI常与其他指标如RSI或MACD结合使用以确认信号。例如,当RVI值高于某一高阈值(例如60)时,可能表示市场过热;而值低于某一低阈值(例如40)时,则可能表示市场过冷。

RVI是通过计算给定时期内高价和低价的标准差,然后将高价的标准差与高低价标准差之和的比值标准化到0-100的范围内来计算的。信号线是RVI的4期简单移动平均(SMA),用于生成买入和卖出信号。RVI的独特贡献在于它关注波动性的方向而不仅仅是幅度。与其他基于价格极值发出超买或超卖信号的指标不同,RVI提供了关于当前市场波动性相对于近期历史是增加还是减少的洞察。这在波动性较大的市场中特别有用,因为传统基于价格的指标可能会提供相互矛盾的信号。

def calculate_rvi(data, period=14):
# 计算给定周期内的高低价的标准差
    data['StdDev_High']= data['high'].rolling(window=period).std()
    data['StdDev_Low']= data['low'].rolling(window=period).std()

# 计算RVI
    data['RVI']=100*(data['StdDev_High']/(data['StdDev_High']+ data['StdDev_Low']))

# 计算RVI的4周期简单移动平均作为信号线
    data['RVI_Signal']= data['RVI'].rolling(window=4).mean()

return data

defgenerate_signals(data, signal_threshold=5):
# 当RVI上穿信号线且超过一定阈值时买入
    data['Buy Signals']=((data['RVI']> data['RVI_Signal'])&
(data['RVI']- data['RVI_Signal']> signal_threshold)&
(data['RVI'].shift(1)<= data['RVI_Signal'].shift(1)))

# 当RVI下穿信号线且超过一定阈值时卖出
    data['Sell Signals']=((data['RVI']< data['RVI_Signal'])&
(data['RVI_Signal']- data['RVI']> signal_threshold)&
(data['RVI'].shift(1)>= data['RVI_Signal'].shift(1)))
return data

# 计算RVI
data = calculate_rvi(data)

# 生成买入和卖出信号,并调整阈值以控制信号强度
signal_threshold =1
data = generate_signals(data, signal_threshold)

# 绘图展示
fig,(ax1, ax2)= plt.subplots(2,1, figsize=(20,10), gridspec_kw={'height_ratios':[2,1]})

# 股价图表及买卖信号
ax1.plot(data['close'], label='收盘价', color='blue')
ax1.scatter(data.index[data['Buy Signals']], data['close'][data['Buy Signals']], label='买入信号', marker='^', color='green', alpha=1)
ax1.scatter(data.index[data['Sell Signals']], data['close'][data['Sell Signals']], label='卖出信号', marker='v', color='red', alpha=1)
ax1.set_title('股票价格及RVI信号',size=18)
ax1.set_ylabel('价格',size=14)
ax1.legend()

# RVI及信号线图表
ax2.plot(data['RVI'], label='RVI', color='green')
ax2.plot(data['RVI_Signal'], label='信号线', color='red', linestyle='--')
ax2.scatter(data.index[data['Buy Signals']], data['RVI'][data['Buy Signals']], label='买入信号', marker='^', color='blue', alpha=1)
ax2.scatter(data.index[data['Sell Signals']], data['RVI'][data['Sell Signals']], label='卖出信号', marker='v', color='orange', alpha=1)
ax2.set_title('相对波动指数(RVI)及信号',size=18)
ax2.set_ylabel('RVI',size=14)
ax2.legend()

plt.tight_layout()
plt.show()

4f916a0b2e6e7939b9d07f3e130690a4.png

d51ce1d363d66c04601808ed7c5c906a.png

952247ef432a2100b8fea5021ddd75f4.png

实际应用与局限性

技术指标的实际应用不仅仅是识别买卖信号。每个指标,从平均真实波动范围(ATR)到相对波动指数(RVI),都提供了不同的视角来解读市场行为,帮助交易者更加深入地理解市场动态。波动率技术指标在实际应用中主要体现在以下几方面:

  • 与振荡器的确认:结合趋势跟踪指标与振荡器(如RVI)可以对市场状况提供确认。例如,RVI值高于60可能表明市场超买,但如果同时布林带收缩,这可能表明潜在的波动性挤压和即将到来的价格突破。

  • 识别反转机会:布林带和Keltner通道等指标在识别潜在反转机会时非常有价值。例如,价格突破布林带上轨可能表明市场过度延伸,暗示可能的回调。类似地,价格突破Keltner通道后重新回到通道内,可能表明一个均值回归的机会。

  • 利用突破机会:唐奇安通道和ATR在突破策略中非常有效。价格突破上轨可能是突破的信号,而ATR的增加则表明波动性上升,确认价格移动的强度。

  • 动态止损单:利用ATR设置止损单有助于进行波动性调整后的风险管理。将止损设置为当前ATR的倍数,可以根据市场条件的变化进行调整,在高波动时保护免受不必要的损失,同时避免在正常波动期间提前退出。

  •  动态头寸大小:在确定头寸大小时应用波动性度量(如ATR)可以显著增强风险管理。通过根据当前的波动性调整头寸大小,交易者可以确保每次交易的风险一致,无论市场状况如何。

  • 市场情绪与指标极值:技术指标还可以提供有关市场情绪的见解。例如,极高或极低的RVI值可能不仅表明超买或超卖状况,还可能反映出极端情绪,这种情绪可能会导致市场的重大反转。

  • 指标背离:价格行为与指标(如RVI或布林带宽度)之间的背离可能为潜在趋势变化提供早期预警。例如,如果价格创出新高,而指标未能确认并创出相应的新高,则可能表明动能减弱并可能发生反转。

波动率技术指标的局限性主要体现在以下几方面:
  • 滞后信号:大多数技术指标是滞后的,意味着它们基于过去的价格数据。这一固有的延迟可能导致迟到的入场或退出信号,从而错失机会或增加风险。

  • 假设重复性:技术分析假设市场行为会重复。然而,这一假设并不总是成立,尤其是在面对前所未有的事件或市场基本面变化时。

  • 市场噪音:指标在震荡或高度波动的市场中容易产生虚假信号。例如,像RVI这样的振荡器可能在超买和超卖水平之间波动,而没有明确的趋势,这可能导致信号混乱。

  • 单一指标不足:没有任何一个指标能提供完整的市场状况图景。单独使用某个指标可能会误解信号。

  •  市场心理:技术指标无法考虑人类情绪或市场情绪的突变,而这些情绪可能会极大地影响价格波动。新闻、经济事件或投资者情绪的变化可能会迅速使技术信号失效。

结语

波动率指标是金融市场分析中不可或缺的工具,为交易者提供了宝贵的市场洞察力。从ATR到RVI,每个指标都具有其独特的特点和应用场景,能帮助交易者更好地理解市场动态,捕捉交易机会,并进行有效的风险管理。然而,值得注意的是,没有任何一个指标能够单独提供完美的市场预测。成功的交易策略往往依赖于多种指标的综合应用,并结合基本面分析、市场情绪分析以及交易者的经验和直觉。此外,持续的学习和实践,对市场的深入理解,以及对交易策略的不断调整和优化,是交易成功的关键。

参考资料:Top 6 Volatility Indicators in Python.Cristian Velasquez.Medium.2024.2

72c59d9430a893f0b44b006041522218.png

关于Python金融量化

154e04fae9fb6391df52850c7979bb6e.png

专注于分享Python在金融量化领域的应用。加入知识星球,可以免费获取qstock源代码、30多g的量化投资视频资料、量化金融相关PDF资料、公众号文章Python完整源码、与博主直接交流、答疑解惑等。添加个人微信sky2blue2咨询可获取7.5折优惠。

b2447ed04155b06952c148fb5642240c.jpeg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值