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