Alpha Chart の株価更新に無尽蔵の日足データを使いたい
Alpha Chart の試用期間が終わるとデータ更新が「ダウンロード済みデータで更新」しかなくなります。
株価データ倉庫 の日足データが使えるが、更新が週一(日曜)なため毎日更新できない。
そこで、毎日更新している 無尽蔵 のデータを使えればいいなという話。
先に今回作ったやつ載せておきます。
ファイル: turtlechan_apcconv_v1.zip
解凍して '$ python apcconv.py' で起動。無尽蔵 の zipファイル を指定すればいいです。
※ Python2 でも 3 でも動くはず。
はじめに
Alpha Chart で読み込める 株価データ倉庫 のtxtファイルを見てみたいと思います。
2020/01/06 のデータを参考にしています。
株価データ倉庫
ファイル名は 'y200106.txt' となっている。'y%y%m%d.txt' のようです。
中身はtsv形式のようです。タブで要素が区切られているやつですね。
一行目が、'20200106' なので '%Y%m%d'
二行目以降は
銘柄コード\t銘柄名\t始値\t高値\t安値\t終値\t出来高\r\n
以上の形式が Alpha Chart で読み込めるので、無尽蔵のデータをこのように整形すれば読み込める。
ついでに、無尽蔵 のcsvファイルも見ておきます。
無尽蔵
ファイル名は 'T200106.csv' なので 'T%y%m%d.csv'。
中身はcsv形式。カンマで要素が区切られているやつ。
一行目から以下の形式。
日付,銘柄コード,取引所別の数字,銘柄コード 銘柄名,始値,高値,安値,終値,出来高,取引所名\r\n
これを整形すれば良いのです。ちょろいですね。
無尽蔵の方には先物とか含まれていないけど、ないものはしかたないので無視。
今回作ったやつ
#! /usr/bin/env python # -*- coding: utf-8 -*- import os import sys import zipfile # Python のバージョンによって tk の分岐 if sys.version_info.major == 2: import Tkinter as tk import tkFileDialog as tkfd elif sys.version_info.major == 3: import tkinter as tk import tkinter.filedialog as tkfd class Converter(tk.Frame): def __init__(self, master): tk.Frame.__init__(self, master) master.tk.call('wm', 'iconphoto', master._w, tk.PhotoImage(file='favicon.gif')) master.title('Turtlechan apcConv(仮)') master.geometry('+50+50') self.pack() self.create_widget() def create_widget(self): # ラベル self.lbl = tk.Label(self, text='入力:') self.strv_status = tk.StringVar() self.lbl_status = tk.Label(self, fg='#888', bd=1, relief=tk.SUNKEN, anchor=tk.E, textvariable=self.strv_status) # テキストボックス self.strv = tk.StringVar() self.ent = tk.Entry(self, width=60, textvariable=self.strv) self.strv.set(os.path.abspath(os.path.dirname(__file__))) # ボタン self.btn_fd = tk.Button(self, text='ファイル選択', command=self.push_fd) self.btn_conv = tk.Button(self, text='Convert', command=self.push_conv) # 配置 self.lbl.grid(row=0, column=0) self.ent.grid(row=0, column=1) self.btn_fd.grid(row=0, column=2) self.btn_conv.grid(row=100, column=1) self.lbl_status.grid(row=102, column=0, columnspan=3, sticky=tk.W + tk.E + tk.N + tk.S) def push_fd(self): # ファイル選択ウィンドウ self.fp = tkfd.askopenfilename(filetypes=[('ZIPアーカイブ', '*.zip')]) if len(self.fp) == 0: return else: self.strv.set(self.fp) def push_conv(self): # zipアーカイブの読み込み with zipfile.ZipFile(self.strv.get(), 'r') as zf: # Python のバージョンによって分岐 data = [row.decode('shift-jis').split(',') if sys.version_info.major == 3 else row.split(',') for row in zf.open(zf.namelist()[0])] data = ['{0}\t{1}\t{2[0]}\t{2[1]}\t{2[2]}\t{2[3]}\t{3}'.format(row[1], row[3][4:].replace(' ', ''), row[4:8], float(row[8]) / 10000000 if int(row[1]) < 1300 else float(row[8]) / 1000) for row in data if row[8] != '0'] # 書き出し with open(os.path.join(os.path.dirname(self.strv.get()), os.path.basename(self.strv.get()).split('.')[0].replace('T', 'y') + '.txt'), 'w') as f: f.write(os.path.basename(self.strv.get()).split('.')[0].replace('T', '20') + '\n') f.write('\r\n'.join(data)) self.strv_status.set(self.strv.get() + '\t変換完了') def main(): root = tk.Tk() converter = Converter(root) converter.mainloop() if __name__ == '__main__': main()
おわりに
Python3 で作ったファイルは Alpha Chart に読み込ませるとき銘柄名が文字化けします。
更新自体に問題はなさそうです。Python3 の文字列の扱い分からないんだよなぁ。。。
何かの参考になれば幸いです。