【BitFlyer】C#でビットコインを自動売買する。その①(APIの利用サンプルコード)
ビットコイン。最近ニュースで聞くことが多くなり興味もっていました。
そこで「MT4 ビットコイン」でググってみるとMT4(メタトレダー4、FX取引では欠かせないロシア製のツール)で取扱えそうなところは今現在(2018年1月)ではなさそうです。
MT4では扱えないのか・・と残念に思っていると、「BitFlyer」というビットコインを扱っているところで、自動売買用のAPIが公開されているのを知りました(以下のバナー)。
さっそく、Visual C#でAPIを利用し、ビットコインのASKとBIDの情報を得てみた結果が以下の画面となります。
今回は、そのやり方をここに記すことにしますにゃ(=^・^=)
※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する。
すると、Responseに表示される。
これをVisual C#で取得してみる。
VisualStudio2017を起動し、新しいVisualC#にプロジェクトを作成する。
Windowsクラシックデスクトップ>Windowsファームアプリケーション(.NET Framework)を選択した。プロジェクト名は「C#BitCoin」とした。
(VisualStudio2017はマイクロソフトが提供している無料の開発環境。インストール詳細はこちらに書いています。)
ちなみにWindowsユニバーサルってのは、なんなんでしょうねw・・・( ゚Д゚)?
右側のツールボックスタブより、ボタン(button1)とテキストボックス(textbox)を画面にペタペタ張る。
textBox1の左上の▼をクリックして、MultiLineにチェックする。
textBox1のプロパティのScrollbarsをBothにする。
textbox1のAnchorのLeftとRightをクリックして画面サイズに合わせるようにする。
こんな感じ。
外見を作成したので、中身のソースコードを作成する。
Submit.cs
Win32API.cs
の2つのクラスファイルを追加し、Form1.csを修正する。それ以外はデフォルト。(いじらない)ソリューションは以下のような感じになる。
クラスの追加はソリューションのプロジェクト名の「C#BitCoin」上で右クリックし追加>クラスで追加する。
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(); } } }
以上。実行すると以下のような結果を返す。
ちょっと難解なのは、Taskクラスの使い方。
これはマイクロソフトの非同期の戻り値の型 (C#) | Microsoft Docs 等を参照してみて下さい。
今回は、ビットコインのASKとBID値を、軽く取得してみましたが、ログイン認証や、画面の表示など・・MT4並みの機能を持たせるにはすごく大変そうです。
щ(゚Д゚щ) MT4と同機能作成は、無理(面倒)でしょw。
手っ取り早いのは、業者さんがMT4を使えるようにした方がいいかと思う。( ゚Д゚)
終わり。
ちなみに、
もしかしてと思って、「株取引 API」でググってみた。「あるやん!」
株.com
https://kabu.com/api/kabucom_api.html
他にも、ソフトバンクとか
株取引にも証券会社から、自動売買用のAPI公開されていることを今更ながら気が付いた。( ゚Д゚)
以上。