PythonでVIX指数の警戒アラートを自動送信するスクリプト

最終更新日

本記事では、VIX指数(恐怖指数)が一定の閾値を超えた場合に、自動でメール通知を送るPythonスクリプトを紹介します。マーケットのボラティリティを監視したい投資家やトレーダーにとって、有用なツールです。ここではアメリカのVIX指数を通知するようにしています。このスクリプトを応用すれば様々な指標をアラートできます。自動化の部分はOSによって異なるので、スクリプト部分に焦点を当てています。自動化を簡単に説明するとOSのタイマー機能を使ったり、cronコマンドを使用すると良いでしょう。

機能概要

  • Yahoo Finance から最新のVIX指数を取得
  • 設定した閾値(今回は30)を超えたらメールで通知
  • Gmailを使ったSMTP送信に対応
  • コマンドラインから簡単に実行可能

VIX指数とは?

VIX指数(Volatility Index)は、S&P500オプションの価格変動性を元に算出されるインデックスで、「恐怖指数」とも呼ばれます。一般的に20未満が平常、30を超えると投資家の恐怖感が高まっているとされます。

スクリプトの構造

1. 必要なライブラリのインポート

import smtplib
import yfinance as yf
  • smtplib: メール送信に使用
  • yfinance: Yahoo Finance APIで株価データを取得

2. メール送信の設定

SMTP_SERVER = "smtp.gmail.com"
SMTP_PORT = 587
FROM_EMAIL = "..."       # 自分のGmail
PASSWORD = "..."         # アプリパスワード(2段階認証対応)
TO_EMAIL = "..."         # 送信先メール

Gmailはセキュリティが厳しいため、アプリパスワードを使用する必要があります。Gmailの通常パスワードではなく、アプリパスワードを必ず使用してください。

3. VIX取得と通知処理

def fetch_and_notify_vix():
    ...
  • yfinance.Ticker("^VIX") でVIXデータを取得
  • Close価格を抽出し、閾値(30)を超えていれば send_email() を実行

4. メール送信関数

def send_email(vix_value):
    ...
  • タイトルと本文を作成し、SMTPサーバーを通じて送信

セキュリティ上の注意

  • .envファイルや秘密管理ツールで、パスワードをハードコードせずに管理するのが望ましいです。

まとめ

このスクリプトは、PythonとオープンなAPIを活用して、金融市場の重要指標であるVIXを監視・通知する便利な自動化ツールです。個人投資家だけでなく、リスク管理を意識するすべての人におすすめです。

完全コードはこちらです。

import smtplib
import yfinance as yf

# メール送信設定
SMTP_SERVER = "smtp.gmail.com"
SMTP_PORT = 587
FROM_EMAIL = "..."       # 自分のGmail
PASSWORD = "..."         # アプリパスワード(2段階認証対応)
TO_EMAIL = "..."         # 送信先メール

# VIX危険水域
THRESHOLD = 30.0

def send_email(vix_value):
    """
    指定されたメールアドレスにVIX通知を送信
    """
    subject = "VIX指数アラート!"
    body = f"現在のVIX指数は {vix_value:.2f} で、危険水域({THRESHOLD})を超えています。"

    message = f"Subject: {subject}\n\n{body}"
    
    try:
        with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as server:
            server.starttls()
            server.login(FROM_EMAIL, PASSWORD)
            server.sendmail(FROM_EMAIL, TO_EMAIL, message)
        print(f"警告メールを送信しました: {TO_EMAIL}")
    except Exception as e:
        print(f"メール送信中にエラーが発生しました: {e}")

def fetch_and_notify_vix():
    """
    VIX指数を取得し、危険水域を超えた場合に通知を送信
    """
    try:
        vix = yf.Ticker("^VIX")
        hist = vix.history(period="1d")
        if hist.empty:
            raise ValueError("VIXのヒストリーデータが取得できません。")
        vix_value = hist["Close"].iloc[-1]
        print(f"現在のVIX指数: {vix_value:.2f}")
        
        if vix_value > THRESHOLD:
            send_email(vix_value)
        else:
            print(f"VIX指数は正常範囲内です: {vix_value:.2f}")
    except Exception as e:
        print(f"VIX指数取得中にエラーが発生しました: {e}")

if __name__ == "__main__":
    fetch_and_notify_vix()

fl0wr00t

シェアする