numpy之移动均线和卷积运算

2023-11-11 16:31

本文主要是介绍numpy之移动均线和卷积运算,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

import numpy as np
import matplotlib.pyplot as mp
import datetime as dt
import matplotlib.dates as md'''移动均线:制作收盘价的5日移动均线,即从第5天开始,每天计算最近5天的收盘价的均值构成的一条线----作用:降噪
'''# 日期转化函数
def dmy2ymd(dmy):# 把dmy格式的字符串转化成ymd格式的字符串dmy = str(dmy, encoding='utf-8')d = dt.datetime.strptime(dmy, '%d-%m-%Y')d = d.date()ymd = d.strftime('%Y-%m-%d')return ymddates, opening_prices, highest_prices, lowest_prices, closing_prices = \np.loadtxt('./da_data/aapl.csv', delimiter=',', usecols=(1, 3, 4, 5, 6), unpack=True,dtype='M8[D], f8, f8, f8, f8', converters={1: dmy2ymd})  # converters为转换器,运行时先执行,其中1表示时间所在的列索引号# 绘制收盘价折线图
mp.figure('AAPL', facecolor='lightgray')
mp.title('AAPL', fontsize=18)
mp.xlabel('date', fontsize=12)
mp.ylabel('closing_pricing', fontsize=12)
mp.tick_params(labelsize=10)
mp.grid(linestyle=':')
# 设置x轴的刻度定位器,使之更适合显示日期数据
ax = mp.gca()
# 以周一作为主刻度
ma_loc = md.WeekdayLocator(byweekday=md.MO)
# 次刻度,除周一外的日期
mi_loc = md.DayLocator()
ax.xaxis.set_major_locator(ma_loc)
ax.xaxis.set_major_formatter(md.DateFormatter('%Y-%m-%d'))
ax.xaxis.set_minor_locator(mi_loc)
# 日期数据类型转换,更适合绘图
dates = dates.astype(md.datetime.datetime)
mp.plot(dates, closing_prices, linewidth=2, linestyle='--', color='dodgerblue', label='AAPL', alpha=0.3)
# 绘制5日移动均线
sma = np.zeros(closing_prices.size - 4)
for i in range(sma.size):sma[i] = closing_prices[i:i + 5].mean()
mp.plot(dates[4:], sma, color='orangered', linestyle=':', label='SMA5')mp.tight_layout()
mp.legend()
# 自动格式化x轴日期的显示格式(以最合适的方式显示)
mp.gcf().autofmt_xdate()
mp.show()

 

基于卷积运算实现5日移动平均线

  卷积运算规则及分类:

    

  实现代码:

  

import numpy as np
import matplotlib.pyplot as mp
import datetime as dt
import matplotlib.dates as md'''1.移动均线:制作收盘价的5日移动均线,即从第5天开始,每天计算最近5天的收盘价的均值二构成的一条线----作用:降噪2.有效卷积实现5日移动平均线绘制
'''# 日期转化函数
def dmy2ymd(dmy):# 把dmy格式的字符串转化成ymd格式的字符串dmy = str(dmy, encoding='utf-8')d = dt.datetime.strptime(dmy, '%d-%m-%Y')d = d.date()ymd = d.strftime('%Y-%m-%d')return ymddates, opening_prices, highest_prices, lowest_prices, closing_prices = \np.loadtxt('./da_data/aapl.csv', delimiter=',', usecols=(1, 3, 4, 5, 6), unpack=True,dtype='M8[D], f8, f8, f8, f8', converters={1: dmy2ymd})  # converters为转换器,运行时先执行,其中1表示时间所在的列索引号# 绘制收盘价折线图
mp.figure('AAPL', facecolor='lightgray')
mp.title('AAPL', fontsize=18)
mp.xlabel('date', fontsize=12)
mp.ylabel('closing_pricing', fontsize=12)
mp.tick_params(labelsize=10)
mp.grid(linestyle=':')
# 设置x轴的刻度定位器,使之更适合显示日期数据
ax = mp.gca()
# 以周一作为主刻度
ma_loc = md.WeekdayLocator(byweekday=md.MO)
# 次刻度,除周一外的日期
mi_loc = md.DayLocator()
ax.xaxis.set_major_locator(ma_loc)
ax.xaxis.set_major_formatter(md.DateFormatter('%Y-%m-%d'))
ax.xaxis.set_minor_locator(mi_loc)
# 日期数据类型转换,更适合绘图
dates = dates.astype(md.datetime.datetime)
mp.plot(dates, closing_prices, linewidth=2, linestyle='--', color='dodgerblue', label='AAPL', alpha=0.3)
# 绘制5日移动均线
sma = np.zeros(closing_prices.size - 4)
for i in range(sma.size):sma[i] = closing_prices[i:i + 5].mean()
mp.plot(dates[4:], sma, color='orangered', linestyle=':', label='SMA5')# 基于卷积实现5日均线
kernel = np.ones(5) / 5
sma2 = np.convolve(closing_prices, kernel, 'valid')
mp.plot(dates[4:], sma2, color='magenta', linewidth=7, label='SMA52', alpha=0.3)mp.tight_layout()
mp.legend()
# 自动格式化x轴日期的显示格式(以最合适的方式显示)
mp.gcf().autofmt_xdate()
mp.show()

  

 

