roq-coinbase-pro#

Supports#

Products

Spot

Futures

Options

Combos

Market Data

Reference Data

Market Status

Top of Book

Market by Price

Market by Order

Trade Summary

Statistics

Order Management

Create

Modify

Cancel

Cancel All

Auto-Cancel

Account Management

Positions

Funds

Installing#

$ mamba install \
      --channel https://roq-trading.com/conda/stable \
      roq-coinbase-pro
$ mamba install \
      --channel https://roq-trading.com/conda/unstable \
      roq-coinbase-pro

Using#

$ roq-coinbase-pro \
      --name "coinbase-pro" \
      --config_file $CONFIG_FILE_PATH \
      --client_listen_address $UNIX_SOCKET_PATH \
      --flagfile $ENVIRONMENT_FLAGFILE

Flags#

$ roq-coinbase-pro --help
--exchange (coinbase-pro)

Exchange identifier

--fix_uri (tcp+ssl://fix-public.sandbox.pro.coinbase.com:4198)

Exchange end-point

--fix_ping_freq (5s)

Ping frequency

--fix_request_timeout (15s)

Request timeout

--fix_cancel_on_disconnect (true)

Cancel orders on disconnect?

--fix_self_trade_prevention (N)

Self trade prevention: N=incoming order, B=both orders (string)

--fix_debug (false)

(DEBUG) log fix messages?

--rest_uri (https://api-public.sandbox.pro.coinbase.com)

Exchange end-point

--rest_proxy

Proxy end-point

--rest_ping_freq (5s)

Ping frequency

--rest_ping_path (/time)

Ping path

--rest_request_timeout (30s)

Request timeout

--ws_uri (wss://ws-feed-public.sandbox.pro.coinbase.com)

Exchange end-point

--ws_ping_freq (5s)

Ping frequency

--ws_max_subscriptions_per_stream (16)

Maximum number of symbols per connection

--ws_include_status (false)

Include status updates?

--enable_market_by_order (false)

Include market-by-order?

--encode_buffer_size (1048576)

Encode buffer size

--decode_buffer_size (10485760)

Decode buffer size

--mbp_allow_price_inversion (true)

Allow price inversion?

Environments#

$ $CONDA_PREFIX/share/roq-coinbase-pro/flags/prod/flags.cfg
# flagfile for the roq-coinbase-pro gateway

--fix_uri=tcp+ssl://fix.pro.coinbase.com:4198
--ws_uri=wss://ws-feed.pro.coinbase.com
--rest_uri=https://api.pro.coinbase.com
$ $CONDA_PREFIX/share/roq-coinbase-pro/flags/test/flags.cfg
# flagfile for the roq-coinbase-pro gateway

--fix_uri=tcp+ssl://fix-public.sandbox.pro.coinbase.com:4198
--ws_uri=wss://ws-feed-public.sandbox.pro.coinbase.com
--rest_uri=https://api-public.sandbox.pro.coinbase.com

Configuration#

$ $CONDA_PREFIX/share/roq-coinbase-pro/config.toml

Important

The template will be replaced when the software is upgraded. Make a copy and modify to your needs.

symbols = [
  "^BTC-USD[A-Z]?$",
  "^ETH-USD[A-Z]?$"
]

[accounts]

  [accounts.A1]
  master = true
  login = "YOUR_COINBASE_PRO_API_KEY_GOES_HERE"
  password = "YOUR_COINBASE_PRO_PASSPHRASE_GOES_HERE"
  secret = "YOUR_COINBASE_PRO_SECRET_GOES_HERE"
  symbols = [ ".*" ]

[users]

  [users.test]
  password = "1234"
  symbols = ".*"

  [users.trader]
  password = "secret"
  accounts = [ "A1" ]
  symbols = [ ".*BTC.*", ".*ETH.*" ]

[rate_limits]

  [rate_limits.global]
    type = "ORDER_ACTION"
    aggregate = true
    request_limit = 100
    monitor_period = "10s"
    ban_period = "5m"

Market Data#

Event

Stream

Messages

Comments

roq::ReferenceData

Rest

status

roq::MarketStatus

Rest

status

roq::TopOfBook

MarketData

ticker

No quantity from exchange

roq::MarketByPriceUpdate

MarketData

snapshot, l2update

roq::MarketByOrderUpdate

MarketData

open, change, done

roq::TradeSummary

MarketData

match

roq::StatisticsUpdate

MarketData

ticker

Statistics#

Type

Comments

OPEN_PRICE

HIGHEST_TRADED_PRICE

LOWEST_TRADED_PRICE

Order Management#

Event

Stream

Messages

Comments

roq::OrderUpdate

OrderEntry

ExecutionReport (8)

roq::TradeUpdate

DropCopy

Match

Event

Stream

Messages

Comments

roq::OrderUpdate

roq::TradeUpdate

Event

Stream

Messages

Comments

roq::CreateOrder

OrderEntry

NewOrderSingle (D)

roq::ModifyOrder

roq::CancelOrder

OrderEntry

OrderCancelRequest (F)

roq::CancelAllOrders

Not implemented

Event

Stream

Messages

Comments

roq::OrderAck

OrderEntry

ExecutionReport (8), OrderCancelReject (9)

Order Types#

Type

Comments

MARKET

Mapped to '1' (FIX)

LIMIT

Mapped to '2' (FIX)

STOP_LIMIT

Mapped to '4' (FIX)

Time in Force#

Type

Comments

GTC

Mapped to '1' (FIX)

IOC

Mapped to '3' (FIX)

FOK

Mapped to '4' (FIX)

Note

A non-standard value of 'P' (FIX) is used to indicate “Post-Only. This value is derived from Execution Instruction (see below) and will override any other value of Time in Force.

Position Effect#

Note

Not supported

Execution Instructions#

Type

Comments

CANCEL_IF_NOT_BEST

Mapped to the 'P' (FIX) used by Time in Force

Account Management#

Event

Stream

Messages

Comments

roq::PositionUpdate

Unavailable

roq::FundsUpdate

Unavailable

Event

Stream

Messages

Comments

roq::PositionUpdate

Unavailable

roq::FundsUpdate

Rest

accounts

Streams#

Type

Comments

FIX

Primary purpose

  • support order management

Each connection

  • supports a single account

Type

Comments

WebSocket

Primary purpose

  • live account updates, including orders and fills

Each connection

  • supports a single account

Type

Comments

WebSocket

Primary purpose

  • live market data

Each connection

  • supports a slice of the symbols

Type

Comments

REST

Primary purpose

  • download reference data, market statussupport, and funds

Constraints#

  • Rate-limit usage is not communicated by the exchange

  • FIX OrderMassCancelRequest (q) is not supported and orders must therefore be canceled one by one

Comments#

  • WebSocket is through a third-party CDN (CloudFlare) with all the issues such a solution entails.

  • FIX support is minimal and only supporting very basic order management.

  • Fills are not available from the FIX connection and there is a probability Match messages are lost from WebSocket connection. YOU SHOULD NOT RELY ON TRADE UPDATES FOR YOUR POSITION KEEPING !!!

  • TradeUpdate

    • You should not rely on this feed for your position keeping.

  • FundsUpdate

    • Only downloaded immediately after connection has been established.