【Python】GMOコイン 外国為替FXでAPIを使った自動売買を始める

GMOでAPIを始めよう FX

以前の記事で5年間お世話になった安定してAPI取引ができていたOANDA証券に梯子を外され利用制限がかかってしまったことから、GMOコインをメインのFX自動売買口座に変更することに決めたことを宣言しました。

【FX】OANDA終了のお知らせ。GMOコインに移住します
最近OANDAでのFX取引結果を記事にしたばかりですが、なんど2024/9/2以降OANDAのAPIが利用できなくなってしまいました。突如としてOANDAに梯子を外された状況になりまして、BOT停止により2万円近く損失を出...

当然ながら取引所が変わればAPIの仕様も大きく異なります。
今回はGMOコインでのAPI取引を行うにあたって学んだことを公開していきたいと思います。

口座開設

大前提として口座開設が必要です。

GMOコインは仮想通貨取引がメインの取引所で外国為替FXはおまけといった感じです。
GMOクリック証券やGMO外貨といった同じGMOインターネットグループの取引所もありますがそちらは別会社ですので間違えないようにしてください。

NFC対応のスマホがあればマイナンバーや免許証を読み込んで即申込みができるようです。

ここまでで開設できるのは暗号資産口座です。
FX用の口座を開設するには更にもう一度外国為替FX口座の追加申込をしなければなりません。マイナンバーを提出して承認されれば無事開設となります。

APIキー作成

プログラミングコードを使用して自分の口座に命令を出すためのAPIキーを発行します。

会員ページ左サイドバーのAPIを選択し、「APIキー新規追加」を押して作成します。

APIキー作成後にトライアル期間(30日間API手数料無料)が始まってしまうので注意が必要です!!
(私は気づかずやってしまいました;)
自動売買用であれば全チェック推奨です。
APIキーとシークレットはいつでも見ることができます。
※なぜか複数作成したはずのAPIキーが消える事象が起きています。バグなのかはよく分かってませんが注意が必要です。

APIドキュメント

APIドキュメント(GMOコイン)

GMOコイン用のAPIはGMOコイン公式が”日本語”でコードを紹介してくれています。
ほとんどの取引所は英語のみ対応なので非常に分かりやすいです。

対応している言語は10種類です。(私はPython以外分かりませんが爆)
対応言語:Node.js, Python, Go, Ruby, PHP, Kotlin, C#, Rust, Haskell, Swift
ページの右側で自分が利用する言語を選択すると、その言語に合わせたサンプルコードを見ることができます。

Public API

APIキーなしで実行できます。
例:価格・チャート取得など

最新レート取得のサンプルコード

import requests
import json

endPoint = 'https://forex-api.coin.z.com/public'
path     = '/v1/ticker'

response = requests.get(endPoint + path)
print(json.dumps(response.json(), indent=2)) #全データ表示

応答例

{
  "status": 0,
  "data": [
    {
      "ask": "137.644", #買い価格
      "bid": "137.632", #売り価格
      "symbol": "USD_JPY", #通貨ペア
      "timestamp": "2018-03-30T12:34:56.789671Z", #チャート取得時刻
      "status": "OPEN" #サーバーステータス
    },
    {
      "symbol": "EUR_JPY",
      "ask": "149.221",
      "bid": "149.181",
      "timestamp": "2023-05-19T02:51:24.516493Z",
      "status": "OPEN"
    }
  ],
  "responsetime": "2019-03-19T02:15:06.014Z" #現在時刻
}

Private API

実行するにはAPIキーが必要となります。
例:口座残高取得・注文・決済など

資産残高取得のサンプルコード

import requests
import json
import hmac
import hashlib
import time
from datetime import datetime

apiKey    = 'YOUR_API_KEY' #自分のAPIキー
secretKey = 'YOUR_SECRET_KEY' #自分のAPIシークレットキー

timestamp = '{0}000'.format(int(time.mktime(datetime.now().timetuple())))
method    = 'GET'
endPoint  = 'https://forex-api.coin.z.com/private'
path      = '/v1/account/assets'

text = timestamp + method + path
sign = hmac.new(bytes(secretKey.encode('ascii')), bytes(text.encode('ascii')), hashlib.sha256).hexdigest()

headers = {
    "API-KEY": apiKey,
    "API-TIMESTAMP": timestamp,
    "API-SIGN": sign
}

res = requests.get(endPoint + path, headers=headers)
print (json.dumps(res.json(), indent=2)) #全データ表示

応答例

{
  "status": 0,
  "data": [
    {
      "equity": "120947776", #時価評価総額
      "availableAmount": "89717102", #取引余力
      "estimatedTradeFee": "766.5", #見込み手数料
      "margin": "31227908", #拘束証拠金
      "marginRatio": "406.3", #証拠金維持率
      "positionLossGain": "3884065.046", #評価損益
      "totalSwap": "178825.439", #未決済スワップ
      "transferableAmount": "85654212" #振替余力
    }
  ],
  "responsetime": "2019-03-19T02:15:06.055Z" #応答時刻
}

決済時に新規で逆方向の注文を出しても両建てになってしまうので、決済時は決済用注文コードでなければなりません。
新規注文は10000通貨以上でないとエラーになりますが、決済用注文は1通貨単位でできます。

まとめ

API作成後、即トライアル期間30日が開始してしまうので口座作成後にすぐに動かせるプログラムがないならAPIは一旦待ったほうが良いです。

GMOコインFXの最大のデメリットはやはり可変スプレッドと最小注文数があることです。
スプレッドの高さは長期トレードで打ち消せますが高ロットトレードが多いとその分リスクも高まります。
今後の手数料次第ではOANDA戻りもあり得ますが、せっかくGMO用コードを作成しましたのでしばらくはこちらを利用していきたいと思います。

■お借りした素材
ずんだもん立ち絵(坂本アヒル様):https://seiga.nicovideo.jp/seiga/im10788496

にほんブログ村 投資ブログへ
投資の素晴らしさを皆さんに知ってもらいたいので、ブログ村の応援クリックよろしくお願い致します。

コメント

PHP Code Snippets Powered By : XYZScripts.com
タイトルとURLをコピーしました