波动率 计算学习 离散系数

目录

离散系数 也叫变异系数

变异系数的意义:

波动率学习笔记

波动率1维 需要pandas

最后两条数据,波动率减少,但是离散系统增大。

3d数据离散系数和波动率


离散系数 也叫变异系数

变异系数的意义:

  • 小的 CV 值:数据比较集中,变异性小,表示数据大多数值接近均值。

  • 大的 CV 值:数据波动性大,表示数据离均值的偏差较大,变异性高。

import numpy as np

# 第一组数据
time_series_data_1 = np.array([1, 2, 3, 4, 5, 5, 7])
mean_1 = np.mean(time_series_data_1)
std_dev_1 = np.std(time_series_data_1)

# 第二组数据
time_series_data_2 = np.array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6,0.7])
mean_2 = np.mean(time_series_data_2)
std_dev_2 = np.std(time_series_data_2)

# 计算变异系数 (CV)
cv_1 = std_dev_1 / mean_1
cv_2 = std_dev_2 / mean_2

print(f"第一组数据的变异系数 (CV): {cv_1}")
print(f"第二组数据的变异系数 (CV): {cv_2}")

波动率学习笔记

物理意义‌:通过速度向量的标准差衡量运动剧烈程度

def spatial_volatility(points, dt=1):
    """计算三维轨迹的速度波动率
    :param points: (n,3)数组,空间点序列
    :param dt: 时间步长(默认1单位时间)
    :return: 速度标准差(波动率)
    """
    # 计算速度向量(前向差分)
    velocity = np.diff(points, axis=0) / dt  # (n-1,3)

    # 计算速度模长
    speed = np.linalg.norm(velocity, axis=1)  # (n-1,)

    # 波动率 = 速度的标准差
    return np.std(speed)

波动率1维 需要pandas


import numpy as np
import pandas as pd

# 示例数据:假设这是一个股票的价格时间序列
prices = [1, 2, 3, 4, 5, 6, 7]
prices = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6,0.7]

# 将价格转换为 Pandas Series
prices_series = pd.Series(prices)

# 计算对数收益率
returns = np.log(prices_series / prices_series.shift(1))

# 计算日波动率:收益率的标准差
volatility = returns.std()

# 输出结果
print(f"波动率: {volatility}")

最后两条数据,波动率减少,但是离散系统增大。


import numpy as np
import pandas as pd

def bodonglv(prices):
    prices_series = pd.Series(prices)
    returns = np.log(prices_series / prices_series.shift(1))

    volatility = returns.std()
    return volatility

def bianyi(prices):
    mean_2 = np.mean(prices)
    std_dev_2 = np.std(prices)

    cv_2 = std_dev_2 / mean_2
    return cv_2

prices = [0.1,0.2, 0.3, 0.1, 0.4, 0.1, 0.3,0.1]

volatility = bodonglv(prices)
print(f"波动率: {volatility}")

cv_v=bianyi(prices)
# print(f"bianyi:{cv_2},std:{std_dev_2}")
print(f"bianyi:{cv_v}")

prices = [0.1,0.2, 0.3, 0.2, 0.1, 0.2, 0.3,0.1]

volatility = bodonglv(prices)
print(f"波动率: {volatility}")

cv_v=bianyi(prices)
# print(f"bianyi:{cv_2},std:{std_dev_2}")
print(f"bianyi:{cv_v}")

prices = [0.1,0.2, 0.3, 0.2, 0.1, 0.2, 0.3,0.4]

volatility = bodonglv(prices)
print(f"波动率: {volatility}")

cv_v=bianyi(prices)
# print(f"bianyi:{cv_2},std:{std_dev_2}")
print(f"bianyi:{cv_v}")

波动率: 1.1625636872586609
bianyi:0.5590169943749473
波动率: 0.7235921807490139
bianyi:0.41633319989322654
波动率: 0.5389467040537531
bianyi:0.43033148291193524

3d数据离散系数和波动率

lisan.py

import random

import numpy as np
from mayavi import mlab

# 生成或读取3D点序列
def generate_points(n=100,noise_std=0.1):
    t = np.linspace(0, 4 * np.pi, n)
    x = np.sin(t)
    y = np.cos(t)+ np.random.normal(loc=0.0, scale=noise_std, size=n)
    z = t
    return np.vstack((x, y, z)).T

# 计算相邻点的欧氏距离
def compute_distances(points):
    diffs = np.diff(points, axis=0)
    dists = np.linalg.norm(diffs, axis=1)
    return dists

# 计算离散系数与波动率
def compute_stats(dists):
    mean_dist = np.mean(dists)
    std_dist = np.std(dists)
    cv = std_dist / mean_dist if mean_dist != 0 else 0
    volatility = std_dist
    return cv, volatility

# Mayavi 可视化路径
def visualize(points, scalars):
    x, y, z = points.T
    mlab.figure(bgcolor=(1, 1, 1))
    mlab.plot3d(x, y, z, scalars, tube_radius=0.02, colormap='jet')
    mlab.colorbar(title='Dist Δ', orientation='vertical')
    mlab.show()

# 主流程
points = generate_points(n=200)
dists = compute_distances(points)
cv, volatility = compute_stats(dists)

print(f"离散系数 CV: {cv:.4f}")
print(f"波动率 Volatility: {volatility:.4f}")

# 可视化:以每一段距离为 scalar,显示颜色变化
visualize(points[:-1], dists)