Pythonで株価を毎日自動取得する方法【schedule・cron】

Uncategorized

※本記事には広告・アフィリエイトリンクが含まれます。掲載内容は筆者の調査・検証に基づき、読者の判断を助ける目的で作成しています。

動作確認環境:Python 3.11 / pandas 2.x / yfinance 0.2.x / schedule 1.x

結論から言うと

  • Pythonのscheduleライブラリを使えば、毎日決まった時間に株価を自動取得できます
  • 自宅PCでの常時稼働には限界があるため、安定運用にはVPSの利用が現実的です
  • 取得したデータはCSVに日付付きで保存することで、長期データの蓄積が可能です

自動取得に使うツールの選択肢

Pythonで定期実行を実現する方法はいくつかあります。率直に言うと、用途によって使い分けるのが合理的という仕組みです。

  • scheduleライブラリ:Pythonだけで完結。コードが読みやすく初心者でも扱いやすい
  • cronジョブ(Linux):OS標準機能。VPSでの定期実行に最適。Pythonを起動・終了するため常駐不要
  • Windowsタスクスケジューラ:Windows環境ならPCを常時起動しておけば使えます
  • APScheduler:より高機能な定期実行が必要な場合に使うライブラリ

scheduleライブラリで毎日自動取得するコード

まずインストールします。

pip install schedule
import yfinance as yf
import pandas as pd
import schedule
import time
from datetime import datetime

def fetch_stock():
    tickers = ["7203.T", "6758.T", "9984.T"]
    date = datetime.now().strftime("%Y%m%d")
    
    for ticker in tickers:
        df = yf.download(ticker, period="1d", auto_adjust=True)
        if isinstance(df.columns, pd.MultiIndex):
            df.columns = df.columns.droplevel(1)
        
        filename = f"{ticker.replace('.','_')}_{date}.csv"
        df.to_csv(filename)
        print(f"{datetime.now().strftime('%H:%M:%S')}: {ticker} 取得完了 → {filename}")

# 毎日15:30に実行(東京市場終値確定後)
schedule.every().day.at("15:30").do(fetch_stock)

print("スケジューラー起動。Ctrl+Cで停止。")
while True:
    schedule.run_pending()
    time.sleep(60)

毎日決まった時間に実行する設定

scheduleライブラリの時間指定は柔軟です。また、複数の時間帯に実行する設定も追加できます。

import schedule

# 毎日15:30に実行
schedule.every().day.at("15:30").do(fetch_stock)

# 平日のみ実行(月〜金)
schedule.every().monday.at("15:30").do(fetch_stock)
schedule.every().tuesday.at("15:30").do(fetch_stock)
schedule.every().wednesday.at("15:30").do(fetch_stock)
schedule.every().thursday.at("15:30").do(fetch_stock)
schedule.every().friday.at("15:30").do(fetch_stock)

# 1時間おきに実行
schedule.every(1).hours.do(fetch_stock)

# 次の実行予定を確認
print(schedule.next_run())

日本株の取引時間は9:00〜11:30と12:30〜15:30です。終値が確定する15:30以降に実行するのが一般的です。

自宅PCで常時稼働させる際の課題

scheduleを使うにはPythonスクリプトをずっと起動し続ける必要があります。自宅PCの場合、以下の課題があります。

  • PCをシャットダウンするとスクリプトも停止する
  • スリープ・スクリーンセーバーで処理が止まることがある
  • 電気代がかかる(24時間稼働の場合)
  • ネットワーク障害時のリトライ処理が必要

率直に言うと、毎日安定して動かしたいなら自宅PCの限界はすぐに見えてきます。エラーが発生しても気づきにくいという仕組みです。

VPSで安定自動実行する方法

月額数百円〜のVPS(仮想プライベートサーバー)を使えば、24時間365日安定して動かせます。Linux環境のcronと組み合わせることで、スクリプト自体を常時起動する必要もなくなります。

# crontabの編集(Linux/VPS)
crontab -e

# 毎日15:30に実行(cronの書式)
30 15 * * 1-5 /usr/bin/python3 /home/user/fetch_stock.py >> /home/user/stock.log 2>&1

VPSの選び方や初期設定については以下の記事で詳しくまとめています。

🔗 関連記事

アルゴトレード向けVPS比較【さくら・ConoHa・Vultr】価格・スペック・使いやすさ

Pythonスクリプトを24時間稼働させるためのVPS選びを解説しています。

筆者の検証メモ

トヨタ(7203.T)、ソニー(6758.T)、ソフトバンクG(9984.T)の3銘柄を毎日15:30に自動取得する構成で2週間テストしました。

  • トヨタ(7203.T):14日間で14ファイル生成。祝日(市場休場日)はyfinanceが空のDataFrameを返すため、if len(df) == 0: continueの空チェックが必要でした
  • ソニー(6758.T):自宅PC(Windows)で動作確認。スリープ設定をオフにすることで14日間連続稼働できましたが、電力消費が気になりました
  • ソフトバンクG(9984.T):VPS(ConoHa)でcronを設定したところ、2週間ノートラブルで取得継続。祝日の空チェックのみ追加して安定運用に至りました

また、エラーログをファイルに書き出す処理(>> stock.log 2>&1)を追加しておくと、問題発生時の原因特定が格段に楽になります。

※当サイトの内容は投資判断を推奨するものではありません。掲載しているコード・分析例は学習・検証目的であり、実際の投資はご自身の責任で行ってください。

🔗 関連記事

Pythonで株価アラートをLINE通知する方法【LINE Notify】

🔗 関連記事

ConoHa VPSでPython環境を構築する完全手順【株価分析・自動実行対応】

タイトルとURLをコピーしました