TechReport

技術者情報

ソリューション

2018年12月12日(水)公開

第222回

窓使いのCoin Trading System -Vol.6

PowerShellによる仮想通貨システムトレードの始め方(BTCBOX APIの使い方)

引き続き各取引所のAPIの利用方法を紹介します。
今回はBTCBOXです。

記事INDEX

前提・条件

・開発実行環境は、24時間システムを稼働することも考慮し、「お名前.comデスクトップクラウド」の仮想マシンを使って作成~稼働まで行っています。

PowerShellの基本的な文法、使い方については解説を省略しています。

・APIを公開している仮想通貨取引所の口座開設が完了しているものとします。口座開設方法については省略しています。

・システムトレードを行うことによって必ずしも利益が出るという保証はありません。

・.NET Framework で TLS1.1 および 1.2 を有効化する

PowerShellで使用される暗号化プロトコルは以下で確認することができます。
[Net.ServicePointManager]::SecurityProtocol
Ssl3, Tls


既定ではSSL3、TLS(1.0)が利用可能となっています。
しかし最近では暗号化プロトコルにTLS 1.2を必須とするサイトが増えてきており、仮想通貨取引所のAPIも同様となっています。既定の設定では.NET Frameworkを利用しているInvoke-WebRequestコマンドを実行するとエラーとなる場合があります。Invoke-WebRequestコマンドでTLS 1.2を利用するようにあらかじめ設定をしておきましょう。

1つ目の方法としてはInvoke-WebRequestコマンドを呼び出す前にTLS 1.2で通信することを明記します。こちらはスクリプト毎にその都度明記する必要があります。

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$res = Invoke-RestMethod $Url -Method POST -Headers $Header -Body $Body -ContentType "application/json"


もう1つの方法としては、以下のコマンドを実行して、レジストリでTLS 1.2で通信を既定値として設定しておきます。

Set-ItemProperty -Path HKLM:\\SOFTWARE\Microsoft\.NETFramework\v4.0.30319 -Name SchUseStrongCrypto -Value 1"


いずれかの対策を事前に行うことで、Invoke-WebRequestコマンドでAPIを利用する場合のエラーを回避することが可能です。

参考:.NET Framework で TLS1.1 および 1.2 を有効化する方法


BTCBOX APIの使い方

BTCBOXでは、仮想通貨の現物取引においてAPIを利用した取引注文を行うことが可能です。APIを利用した場合、指値のみの注文となるのでご注意ください。