加权卷积实现5日加权均线

  --------卷积核相当于权重数组

实现代码如下:

  

import numpy as np
import matplotlib.pyplot as mp
import datetime as dt
import matplotlib.dates as md'''1.移动均线:制作收盘价的5日移动均线,即从第5天开始,每天计算最近5天的收盘价的均值二构成的一条线----作用:降噪2.有效卷积实现5日移动平均线绘制
'''# 日期转化函数
def dmy2ymd(dmy):# 把dmy格式的字符串转化成ymd格式的字符串dmy = str(dmy, encoding='utf-8')d = dt.datetime.strptime(dmy, '%d-%m-%Y')d = d.date()ymd = d.strftime('%Y-%m-%d')return ymddates, opening_prices, highest_prices, lowest_prices, closing_prices = \np.loadtxt('./da_data/aapl.csv', delimiter=',', usecols=(1, 3, 4, 5, 6), unpack=True,dtype='M8[D], f8, f8, f8, f8', converters={1: dmy2ymd})  # converters为转换器,运行时先执行,其中1表示时间所在的列索引号# 绘制收盘价折线图
mp.figure('AAPL', facecolor='lightgray')
mp.title('AAPL', fontsize=18)
mp.xlabel('date', fontsize=12)
mp.ylabel('closing_pricing', fontsize=12)
mp.tick_params(labelsize=10)
mp.grid(linestyle=':')
# 设置x轴的刻度定位器,使之更适合显示日期数据
ax = mp.gca()
# 以周一作为主刻度
ma_loc = md.WeekdayLocator(byweekday=md.MO)
# 次刻度,除周一外的日期
mi_loc = md.DayLocator()
ax.xaxis.set_major_locator(ma_loc)
ax.xaxis.set_major_formatter(md.DateFormatter('%Y-%m-%d'))
ax.xaxis.set_minor_locator(mi_loc)
# 日期数据类型转换,更适合绘图
dates = dates.astype(md.datetime.datetime)
mp.plot(dates, closing_prices, linewidth=2, linestyle='--', color='dodgerblue', label='AAPL', alpha=0.3)
# 绘制5日移动均线
sma = np.zeros(closing_prices.size - 4)
for i in range(sma.size):sma[i] = closing_prices[i:i + 5].mean()
mp.plot(dates[4:], sma, color='orangered', linestyle=':', label='SMA5')# 基于卷积实现10日均线
kernel = np.ones(10) / 10
sma2 = np.convolve(closing_prices, kernel, 'valid')
mp.plot(dates[9:], sma2, color='magenta', linewidth=7, label='SMA52', alpha=0.3)
# 基于卷积实现5日均线
kernel = np.ones(5) / 5
sma3 = np.convolve(closing_prices, kernel, 'valid')
mp.plot(dates[4:], sma3, color='magenta', linewidth=7, label='SMA53', alpha=0.3)# 基于加权卷积实现5日加权均线
weights = np.exp(np.linspace(-1, 0, 5))
weights = weights[::-1]/weights.sum()
print(weights.sum())
sma4 = np.convolve(closing_prices, weights, 'valid')
mp.plot(dates[4:], sma4, color='red', linewidth=3, label='SMA54', alpha=0.3)mp.tight_layout()
mp.legend()
# 自动格式化x轴日期的显示格式(以最合适的方式显示)
mp.gcf().autofmt_xdate()
mp.show()

    

 

 

 

一维卷积适合解决的问题:

  1.边移动边计算,对应位置相乘再相加;-

  2.数据平滑处理,数据降噪;----重点是卷积核如何选取

 

转载于:https://www.cnblogs.com/yuxiangyang/p/11161789.html

