見出し画像

ボリンジャーバンドをプログラムしてみた

ボリンジャーバンドは、米国人の投資家ジョン・ボリンジャーが1983年に考案したテクニカル分析手法のひとつです
マネックス証券では、ツール揃えているみたいですね
移動平均と分散で表される簡単な定義なのでプログラミングしてみました
ボリンジャーバンドの紹介記事はこちら

または、こちらにも

Pythonでプログラミングしましたが、プログラムを実行するのに、パソコンにPython環境のインストールは必要ありません。
GoogleがPythonの実行環境(NVIDIAのチップが乗ったGPUサーバー)を無償提供しているのです
Gmailアドレスを持っていたら、誰でもGoogleのページに入ってプログラムを実行できます(グーグルコラボ)

分かんないようだったら、丁寧な使い方の説明ページがあるので、こちらを参考に

まずはボリンジャーバンドプログラム実行結果から

ここ1年のテスラ株の変動とボリンジャーバンド

青が株価変動、黄色が25日の移動平均線
赤と緑が、±2σ(σは標準偏差)のラインを表しています
上の赤に株価が触れると売りのサイン(つまり株価は下降)、下の緑に触れると買いのサイン(つまり株価は上昇)と紹介記事にはありましたが、確かに上に触れると、株価は落ちていますね
しかし、下は、触れてもしばらくは一緒に動いて、急に反発するから、そろそろ来るぞ、くらいのサインでしか無いですね
±2σを±1σ、±3σに変えたり、25日移動平均線を20日に変えたりしてみると、売り買いを考えるのに一番適したチャートができるかもしれません
チャレンジしてみてくださいね

株価情報は、米国Yahoo Financeのデータベースから自動取得しています
プログラム中で、”TSLA"を、他のティッカーシンボルに変えると、いろんな会社のボリンジャーバンドが表示できます。
A = fetch_stock_data("TSLA")

以下、プログラム です

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")

        # 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')

    # Calculating and plotting 25-day rolling average
    stock_data['MA25'] = stock_data['Close'].rolling(window=25).mean()
    plt.plot(stock_data['MA25'], label='25-Day Rolling Average')

    # Calculating and plotting Bollinger Bands
    stock_data['25D_MA'] = stock_data['Close'].rolling(window=25).mean()
    stock_data['Upper_band'] = stock_data['25D_MA'] + 2 * stock_data['Close'].rolling(window=25).std()
    stock_data['Lower_band'] = stock_data['25D_MA'] - 2 * stock_data['Close'].rolling(window=25).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()

A = fetch_stock_data("TSLA")
plot_bollinger_bands(A)


この記事が気に入ったらサポートをしてみませんか?