bitbankのAPIから通貨ペア(btc_jpy)の最新ティッカー情報(buy:現在の買い注文の最高値)を取得して指定価格分の指値注文するGoogle Apps Script(GAS)
- bitbankに登録(口座開設)済、かつ口座に日本円が入金済であること。
- bitbankのAPIアクセスキーとアクセスシークレットを発行済であること。
- Googleアカウント取得済であること。
- 本コードでは必ずしも期待されたデータを取得することは保証しません。
- 本コードを実行したこと、参考にしたことによって被るあらゆる損害について責任を負いかねますので自己責任でご利用ください。
- 本コードでは指値注文を行いますが、指定する価格は最小注文数量に依存します。指定する注文価格が計算により最小注文数量を下回る場合、注文量が指定する注文価格以下となることがありますのでご注意ください。
- 本コードはbitbankのAPI仕様(bitbank-api-docs)に基づき実装しています。API仕様は変更される可能性がありますので、最新の情報を確認してご利用ください。
- 本コードは通貨ペアとして
btc_jpyが対象です。他の通貨ペアについては未確認のためご注意ください。
- GASでbitbankのPublic APIとPrivate APIを使用して指定する通貨ペアのHTTPリクエスト時点の最新のティッカー情報(buy:現在の買い注文の最高値)を取得して指定価格分を指値注文を実行します。
- 注文方法として関数の個別実行、または定期実行します。
| 関数名 | 説明 |
|---|---|
getBuyPrice(pair) |
Public APIを利用してTicker情報から オープンな情報を取得する関数。 |
※本コードでは現在の買い注文の最高値(buy))を取得します。
| 関数名 | 説明 |
|---|---|
| setOrderData(pair) | getBuyPrice(pair)で取得した最新ティッカー情報(buy)からconfig.gsで定義(後述)するADJUST_ORDER_NUMとADJUST_PRICEのパラメータとPrivateAPI利用して指定価格分の価格と注文量を設定する関数。 |
※注文情報はParameters(requestBody)仕様に従い作成します。
| メソッド名 | 説明 |
|---|---|
| Utilities.computeHmacSha256Signature(concatenated_string, API_SECRET) | bitbank APIの認証手順に従い認証情報を作成します。署名作成用の文字列として「nonce、payload」 を連結してconcatenated_stringを作成し、文字列を HMAC-SHA256 形式でAPI_SECRETを使用して署名(signatureを作成します。 |
| 変数名 | 説明 |
|---|---|
| nonce | UNIXタイムスタンプ(整数値) ※リクエスト毎に数を増加 |
| payload | 注文情報(パラメータ)をJson文字列にしたリクエストボディ |
| API_SECRET | APIキーページで取得したアクセスシークレット |
| signature | 署名(※computeHmacSha256Signature()ではバイト文字列を返すためGASで使用するため16進数化します。) |
| メソッド名 | 説明 |
|---|---|
| UrlFetchApp.fetch(url, option) | 引数urlに取得する URL(PRIVATE_ENDPOINT_URL + '/user/spot/order')を指定してPOSTリクエストして指値注文する関数 |
パラメータとしてmethod,headers,payloadをoptionに設定してPOSTリクエストを送信します。
| パラメータ | 説明 |
|---|---|
| method | HTTPリクエストメソッド(post) |
| header | HTTPリクエストヘッダー(Content-Type ,ACCESS-KEY,ACCESS-NONCE,ACCESS-SIGNATUREを付与したもの) |
| header情報 | 変数名 |
|---|---|
Content-Type |
application/json |
ACCESS-KEY |
API_KEY |
ACCESS-NONCE |
nonce |
ACCESS-SIGNATURE |
signature |
POSTレスポンスの結果からエラーコードを参照しエラー処理(エラーログ出力とGmailによるエラーメール送信)をします。
※ 実際に指値注文を実行する際は設定と使い方を参照してください。
| 処理 | 説明 |
|---|---|
| 関数の手動実行 | プロジェクトページからspotOrderCoin()を手動実行することで指値注文を実行します。 |
| 定期実行設定 | プロジェクトを定期実行設定により関数を実行することで指値注文を実行します。 |
| POSTリクエスト | Webアプリ(URL)に対してPOSTリクエストすることで指値注文を実行します。 |
config.gs(変数名)に以下の設定情報を定義してください。
| 設定情報 | 変数名 |
|---|---|
| Public APIのエンドポイントURL | PUBLIC_ENDPOINT_URL |
| Private APIエンドポイントURL | PRIVATE_ENDPOINT_URL |
| APIキー | API_KEY |
| APIシークレットキー | API_SEACRET |
APIシークレットキーAPIの取得は公式ドキュメントを参照してください。
| 注文情報 | 変数名 |
|---|---|
| 通貨ペア | PAIR('btc_jpy'で固定) |
| 希望購入価格 | ORDER_NUM |
| 注文調整価格 | ADJUST_PRICE(0以上で指定) |
| 取引時の小数点以下の桁数 | DECIMAL_DIGITS_BTC(8固定) |
※注文調整価格は注文時に即約定しないように定数分引いた金額を基準に計算します。定数は0とすれば現在の買い注文の最高値で注文数量を計算するため価格調整が不要な場合は0を設定してください。
| 設定情報 | 変数名 | 説明 |
|---|---|---|
| メールアドレス | emailAddress |
エラー発生時に設定したメール宛にエラー内容を送信します。 |
| プロジェクト名 | projectName |
メール本文に記載されるプロジェクト名です。 |
-
spotOrderCoin()を実行してスクリプトからGoogleアカウントへのアクセスを許可する (※初回実行時※2022/12/4現在)- Gmail のすべてのメールの閲覧、作成、送信、完全な削除
- 外部サービスへの接続
-
プロジェクトを定期実行設定 (※定期実行を有効にする場合)
- GASの定期実行設定をすることで定期的な指値注文を行うことができます。
- 「編集」→「現在のプロジェクトのトリガー」から設定。
- Googleアカウントへのアクセスを許可する(※初回実行時※2022/12/4現在)
- 外部サービスへの接続
- 自分がいないときにこのアプリケーションを実行できるようにする
-
Gmailへのアクセス許可設定
- Gmailのすべてのメールの閲覧、作成、送信、完全な削除
| 設定情報 | 変数名 | 説明 |
|---|---|---|
| HTTPメソッド | POSTを指定する | |
| URL | - | ウェブアプリURLの設定で取得したURL |
| Header | application/json | Content-Type |
| Body | sendData | アクセス元が送信する情報 |
sendDataについて
"sendData": {
"uniqueKey": "[アクセス元識別情報]", //文字列
"orderPrice": [希望価格] //数字
}
- ウェブアプリURLは不用意な公開は避け、セキュリティに十分配慮して運用してください。
- アクセス元識別情報はユーザーが個別に設定し、セキュリティに十分配慮して管理してください。
- ウェブアプリURLの設定
- デプロイ → 新しいデプロイ
- 種類の選択 → ウェブアプリ
- 次のユーザーとして実行: 自分(メールアドレス)
- アクセスできるユーザー: 利用状況に合わせて設定してください。
- ソースコード
- GASからbitbank APIでPOSTリクエストを実行許可するためにアクセス元を識別する情報を定義します。
doPost()関数ではアクセス元が送信する識別情報と希望注文価格の情報とPOSTリクエストの実行許可を判断するリスト(API_REQUEST_PERMISSION_LIST)と比較して、実行可能なアクセス元を判断した場合のみ指値注文を実行します。config.gs/API_REQUEST_PERMISSION_LISTに['アクセス元識別情報1','アクセス元識別情報2',...]の形式で定義してください。