这篇关于numpy之移动均线和卷积运算的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/391383

相关文章

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

uva 575 Skew Binary(位运算)

求第一个以(2^(k+1)-1)为进制的数。 数据不大,可以直接搞。 代码: #include <stdio.h>#include <string.h>const int maxn = 100 + 5;int main(){char num[maxn];while (scanf("%s", num) == 1){if (num[0] == '0')break;int len =

我在移动打工的日志

客户:给我搞一下录音 我:不会。不在服务范围。 客户:是不想吧 我:笑嘻嘻(气笑) 客户:小姑娘明明会,却欺负老人 我:笑嘻嘻 客户:那我交话费 我:手机号 客户:给我搞录音 我:不会。不懂。没搞过。 客户:那我交话费 我:手机号。这是电信的啊!!我这是中国移动!! 客户:我不管,我要充话费,充话费是你们的 我:可是这是移动!!中国移动!! 客户:我这是手机号 我:那又如何,这是移动!你是电信!!

用Unity2D制作一个人物,实现移动、跳起、人物静止和动起来时的动画:中(人物移动、跳起、静止动作)

上回我们学到创建一个地形和一个人物,今天我们实现一下人物实现移动和跳起,依次点击,我们准备创建一个C#文件 创建好我们点击进去,就会跳转到我们的Vision Studio,然后输入这些代码 using UnityEngine;public class Move : MonoBehaviour // 定义一个名为Move的类,继承自MonoBehaviour{private Rigidbo

简单的角色响应鼠标而移动

actor类 //处理移动距离,核心是找到角色坐标在世界坐标的向量的投影(x,y,z),然后在世界坐标中合成,此CC是在地面行走,所以Y轴投影始终置为0; using UnityEngine; using System.Collections; public class actor : MonoBehaviour { public float speed=0.1f; CharacterCo

【Java中的位运算和逻辑运算详解及其区别】

Java中的位运算和逻辑运算详解及其区别 在 Java 编程中,位运算和逻辑运算是常见的两种操作类型。位运算用于操作整数的二进制位,而逻辑运算则是处理布尔值 (boolean) 的运算。本文将详细讲解这两种运算及其主要区别,并给出相应示例。 应用场景了解 位运算和逻辑运算的设计初衷源自计算机底层硬件和逻辑运算的需求,它们分别针对不同的处理对象和场景。以下是它们设计的初始目的简介:

位运算:带带孩子吧,孩子很强的!

快速进制 在聊到位运算之前,不妨先简单过一遍二进制的东西。熟悉二进制和十进制的快速转换确实是掌握位运算的基础,因为位运算直接在二进制位上进行操作。如果不熟悉二进制表示,很难直观理解位运算的效果。 这里主要涉及二进制和十进制之间的互相转换。 十进制转二进制 十进制转二进制可以使用常见的 除2取余法 进行。每次将十进制除以2并记录所得余数,直到商为0,然后再将记录的余数 从下往上排列即

物联网之流水LED灯、正常流水灯、反复流水灯、移动流水灯

MENU 硬件电路设计软件程序设计正常流水LED灯反复流水LED灯移动流水LED灯 硬件电路设计 材料名称数量直插式LED1kΩ电阻杜邦线(跳线)若干面包板1 每一个LED的正极与开发板一个GPIO引脚相连,并串联一个电阻,负极接GND。 当然也可以选择只使用一个电阻。 软件程序设计 正常流水LED灯 因为要用到多个GPIO引脚,所以最好把所有的GPI

12C 新特性,MOVE DATAFILE 在线移动 包括system, 附带改名 NID ,cdb_data_files视图坏了

ALTER DATABASE MOVE DATAFILE  可以改名 可以move file,全部一个命令。 resue 可以重用,keep好像不生效!!! system照移动不误-------- SQL> select file_name, status, online_status from dba_data_files where tablespace_name='SYSTEM'

《C++中的移动构造函数与移动赋值运算符:解锁高效编程的最佳实践》

在 C++的编程世界中,移动构造函数和移动赋值运算符是提升程序性能和效率的重要工具。理解并正确运用它们,可以让我们的代码更加高效、简洁和优雅。 一、引言 随着现代软件系统的日益复杂和对性能要求的不断提高,C++程序员需要不断探索新的技术和方法来优化代码。移动构造函数和移动赋值运算符的出现,为解决资源管理和性能优化问题提供了有力的手段。它们允许我们在不进行不必要的复制操作的情况下,高效地转移资源