アノマリー分析ツールのPythonコードの提供
ここでは、下記の記事のコードの解説記事になります。
はじめに
この記事は、以下の2つのコードに関する解説記事です。
無料提供部分: 基本的な合成チャートの作成
有料提供部分: カスタマイズ機能を追加した高機能版(WEBツール)
メンバーシップの方は、1か月3980円(コアメンバー)とお得になります。もしよろしければどうぞ。ツールのご利用のみの場合は月980円になります。
無料提供部分
コードの概要
この無料アプリでは、過去1ヶ月のUSD/JPYの価格変動を0:00を基準にして合成チャートを作成します。ゴトー日(5の倍数の日)を判定し、それに基づいた価格変動を分析します。
必要なライブラリのインストール
まず、必要なライブラリをインストールします。以下のコマンドを実行してください。
pip install pandas yfinance matplotlib
コード
以下が無料提供部分のコードです。
import pandas as pd
import yfinance as yf
import matplotlib.pyplot as plt
# ウェブアプリケーションのヘッダーを表示
print("""
# 合成チャートアプリケーション
表示されているのはUSD/JPYの0:00を基準とした価格変動です。
**期間**: 過去1ヶ月
""")
# ティッカーシンボルの設定
ticker_symbol = 'USDJPY=X'
# ティッカーオブジェクトを作成してデータを取得
ticker_data = yf.Ticker(ticker_symbol)
# 指定された期間のUSD/JPYの歴史データをデータフレームとして取得
tickerDF = ticker_data.history(period='1mo', interval="15m")
# ゴトー日を判定する関数
def is_gotoubi(date):
day = date.day
return day % 5 == 0 and day != 0
# 合成チャートを作成する関数
def create_composite_chart(df):
df['is_gotoubi'] = df.index.to_series().apply(lambda x: is_gotoubi(x))
gotoubi_df = df[df['is_gotoubi']].copy()
# データが空の場合の処理
if gotoubi_df.empty:
print("ゴトー日のデータがありません。")
return
# 0時基準にデータを調整する
gotoubi_df.index = pd.to_datetime(gotoubi_df.index)
gotoubi_df['time_from_midnight'] = gotoubi_df.index.hour * 3600 + gotoubi_df.index.minute * 60 + gotoubi_df.index.second
gotoubi_df['date'] = gotoubi_df.index.date
# 0:00の価格を基準に差分を計算
base_prices = gotoubi_df[gotoubi_df['time_from_midnight'] == 0].set_index('date')['Close']
if base_prices.empty:
print("ゴトー日0:00の価格データがありません。")
return
gotoubi_df = gotoubi_df.join(base_prices, on='date', rsuffix='_base')
gotoubi_df['price_diff'] = gotoubi_df['Close'] - gotoubi_df['Close_base']
# ピボットテーブルを作成
pivot_df = gotoubi_df.pivot(index='time_from_midnight', columns='date', values='price_diff')
# 各時点での中央値を計算
median_series = pivot_df.median(axis=1)
# チャートを描画
plt.figure(figsize=(12, 6))
plt.plot(median_series.index, median_series.values, label='Median Price Difference from 0:00')
plt.title('Composite Chart for Gotoubi Days (15-Minute Interval)')
plt.xlabel('Time from Midnight (seconds)')
plt.ylabel('Median Price Difference')
plt.axhline(y=0, color="#565656", alpha=0.3)
plt.grid(True)
# X軸の表示を時間形式に変更し、0:00から12:00まで表示
hours = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
plt.xticks([h * 3600 for h in hours], [f'{h}:00' for h in hours])
plt.xlim([0, 12 * 3600])
# Y軸の表示範囲を設定
plt.ylim([-0.1, 0.5])
# 3:30に縦線を追加
plt.axvline(x=3*3600 + 30*60, color='red', linestyle='--', label='3:30')
# 9:55に縦線を追加
plt.axvline(x=9*3600 + 55*60, color='red', linestyle='--', label='9:55')
plt.legend()
plt.show()
# ゴトー日の変動グラフを追加
print("## ゴトー日の価格変動")
create_composite_chart(tickerDF)
有料部分(カスタマイズ機能を追加した高機能版)
機能の追加
有料版では、以下の機能を追加しています:
通貨ペアや資産の選択
足の選択
期間の選択
CSVファイルのアップロード
前倒しゴトー日と月末の判定
曜日フィルタリング
アノマリー分析結果のダウンロード(CSV、画像)
StreamlitでWEBアプリ(UIがあって使いやすいです。)
ご自身の環境で実行いただくことで、環境にもよりますが高速に分析可能です。また、カスタマイズすることでより詳細な分析が可能になります。
ここから先は
12,433字
この記事が気に入ったらサポートをしてみませんか?