首页 > 其他分享 >量化曲线的平滑程度

量化曲线的平滑程度

时间:2024-07-04 19:31:30浏览次数:8  
标签:plt 导数 平滑 曲线 一阶 time derivative np 量化

思路

1. 对原始数据一阶求导,得到一阶导数数组。

2. 对一阶导数数组求标准差。导数的标准差提供了导数值的波动性,标准差越小,曲线越平滑。

平滑曲线

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import font_manager
fname="/usr/local/python3.6/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/ttf/simhei.ttf"
zhfont = font_manager.FontProperties(fname=fname)


# 生成示例数据:正弦波加噪声
np.random.seed(123456)
time = np.arange(0, 100, 0.1)
signal_period = 20  # 正弦波周期
signal = 10 * np.sin(2 * np.pi * time / signal_period)  # 正弦波

# 计算一阶导数(离散形式)
dt = time[1] - time[0]  # 时间步长
first_derivative = np.diff(signal) / dt

# 计算一阶导数的统计指标
std_dev_derivative = np.std(first_derivative)

# 打印导数的波动性指标
print(f"平滑数据的一阶导数标准差: {std_dev_derivative:.2f}")

# 绘制原始信号与导数
plt.figure(figsize=(14, 6))

plt.subplot(2, 1, 1)
plt.plot(time, signal, label='平滑数据')
plt.xlabel('Time')
plt.ylabel('Value')
plt.title('原始数据 及其 一阶导数', fontproperties=zhfont, fontsize=12)
plt.legend()

plt.subplot(2, 1, 2)
plt.plot(time[:-1], first_derivative, label='一阶导数', color='orange')
plt.xlabel('Time')
plt.ylabel('Value')
# plt.title('原始数据求导', fontproperties=zhfont, fontsize=12)
plt.legend()
plt.show()

# 绘制导数的直方图
plt.figure(figsize=(14, 4))
plt.hist(first_derivative, bins=50, color='orange', edgecolor='k', alpha=0.7)
plt.xlabel('Derivative Value')
plt.ylabel('Frequency')
plt.title('一阶导数直方图')
plt.show()

  

毛刺曲线

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import font_manager
fname="/usr/local/python3.6/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/ttf/simhei.ttf"
zhfont = font_manager.FontProperties(fname=fname)


# 生成示例数据:正弦波加噪声
np.random.seed(123456)
time = np.arange(0, 100, 0.1)
signal_period = 20  # 正弦波周期
signal = 10 * np.sin(2 * np.pi * time / signal_period)  # 正弦波
noise = np.random.normal(0, 2, len(time))  # 噪声
signal_with_noise = signal + noise

# 计算一阶导数(离散形式)
dt = time[1] - time[0]  # 时间步长
first_derivative = np.diff(signal_with_noise) / dt

# 计算一阶导数的统计指标
std_dev_derivative = np.std(first_derivative)

# 打印导数的波动性指标
print(f"毛刺数据的一阶导数标准差: {std_dev_derivative:.2f}")

# 绘制原始信号与导数
plt.figure(figsize=(14, 6))

plt.subplot(2, 1, 1)
plt.plot(time, signal_with_noise, label='毛刺数据')
plt.xlabel('Time')
plt.ylabel('Value')
plt.title('原始数据 及其 一阶导数', fontproperties=zhfont, fontsize=12)
plt.legend()

plt.subplot(2, 1, 2)
plt.plot(time[:-1], first_derivative, label='一阶导数', color='orange')
plt.xlabel('Time')
plt.ylabel('Value')
# plt.title('原始数据求导', fontproperties=zhfont, fontsize=12)
plt.legend()
plt.show()

# 绘制导数的直方图
plt.figure(figsize=(14, 4))
plt.hist(first_derivative, bins=50, color='orange', edgecolor='k', alpha=0.7)
plt.xlabel('Derivative Value')
plt.ylabel('Frequency')
plt.title('一阶导数直方图')
plt.show()

整体对比

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import font_manager
fname="/usr/local/python3.6/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/ttf/simhei.ttf"
zhfont = font_manager.FontProperties(fname=fname)



# 计算一阶离散导数
dt = time[1] - time[0]
smooth_derivative = np.diff(signal) / dt
noisy_derivative = np.diff(signal_with_noise) / dt

# 计算标准差
std_dev_smooth = np.std(smooth_derivative)
std_dev_noisy = np.std(noisy_derivative)

# 打印结果
print(f"平滑数据一阶导数标准差: {std_dev_smooth:.2f}")
print(f"毛刺数据一阶导数标准差: {std_dev_noisy:.2f}")

# 绘制信号与导数
plt.figure(figsize=(12, 6))

plt.subplot(2, 1, 1)
plt.plot(time, smooth_signal, label='平滑数据', color='blue')
plt.plot(time, noisy_signal, label='毛刺数据', color='orange')
plt.xlabel('Time')
plt.ylabel('Value')
plt.title('原始数据对比', fontproperties=zhfont, fontsize=12)
plt.legend()

plt.subplot(2, 1, 2)
plt.plot(time[:-1], smooth_derivative, label='平滑数据一阶导数', color='blue')
plt.plot(time[:-1], noisy_derivative, label='毛刺数据一阶导数', color='orange')
plt.xlabel('Time')
plt.ylabel('Derivative Value')
plt.title('一阶导数对比', fontproperties=zhfont, fontsize=12)
plt.legend()

