🐈

Act 29. 為替相場のデータを1ヶ月分取得する

2024/11/30に公開

はじめに

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というファイル名でデータが保存される。

Act29.py
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コイン様ありがとうございます。
取得する通貨ペアや期間の変更もできる。コチラに詳しい設定値が書いてあるので参照して欲しい。

以下の変数の内容を適切な値に変更することで、取得する通貨ペアや期間を変更することが可能。

Act29.py
pair = "USD_JPY" # 通貨ペア
interval = "1min" # ローソク足
date = "202410" # 期間(YYYYMM)

注意
APIは秒間6件までしか処理できないらしいので、以下の記述は消してはいけない。

Act29.py
time.sleep(1) # 1秒待機

さいごに

これってめちゃくちゃ便利じゃないか!?
何よりも感動したのが2023/04/26以降のデータなら取得可能であるということ。

しかも1分足など色々と選択可能!
とりあえず直近2ヶ月分のデータを貰ったが、今後1年分とかもらう可能性あるかも…。

ちなみに、今回は過去のデータを取得したが、今現在の価格を取得するAPIもあるので、気になる人はぜひ試してほしい。
そっちについては別で記事にするかも。

この取得したデータを使って強化学習ができると思うと楽しみだなー!
ではまた!

Discussion