だいぶ前になりますがPythonでbitFlyer APIを使って自動取引のサンプルプログラムを挙げていました。今回は最近ビットコインが盛り上がってきたので、vb.net を使ってコインチェックAPIで自動取引プログラムのサンプルをアップしていきたいと思います。
私はプログラマーではなく趣味で触っている程度なので、生暖かい目で見ていただければと思います。
目指すモノ/環境
APIに関する情報は公式に載っていますが、説明が足りていなかったり、vb.net はそもそも考慮外だったりと断念する方も多いのではないかと思います。そんな方でもまず最低限入り口に立てるように各APIのサンプルを提示できればと考えています。
最初にも書きましたが私は本職プログラマーではないので、誤りなどあるかもしれません。
その時は優しくコメント頂ければ嬉しいです。
作成環境 | Windows 10 Pro 2004 |
ツール | Microsoft Visual Studio Community 2019 |
言語 | vb.net |
追加ライブラリ | Newtonsoft.Json |
公式ドキュメント
このサイトをご覧になっている方はもちろん見ているかとは思いますが、念のためリンクを張っておきます。
個人的な感想ではありますが、以前使ったbitFlyerのドキュメントのほうが親切だったかなと思います。記載がない分公開しているサンプルなどで補っている感じでしょうか。
せめて、制限事項は書いておいてくれるとこちらも留意出来るんですが。
事前準備
口座開設
Public API と呼ばれるTickerなど一般公開されている情報を取得するだけなら口座は不要ですが、売買などを行う場合には当然コインチェックに口座開設が必要になります。
コインチェックの口座開設はスマホアプリを使えば簡単に申請できますが、実際に開設されるまで1~2週間はかかります。口座開設/維持には費用は掛からないので、自動売買に興味がある方は先行して口座作っておくことをお勧めします。
ちなみに今回コインチェックを選んだ理由は何といっても 取引所での売買手数料無料 です。前回Pythonで組んだ時は bitFlyer でしたが、手数料で結局マイナスといった状況でした。
現在コインチェックで実際に自動取引試していますが、手数料無料はとてもありがたいと実感しています。
ライブラリの追加
今回はJSONの処理にNewtonsonft.Jsonを利用します。NuGetパッケージの管理から該当ライブラリをインストールしておいてください。

Public API/Ticker の取得
まずクラスを一つ作成し、リクエストを投げるメソッドを作成したいと思います。
ちなみにプロジェクトはコンソールアプリ/vb.net で作成です。
Public Class CoinCheck_Function
Dim BASE_URL As String = "https://coincheck.com"
Public Function SendPublicRequest(ByVal path As String) As String
Dim response As String = ""
Dim httpReq As System.Net.HttpWebRequest = System.Net.HttpWebRequest.Create(BASE_URL & path)
httpReq.Method = "GET"
Using httpRes As System.Net.HttpWebResponse = httpReq.GetResponse()
'応答データを受信するためのStreamを取得
Using Strm As System.IO.Stream = httpRes.GetResponseStream()
Using sr As New System.IO.StreamReader(Strm, System.Text.Encoding.UTF8)
'データをすべて受信
response = sr.ReadToEnd()
End Using
End Using
End Using
Return response
End Function
End Class
上記を使ってTickerを取得するサンプルです。
Module Module1
Sub Main()
Dim cc As New CoinCheck_Functions
Dim response = cc.GetPublicRequest("/api/ticker")
If response <> "" Then
MsgBox(response, MsgBoxStyle.Information, "サンプル")
End If
End Sub
End Module

取得できていることがわかると思います。このまま文字列だと使えないので使える形式に変換するために下記のように書き換えます。
Public Class CoinCheck_Function
Dim BASE_URL As String = "https://coincheck.com"
Public Function GetPublicRequest(ByVal path As String) As String
Dim response As String = ""
Dim httpReq As System.Net.HttpWebRequest = System.Net.HttpWebRequest.Create(BASE_URL & path)
httpReq.Method = "GET"
Using httpRes As System.Net.HttpWebResponse = httpReq.GetResponse()
'応答データを受信するためのStreamを取得
Using Strm As System.IO.Stream = httpRes.GetResponseStream()
Using sr As New System.IO.StreamReader(Strm, System.Text.Encoding.UTF8)
'データをすべて受信
response = sr.ReadToEnd()
End Using
End Using
End Using
Return response
End Function
End Class
Public Class Ticker_Info
Public Property last As Long
Public Property bid As Long
Public Property ask As Long
Public Property high As Long
Public Property low As Long
Public Property volume As Double
Public Property timestamp As Long
End Class
Module Module1
Sub Main()
Dim cc As New CoinCheck_Function
Dim response = cc.GetPublicRequest("/api/ticker")
If response <> "" Then
Dim responseData = Newtonsoft.Json.JsonConvert.DeserializeObject(Of Ticker_Info)(response)
MsgBox("last:" + responseData.last.ToString("C"), MsgBoxStyle.Information, "サンプル")
MsgBox("bid:" + responseData.bid.ToString("C"), MsgBoxStyle.Information, "サンプル")
MsgBox("ask:" + responseData.ask.ToString("C"), MsgBoxStyle.Information, "サンプル")
MsgBox("high:" + responseData.high.ToString("C"), MsgBoxStyle.Information, "サンプル")
MsgBox("low:" + responseData.low.ToString("C"), MsgBoxStyle.Information, "サンプル")
MsgBox("volume:" + responseData.volume.ToString("#,0"), MsgBoxStyle.Information, "サンプル")
MsgBox("timestamp:" + responseData.timestamp.ToString, MsgBoxStyle.Information, "サンプル")
End If
End Sub
End Module

まとめ
まず入り口として Ticker を取得して、各データに分割までをご紹介しました。次回は引き続きPublic API で情報を取得していきたいと思います。
今回は御覧頂きありがとうございました。
コメント