plt.tight_layout()
plt.show()

# 绘制导数的直方图
plt.figure(figsize=(12, 4))

plt.subplot(1, 2, 1)
plt.hist(smooth_derivative, bins=50, color='blue', edgecolor='k', alpha=0.7)
plt.xlabel('Derivative Value')
plt.ylabel('Frequency')
plt.title('平滑数据一阶导数直方图', fontproperties=zhfont, fontsize=12)

plt.subplot(1, 2, 2)
plt.hist(noisy_derivative, bins=50, color='orange', edgecolor='k', alpha=0.7)
plt.xlabel('Derivative Value')
plt.ylabel('Frequency')
plt.title('毛刺数据一阶导数直方图', fontproperties=zhfont, fontsize=12)

plt.tight_layout()
plt.show()

 

标签:plt,导数,平滑,曲线,一阶,time,derivative,np,量化
From: https://www.cnblogs.com/standby/p/18284493

相关文章

  • 贝塞尔曲线与de Casteljau算法
    贝塞尔曲线与deCasteljau算法贝塞尔曲线与deCasteljau算法一、简介前言在贝塞尔曲线原理、推导及Matlab实现这篇文章中,详细地介绍了贝塞尔曲线的原理、推导过程以及Matlab实现。文章中计算贝塞尔曲线所采用的方法是定义法,该方法简洁易懂,不过其中的二项式系数\(\left(\begin......
  • 贝塞尔曲线原理、推导及Matlab实现
    贝塞尔曲线原理、推导及Matlab实现贝塞尔曲线原理、推导及Matlab实现一、简介贝塞尔曲线提出在数学的数值分析领域中,贝塞尔曲线(English:Béziercurve)是计算机图形学中相当重要的参数曲线。更高维度的广泛化贝塞尔曲线就称作贝兹曲面,其中贝兹三角是一种特殊的实例。贝塞尔曲线......
  • PTrade量化软件常见问题整理系列1
    一、get_fundamentals获取无数据返回。    get_fundamentals(g.stock_list,'profit_ability','roic',context.previous_date)返回nan。解决方案:1、返回同样的列表,获取valuation表,数据返回正常;2、建议在研究内执行get_fundamentals('00065*.SZ','profit_ability',......
  • PTrade量化软件常见问题整理系列2
    一、研究界面使用get_fundamentals函数报错:error_info:获取token失败?    研究界面使用get_fundamentals函数报错:error_info:获取token失败?1、测试版本202202.01.052,升级202202.01.051版本后,为了解决不同机器请求openapi时使用不同token导致token失效而频繁切换token,做......
  • QChartView显示实时更新的温度曲线图(二)
    目录参考图说明1.项目结构2.TempChartView.pro3.main.cpp4.TemperatureSeries.qml5.main.qml详细说明参考图说明QtCharts提供了一系列使用图表功能的简单方法。它使用QtGraphicsViewFramework图形视图框架,因此可以很容易集成到用户界面。可以使用QtCharts作为QW......
  • 分享一次海量数据平滑迁移实战
    背景采购系统(BIP)在经历多年演进后,系统整体复杂度和数据量俨然已经极具规模,本文着重讨论海量数据的治理存储现状:工程端实时订单库采用MySQL5.5集群,其中主库配置为32C/48G/6000G,无法归档的订单热数据占磁盘空间85%(5.1T)痛点:6T磁盘已经单容器最大,无法继续扩容,剩余磁盘余量过小,难适......
  • 深度学习--模型优化--模型的量化--92
    目录1.什么是量化2位宽,高精度浮点数的表示3.K-means聚类量化4.均匀/线性量化(linearquantization)5.Thresholding量化1.什么是量化量化可以理解为:从连续到离散,针对parameters(W)、activations(A)使用整数值取代浮点数值,模型尺寸更小改进inference时间减小内存使用更低的功......
  • 每天五分钟深度学习:解决for循环效率慢的关键在于向量化
    本文重点上一节课程中,我们学习了多样本的线性回归模型,但是我们的伪代码实现中使用了大量的for循环,这样代码的问题是效率很低。为了克服这一瓶颈,向量化技术应运而生,成为提升程序执行效率、加速数据处理速度的重要手段。向量化技术概述向量化(Vectorization)是一种通过一次操作......
  • 量化交易:金融投资的新篇章
    在金融投资的世界里,量化交易正逐渐成为一股不可忽视的力量。它以数据驱动和算法决策为特点,为投资者提供了一种全新的交易方式。本文将深入探讨量化交易的基本概念、优势、挑战以及如何开始使用量化交易策略。量化交易的定义与起源量化交易,起源于1980年代初,是一种基于数学模型......
  • 游戏AI的创造思路-技术基础-关于艾宾浩斯遗忘曲线的迷思
    对于艾宾浩斯遗忘曲线和函数,我一直都有小小的迷思,总想实验下用艾宾浩斯函数来替换sigmoid函数作为激活函数,打造更接近人类的AI算法,这篇文章旨在讨论下目录3.10.艾宾浩斯曲线3.10.1.定义3.10.1.1.曲线计算公式3.10.1.2.曲线计算的python实现3.10.2.历史发展3.10.3......