仮想通貨の自動売買プログラムを作る過程を紹介しています。
前回 プログラムのフォームにボタンとテキストボックスを設置し、以下のような外枠をつくりました。
今回はボタンをおしたら BTC-FX の現在値を取得して、それを作ったテキストボックスに表示するようにコードを書いていきます。
現在値 (最終取引価格) を取得するAPIを探す
「API」 とは bitFlyer が事前に用意してくれている「命令」のことです。bitFlyer から何か情報を取得したい場合や注文を入れたい場合には、それをするための API を見つける必要があります。
bitFlyer から提供される API の一覧は BitFlyer Playground の左側にリストされています。ここで実行してみてどういったレスポンスが返されるのかを見たり、API Documentation の説明を見たりして必要な API を見つけていきます。
例えば、今回利用する API は GET /v1/ticker という命令です。この命令を bitFlyer に送信すると、bitFlyer から以下のようなレスポンスを返ってきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
{ "product_code": "FX_BTC_JPY", "timestamp": "2018-03-28T15:12:30.817", "tick_id": 6020269, "best_bid": 862023, "best_ask": 862033, "best_bid_size": 0.28885309, "best_ask_size": 0.02, "total_bid_depth": 9414.66865316, "total_ask_depth": 9336.47160465, "ltp": 862023, "volume": 257335.96231617, "volume_by_product": 239712.393075 } |
このレスポンスに含まれる “ltp” が今回取得したい最終取引価格です。
この命令を発行するためのサンプルコードも右下に表示してくれるので、これをベースにプログラムを作りこんでいきます。
ボタンを押して BTC-FX の現在値(最終取引価格)を取得するC#コード
GET /v1/ticker のレスポンスに現在値 (ltp) が含まれていることがわかったので、これをプログラムに組み込んでいきます。ボタンを押したら GET /v1/ticker の命令を発行して、そのレスポンスをテキストボックスに出力します。
フォーム上のボタンをダブルクリックします。
すると、そのボタンがクリックされた時に実行されるコードの箇所が表示されます。
最初はこんな感じで button1_Click の {} の中が空っぽなので、クリックしても何もしません。
ここに上で見つけたサンプルコードを書き込みます。サンプルコードをほぼコピペで使えますが、結果の出力先を Console ではなくテキストボックスにしたいので、その部分を変更する必要があります。
具体的には以下の色のついた行を追加することでうまく動作した。同じフォームアプリを作って入れば、13 行目の BtcFxStep1 を自身のアプリ名に変更すればコピペで動作するはずです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
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; using System.Net.Http; using System.Net.Http.Headers; namespace BtcFxStep1 { public partial class Form1 : Form { static readonly Uri endpointUri = new Uri("https://api.bitflyer.jp"); public async Task GetCurrentBtcFxPrice() { var method = "GET"; var path = "/v1/ticker"; var query = "?product_code=FX_BTC_JPY"; 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(); textBox1.AppendText(response + System.Environment.NewLine); } } public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Task Job1 = GetCurrentBtcFxPrice(); } } } |
これで完成です。
プログラムを開始 (F5) してボタンを押すと、書き込んだ命令が実行され、そのレスポンスがテキストボックスに追記されます。
レスポンスの中に採取取引価格 (ltp) がたしかに表示されていますが、他のもろもろの情報と一緒にごちゃっと表示されてしまっているので見にくいですね。
次は ltp の値だけを抜き取れるようにしていきます。