見出し画像

アノマリー分析ツールの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字
この記事のみ ¥ 14,980
期間限定 PayPay支払いすると抽選でお得に!

この記事が気に入ったらサポートをしてみませんか?