Win11 WSL2 Ubuntu Python yfinance

日足為替情報取得アップデート

ここまでで、日足為替情報取得ファイルの実行確認できました。
引き続き、日足為替情報取得アップデートファイルを作成します。
これまでは、730日分の4時間足データを取得することからファイルを作成してきました。
しかし、毎回古い730日分の4時間足データを取得するのは無駄があります。
最新の10日分ぐらいの4時間足データを取得し、古いデータをアップデートすることにより、 効率化します。
日足為替情報取得 yfin_audjp_test3.py ファイルを改造します。

4時間足為替情報取得アップデートへの変更

日足為替情報取得 yfin_audjp_test3.py ファイルから変更して行きます。

  1. 取得期間変更

    4時間足データの取得期間を730日から10日にし、ダウンロード時間を短縮します。
    df = yf.download(pair, period='10d', interval='4h', auto_adjust=True)

  2. 4時間足過去データの読出

    yfin_audjp_test3.py で4時間足過去データを

    /home/yamada/public_html/manep/yfin_audjp_4h.csv
    

    に保存しました。
    これを読みだします。

    dfd_4h = pd.read_csv('/home/yamada/public_html/manep/yfin_audjp_4h.csv', index_col='Datetime')
    

    Datetime の値をデータフレームのインデックスラベルとして使いたいので index_col 引数を指定します。
    index_col = 'Datetime'

  3. 4時間足過去データの最後

    4時間足過去データの最後のデータは4時間足が確定する前の未確定のデータなのでこれを削除します。
    dfd_4h = dfd_4h.drop(dfd_4h.index[-1])
    index[-1] は最後の行を指しています。

  4. 4時間足過去データと最新データの結合

    4時間足過去データ dfd_4h と最新データ df を結合します。
    dfd_4h1 = pd.concat([dfd_4h, df])

  5. 重複した行の削除準備

    4時間足データ値は有効数字が16桁もあります。
    有効数字を5桁ぐらいにしてから比較しないと上手く一致を検出できません。
    python 組込関数 round() を使います。
    round() は、ほぼ四捨五入です。
    引数には小数点何桁で丸めるかを指定します。
    dfd_4h1 = dfd_4h1.round(4)

  6. 完全重複した行の削除

    drop_duplicates( ) を使用して重複した行を削除します。
    dfd_4h2 = dfd_4h1.drop_duplicates(keep='last')
    open,high,low,close がすべて同じ値の行は最新(keep='last')を残します。
    古い行は廃棄します。

  7. 重複行削除データを保存

    出来上がった4時間足データを yfin_audjp_4h.csv として保存します。

    dfd_h2.to_csv('/home/yamada/public_html/manep/yfin_audjp_d.csv')
    

日足為替情報取得アップデートへの変更

