Tsurumaru Blog

IT技術系ブログ

BitFlyerDotNetからLightning/Realtime APIを使ってみる

BitFlyerDotNetのRealtime API

BitFlyerDotNetでは、Reactive Extensionsを使用してRealtime APIをラップしています。Reactive Extensions (通称Rx)は、マイクロソフト謹製のC#/Linqなライブラリで、ちょっとクセがあり、なれるまでに若干時間がかかりますが、リアルタイム配信と非常に相性が良いです。

コード例

// FX_BTC_JPYのリアルタイム約定情報を取得して表示する。
var factory = new BitFlyerRealtimeSourceFactory();
factory.GetExecutionSource(BfProductCode.FXBTCJPY).Subscribe(exec =>
{
    Console.WriteLine("{0} {1} {2} {3} {4} {5}",
        exec.ExecutionId,
        exec.Side,
        exec.Price,
        exec.Size,
        exec.ExecutedTime.ToLocalTime(),
        exec.ChildOrderAcceptanceId);
 });
factory.StartAllExecutionSources();

実行結果

563172040 Sell 646805 0.01 2018/11/16 12:09:16 JRF20181116-030916-521674
563172041 Sell 646805 0.01 2018/11/16 12:09:16 JRF20181116-030913-895733
563172042 Sell 646805 0.1 2018/11/16 12:09:16 JRF20181116-030916-160381
563172043 Sell 646805 0.11 2018/11/16 12:09:16 JRF20181116-030916-160381
563172044 Sell 646803 0.01 2018/11/16 12:09:16 JRF20181116-030916-160381
563172045 Sell 646803 0.01 2018/11/16 12:09:16 JRF20181116-030916-160381
563172046 Sell 646801 0.081 2018/11/16 12:09:16 JRF20181116-030916-160381
563172047 Buy 646814 0.17714894 2018/11/16 12:09:16 JRF20181116-030916-095133

コード例

// FX_BTC_JPYのリアルタイムTikcer情報を取得して表示する。
factory.GetTickerSource(BfProductCode.FXBTCJPY).Subscribe(ticker =>
{
    Console.WriteLine("{0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10} {11}",
        ticker.ProductCode,
        ticker.Timestamp.ToLocalTime(),
        ticker.TickId,
        ticker.BestBid,
        ticker.BestAsk,
        ticker.BestBidSize,
        ticker.BestAskSize,
        ticker.TotalBidDepth,
        ticker.TotalAskDepth,
        ticker.LastTradedPrice,
        ticker.Last24HoursVolume,
        ticker.VolumeByProduct);
});

実行結果

FX_BTC_JPY 2018/11/16 12:21:02 153098950 647342 647350 0.0032 0.47 9721.84809004 10288.60099151 647342 689153.31360529 689153.31360529
FX_BTC_JPY 2018/11/16 12:21:02 153098971 647322 647389 0.1032 0.09000012 9720.92809004 10287.08947385 647389 689154.51360529 689154.5136
0529
FX_BTC_JPY 2018/11/16 12:21:02 153099021 647535 647538 1.63255782 0.05 9725.33496188 10286.7555318 647535 689156.58104747 689156.5810474
7
FX_BTC_JPY 2018/11/16 12:21:02 153099075 647535 647538 1.14455781 0.05 9726.71026174 10276.68630791 647535 689155.88904748 689155.889047
48
FX_BTC_JPY 2018/11/16 12:21:03 153099133 647375 647381 0.29 0.07644219 9726.89110026 10280.46026099 647375 689157.31360529 689157.313605
29
FX_BTC_JPY 2018/11/16 12:21:03 153099148 647399 647538 1.04355781 0.108 9729.03465807 10280.5838188 647381 689157.21004748 689157.210047
48
FX_BTC_JPY 2018/11/16 12:21:03 153099153 647399 647549 1.04355781 0.0565129 9728.98461868 10280.3938188 647549 689157.41004748 689157.41
004748
FX_BTC_JPY 2018/11/16 12:21:03 153099168 647399 647571 0.92873781 0.00354524 9728.86479868 10280.13658906 647571 689157.82486748 689157.
82486748

これらのリアルタイムAPIを利用することで、ストリーミング注文(成行注文ではなく、現在の価格で指値注文する注文方式)を行ったり、自動取引を行ったりすることができるようになります。