Page
Library
Module
Module type
Parameter
Class
Class type
Source
GMOコイン 暗号資産取引所API のOCaml SDKです。
Private APIを使うには、カレントディレクトリに gmocoin-auth.conf を作成し、1行目にAPIキー、2行目にAPIシークレットを書いてください。
YOUR_API_KEY
YOUR_API_SECRETopen Gmocoin
let () =
let auth = Auth.auth () in
Lwt_main.run begin
PrivateApi.assets auth () >>= fun assets ->
...
endapi.coin.z.com はcohttp-lwt-unixの既定TLSバックエンド (ocaml-tls, "native") で接続すると、ハンドシェイク後や応答読み取り中に断続的にECONNRESET/EPIPEで切断されることを確認しています(WAF等によるTLSフィンガープリント判定と見られます)。lib/http.mlでプロセス起動時にCONDUIT_TLS=openssl環境変数を自動設定してOpenSSLバックエンドを強制していますが、これでも完全には解消しないため、Http.get(冪等なGETのみ)は該当エラーを検知すると最大5回まで自動リトライします。POSTは二重注文を避けるため意図的にリトライしません。/v1/... (/privateを含まない、クエリ文字列も含まない) を対象にHMAC-SHA256で計算します。実際のリクエストURLには/privateを付与しますが、署名にはそのまま使わないようApiCommon内で分離しています。{"status": 0, "data": ..., "responsetime": "..."} という共通形式です。statusが0以外の場合、型付きの{status: int; messages: {message_code; message_string} list}を積んだApiCommon.Api_errorを投げます。ただしPublicApi.statusだけは例外にせず(string, ApiCommon.api_error) result Lwt.tを返します(取引所稼働状況の確認自体がメンテナンス中に例外で失敗するのは本末転倒なため)。"455659") として返されるため、型定義でもstringとしています。呼び出し側で必要に応じてfloat_of_string等に変換してください。dune testtest/test_gmocoin.mlにJSONパース(公式ドキュメントのレスポンス例をそのまま使用、MARKET注文でpriceが欠落するケースやCANCELED注文でcancelTypeが付くケースなどoptionフィールドの境界も含む)とRateLimiterのスライディングウィンドウ挙動を検証する単体テスト(alcotest)があります。ネットワークアクセスは行いません。
API制限に基づき、ApiCommonがPrivate APIの全リクエストに自動で流量制限をかけます(RateLimiterモジュール、スライディングウィンドウ方式)。上限に達した場合は例外を投げずに、枠が空くまで自動的に待機してから送信します。
対象 | 上限 | 備考 |
|---|---|---|
Private API GET | 20回/秒 | Tier 1 (先週の取引高 < 10億円) を既定値として採用。Tier 2 (30回/秒) は未対応 |
Private API POST | 20回/秒 | 同上 |
Public API | 制限なし | ドキュメントに具体的な数値の記載なし |
Public WebSocket / Private WebSocketの「subscribe/unsubscribeは1秒間1回まで」という制限には未対応です(Public WebSocket APIは実装済みですが、同一接続内で複数チャンネルを連続購読する際の間隔調整はまだ入れていません)。
ベースURL: https://api.coin.z.com/public
API | エンドポイント | 状態 | 実装 |
|---|---|---|---|
取引所ステータス |
| ✅ |
|
最新レート |
| ✅ |
|
板情報 |
| ✅ |
|
取引履歴 |
| ✅ |
|
KLine情報の取得 |
| ✅ |
|
取引ルール |
| ✅ |
|
エンドポイント: wss://api.coin.z.com/ws/public/v1(概要ページの記載は/ws/publicだが、実際のサンプルコードは全て/v1付き)
チャンネル | 状態 | 実装 |
|---|---|---|
最新レート (ticker) | ✅ |
|
板情報 (orderbooks) | ✅ |
|
取引履歴 (trades) | ✅ |
|
Realtime.updates ~symbol channelsで指定した銘柄・チャンネルをまとめて購読し、update Lwt_stream.t(Ticker | Orderbook | Tradeのバリアント)として受信できます。板情報だけのように単一チャンネルしか使わないことが多いため、パターンマッチ不要でその型のストリームを直接返す専用関数も用意しています: Realtime.ticker_updates / Realtime.orderbook_updates / Realtime.trade_updates(内部的にはupdatesを1チャンネルだけで呼んでいるだけ)。bin/main.mlのwatch_and_buyはRealtime.orderbook_updatesを使い、板情報のbest_bidが閾値以下になるたびにPrivateApi.orderで成行の現物買い注文を出すサンプル実装です。
実装時に分かった注意点:
orderbooksチャンネルの方が、bid/ask監視には適しています。groupingフィールドが実際には含まれていました(Realtime.orderbookではstring optionとして吸収)。`OpenSSLクライアントを明示的に指定しています。Realtime.updates内で自動的に応答します。ベースURL: https://api.coin.z.com/private。すべて認証が必要です。
API | エンドポイント | 状態 | 実装 |
|---|---|---|---|
余力情報を取得 |
| ✅ |
|
資産残高を取得 |
| ✅ |
|
取引高情報を取得 |
| ✅ |
|
日本円の入金履歴の取得 |
| ✅ |
|
日本円の出金履歴の取得 |
| ✅ |
|
暗号資産の預入履歴の取得 |
| ✅ |
|
暗号資産の送付履歴の取得 |
| ✅ |
|
注文情報取得 |
| ✅ |
|
有効注文一覧 |
| ✅ |
|
約定情報取得 |
| ✅ |
|
最新の約定一覧 |
| ✅ |
|
建玉一覧を取得 |
| ✅ |
|
建玉サマリーを取得 |
| ✅ |
|
口座振替 |
| ⚠️ |
|
注文 |
| ✅ |
|
注文変更 |
| ✅ |
|
注文キャンセル |
| ✅ |
|
注文の複数キャンセル |
| ✅ |
|
注文の一括キャンセル |
| ✅ |
|
決済注文 |
| ✅ |
|
一括決済注文 |
| ✅ |
|
ロスカットレート変更 |
| ✅ |
|
アクセストークンを取得/延長/削除 |
| ✅ |
|
エンドポイント: wss://api.coin.z.com/ws/private/v1/<token>(tokenはPrivateApi.ws_auth_postで取得)
チャンネル | 状態 | 実装 |
|---|---|---|
約定情報通知 | ⚠️ |
|
注文情報通知 | ⚠️ |
|
ポジション情報通知 | ⚠️ |
|
ポジションサマリー情報通知 | ⚠️ |
|
公開チャンネル用のupdatesと違い、private_updatesは接続が切れても内部で自動再接続はしない(アクセストークンが期限切れ(60分)で無効になっている可能性があり、その場合は再接続してもトークンを取り直さない限り無意味なため)。切断時はストリームの読み出しが例外で終わるので、呼び出し側で新しいトークンを取得してから呼び直すこと。