読者です 読者をやめる 読者になる 読者になる

資産管理のプログラム

 資産管理のプログラムを作るに当たっての問題は①どこから値段を取ってくるかでした。すると株価データベースというサイトを有ることを知りまして、ここからだと1年分とかまるっと取れるので、良いですねということでここから取らしていただくことにしました。

 その次に問題となったのは、変数を銘柄ごとに変化させてデータフレームを作っていきたいということだったんですが、答えがテラレイルで見つかりました。

Python - pythonで変数を自動生成するにはどうすればいいですか?(14667)|teratail

 locals()というのを使えば動的に変数を作れるみたいです。おお簡単な解決方法がと思ったので他には調べていませんが、まぁとにかくこれでやれますということで、問題はほぼ解決しました。

 あとは、株式分割問題と出来高がない銘柄は価格がなかった問題は、分割はとりあえず一銘柄しかなかったので分割以降を×2して揃えて、出来高がない銘柄はfillna(method='ffill')で価格がなければ前の価格を使うということにしました。

meigara = ['6340','3908','4344','6728','6049','6670','2146','6750','3291','1775','6369','8377'] # 今年買った銘柄群

for i in meigara:
    locals()['df_{}'.format(i)]= pd.read_csv('http://k-db.com/stocks/{}-T/1d/2016?download=csv'.format(i))
    
    locals()['df_{}'.format(i)].columns = ['Date','Open','High','Low','Close','Volume','Value'] #動的に変数を作成する df_8377 みたいな形
    locals()['df_{}'.format(i)].index = locals()['df_{}'.format(i)]['Date']
    locals()['df_{}'.format(i)].index = locals()['df_{}'.format(i)].index.to_datetime()
    locals()['df_{}'.format(i)] = locals()['df_{}'.format(i)][['Open','High','Low','Close']]
    
    locals()['df_{}'.format(i)]['buylot'] = 0
    locals()['df_{}'.format(i)]['selllot'] = 0
    locals()['df_{}'.format(i)]['position'] = 0
    locals()['df_{}'.format(i)]['price'] = 0
    locals()['df_{}'.format(i)]['port'] = 0
    locals()['df_{}'.format(i)]['cash_flow'] = 0

    locals()['df_{}'.format(i)] = locals()['df_{}'.format(i)].sort_index()  # 価格を取り、売買を入れるデータフレームを作る。
    locals()['df_{}'.format(i)] = locals()['df_{}'.format(i)].fillna(method='ffill')
# topixの値を取ってくる。そして現金のやり取りの列を作る

df_tpx = pd.read_csv('http://k-db.com/indices/I102/1d/2016/?download=csv')

df_tpx.columns = ['Date','Open','High','Low','Close']
df_tpx.index = df_tpx['Date']
df_tpx.index = df_tpx.index.to_datetime()
df_tpx = df_tpx.sort_index()
df_tpx['change'] = df_tpx['Close'].pct_change()
df_tpx = df_tpx[['Open','High','Low','Close','change']]

df_tpx['cashflow'] = 0
df_3908.loc['2016/11/28':,:] =df_3908.loc['2016/11/28':,:] + df_3908.loc['2016/11/28':,:]

 こんな感じで保有した銘柄のデータフレームを作りました。そして買った日やらロットやら価格を入力して、年初に持っていた資金額を入力して、そしてポートの動きを作り出します。うえで、持っている銘柄の次にトピックスのデータフレームを作っていますが、そこにポートの変動やらなんやらを突っ込んで終了です。 あ、あとcsvを取ってくるとコラムが日本語になっていて文字化けするので、英語に置き換えて、日付をインデックスにして、インデックスを日付で扱えるようにしています。

 とりあえず今度は年をまたぐものを作らないといけないと思うので、ここに出した部分も変えないといけませんね。あと、保有銘柄の購入価格やら日付やらを簡単に入力できるやり方が作れないかなぁと思っています。