barus's diary

とても真面目なblogですにゃ

【BitFlyer】C#でビットコインを自動売買する。その①(APIの利用サンプルコード)

ビットコイン。最近ニュースで聞くことが多くなり興味もっていました。

そこで「MT4 ビットコイン」でググってみるとMT4(メタトレダー4、FX取引では欠かせないロシア製のツール)で取扱えそうなところは今現在(2018年1月)ではなさそうです。

 

MT4では扱えないのか・・と残念に思っていると、「BitFlyer」というビットコインを扱っているところで、自動売買用のAPIが公開されているのを知りました(以下のバナー)。

 

 

さっそく、Visual C#でAPIを利用し、ビットコインのASKとBIDの情報を得てみた結果が以下の画面となります。

f:id:hatakeka:20180105122757p:plain

今回は、そのやり方をここに記すことにしますにゃ(=^・^=)

 

  

 

BitFlyerのアカウント作成する場合は以下のバナー先にあります。( ゚Д゚) 

bitFlyer ビットコインを始めるなら安心・安全な取引所で

 

 

 

 

APIが公開されている(https://bitflyer.jp/ja-jp/API)を見ますと

JavaScript(Node.js)  Ruby  Perl  C#

の4つの言語が紹介されています。

 

 

今回はVisual C#をチョイス。

 

 

さっそく、以下のURLで公開されている。

 

https://lightning.bitflyer.jp/docs/playground

GET /v1/ticker をSubmitする。

 

f:id:hatakeka:20180105114504p:plain

 すると、Responseに表示される。

f:id:hatakeka:20180105114615p:plain

 

これをVisual C#で取得してみる。

VisualStudio2017を起動し、新しいVisualC#にプロジェクトを作成する。

Windowsクラシックデスクトップ>Windowsファームアプリケーション(.NET Framework)を選択した。プロジェクト名は「C#BitCoin」とした。

(VisualStudio2017はマイクロソフトが提供している無料の開発環境。インストール詳細はこちらに書いています。)

f:id:hatakeka:20180105091709p:plain

ちなみにWindowsユニバーサルってのは、なんなんでしょうねw・・・( ゚Д゚)?

 

右側のツールボックスタブより、ボタン(button1)とテキストボックス(textbox)を画面にペタペタ張る。

f:id:hatakeka:20180105092141p:plain

textBox1の左上の▼をクリックして、MultiLineにチェックする。

f:id:hatakeka:20180107104502p:plain

textBox1のプロパティのScrollbarsをBothにする。

f:id:hatakeka:20180107105449p:plain

textbox1のAnchorのLeftとRightをクリックして画面サイズに合わせるようにする。

f:id:hatakeka:20180105113421p:plain

こんな感じ。

f:id:hatakeka:20180105092241p:plain

 

外見を作成したので、中身のソースコードを作成する。

 

Submit.cs      

Win32API.cs

 

の2つのクラスファイルを追加し、Form1.csを修正する。それ以外はデフォルト。(いじらない)ソリューションは以下のような感じになる。

f:id:hatakeka:20180107104309p:plain

 クラスの追加はソリューションのプロジェクト名の「C#BitCoin」上で右クリックし追加>クラスで追加する。

f:id:hatakeka:20180105121449p:plain

 

Win32API.cs のソースコード

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;// DllImportに必要
using System.Windows;

namespace C_BitCoin
{
    class Win32API
    {
        //時間
        [DllImport("winmm.dll", EntryPoint = "timeGetTime")]
        public static extern long timeGetTime();
    }
}

 

Submit.cs のソースコード

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.Windows.Forms; //Application
using System.Net.Http;
using System.Net.Http.Headers;


namespace C_BitCoin
{
    class Submit
    {

        static readonly Uri endpointUri = new Uri("https://api.bitflyer.jp");


        public static string _rlt_response;

        public string testcall()
        {
            Task t = test();


            bool endflag = true;
            int cnt = 0;
            //レスポンスを待つ
            while (endflag)
            {

                endflag = (_rlt_response == null) ? true : false;
                Stoptime(100);
                cnt++;
                if (cnt > 100) break;
            }
            return _rlt_response;

        }

        public static async Task test()
        {

            var method = "GET";
            var path = "/v1/ticker";
            var query = "";

            using (var client = new HttpClient())
            using (var request = new HttpRequestMessage(new HttpMethod(method), path + query))
            {
                client.BaseAddress = endpointUri;
                var message = await client.SendAsync(request);
                var response = await message.Content.ReadAsStringAsync();

                _rlt_response = response.ToString();
                Console.WriteLine(response);

            }

        }

        public static void Stoptime(long st)
        {
            long lngst;
            lngst = Win32API.timeGetTime();
            while (Win32API.timeGetTime() - lngst < st)
            {
                Application.DoEvents();
            }
        }
    }
}

Form1.cs のソースコード

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;


namespace C_BitCoin
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //タスクについて
            //https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/concepts/async/async-return-types
            
            Submit tes = new Submit();
            
            textBox1.Text = tes.testcall().ToString();
            
        }
        
    }

    
}

 

以上。実行すると以下のような結果を返す。

f:id:hatakeka:20180105122757p:plain

 

ちょっと難解なのは、Taskクラスの使い方。

これはマイクロソフト非同期の戻り値の型 (C#) | Microsoft Docs 等を参照してみて下さい。

 

今回は、ビットコインのASKとBID値を、軽く取得してみましたが、ログイン認証や、画面の表示など・・MT4並みの機能を持たせるにはすごく大変そうです。

 

щ(゚Д゚щ) MT4と同機能作成は、無理(面倒)でしょw。

 

手っ取り早いのは、業者さんがMT4を使えるようにした方がいいかと思う。( ゚Д゚)

 

 

終わり。 

 

 

ちなみに、

もしかしてと思って、「株取引 API」でググってみた。「あるやん!」

株.com

https://kabu.com/api/kabucom_api.html

他にも、ソフトバンクとか

株取引にも証券会社から、自動売買用のAPI公開されていることを今更ながら気が付いた。( ゚Д゚)

 

 

 

以上。