在不斷發展的金融世界中,視覺化資料可以提供對市場趨勢前所未有的洞察。在本文中,我們將探討如何利用 Python 來執行特定的財務分析任務:使用雅虎財經的歷史資料來視覺化給定股票的選擇權流。我們將使用一個程式碼片段來獲取期權數據、對其進行處理並產生散點圖來說明看漲期權和看跌期權的流程。讓我們深入了解細節。
我們的目標是分析特定股票的選擇權資料並在散佈圖中將其視覺化。在本例中,我們將使用股票代號 LLY(禮來公司)。此程式碼片段完成以下任務:
首先,我們需要導入必要的函式庫:
import yfinance as yf import os from datetime import datetime, timedelta import matplotlib.pyplot as plt import pandas as pd
我們設定了保存資料的輸出目錄和檔案:
output_directory = 'output' os.makedirs(output_directory, exist_ok=True) output_file = os.path.join(output_directory, 'output.data')
這裡,我們確保輸出目錄存在並指定資料檔案的路徑。
要取得股票代號 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}")
此程式碼取得看漲期權和看跌期權數據,過濾掉包含不需要的捲數據的行,並將其寫入文件。
接下來,我們讀取資料並清理它:
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 的日期時間格式正確。
我們已準備好建立散佈圖:
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中文網其他相關文章!