自己做的网站百度收索不到,急求聊城网站建设,wordpress常用代码,龙川做网站的引言
在股票交易的世界中#xff0c;技术分析是投资者们用来预测市场动向的重要工具。布林带#xff08;Bollinger Bands#xff09;作为一种动态波动范围指标#xff0c;因其直观性和实用性而广受欢迎。本文将通过Python代码#xff0c;展示如何使用布林带结合K线图来分…引言
在股票交易的世界中技术分析是投资者们用来预测市场动向的重要工具。布林带Bollinger Bands作为一种动态波动范围指标因其直观性和实用性而广受欢迎。本文将通过Python代码展示如何使用布林带结合K线图来分析股票价格走势并寻找可能的交易信号。
布林带指标简介
布林带由三部分组成中轨移动平均线上轨中轨加上两倍标准差以及下轨中轨减去两倍标准差。它们可以帮助交易者识别股票的超买或超卖状态从而发现潜在的买卖机会。
Python代码实现
以下是使用Python进行布林带计算和K线图绘制的完整示例代码
1. 导入必要的库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt2. 定义布林带计算函数
def bollinger_bands(close_prices, window20, num_std2):rolling_mean close_prices.rolling(windowwindow).mean()rolling_std close_prices.rolling(windowwindow).std()upper_band rolling_mean (rolling_std * num_std)lower_band rolling_mean - (rolling_std * num_std)return upper_band, lower_band3. 生成模拟数据示例数据
np.random.seed(0)
dates pd.date_range(start2022-01-01, end2024-01-01, freqD)
prices np.random.normal(loc100, scale2, sizelen(dates)) np.sin(np.arange(len(dates)) * 0.05) * 10
opens prices * np.random.uniform(0.98, 1.02, len(prices))
closes prices * np.random.uniform(0.98, 1.02, len(prices))
df pd.DataFrame({Open: opens, Close: closes}).set_index(dates)4. 计算涨跌幅和布林带
df[Color] np.where(df[Close] df[Open], red, cyan)
upper_band, lower_band bollinger_bands(df[Close])5. 标记买卖信号
buy_signals df[df[Close] lower_band]
sell_signals df[df[Close] upper_band]6. 计算累计盈利
profit 0
profits []
for i in range(1, len(df)):if df[Close][i] df[Close][i-1]:profit df[Close][i] - df[Close][i-1]else:profit - df[Close][i] - df[Close][i-1]profits.append(profit)
df[Cumulative_Profit] profits7. 绘制K线图、布林带和累计盈利图
fig, (ax1, ax2) plt.subplots(2, 1, figsize(10, 10), sharexTrue)8.绘制K线图
for i in range(len(df)):color df[Color][i]ax1.plot(df.index[i:i1], df[Open][i:i1], colorcolor, linewidth1)ax1.plot(df.index[i:i1], df[Close][i:i1], colorcolor, linewidth1)9.绘制布林带
ax1.plot(upper_band, colorred, linestyle--, labelUpper Band)
ax1.plot(lower_band, colorgreen, linestyle--, labelLower Band)9. 标记买卖信号
ax1.scatter(buy_signals.index, buy_signals[Close], marker^, colorblue, labelBuy Signal)
ax1.scatter(sell_signals.index, sell_signals[Close], markerv, colorred, labelSell Signal)9. 绘制累计盈利图
ax2.plot(df.index[1:], df[Cumulative_Profit], colorblue, labelCumulative Profit)9.设置图表标题和标签
ax1.set_title(Stock Price with Bollinger Bands and Signals)
ax1.set_ylabel(Price)
ax2.set_title(Cumulative Profit Over Time)
ax2.set_ylabel(Profit)9. 显示图例
ax1.legend()
ax2.legend()9.显示图表
plt.tight_layout()
plt.show()完整代码
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt# 计算布林带指标
def bollinger_bands(close_prices, window20, num_std2):rolling_mean close_prices.rolling(windowwindow).mean()rolling_std close_prices.rolling(windowwindow).std()upper_band rolling_mean (rolling_std * num_std)lower_band rolling_mean - (rolling_std * num_std)return upper_band, lower_band# 生成示例数据
np.random.seed(0)
dates pd.date_range(start2022-01-01, end2024-01-01, freqD)
prices np.random.normal(loc100, scale2, sizelen(dates)) np.sin(np.arange(len(dates)) * 0.05) * 10
opens prices * np.random.uniform(0.98, 1.02, len(prices))
closes prices * np.random.uniform(0.98, 1.02, len(prices))
df pd.DataFrame({Date: dates, Open: opens, Close: closes}).set_index(Date)# 计算涨跌幅
df[Color] np.where(df[Close] df[Open], red, cyan)# 计算布林带
upper_band, lower_band bollinger_bands(df[Close])# 标记买卖信号
buy_signals df[df[Close] lower_band]
sell_signals df[df[Close] upper_band]# 计算累计盈利
profit 0
profits []
for i in range(1, len(df)):if df[Close][i] df[Close][i-1]:profit df[Close][i] - df[Close][i-1]else:profit - df[Close][i] - df[Close][i-1]profits.append(profit)# 绘制K线图和信号图以及累计盈利图
fig, (ax1, ax2) plt.subplots(2, 1, figsize(10, 10), sharexTrue)# 绘制K线图
for i in range(len(df)):if df[Close][i] df[Open][i]:ax1.plot([df.index[i], df.index[i]], [df[Open][i], df[Close][i]], colorred, linewidth1)else:ax1.plot([df.index[i], df.index[i]], [df[Open][i], df[Close][i]], colorcyan, linewidth1)ax1.set_title(Candlestick Chart and Signals)
ax1.set_ylabel(Price)
ax1.grid(True)# 绘制布林带
ax1.plot(upper_band.index, upper_band, labelUpper Bollinger Band, colorred, linestyle--)
ax1.plot(lower_band.index, lower_band, labelLower Bollinger Band, colorgreen, linestyle--)# 标记买卖信号
ax1.scatter(buy_signals.index, buy_signals[Close], marker^, colorblue, labelBuy Signal)
ax1.scatter(sell_signals.index, sell_signals[Close], markerv, colorred, labelSell Signal)# 绘制累计盈利图
ax2.plot(df.index[1:], profits, labelCumulative Profit, colorblue)
ax2.set_title(Cumulative Profit)
ax2.set_xlabel(Date)
ax2.set_ylabel(Profit)
ax2.legend()
ax2.grid(True)plt.tight_layout()
plt.show()
效果展示