GMOコインのAPIを使って注文を出す方法を解説【FXの自動売買プログラムをPythonで自作しよう⑤】

この記事には広告を含む場合があります。

記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。

外国為替FX口座が開設できたら、APIキーとAPIシークレットが作成できます。前回のPublic APIではステータスと価格データしか取得できませんでしたが、APIキーとAPIシークレットがあればPrivate APIで資産残高を取得したり、注文が出せたりします。

また、注文を出すにあたり、口座に入金をしましょう。

GMOコインのAPI経由での最小注文数量は、10,000 通貨 / 回です。また、新規注文時のレバレッジは最大20倍です。1ドル150円でレバレッジが20倍とすると、最低でも75,000円入金する必要があります。

余裕を持って10万円くらい入金しておくと安心です。

また、必ず勝てるわけではありませんので、勉強代と思って失ってもいいと思える余剰資金で行うようにしましょう。

それでは具体的に解説していきます。

APIキーとAPIシークレットの作成

GMOコインの会員ホーム画面の外国為替FXのAPIをクリックして、APIキーを新規追加します。

[APIキーを新規追加]をクリックすると、次のような画面が表示されるので、ラベルの入力とAPIで操作できる範囲をチェックして、[追加する]をクリックします。

ここでチェックを入れた項目については、APIキーとシークレットを知っていれば、誰でも実行することができます。つまり万が一、APIキーとAPIシークレットが漏洩した場合には、実行されてしまう可能性のある項目ですので厳重に管理しましょう。

以上でAPIキーとAPIシークレットが作成できました。

GMOコインの会員ホーム画面の外国為替FXのAPIをクリックすると確認できます。

APIで注文を出すプログラムの解説

いよいよPythonでプログラムを書いて、実際に注文を出してみましょう。 まずは「買い」の注文を出してみることにします。

前述しましたが、プログラムを開発するためには10万円くらいあると安心です。

また、入金した金額は暗号資産取引余力に入っていると思います。「振替」で暗号資産から外国為替FXに振り替えてください。

今回はあくまでテストなので、成約しないように現在より安い価格で注文します。

注文が確認できれば、いったん自分で手動で注文をキャンセルしてください。

