AIとファイナンス

AIとファイナンスの架け橋、それがこのブログの目指すところです。兼業投資家向けに、Pythonを駆使して株やFXの分析を「自分で」行えるようになるための情報を提供します。ニューラルネットワークを活用した市場予測から、実証済みの金融理論まで、全てのコードを公開し、誰もが活用できるように!是非色々なコードで遊んでみてください!

【FX・相場】三空を活用してS&P500の底を見つける方法【テクニカル分析】

こんにちは前回の記事では酒田五法を紹介しました。その中でダミーのデータを使って三空をビジュアライズしましたが、やはり実データでどのくらい三空が出現しているか見てみたいですよね!

今回はS&P500の過去一年間のデータを使って三空がどのくらい出現するのかを見てみます。

ライブラリのインポートとデータのダウンロード

いつもと嗜好を変えてデータのダウンロードをしてくれる関数を定義してみました。

import yfinance as yf
import pandas as pd
import mplfinance as mpf

def download_data():
    # S&P 500のシンボルは'^GSPC'
    ticker = "^GSPC"
    # 一年分の日足データをダウンロード
    data = yf.download(ticker, period="1y")
    return data

def main():
    # データのダウンロード
    data = download_data()
    print(data.head())  # データの最初の5行を表示して確認

if __name__ == "__main__":
    main()

「三空」のパターンを検出

main.pyに続けて、以下の関数を追加して「三空」のパターンを探します。終値と翌日の始値で大きく窓が空いている足が3連続している「三空」のパターンを探し、その情報を処理するコードを実装します。ここでは「窓」が空いているとは、翌日の始値が前日の終値よりも大きく下がっている(または上がっている)状態を指します

def find_san_ku(data):
    # 終値と翌日の始値の差を計算
    data['Gap'] = data['Open'].shift(-1) - data['Close']
    # 「三空」を見つけるためのマーカー(フラグ)リストを初期化
    markers = []

    # データをループして「三空」パターンを探す
    for i in range(len(data) - 3):
        # 3連続で窓が空いているかをチェック
        if data['Gap'].iloc[i] < 0 and data['Gap'].iloc[i + 1] < 0 and data['Gap'].iloc[i + 2] < 0:
            # 「三空」パターンが見つかった場合、その位置(日付)をマーカーに追加
            markers.append(data.index[i + 2])
   
    return markers

def main():
    # データのダウンロード
    data = download_data()
    # 「三空」パターンを探す
    san_ku_markers = find_san_ku(data)
    print("三空のパターンが見つかった日付:", san_ku_markers)

mplfinanceを使ってビジュアライズ

やっぱりビジュアライズが一番大事ですね!mplfinanceを使用して「三空」のパターンがある箇所をマーキングします。main関数に以下のコードを追加して、ビジュアライズの処理を実装します。

def visualize_san_ku(data, markers):
    # 「三空」の位置に線を引くためのリストを生成
    alines = []
    for marker in markers:
        # 各「三空」の日に対して、その日の高値と安値を結ぶ線を設定
        high = data.loc[marker, 'High']
        low = data.loc[marker, 'Low']
        alines.append([(marker, low), (marker, high)])
   
    # mplfinanceのプロット設定
    mpf.plot(data, type='candle', figscale=1.2, style='charles',
             title="S&P 500 San Ku Patterns",
             alines=dict(alines=alines, colors=['r'], linewidths=2),
             show_nontrading=True)

   
def main():
    # データのダウンロード
    data = download_data()
    # 「三空」パターンを探す
    san_ku_markers = find_san_ku(data)
    print("三空のパターンが見つかった日付:", san_ku_markers)
    # 「三空」をビジュアライズ
    visualize_san_ku(data, san_ku_markers)

if __name__ == "__main__":
    main()

結果

赤色の縦棒が書いてある部分がプログラムが三空を発見している場所です。この90日間で7回三空が発生していますね。実際にS&P500はこの期間(常に?)は上昇トレンドだったので調整下げの底を見つけるには三空はかなり使えたかもしれませんね。

皆さまもプログラムで是非遊んでみてくださいね!

 

是非クリックお願いします!