TechReport

技術者情報

ソリューション

2018年12月19日(水)公開

第223回

窓使いのCoin Trading System -Vol.7

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

各取引所のAPI利用方法の紹介は、今回のFISCOが最後となります。

記事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 を有効化する方法


FISCO APIの使い方

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

APIの仕様自体はZaifの現物取引と非常に似ています。

まずはコードの一覧です。

https://github.com/InvokeV/PSdeCoinEX/blob/master/Sample_07.ps1

価格情報の取得:Get-Price


Public APIを使って板情報から売値(asks)と買値(bids)を取得します。
FISCOの場合はhttps://api.fcce.jp/api/1/depth/btc_jpyこのURLからGetメソッドで直接ビットコインの価格情報が取得可能です。

Get-Price "FISCO"

Name AskPrice AskSize BidPrice BidSize
---- -------- ------- -------- -------
FISCO 705450 0.03990 705075 0.04000

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

Private APIを利用するための公開鍵と秘密鍵を取得します。FISCOのサイトメニューから「アカウント」-「API Keys」を選択します。
https://fcce.jp/account

こちらからAPIキーとシークレットキーを作成します。

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


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

[
{
(省略)
},
{
"Site": "FISCO",
"APIKey": "取得したAPIキー",
"SecretKey": "取得したシークレットキー"
}
]

(Keys.json)

Header情報の作成:Get-Header

取得したキーを使ってAPIの認証を行うためには、Invoke-RestMethodコマンドにHeaderとして認証情報を作成して渡す必要があります。FISCOの場合は必要な情報を文字列として連結して、SHA512ハッシュ関数を使ってシークレットキーで署名したものが認証に必要な情報となります。難しい話は読み飛ばしてもコードをそのまま再利用すれば使えるものを紹介します。

必要なHeader情報

項目
keyAPIキー
sign署名値 ※1

※1:クエリー値(Nonce、メソッド、パラメーター等)を文字列として連結して、シークレットキーを使ってSHA512ハッシュ関数で署名したもの。


72: 作成したGet-KeysコマンドでAPIキーを読み込みます。
171-178: Queryとして渡されたデータを、シークレットキーを使ってハッシュ関数で署名します。
179: ハイフンを省いた文字列として取得します。
180-183: Header情報を作成します。

資産情報の取得:Get-Asset

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


資産情報はInvoke-RestMethodコマンドのPostメソッドで取得できます。このときHeader情報に認証データを含めることになります。

238-242: Nonceとメソッド「get-info」をクエリー値としてGet-Headerコマンドに渡しHeader情報を取得します。
243-244: Invoke-RestMethodコマンドの実行結果から、BTCもしくはJPYの値を抽出します。

Get-Asset "FISCO" "jpy"

10,000

売買注文:Set-Order

FISCOではWeb取引画面やAPIでも現物の指値注文のみ可能となっています。


156: 現物取引のエンドポイントはhttps://api.fcce.jp/tapiとなります。
409: methodとしてtradeを指定します。
411: 売り注文の場合は”ask”、買い注文の場合は”bid”となります。
413: 注文金額が5円刻みとなっているので、金額末尾が必ず「0」もしくは「5」となるように金額を設定する必要があります。
414: 最小注文単位は0.0001btcとなります。
417-428: FISCOのAPIでは取引注文が集中するとAPIエラーが頻繁に発生するため、エラー処理Try~Catchで行います。
419-422: 注文がエラーとなると、”success”のプロパティー値が0となるので、この場合エラーメッセージを表示して戻り値を0としています。
423: 現物取引の場合、注文が成功するとOrderIDは全て0となってしまうので、注文成功したという意味で1を戻り値とします。
425-428: その他エラーとなった場合もエラーメッセージを表示して戻り値を0とします。

Set-Order "FISCO" "buy" "limit" "700000" "0.001"

1

注文の確認:Get-Order


498: 現在有効となっている注文一覧を取得します。

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


FISCO場合、注文時にオーダーIDが確認できないので、Get-Orderコマンドで取引注文IDを確認した後キャンセル時に指定します

Cancel-Order "FISCO" 12345678

コマンドサンプル

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




以上がFISCOの基本的なAPIの利用方法となります。
FISCOはZaif現物取引のAPIに仕様が非常に似ています。FX取引がなく、APIの機能としても基本的なものに限定されているので、理解はしやすいかと思います。


以上、国内の主要な仮想通貨取引所のAPI利用法をご紹介してきました。

次回からは、これらのAPIを利用して、どのように仮想通貨を取引を行っていくのか、具体的な取引手法を解説しながら、APIを利用してPowerShellによる仮想通貨システムトレードを解説していく予定です。


参考
FISCO (https://fcce.jp/)
APIリファレンス(https://fcce.jp/api-docs)

樋口 勝一

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に必要なコンポーネントのダウンロード、実際にプライベートクラウド構築する過程を、手順を追って解説しています。これからプライベートクラウドの構築を検討するうえで、作業負担の軽減に役立つ一冊です。

詳細はこちら