GMOクリック証券ではシストレは困難ですが、通常の投資で利用します。ヒストリカルデータ (過去データ)を1分足の日単位のCSVファイルを月単位でダウンロードできます。しかし、それを結合するのに、テキストファイルを開いて・・・なんてことをやっていたら日が暮れます。
また、GMOクリック証券のヒストリカルデータは日付が数値型になっていたり、カラム名が日本語で、毎回、加工するのも面倒です。
そこで、日付やカラム名をきれいに整理して、一つのファイルに結合できるシステムを作成しましたので、皆さんに共有します。
CFDの日経225とFXネオのUSDJPYしか試していませんが、問題あったら修正して使ってください。
(もちろん修正のリクエストを頂いても構いません。
はじめに
動作環境
以下となっていますが、そんなに特殊なことはしていませんので、他の環境でも問題ないと思います。
- OS:macOS Carolina 10.15.4
- 言語:Python 3.7.2
- 開発ツールバックテスト用システム:Jupyter Notebook 1.0.0
使用方法
- 任意のフォルダにダウンロードしたファイルをフォルダ毎置いてください。
- 上記のパスを
path
に設定ください。 - 不要なフォルダがあれば
not_folders
に指定してください。私はMacで、かつJupyter Notebookを使っているのでこのプログラムにそのフォルダを記載しています。 - 結合したデータを保存するCSVのファイル名とそのパスを
new_file
に設定してください。
GMOクリック証券のヒストリカルデータのダウンロード方法
以下のどちらもログインが必要になります。それ以外の種類のデータは、GMOクリック証券では無さそうです。
CFD
CFDトレードページの右上の方に「ヒストリカルデータ」というボタンがあります。
FXネオ
マイページ -> ツールのページの左側のメニューに「ヒストリカルデータ」というボタンがあります。
結合システム
import pandas as pd import os # 元データのパス path = "./data/downroad" # 除くフォルダ名 not_folders = [".DS_Store", ".ipynb_checkpoints"] # 保存するCSVのパスとファイル名 new_file = "./filename.csv" class convert: def __init__(self): self.df = pd.DataFrame() def csv_marge(self, file_path): if file_path.endswith('.csv'): print(file_path) df_temp = pd.read_csv(file_path, encoding="shift_jis") if df_temp.shape[1] == 5: df_temp = df_temp.rename( columns={ '日時': 'date', '始値(BID)': 'open', '高値(BID)': 'high', '安値(BID)': 'low', '終値(BID)': 'close' } ) else: df_temp = df_temp.rename( columns={ '日時': 'date', '始値(BID)': 'open_bid', '高値(BID)': 'high_bid', '安値(BID)': 'low_bid', '終値(BID)': 'close_bid', '始値(ASK)': 'open_ask', '高値(ASK)': 'high_ask', '安値(ASK)': 'low_ask', '終値(ASK)': 'close_ask', } ) self.df = pd.concat([self.df, df_temp]) def search_file(self, file_path): for filename in os.listdir(file_path): if filename not in not_folders: self.csv_marge(file_path + "/" + filename) ins_conv = convert() for filename in os.listdir(path): file_path = path + "/" + filename if os.path.isfile(file_path) == True: ins_conv.csv_marge(file_path) if os.path.isdir(file_path) == True and filename not in not_folders: ins_conv.search_file(file_path) ins_conv.df = ins_conv.df.sort_values('date') if ins_conv.df .shape[1] == 5: ins_conv.df['date'] = ins_conv.df['date'] * 100 ins_conv.df['date'] = pd.to_datetime(ins_conv.df['date'], format='%Y%m%d%H%M%S') ins_conv.df.to_csv(new_file, index=False)
以上です。
良かったら使ってください!
コメント