Numpy实战:numpy + matplotlib 简易绘制 股票布林带

本文介绍了如何结合Numpy的卷积功能和Matplotlib来绘制股票的布林带。首先讲解了Numpy中的一维卷积概念及其参数模式,包括全卷积、同维卷积和有效卷积。接着展示了利用这些概念处理苹果公司某时期的收盘价数据,以生成可视化图表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这篇文章,我们采用numpy + matplotlib 的结合简易的绘制股票的布林带,在此之前,我们先说几个有关函数的应用。

Numpy卷积
在数学中,卷积可以被看做移动平滑的推广。
在numpy 中数组也可以做卷积。
这里我们只涉及一维卷积。
numpy.convolve(a, v, mode=‘full’)
mode可取 ‘full’ (完全卷积), ‘same’ (同维卷积), ‘valid’ (有效卷积)

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import numpy as np
a = np.array([1, 2, 3, 4, 5])
b = np.array([6, 7, 8])
print(np.convolve(a, b))
print(np.convolve(a, b, 'same'))
print(np.convolve(a, b, 'valid'))

[ 6 19 40 61 82 67 40]     #完全卷积
[19 40 61 82 67]           #同维卷积
[40 61 82]                 #有效卷积
其内部运算如下


得        6    19   40   61   82   67   40
0    0    1    2    3    4    5    0    0
8    7    6
     8    7    6
          8    7    6
               8    7    6
                    8    7    6
                          8   7    6
                              8    7   
布林策略是一种基于统计学原理的技术分析方法,常用于股票交易其他金融市场。下面是一个简单的布林策略的Python代码示例: ```python import pandas as pd import numpy as np import matplotlib.pyplot as plt # 获取数据 df = pd.read_csv('data.csv') # 计算布林指标 n = 20 # 计算周期 std = 2 # 布林宽度 ma = df['close'].rolling(n).mean() std_dev = df['close'].rolling(n).std() upper_band = ma + std * std_dev lower_band = ma - std * std_dev # 绘制布林 plt.plot(df['close']) plt.plot(upper_band) plt.plot(lower_band) # 判断买入卖出信号 signals = pd.Series(np.zeros(len(df))) for i in range(n, len(df)): if df['close'][i] > upper_band[i-1]: signals[i] = 1 elif df['close'][i] < lower_band[i-1]: signals[i] = -1 # 绘制买卖信号 buy_signals = signals[signals == 1] sell_signals = signals[signals == -1] plt.scatter(buy_signals.index, df['close'][buy_signals.index], color='green', marker='^', s=100) plt.scatter(sell_signals.index, df['close'][sell_signals.index], color='red', marker='v', s=100) # 计算收益率 returns = pd.Series(np.zeros(len(df))) for i in range(1, len(df)): if signals[i-1] == 1: returns[i] = (df['close'][i] - df['close'][i-1]) / df['close'][i-1] elif signals[i-1] == -1: returns[i] = (df['close'][i-1] - df['close'][i]) / df['close'][i-1] # 绘制收益率曲线 cum_returns = (1 + returns).cumprod() plt.figure() plt.plot(cum_returns) # 输出统计指标 win_rate = len(returns[returns > 0]) / len(returns[returns != 0]) print('总收益率:', cum_returns[-1]) print('年化收益率:', (cum_returns[-1] ** (250/len(df)) - 1)) print('胜率:', win_rate) print('盈亏比:', abs(returns[returns > 0].mean() / returns[returns < 0].mean())) ``` 在这个例子中,我们首先计算了布林的上限下限,然后根据收盘价与布林的位置判断买卖信号。最后,我们计算了收益率并输出了一些统计指标。当然,这只是一个简单的示例,实际操作中还需要考虑一些细节问题,例如手续费、滑点等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值