Act 29. 為替相場のデータを1ヶ月分取得する
はじめに
Act 01. AIで外国為替を自動売買するまでの道のりをベースに学習を進めて行く。
前回はQ学習について勉強した。
これから実際にQ学習をPythonで実装していくわけだが、肝心のデータがないということで、今回は為替相場のデータを1ヶ月分取得しようと思う。
取得するデータは以下の通り。全て変更可能。
- 通貨ペア: 'USD/JPY'
- 期間: '2024/10/01 ~ 2024/10/31'
- ローソク足: '1min'
データは GMOコイン さんのAPIを使って取得する。
データ取得自体は登録不要だが、GMOコインで口座開設を行えば、APIを使った売買も可能になる。
今後良い感じのモデルが作れたらGMOコインさんにお世話になるかも。
APIを使う人はぜひ口座開設をして、少しでもこのAPIが公開される期間を長くしよう。
データ取得
コードは以下の通り。
これを実行すると、USD_JPY-1min-202410.csv
というファイル名でデータが保存される。
import requests
import pandas as pd
import time
data = []
pair = "USD_JPY" # 通貨ペア
interval = "1min" # ローソク足
date = "202410" # 期間(YYYYMM)
for i in range(31):
# URL
endPoint = "https://forex-api.coin.z.com/public"
path = f"/v1/klines?symbol={pair}&priceType=ASK&interval={interval}&date={date}{str(i + 1).zfill(2)}"
response = requests.get(endPoint + path) # GETリクエスト
# データの取得に成功したときのみ実行
if "data" in response.json().keys():
data.extend(response.json()["data"]) # レスポンスからデータのみを取得
print(f"{date[:4]}/{date[4:]}/{str(i + 1).zfill(2)}のデータを取得")
time.sleep(1) # 1秒待機
# DataFrame
df = pd.DataFrame(data)
df["openTime"] = pd.to_datetime(df["openTime"].astype("int64"), unit="ms", utc=True) # UnixTime変換
df["openTime"] = df["openTime"].dt.tz_convert("Asia/Tokyo") # 日本時間に変換
df['openTime'] = df['openTime'].dt.tz_localize(None) # タイムゾーンを削除
# CSVファイルに出力
print("CSVファイルにデータを書き込みます")
df.to_csv(f"./{pair}-{interval}-{date}.csv", index=False)
CSVファイルの内容は以下の通り。(一部抜粋)
- openTime: 時刻
- open: 始値
- high: 高値
- low: 底値
- close: 終値
openTime,open,high,low,close
2024-10-01 06:00:00,143.69,143.696,143.685,143.696
2024-10-01 06:01:00,143.696,143.702,143.696,143.702
2024-10-01 06:02:00,143.702,143.702,143.699,143.702
2024-10-01 06:03:00,143.702,143.703,143.698,143.701
2024-10-01 06:04:00,143.703,143.703,143.7,143.701
2024-10-01 06:05:00,143.701,143.71,143.7,143.706
2024-10-01 06:06:00,143.706,143.706,143.706,143.706
2024-10-01 06:07:00,143.706,143.706,143.706,143.706
2024-10-01 06:08:00,143.706,143.707,143.706,143.706
2024-10-01 06:09:00,143.706,143.706,143.706,143.706
2024-10-01 06:10:00,143.706,143.707,143.706,143.707
2024-10-01 06:11:00,143.707,143.707,143.706,143.707
2024-10-01 06:12:00,143.707,143.707,143.707,143.707
2024-10-01 06:13:00,143.707,143.707,143.707,143.707
2024-10-01 06:14:00,143.707,143.707,143.653,143.66
2024-10-01 06:15:00,143.66,143.66,143.654,143.654
便利すぎる、GMOコイン様ありがとうございます。
取得する通貨ペアや期間の変更もできる。コチラに詳しい設定値が書いてあるので参照して欲しい。
以下の変数の内容を適切な値に変更することで、取得する通貨ペアや期間を変更することが可能。
pair = "USD_JPY" # 通貨ペア
interval = "1min" # ローソク足
date = "202410" # 期間(YYYYMM)
注意
APIは秒間6件までしか処理できないらしいので、以下の記述は消してはいけない。
time.sleep(1) # 1秒待機
さいごに
これってめちゃくちゃ便利じゃないか!?
何よりも感動したのが2023/04/26
以降のデータなら取得可能であるということ。
しかも1分足など色々と選択可能!
とりあえず直近2ヶ月分のデータを貰ったが、今後1年分とかもらう可能性あるかも…。
ちなみに、今回は過去のデータを取得したが、今現在の価格を取得するAPIもあるので、気になる人はぜひ試してほしい。
そっちについては別で記事にするかも。
この取得したデータを使って強化学習ができると思うと楽しみだなー!
ではまた!
Discussion