使用布林带使用Python进行量化交易

Bollinger Bands是John Bollinger在20世纪80年代开发的技术分析工具。交易员用它来衡量潜在的价格走势。下图显示了股票的20天滚动平均线样本及其相应的布林带。

使用布林带使用Python进行量化交易

在本文中,我们将讨论如何获取给定股票的历史数据,计算和绘制其移动平均线和布林带,并解释图表。我们将分别使用python库、yfinance和matplotlib来获取数据和绘制图表。

yfinance是一个Python库,为访问雅虎财经的历史市场数据、实时数据和其他财务信息提供了一个简单的界面。它允许用户轻松检索历史股价、股息、公司行为等数据。运行以下命令来安装yfinance。

pip安装yfinance

了解布林带

布林带由价格图表上绘制的三条线组成:一条中线表示简单移动平均线(通常在20个周期内计算),以及通常距离移动平均线两个标准差的上线和下线。随着市场波动性的增加或减少,这些频段根据波动性、扩张和收缩进行动态调整。

以下是布林带组件的细分:

  1. 中线(简单移动平均线):
  • 布林带的中线是特定时期(通常为20个时期)收盘价的简单移动平均线(SMA)。
  • 它作为基线,代表所选期间证券的平均价格。

2.上频段:

  • 上带是通过在中间线上加两个标准差来计算的。
  • 它代表了预期价格走势的上限。
  • 在上升趋势期间,它往往充当阻力水平。

3.下频段:

  • 下带是通过从中线减去两个标准差来计算的。
  • 它代表了预期价格走势的下限。
  • 在下降趋势期间,它往往充当支撑水平。

解释和使用:

  • 波动性测量:布林带根据市场波动性扩张和收缩。宽带表示高波动性,而窄频段表示低波动性。
  • 超买和超卖条件:当价格触及或超过上区间时,可能表明证券超买,并可能发生逆转或回调。相反,当价格触及或跌破较低区间时,可能表明证券超卖,并可能出现上行的潜在逆转。
  • 趋势确认:布林带可用于确认其他指标或分析方法确定的趋势。在上升趋势中,价格倾向于拥抱上带,而在下行趋势中,它倾向于保持在下带附近。
  • 交易信号:交易员经常使用布林带来识别交易的进入和退出点。例如,当价格接触到下波段时买入,当它触及上波段时卖出(反之亦然)。

总体而言,布林带是交易员和分析师使用的多功能工具,用于评估市场波动性,识别潜在的逆转,确认趋势并生成交易信号。它们提供了关于价格行动的宝贵见解,并可以纳入不同金融市场的各种交易策略。

使用Python绘制布林带

我们需要使用雅虎金融API(yfinance)获取股票数据,使用Pandas库将其转换为结构化格式,然后使用matplotlib将其与Bollinger Bands一起可视化。

  1. 获取库存数据:
def fetch_stock_datastock_symbol):
    尝试:
        # 获取股票数据
股票 = yf.Ticker(stock_symbol)
stock_data = stock.history(period="12mo")

        #将“关闭”列转换为数字
stock_data['Close'] = pd.to_numeric(stock_data['Close'])
    
        返回股票_数据
    例外情况除外:
        print("获取股票数据时出错:", str(e))
        返回无
  • fetch_stock_data(stock_symbol)函数将股票符号作为输入参数。
  • 它利用yfinance库获取过去12个月(period=”12mo”指定符号的历史股票数据。
  • 股票数据的“关闭”列转换为数字格式。

现在,让我们尝试为TATASTEEL运行此方法,并检查响应。

stock_data = fetch_stock_data(stock_symbol='TATASTEEL.NS')
打印(stock_data.head())
使用布林带使用Python进行量化交易

  1. 绘制布林带:
def plot_bollinger_bands(stock_data):plt.figure(figsize=(126))        #绘制股票收盘价plt.plot(stock_data['关闭'],标签=“关闭价格”)plt.figure(figsize=(126))    # 计算和绘制20天滚动平均值stock_data['MA20'] = stock_data['Close'].rolling(window=20).mean()plt.plot(stock_data['MA20'],label='20-Day Rolling Average'# 计算和绘制布林带stock_data['20D_MA'] = stock_data['Close'].rolling(window=20).mean()stock_data['Upper_band'] = stock_data['20D_MA'] + 2 * stock_data['Close'].rolling(window=20).std()stock_data['Lower_band'] = stock_data['20D_MA'] - 2 * stock_data['Close'].rolling(window=20).std()plt.plot(stock_data['Upper_band'], label='Upper Bollinger Band', linestyle='--', color='red')plt.plot(stock_data['Lower_band'], label='Lower Bollinger Band', linestyle='--', color='green')    plt.title(“滚动平均和布林带的股票数据”)plt.xlabel('日期')plt.ylabel('价格')plt.legend()plt.show()
  • 函数plot_bollinger_bands(stock_data)将获取的股票数据作为输入。
  • 它创建了一个matplotlib数字,并绘制了股票的收盘价。
  • 它计算股票收盘价的20天滚动平均数并绘制出来。
  • 它根据20天滚动平均值和标准差计算上下布林带。
  • 然后将这些波段与收盘价一起绘制。
使用布林带使用Python进行量化交易

现在,你需要做的就是在蓝线到达下频段时买入,在超过红线时卖出!交易愉快 :)

如果您想与其他股票代码一起玩,这是完整代码。

from datetime import datetime
import yfinance as yf
import pandas as pd
import matplotlib.pyplot as plt

def fetch_stock_data(stock_symbol):
    try:
        # Fetching stock data
        stock = yf.Ticker(stock_symbol)
        stock_data = stock.history(period="12mo")
        print(stock_data.head())

        # Convert 'Close' column to numeric
        stock_data['Close'] = pd.to_numeric(stock_data['Close'])
    
        return stock_data
    except Exception as e:
        print("Error fetching stock data:", str(e))
        return None

def plot_bollinger_bands(stock_data):
    plt.figure(figsize=(12, 6))
    
    # Plotting stock closing price
    plt.plot(stock_data['Close'], label='Close Price')

    plt.figure(figsize=(12, 6))
    # Calculating and plotting 20-day rolling average
    stock_data['MA20'] = stock_data['Close'].rolling(window=20).mean()
    plt.plot(stock_data['MA20'], label='20-Day Rolling Average')

    # Calculating and plotting Bollinger Bands
    stock_data['20D_MA'] = stock_data['Close'].rolling(window=20).mean()
    stock_data['Upper_band'] = stock_data['20D_MA'] + 2 * stock_data['Close'].rolling(window=20).std()
    stock_data['Lower_band'] = stock_data['20D_MA'] - 2 * stock_data['Close'].rolling(window=20).std()
    plt.plot(stock_data['Upper_band'], label='Upper Bollinger Band', linestyle='--', color='red')
    plt.plot(stock_data['Lower_band'], label='Lower Bollinger Band', linestyle='--', color='green')
    
    plt.title('Stock Data with Rolling Average and Bollinger Bands')
    plt.xlabel('Date')
    plt.ylabel('Price')
    plt.legend()
    plt.show()

发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/283855
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 20小时前
下一篇 19小时前

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注