GMOクリック証券のヒストリカルデータ (過去データ)を整理して簡単に結合する

スポンサーリンク

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)

以上です。

良かったら使ってください!

コメント

タイトルとURLをコピーしました