APIドキュメント(https://api.coin.z.com/fxdocs/#private-api)のPrivate APIの注文を確認すると、次のようなプログラムが記載されています。

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

apiKey    = 'YOUR_API_KEY'
secretKey = 'YOUR_SECRET_KEY'

timestamp = '{0}000'.format(int(time.mktime(datetime.now().timetuple())))
method    = 'POST'
endPoint  = 'https://forex-api.coin.z.com/private'
path      = '/v1/order'
reqBody = {
    "symbol": "USD_JPY",
    "side": "BUY",
    "size": "10000",
    "clientOrderId": "abc123",
    "executionType": "LIMIT",
    "limitPrice": "130"
}

text = timestamp + method + path + json.dumps(reqBody)
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.post(endPoint + path, headers=headers, data=json.dumps(reqBody))
print (json.dumps(res.json(), indent=2))

それでは具体的にプログラムの解説をします。

importするライブラリ

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

まず最初に、必要なライブラリをインポートします。

requestsは、APIリクエストを送るためのライブラリです。

jsonは、指値価格や注文量などのパラーメータをJSON形式に変換するためにのライブラリです。JSONとは「JavaScript Object Notation」の略で、軽量なテキストベースのデータ交換フォーマットです。

hmachashlibは、APIシークレットを暗号化して送るために使うライブラリです。

datetimeは現在時刻を取得するためのライブラリです。

必要な変数を定義する

Python
apiKey    = 'YOUR_API_KEY'
secretKey = 'YOUR_SECRET_KEY'

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

apiKeysecretKeyは、先ほど作成したAPIキーとAPIシークレットに書き換えてください。注意点として「’」は残してください。

そのほか、注文を出すために必要な変数が定義されています。

注文に必要なパラメータを入力

Python
reqBody = {
    "symbol": "USD_JPY",
    "side": "BUY",
    "size": "10000",
    "clientOrderId": "abc123",
    "executionType": "LIMIT",
    "limitPrice": "130"
}

それぞれ次のような意味を持っています。

  • symbol
    取り引き銘柄です。今回は米ドル/円なので「USD_JPY」です。
  • side
    買い(ロング)か売り(ショート)かです。今回は買いエントリーするので「BUY」と入れます。
  • size
    注文数量です。最小注文数量は、10,000 通貨 / 回なので、「10000」と入れます。
  • clientOrderId
    ドキュメントには顧客注文IDと記載されていますが、オプションなので今回はデフォルトで注文します。
  • executionType
    「MARKET(成行)」、「LIMIT(指値)」、「STOP(逆指値)」、「OCO(OCO注文)」のいずれかを入力します。今回は、指値注文をするので「LIMIT」を入力します。
  • limitPrice
    指値注文レートを入力します。デフォルトでは130となっていますが、現在価格より低すぎると注文ができなかったので、5円くらい低めの価格を入れてください。

パラメータの中身を変えることによっていろいろな注文を出すことができます。

ここでの注意点は、数値ではなく文字列で入力するところです。

認証のための暗号文(署名)を作る

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

この部分では、注文が正しいものかを証明するためにAPIシークレットを鍵にして、本文を暗号化(署名)しています。

注文する時に必要な定型文というように覚えておいてください。

通信データのヘッダーを作る

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

ここでは、通信データのヘッダーを作っています。

APIキーとタイムスタンプと署名をまとめています。

APIリクエストを送る

Python
res = requests.post(endPoint + path, headers=headers, data=json.dumps(reqBody))
print (json.dumps(res.json(), indent=2))

requests()関数を使って必要な情報をpostメソッドで送っています。

そしてサーバーから返ってきた情報を、resという変数に入れてprintで表示しています。

Pythonから注文してみよう

上記のプログラムをPyCharmのエディタにコピーして、limitPriceを変更してください。

そしてapiKeysecretKeyは、忘れずにAPIキーとAPIシークレットキーに書き換えてください。

準備ができたら実行しましょう。

コンソールに次のような表示がされれば注文は成功です。

続いて、外国為替FXの注文一覧を確認しましょう。注文が入っていると思います。

今回はテストなので、取消ボタンを押して注文を取り消してください。

注文を取り消しておかないと、意図せず約定する場合がありますのでご注意ください。

もしエラーで動かなかったら

今回はコードをコピペしただけなので、間違えるとしたらAPIキーとAPIシークレットキーの書き換えか、limitPriceの価格設定です。

もう一度、確認してみましょう。

また、PyCharmにはデバック機能があるので説明しておきます。

エディタの行数の数字の右側をクリックすると赤丸が付きます。この状態で、実行の’test.py’のデバックをすると、デバックモードで実行されます。

赤丸のところ(11行目)でプログラムが停止します。

コンソールのステップオーバーかステップインで1行ずつプログラムの確認ができます。再開したい場合は、左側の再開ボタンを押してください。

プログラミングはエラーで動かないことが多々あります。エラーになった場合は、コンソールにエラー内容が表示されているので、デバックで確認するか、グーグルでエラー内容を検索すると解決方法がだいたい出てきます。

おわりに

お疲れさまでした。

APIを使うことでPythonからGMOコインの注文ができるようになりました。他にも資産残高を取得したり、注文状況を確認したり、注文をキャンセルしたりできます。

取り引きで必要なことはAPIドキュメントに書いてあるので、気になるところは確認してみてください。

次回は簡単なロジックの自動売買プログラムを作ります。

GMOコイン

GMOコイン

GMOインターネットグループの暗号資産FX・売買サービス

  • 新たに「外国為替FX」のAPIサービスを開始
  • 口座開設申し込みから最短10分で取引が可能
  • 現物取引、レバレッジ取引ともにサービスが充実している
  • 取引ツールが高性能かつ使いやすい