まずはコードの一覧です。
(https://github.com/InvokeV/PSdeCoinEX/blob/master/Sample_06.ps1)

価格情報の取得:Get-Price


Public APIを使って板情報から売値(asks)と買値(bids)を取得します。
45: BTCBOXの場合は売値が高い方から並んでいるので、最安の売値はデータの一番最後を取得することになります。
46: 買値については、高い順にならんだ最初のデータを取得すれば問題ありません。
47: 数量についても、売値は逆並びとなるので、データの最後を取得します。

Get-Price "BTCBOX"

Name AskPrice AskSize BidPrice BidSize
---- -------- ------- -------- -------
BTCBOX 704542 1.12400 704002 0.05000

API Key とSecret Keyの取得:Get-Keys

Private APIを利用するための公開鍵と秘密鍵を取得します。BTCBOXのサイト上のメニューから「財産センター」-「APIキーの取得」を選択します。
https://www.btcbox.co.jp/api/secret/keys/

こちらから公開鍵と秘密鍵を作成します。

APIキーの取得
APIキーの取得


キーを直接コード内に記述するのは避けたいので、Keys.jsonファイルとして別途保存しておきます。これまでと同様にjson形式で追加しておきます。

[
{
"SiteName": "bitFlyer",
"APIKey": "取得したAPIキー",
"SecretKey": "取得したシークレットキー"
},
{
"SiteName": "bitFlyerFX",
"APIKey": "取得したAPIキー",
"SecretKey": "取得したシークレットキー"
},
{
"SiteName": "Zaif",
"APIKey": "取得したAPIキー",
"SecretKey": "取得したシークレットキー"
},
{
"SiteName": "ZaifFX",
"APIKey": "取得したAPIキー",
"SecretKey": "取得したシークレットキー"
} ,
{
"Site": "bitbank",
"APIKey": "取得したAPIキー",
"SecretKey": "取得したシークレットキー"
},
{
"Site": "QUOINE",
"APIKey": "取得したAPIキー",
"SecretKey": "取得したシークレットキー"
},
{
"Site": "QUOINEFX",
"APIKey": "取得したAPIキー",
"SecretKey": "取得したシークレットキー"
},
{
"Site": "BTCBOX",
"APIKey": "取得したAPIキー",
"SecretKey": "取得したシークレットキー"
}
]

(Keys.json)

Header情報の作成:Get-Header

取得したキーを使ってAPIの認証を行うためには、Invoke-RestMethodコマンドを利用します。ここではHeader情報の作成として紹介していますが、BTCBOXの場合は他の取引所とは異なり、Bodyとして認証情報を作成してPOSTメソッドで渡す必要があります。


141: クエリーデータとして受け取る情報は、注文時のオーダー情報やキャンセル時のオーダーIDなどがあります。
142-160: クエリーデータにAPIキー、Nonceを加えたものを、SHA256ハッシュ関数を使ってシークレットキーで署名したものが認証に必要な情報となります。

資産情報の取得:Get-Asset

BTCBOXに保持している日本円とビットコインの残高を取得します。BTCBOXでは、ビットコイン以外の仮想通貨の取引が可能なので、他の通貨情報も取得可能です。


資産情報はInvoke-RestMethodコマンドのPOSTメソッドで取得できます。資産情報は指定するパラメーターがありませんので、空のBody情報をGet-Headerコマンドに渡して、認証情報を付加したものを受け取ります。

207-209: 空のBody情報をGet-Headerコマンドに渡し認証情報入りのデータを取得します。
210-211: Invoke-RestMethodコマンドの実行結果から、BTCもしくはJPYの値を抽出します。

Get-Asset "BTCBOX" "jpy"

10,000

売買注文:Set-Order

BTCBOXのWeb取引画面では、成行・指値の両方の注文が可能ですが、APIを利用した場合、指値注文のみ利用可能となります。


今回はビットコインの売買なので省略していますが、ビットコイン以外の売買を行う場合は「coin」パラメーターに「btc , ltc , eth , bch」のいずれかを指定します。

363: 売り注文の場合は”sell”、買い注文の場合は”buy”となります。
364: 指値注文のための値段を指定します。
365: 最小注文単位は0.01btcとなります。
367-368: Invoke-RestMethodコマンドで注文を行います。エラーとなった場合メッセージを表示して戻り値を0としています。
369: 注文が成功した場合はオーダーIDを戻り値として返します。

Set-Order "BTCBOX" "buy" "limit" "600000" "0.001"

324136342

注文の確認:Get-Order


429: 注文履歴をいつから取得するか、パラメーターを指定できますが、ここでは0としてすべてのデータとしています。
430: typeパラメーターをliveとすることで現在有効な注文のみを表示しています。

Get-Order "BTCBOX"

id : 324136342
datetime : 2018-08-09 14:57:24
type : buy
price : 600000
amount_original : 0.001
amount_outstanding : 0.001:

注文のキャンセル:Cancel-Order


注文時に取得したオーダーIDを指定します。戻り値のresultがtrueとなっていれば成功です。

コマンドサンプル

以降は作成した各コマンドのサンプルとなります。




以上がBTCBOXの基本的なAPIの利用方法となります。
BTCBOXは現物取引の他に、仮想通貨融資というサービスを行っており、信用取引のような形態でも仮想通貨の取引が可能となっています。

参考
BTCBOX(https://www.btcbox.co.jp)
APIリファレンス(https://www.btcbox.co.jp/api/doc/v1)

樋口 勝一

GMOインターネット株式会社

1999年6月GMOインターネットに入社。Windowsを用いたホスティング事業の立ち上げの際、サービス開発からその後の保守・運用まで1人で担当。2010年には「お名前.comWindowsデスクトップ」をリリースし、マイクロソフト社と強い信頼関係を構築。2007年から連続で「マイクロソフトMVPアワード」を受賞し、Windowsのスペシャリストとして活躍。

執筆者一覧

Hyper-Vで本格的なサーバー仮想環境を構築。仮想環境を設定・操作できる!

できるPRO Windows Server 2016 Hyper-V
GMOインターネット株式会社 樋口 勝一 著

◇Hyper-Vのさまざまな機能がわかる
◇インストールからの操作手順を解説
◇チェックポイントやレプリカも活用できる
Windows Server 2016 Hyper-Vは、仮想化ソフトウェア基盤を提供する機能であり、クラウドの実現に不可欠のものです。
本書では、仮想化の基礎知識から、Hyper-Vでの仮想マシンや仮想スイッチの設定・操作、プライベートクラウドの構築、Azureとの連携などを解説します。

詳細はこちら → Amazonインプレスブックス

初めてのWindows Azure Pack本が発売

Windows Azure Pack プライベートクラウド構築ガイド
GMOインターネット株式会社 樋口 勝一 著

本書は、Windows Azure PackとHyper-Vを利用し、企業内IaaS(仮想マシン提供サービス)を構成するための、IT管理者に向けた手引書です。試用したサーバーは、最小限度の物理サーバーと仮想マシンで構成しています。Windows Azure Packに必要なコンポーネントのダウンロード、実際にプライベートクラウド構築する過程を、手順を追って解説しています。これからプライベートクラウドの構築を検討するうえで、作業負担の軽減に役立つ一冊です。

詳細はこちら