引き続き、日足為替情報取得アップデートファイルを作成します。
yfin_audjp_test3.py ファイルを元に変更して行きます。

  • できた日足の問題点

    yfin_audjp_test3.py ファイルでできた日足データ dfd の最初は 不十分な4時間足データ(6本に満たないデータ)から算出された可能性があり 削除する必要があります。
    位置インデックスを指定して先頭行を削除します。
    dfd = dfd.iloc[1:]

  • 日足過去データの読出

    yfin_audjp_test3.py で日足過去データを

    /home/yamada/public_html/manep/yfin_audjp_d.csv
    

    に保存しました。
    これを読みだします。

    dfd_d = pd.read_csv('/home/yamada/public_html/manep/yfin_audjp_d.csv', index_col='Datetime')
    

    Datetime の値をデータフレームのインデックスラベルとして使いたいので index_col 引数を指定します。
    index_col = 'Datetime'

  • 日足過去データの最後

    日足過去データの最後のデータは日足が確定する前の未確定のデータなのでこれを削除します。
    dfd_d = dfd_d.drop(dfd_d.index[-1])
    index[-1] は最後の行を指しています。

  • 日足過去データと最新データの結合

    日足過去データ dfd_d と最新データ df を結合します。
    dfd_d1 = pd.concat([dfd_d, dfd])

  • 日足過去データ重複した行の検出準備

    日足データ値は有効数字が16桁もあります。
    有効数字を5桁ぐらいにしてから比較しないと上手く一致を検出できません。
    python 組込関数 round() を使います。
    round() は、ほぼ四捨五入です。
    引数には小数点何桁で丸めるかを指定します。
    dfd_d1 = dfd_d1.round(4)

  • 重複した行の検出削除

    drop_duplicates( ) を使用して重複した行を削除します。
    dfd_d2 = dfd_d1.drop_duplicates(keep='last')
    open,high,low,close がすべて同じ値の行は最新(keep='last')を残します。
    古い行は廃棄します。

  • 重複行削除データを保存

    出来上がった日足データを yfin_audjp_d.csv として保存します。

    dfd_d2.to_csv('/home/yamada/public_html/manep/yfin_audjp_d.csv')
    
  • 日足為替情報取得アップデートファイルまとめ

    変更内容をまとめるとファイル内容は以下のようになります。

    #!/home/yamada/miniconda3/bin/python3
    #coding: utf-8
    
    import yfinance as yf
    import pandas as pd
    import datetime
    from pandas.tseries.offsets import Hour
    
    pair='AUDJPY=X'
    
    print("日本標準時(JST)現在時刻")
    print(datetime.datetime.now())
    df15 = yf.download(pair, period='1d', interval='15m', auto_adjust=True)
    print(df15.tail())
    df = yf.download(pair, period='10d', interval='4h', auto_adjust=True)
    # df = yf.download(pair, period='730d', interval='4h', auto_adjust=True)
    # 4時間足の時 max 730d まで
    print(df.head())
    print(df.tail())
    print(df.info())
    
    print('Volume 削除')
    df.drop(labels=['Volume'], axis=1, inplace=True)
    print(df.tail())
    
    print("列 Close と 列 Open を入替")
    df = df[['Open', 'High', 'Low', 'Close']]
    print(df.tail())
    
    print("カラムラベルの変更")
    df.columns = ['open', 'high', 'low', 'close']
    print(df.tail())
    
    df0 = df.copy()
    print("df0")
    print(df0.tail())
    
    # df.to_csv('/home/yamada/public_html/manep/yfin_audjp_4h.csv')
    # 世界時(UTC)からの時差(+9時間)調整
    df.index = df.index + Hour(9)
    print('9H shift')
    print(df.tail(5))
    print("4時間足 過去データ読出")
    dfd_4h = pd.read_csv(
    '/home/yamada/public_html/manep/yfin_audjp_4h.csv',
     index_col='Datetime')
    print(dfd_4h.tail(5))
    # ラストデータ削除
    dfd_4h = dfd_4h.drop(dfd_4h.index[-1])
    print("過去データ+新データ")
    dfd_4h1 = pd.concat([dfd_4h, df])
    print(dfd_4h1.tail(5))
    
    dfd_4h1=dfd_4h1.round(4)
    dfd_4h2 = dfd_4h1.drop_duplicates(keep='last')
    print("すべての列値が同じものは最新を残す")
    print(dfd_4h2.tail(5))
    
    print("4時間足 マージデータ yfin_audjp_4h.csv に書込")
    dfd_4h2.to_csv('/home/yamada/public_html/manep/yfin_audjp_4h.csv')
    print("4時間足処理終わり・・・・・・・・")
    
    # 元データ df0 からの時差(+1時間)調整
    df0.index = df0.index + Hour(1)
    print('1H shift')
    print(df.tail(20))
    
    print("4時間足を日足に変換")
    dfd = df0.resample('D').agg({
      'open': 'first',
      'high': 'max',
      'low': 'min',
      'close': 'last'})
    
    print(dfd.tail(10))
    print("すべての値が欠損値NaN行削除")
    dfd = dfd.dropna(how='all')
    print(dfd.tail(10))
    
    print("できた日足の最初")
    print(dfd.head())
    # できた日足の最初は不十分な4時間足データ(6本に満たないデータ)
    # から算出された可能性あり削除する
    print("先頭行を削除")
    dfd = dfd.iloc[1:]
    print(dfd.head())
    print("過去データ読出")
    dfd_d = pd.read_csv(
    '/home/yamada/public_html/manep/yfin_audjp_d.csv',
     index_col='Datetime')
    print(dfd_d.tail(10))
    # ラストデータ削除
    dfd_d = dfd_d.drop(dfd_d.index[-1])
    
    print("過去データ + 新データ")
    dfd_d1 = pd.concat([dfd_d, dfd])
    print(dfd_d1.tail(20))
    
    dfd_d1 = dfd_d1.round(4)
    dfd_d1 = dfd_d1.drop_duplicates(keep='last')
    print("重複削除")
    print(dfd_d1.tail(20))
    
    print("日足データを yfin_audjp_d.csv に書込")
    dfd_d1.to_csv('/home/yamada/public_html/manep/yfin_audjp_d.csv')
    

    上記のファイル内容の
    #!/home/yamada/miniconda3/bin/python3
    ~・・・~
    最後
    までをすべてをコピ-し、Python ファイルを作成します。
    自分の PC Windows で TeraPad 等を使用して作成できたら
    \\wsl.localhost\Ubuntu-22.04\home\yamada\public_html
    に保存します。
    ファイル名は
    yfin_audjp_4h.py
    とします。
    文字コ-ドは、UTF-8N
    BOM なし
    改行コ-ドは、LF
    です。

    ここまでで、日足為替情報取得アップデートファイルが作成できました。
    引き続き、このファイル実行して行きます。


  • 日足為替情報取得アップデートファイル実行 に進む
  • 日足為替情報取得ファイル実行確認 に戻る
  • 日足為替情報取得ファイル作成 に戻る
  • 4時間足為替情報取得ファイル作成 に戻る
  • 為替情報取得ファイル に戻る
  • yfinance 概要 に戻る
  • 70VPS に戻る