Tsurumaru Blog

IT技術系ブログ

BitFlyerDotNet.Tradingリリース

BitFlyerDotNet.Tradingとは

bitFlyer Lightning APIの.NETラッパーである BitFlyerDotNet.LighningAPI は、 REST API を単純に .NETから利用可能にしたものですが、取引アプリケーションを作成しようとした場合、API 呼び出し以外にも以下のような様々な処理を追加する必要があるため、それらを追加した BitFlyerDotNet.Trading をリリースしました。

  • 二重発注防止と注文送信時のエラー処理

    • 注文は送信完了の時点で確定し、確定後にサーバーからの注文情報を取得することで確認することができますが、サーバービジー時には、注文送信に失敗したり、注文の確定から注文情報を取得可能になるまでに相応の時間がかかったりする場合があります。BitFlyerDotNet.Trading では、非同期処理とエラー処理、リトライ処理を適切に行うことにより、注文を確実に送信するとともに、注文状態を適切に把握することで、二重注文を未然に防止することができます。
  • 注文約定確認の高速化とサーバー負荷の軽減

    • 注文が約定したことを確認するためには、getchildorders API を利用して注文の状態を取得する必要がありますが、可能な限り迅速に状態を把握するためには、REST API を連続してアクセス(ポーリング)する必要があるため、サーバーに過大な負荷をかけてしまう可能性があります。BitFlyerDotNet.Trading では、Realtime API で約定した取引を監視することで、サーバーに高負荷を与えることなく、実際の約定とほぼ同時に約定を確認することができます。
  • 確実なキャンセル処理と状態管理

    • 注文をキャンセルする場合には、キャンセル API を使用してキャンセル注文を行いますが、サーバービジーの場合など、リトライを行っても数秒〜数十秒にわたって注文を受け付けられない場合があります。このような場合には、キャンセル注文を送信するのではなく、注文送信自身を中止する必要があります。また、未約定の注文をキャンセルした場合には、注文一覧に注文記録が残らないため、自前で状態管理を行って、確実にキャンセルが行われたかを管理する必要があります。
BitFlyerDotNet.Trading での注文コード例
// FX_BTC_JPY で成行買い注文を実行する。
var account = new TradingAccount(BfProductCode.FXBTCJPY);
account.Login(apiKey, apiSecret);

var order = account.CreateMarketPriceOrder(BfTradeSide.Buy, 0.01);
account.PlaceOrder(order);
リアルタイム情報を利用した注文のコード例
  • リアルタイム API の統合と特殊注文
    • リアルタイムティッカー情報やリアルタイム約定情報を統合しているため、現在価格での注文などを簡単に行うことができます。
// 現在の買気配価格で買注文を出し、約定した時点で ¥5,000 幅で逆指値売(利益確定)注文を発注する。
// 注文には親注文(IFD)を使用する。
var order = account.CreateIFD(
    new LimitPriceOrder(BfProductCode.FXBTCJPY, BfTradeSide.Buy, 0.01, account.BidPrice),
    new StopLimitOrder(BfProductCode.FXBTCJPY, BfTradeSide.Sell, 0.01, account.BidPrice + 5000.0)
);
account.PlaceOrder(order);