Python を使用したオプション フローの視覚化: ステップバイステップ ガイド

WBOY
リリース: 2024-09-08 06:33:03
オリジナル
951 人が閲覧しました

Visualizing Options Flow with Python: A Step-by-Step Guide

進化し続ける金融の世界では、データを視覚化することで市場の傾向についてこれまでにない洞察を得ることができます。この記事では、Yahoo Finance の履歴データを使用して特定の株式のオプション フローを視覚化するという特定の財務分析タスクに Python を活用する方法を検討します。オプション データを取得して処理し、コールおよびプット オプションのフローを示す散布図を生成するコード スニペットを使用します。詳細を見ていきましょう。

はじめる

私たちの目標は、特定の株式のオプション データを分析し、散布図で視覚化することです。この例では、株式ティッカー LLY (Eli Lilly and Company) を使用します。コード スニペットは次のことを実現します:

  1. 指定された株式の最新のオプション データを取得します。
  2. データをフィルタリングしてクリーンアップします。
  3. コールおよびプットのオプションを経時的に表す散布図を作成します。

段階的な内訳

1. ライブラリのインポート

まず、必要なライブラリをインポートする必要があります。

import yfinance as yf
import os
from datetime import datetime, timedelta
import matplotlib.pyplot as plt
import pandas as pd
ログイン後にコピー
  • yfinance は、過去の株価データを取得するために使用されます。
  • os はディレクトリとファイルの操作を処理します。
  • datetime と timedelta は日付を管理するためのものです。
  • matplotlib.pyplot は視覚化を作成するためのものです。
  • pandas はデータ操作と分析用です。

2. ディレクトリとファイルのセットアップ

データを保存する出力ディレクトリとファイルを設定します。

output_directory = 'output'
os.makedirs(output_directory, exist_ok=True)
output_file = os.path.join(output_directory, 'output.data')
ログイン後にコピー

ここでは、出力ディレクトリが存在することを確認し、データ ファイルのパスを指定します。

3. オプション データの取得と処理

ティッカー LLY のオプション データを取得するには、yfinance を使用します。

ticker = 'LLY'
days = 21
populate_data = 'Y'  # Set 'N' to use existing file, 'Y' to create new file
ログイン後にコピー

populate_data が「Y」に設定されている場合、コードは新しいオプション データをフェッチします。 「N」の場合、既存のデータ ファイルが使用されます。

データの取得と処理がどのように行われるかは次のとおりです:

if populate_data == 'Y':
    stock = yf.Ticker(ticker)
    options_dates = stock.options

    today = datetime.now()
    fourteen_days_later = today + timedelta(days)

    with open(output_file, 'w') as file:
        for date in options_dates:
            date_dt = datetime.strptime(date, '%Y-%m-%d')
            if today <= date_dt <= fourteen_days_later:
                calls = stock.option_chain(date).calls
                puts = stock.option_chain(date).puts

                for _, row in calls.iterrows():
                    if not filter_volume(row['volume']):
                        file.write(f"Call,{date},{row['strike']},{row['volume']}\n")

                for _, row in puts.iterrows():
                    if not filter_volume(row['volume']):
                        file.write(f"Put,{date},{row['strike']},{row['volume']}\n")

    print(f"Data has been written to {output_file}")
ログイン後にコピー

このコードは、コールおよびプットのオプション データをフェッチし、不要なボリューム データを含む行を除外して、ファイルに書き込みます。

4. 視覚化のためのデータのクリーニングと準備

次に、データを読み取り、クリーンアップします。

data = pd.read_csv(output_file, names=['Type', 'Last_Trade_Date', 'Strike', 'Volume'])
data.dropna(inplace=True)
data['Last_Trade_Date'] = pd.to_datetime(data['Last_Trade_Date'])
data = data[data['Volume'].notna()]
ログイン後にコピー

データセットに NaN 値が含まれていないこと、および Last_Trade_Date が正しい日時形式であることを確認します。

5. 散布図の作成

散布図を作成する準備ができました:

extra_days_before = 5
extra_days_after = 5

min_date = data['Last_Trade_Date'].min() - timedelta(days=extra_days_before)
max_date = data['Last_Trade_Date'].max() + timedelta(days=extra_days_after)

plt.figure(figsize=(12, 8))

calls_data = data[data['Type'] == 'Call']
plt.scatter(calls_data['Last_Trade_Date'], calls_data['Strike'],
            s=calls_data['Volume'], c='green', alpha=0.6, label='Call')

puts_data = data[data['Type'] == 'Put']
plt.scatter(puts_data['Last_Trade_Date'], puts_data['Strike'],
            s=puts_data['Volume'], c='red', alpha=0.6, label='Put')

plt.xlabel('\nLast Trade Date')
plt.ylabel('Strike Price\n')
plt.title(f'Options Flow for {ticker} ({days} days)\n', fontsize=16)
plt.xticks(rotation=45, ha='right')
plt.gca().xaxis.set_major_formatter(plt.matplotlib.dates.DateFormatter('%Y-%m-%d'))
plt.xlim(min_date, max_date)
plt.subplots_adjust(bottom=0.2)
plt.grid(True)

plt.text(0.5, 0.5, f'{ticker}', color='gray', fontsize=80, alpha=0.5,
         ha='center', va='center', rotation=15, transform=plt.gca().transAxes)
plt.text(0.95, 0.95, 'medium.com/@dmitry.romanoff', color='gray', fontsize=20, alpha=0.5,
         ha='right', va='top', transform=plt.gca().transAxes)
plt.text(0.05, 0.05, 'medium.com/@dmitry.romanoff', color='gray', fontsize=20, alpha=0.5,
         ha='left', va='bottom', transform=plt.gca().transAxes)

plot_file = os.path.join(output_directory, 'options_scatter_plot.png')
plt.savefig(plot_file)

print(f"Scatter plot has been saved to {plot_file}")
ログイン後にコピー

このセグメントでは、Y 軸に権利行使価格、X 軸に取引日をとったコール オプションとプット オプションの散布図が作成されます。ポイントのサイズは取引量を表し、緑色はコールを、赤色はプットを示します。また、ブランド化を目的として透かしを追加し、プロットをファイルに保存します。

結論

オプション データを視覚化すると、トレーダーやアナリストが市場センチメントや取引活動を理解するのに役立ちます。このガイドでは、Python を使用してオプション データを取得、処理、視覚化する方法を説明しました。これらの手順に従うことで、このコードを任意の銘柄に適用し、そのオプション フローを分析して、市場トレンドに関する貴重な洞察を得ることができます。

特定のニーズに合わせてコードを自由に変更し、財務データを視覚化するさまざまな方法を検討してください。

以上がPython を使用したオプション フローの視覚化: ステップバイステップ ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート