【 今回やること! 】
- FXの1分足のヒストリカルデータ(為替の過去の値動きのデータ)をCSV形式で入手します。
- 『Google Colaboratory』を使用します。
- ヒストリカルデータをダウンロード→解凍→CSVに変換するプログラムを実行します。
- 『Google ドライブ』から、csvファイルをダウンロードします。
- 『Google Colaboratory』を使用します。
ヒストリカルデータは、FXDDから入手します。ZIP圧縮されたHSTファイルをダウンロード出来ます。無料で登録も必要ありません。
HSTファイルはMT4(MetaTrader4)で利用できますが、扱いやすいようにCSVに変換します。
『ダウンロード→解凍→CSVに変換』する処理は『Google Colaboratory』で行います。
『Google Colaboratory』は、サーバー上でPythonのプログラムを実行できる環境です。
Googleアカウントがあれば(Gmail等使っていれば)、無料ですぐに利用出来ます。
手元のPCの性能が低くても、サーバー側で処理されるので高速です。
ただし、制約があります。
『Google Colaboratory』を使うと、利用者には実行環境が割り当てられます。利用者は『ノートブック』というエディタを通じて実行環境を操作しますが、この『ノートブック』がアクティブでない状態が90分間続くと実行環境がリセットされます。また、使い続けていても12時間経つとリセットされます。
リセットされると、実行環境に追加したファイルがすべて削除されます。
なので、使用するデータや成果物は『Google ドライブ』に置くようにします。
『Google ドライブ』に置いたデータは消えません。自分のPCにダウンロードすることも出来ます。
前置きが長くなりましたが、作業はサクッと出来ます。
それでは作業を開始します!
目次
『Google Colaboratory』を利用開始する
『Google Colaboratory』のサイトに行って『ノートブック』を作成します。
『ノートブック』はブラウザ上で、文書とプログラムの作成、実行、実行結果の表示ができるファイルです。『ノートブック』の内容は、実行環境がリセットされても残ります。
- 下記のサイト『Colaboratory へようこそ 』を開きます。
colab.research.google.com
- 『ログイン』ボタンをクリックします。
- Googleアカウントのログイン画面が表示されるのでログインします。
- 『ファイル』→『Python 3 の新しいノートブック』をクリックします。
『Colaboratory へようこそ 』のページは閉じて構いません。
『Google ドライブ』をマウントする
『Google Colaboratory』から『Google ドライブ』のファイルにアクセスできるようにします。
『Google ドライブ』のマウントは、実行環境がリセットされると解除されます。
- 下図の赤枠の部分をクリックします。
- 『ファイル』をクリックします。
- 少し待つと、下図のように表示されるので、『ドライブをマウント』をクリックします。
- 『セル(と呼びます)』が追加されるので『▶(セルを実行)』をクリックします。
青いメッセージ無視して押せます。
- 長いURLをクリックします。
- Googleアカウントのログイン画面が表示されるのでログインします。
- 『許可』をクリックします。
- 下図の赤枠の部分をクリックします。
認証コードがコピーされます。
- ノートブックに戻り、認証コードを貼り付けて『Enter』キーを押します。
成功すると、『Mounted at /content/drive』と表示されます。
ヒストリカルデータをダウンロード→解凍→CSVに変換する
プログラムコードを貼り付ける
- 『セル』の枠の下部中央にマウスカーソルを持っていくと、下図のように表示されるので、『コード』をクリックして『セル』を追加します。(上側にも追加できます。)
『セル』には、プログラムコードの編集・実行を行う『コードセル』と、文書を書く『テキストセル』があります。
- 下記のコードをコピーして、『セル』にを貼り付けます。
『USD/JPY』と『EUR/JPY』の通貨ペアのCSVファイルを入手するプログラムです。通貨ペアの変更方法は後述します。
CSVファイルは『Google ドライブ』の『hst_(日付、例:hst_20191009)』フォルダに保存します。%%time # ↑セルの処理時間を計算 %%timeはセルの最初に単独で書く import os # ディレクトリ作成、パス結合、ファイル削除 import datetime # 日付取得 import requests # ダウンロード処理 import zipfile # zip解凍 import numpy as np # 数値データ高速処理 import pandas as pd # データ構造化 # 取得・作成したデータを保存するディレクトリのパス(Google Drive) hst_dir = '/content/drive/My Drive/hst_' + datetime.datetime.today().strftime('%Y%m%d') if not os.path.exists(hst_dir): # ディレクトリが無い場合 os.mkdir(hst_dir) # ディレクトリを作成 # 取得する通貨ペアを指定 list = ['USDJPY', 'EURJPY'] for item in list: print(item) zip_url = 'http://tools.fxdd.com/tools/M1Data/' + item + '.zip' # ダウンロード元url zip_file = os.path.join(hst_dir, item + '.zip') # 保存先ファイル名 req = requests.get(zip_url) with open(zip_file, 'wb') as f: f.write(req.content) print(' :ダウンロード完了') # zipファイルを解凍する with zipfile.ZipFile(zip_file, 'r') as f: # 読み込みモードで開く f.extractall(hst_dir) # zip展開 print(' :zip解凍完了') # hstファイルをcsvファイルに保存する with open(os.path.join(hst_dir, item + '.hst'), 'rb') as f: # hstのヘッダ(148byte)からバージョン(先頭の4byte)を取得 # dtype='i4':符号あり32ビット整数型 ver = np.frombuffer(buffer=f.read(148)[:4], dtype='i4') if ver == 400: # バージョンが400の場合 # 1行のデータの並びを定義 dtype = [ ('DateTime', 'u4'), # 'u4':符号なし32ビット整数型 ('Open', 'f8'), # 'f8':符号あり64ビット整数型 ('Low', 'f8'), # ('High', 'f8'), # ('Close', 'f8'), # ('Volume', 'f8') # ] elif ver == 401: # バージョンが401の場合 # 1行のデータの並びを定義 dtype = [ ('DateTime', 'u8'), # 'u8':符号なし32ビット整数型 ('Open', 'f8'), # 'f8':符号あり64ビット整数型 ('Low', 'f8'), # ('High', 'f8'), # ('Close', 'f8'), # ('Volume', 'f8') # ('Spread', 'i4'), # 'i4':符号あり32ビット整数型 ('RealVolume', 'i8') # ] # バイナリデータをPandasのデータフレームに変換する df = pd.DataFrame(np.frombuffer(buffer=f.read(), dtype=dtype)) # DateTime列を日付データに変換してインデックスに設定して、変換前の列を削除する df = df.set_index(pd.to_datetime(df['DateTime'], unit='s')).drop('DateTime', axis=1) display(df.head(2)) # データの先頭2行を書き出す display(df.tail(2)) # データの末尾2行を書き出す #csvファイルに保存 df.to_csv(os.path.join(hst_dir, item + '.csv')) print(' :csvに変換完了') # ファイルを削除 os.remove(zip_file) # zipファイル削除 os.remove(os.path.join(hst_dir, item + '.hst')) # hstファイル削除 print(' :zip、hst削除完了')
プログラムを実行する
- プログラムコードを貼り付けた『セル』の『▶(セルを実行)』をクリックします。
実行中は『▶』が『■(実行を中断)』に変わってグルグルします。
プログラムが終わると『▶』に戻ります。エラーで中断すると『▶』ボタンが赤くなります。
プログラムの実行時間は1分20秒前後です。
『セル』の下に実行状況が出力されます。
通貨ペアごとに、ヒストリカルデータの先頭と末尾を2行ずつ表示します。
最後の『Wall time』が実行時間です。
『Google ドライブ』からCSVファイルを入手する
プログラムが無事実行完了すると、CSVファイルが『Google ドライブ』に保存されています。
- 『Google ドライブ』のサイトを開きます。
drive.google.com
- 『マイドライブ』の『hst_(日付、例:hst_20191009)』フォルダを開きます。
- CSVファイルを右クリック→『ダウンロード』をクリックします。
- 『エラーを無視してダウンロード』をクリックします。
CSVファイルがダウンロードされます。
入手する通貨ペアの変更方法
- プログラムコードの下記の部分(17行目)のlistの通貨ペアを変更します。
※通貨名の間にスラッシュを入れないでください。
※通貨ペア名ごとに『’(シングルコーテーション)』で囲みます。
※通貨ペア名の間は『,(カンマ)』で区切ります。# 取得する通貨ペアを指定 list = ['USDJPY', 'EURJPY']
入手できる通貨ペアは、入手元のサイトのリストにあるものです。
listに書いてるのはダウンロードのURLのzipの前の部分です。
変更例
- 1つだけ入手する場合
# 取得する通貨ペアを指定 list = ['AUDJPY']
- 入手する通貨を増やす場合
4つにした場合、実行時間は3分かかりました。# 取得する通貨ペアを指定 list = ['USDJPY', 'EURJPY', 'EURUSD', 'GBPJPY']
- 1つだけ入手する場合
プログラム実行時にエラーが起きる場合
下記のことを確認または実行してください。
- 通貨ペアの文字が間違っていないか確認してください。
- 『Google ドライブ』のマウント出来ているか確認してください。
再度『Google ドライブ』のマウントを実行します。
マウント済みの場合は『Drive already mounted~』と表示されます。
- 入手元のサイトを開いて、直接ダウンロードできるか試してください。
何が原因だったかわかりませんが、そもそもサイトからダウンロード出来ないケースがありました。
- 『Google Colaboratory』のセッションを作り直します。
- 『ランタイム』→『セッションの管理』をクリックします。
- 終了をクリックします。
- ドライブのマウントからやり直してください。
- 『ランタイム』→『セッションの管理』をクリックします。
作成したノートブックを開く
作成したノートブックは、『Google ドライブ』の『マイドライブ』の『Colab Notebooks』フォルダ内にあります。
下記の作業をしておくと、スムーズに『ノートブック』を開くことができます。
- 『歯車マーク』→『設定』をクリックします。
- 『アプリの管理』の『デフォルトで使用』にチェックを入れます。
- 『完了』をクリックします。
今回は、以上です。