【vb.net/コインチェック】目指せ仮想通貨自動売買システム開発 その1 事前準備/Ticker取得

vb.net

だいぶ前になりますが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 で情報を取得していきたいと思います。

今回は御覧頂きありがとうございました。

コメント

タイトルとURLをコピーしました