1

申し訳ありませんが、Bloomberg ユーザー以外はこの例を再現できません。

その他については、Rblpapiとそのsubscribe関数を使用しています。データ フレーム、マトリックス、または配列のようなものを作成し、サブスクリプションによってストリーミングされる値を入力したいと考えています。

BBComm コンポーネントが稼働していると仮定すると、私の例は次のようになります。

require(Rblpapi)
con <- blpConnect()
securities <- c('SX5E 07/20/18 C3400 Index',
            'SX5E 07/20/18 C3450 Index',
            'SX5E 07/20/18 C3500 Index')

これらのフィールドで 3 x 2 マトリックスを埋めたいと思います。

fields <- c('BID', 'ASK')

パフォーマンスのオーバーヘッドがほとんどなく、次のようなマトリックスを作成できると思います。

mat <- matrix(data = NA,
          nrow = 3,
          ncol = 2)

今、私は目的を埋めるためにsubscribeと その引数を使用しています。fun

i <- 1
subscribe(securities = securities,
          fields = fields,
          fun = function(x){
            if (i > length(securities))
              i <<- 1
            tryCatch(
              expr = {
                mat[i, 1] <<- x$data$BID
                mat[i, 2] <<- x$data$ASK
                i <<- i + 1
              },
              error = function(e){
                message(e)
              },
              finally = {}
              )
          })

結果:

Error in subscribe_Impl(con, securities, fields, fun, options, identity) : 
  Evaluation error: number of items to replace is not a multiple of replacement length.

もちろん、これは機能しません。ストリーミングされたデータでインデックスを使用する方法がよくわからないからです。$演算子は、名前でデータポイントを取得するのに問題ないようです-私がBIDandで行ったように-しかし、どの値が を参照しているか、または をASK参照しているかを把握する方法が見つかりません。証券間の値の所有権を取得できないため、互いに区別できない数値のストリームを取得しているようです。securities[1]securities[2]

インデックスを使用するx$data$BID[1]と、同じエラーがスローされます。

4

2 に答える 2

2

あなたのコードは問題なく見えます。機能しないのはx$data$BID、に変更してからx$data["BID"]保存することだけです。私はあなたのコードで作業しており、これが私の結果です。

     fields=c("TIME","LAST_PRICE", "BID", "ASK")
     blpConnect()
     blpConnect()
     i <- 1

    subscribe(securities = securities,
    fields = fields,"interval=60",
      fun = function(x){
        if (i > length(securities))
          i <<- 1
        tryCatch(
          expr = {
            tim <- x$data["TIME"]
            last <<- x$data["LAST_PRICE"]
            ask <<- x$data["ASK"]
            bid <<- x$data["BID"]
            i <<- i + 1
          },
          error = function(e){
            message(e)
          },
          finally = {}
        )
        print(cbind(tim$TIME,last$LAST_PRICE,ask$ASK, bid$BID))
      })

結果

于 2018-07-24T16:36:12.900 に答える
1

subscribe関数からの結果オブジェクトを調べる良い方法は次のとおりです。

subscribe(securities=c("AAPL US Equity"),
          fields=c("LAST_PRICE"),
          fun=function(x) print(str(x)))

そこから、データに取り掛かることができます。

subscribe(securities=c("AAPL US Equity", "INTC US Equity"),
          fields=c("LAST_PRICE","BID","ASK"),
          fun=function(x) {
            if (!is.null(x$data$MKTDATA_EVENT_TYPE) && x$data$MKTDATA_EVENT_TYPE == "TRADE" && exists("LAST_PRICE", where = x$data)) {
              print(data.frame(Ticker = x$topic, DateTime = x$data$TRADE_UPDATE_STAMP_RT, Trade = x$data$LAST_PRICE))
            }
          })

ここでは data.frame のみを印刷しました。subscribe の FUN 引数を使用して、データを直接処理または保存できます。

于 2019-07-17T14:20:42.293 に答える