株のシステムトレードをしよう - 1から始める株自動取引システムの作り方

株式をコンピュータに売買させる仕組みを少しずつ作っていきます。できあがってから公開ではなく、書いたら途中でも記事として即掲載して、後から固定ページにして体裁を整える方式で進めていきます。

アイデアメモ - CSVに調整後終値を付与(本当の完成)

概要

昨日はCSVから読み込んだDataFrameに、調整後終値を付加したが、1日適用するのが早かったため、直す必要があった。今日はこれを直す。

結果、調整後終値を無事に付加することができた。調整後終値を付加する連載はこれで一旦完了である。次回からはCSV取得の自動化周りを進めていきたい。

昨日の記事:

how-to-make-stock-trading-system.dogwood008.com

先に出力結果を紹介

f:id:dogwood008:20201126234742p:plain
昨日の失敗した出力

今日の成功した出力
今日の成功した出力

上が昨日の出力、下が今日の出力である。

昨日のものは、調整後終値が「2千円台→5千円台→2千円台」と推移し、中間の10月28日の調整結果が誤りである事を示唆している。

一方、今日のものは「2千円台→2千円台→2千円台」というように、大きな振れ幅がないため、正しく調整できたと推測できる。

修正点

修正部は極僅かである。日付けに対してそれ以外の情報を全て下方向(日付けの新しい方)へずらす(シフトする)ことで解決された。

def hist_data_with_adj_close(code: str, year: str,
                             adj_rate_df: pd.DataFrame) -> pd.DataFrame:
    '''
    銘柄コード、年、終値調整用比のDFから、調整後終値付きのDFを返す。
    '''
    bizdays = pd.DataFrame({'date': jpbizday.year_bizdays(year)}).set_index('date')
    adj_rate_for_current_stock: pd.DataFrame = adj_rate_df[adj_rate_df['code'] == code]
    ret = bizdays.merge(adj_rate_for_current_stock, \
-                       on='date', how='left').set_index('date').fillna(method='ffill').fillna(1.0)
+                       on='date', how='left').set_index('date').shift().fillna(method='ffill').fillna(1.0)

(C) 2020 dogwood008 禁無断転載 不許複製 Reprinting, reproducing are prohibited.