Skip to content

teramonagi/bitflyer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

bitflyer

R-CMD-check Lifecycle: experimental

R wrapper for bitFlyer’s API

Installation

# Not yet on CRAN
# install.packages("bitflyer")

# Install the development version from GitHub:
# install.packages("devtools")
devtools::install_github("teramonagi/bitflyer")

Preparation of API keys

bitFlyer Private APIs require authentication using an API Key and API Secret.

They can be obtained by generating them on the developer’s page.

You must set these keys in .Renviron

❯ cat ~/.Renviron 
BITFLYER_LIGHTNING_API_KEY=<your-api-key>
BITFLYER_LIGHTNING_API_SECRET=<your-api-secret>

or as global variables in R

> BITFLYER_LIGHTNING_API_KEY <- "your-api-key"
> BITFLYER_LIGHTNING_API_SECRET <- "your-api-secret"

Example

HTTP API

library("bitflyer")
# Get the list of market
fromJSON(markets())
#>      product_code market_type         alias
#> 1         BTC_JPY        Spot          <NA>
#> 2      FX_BTC_JPY          FX          <NA>
#> 3         ETH_BTC        Spot          <NA>
#> 4         BCH_BTC        Spot          <NA>
#> 5         ETH_JPY        Spot          <NA>
#> 6 BTCJPY26MAR2021     Futures  BTCJPY_MAT3M
#> 7 BTCJPY15JAN2021     Futures BTCJPY_MAT1WK
#> 8 BTCJPY22JAN2021     Futures BTCJPY_MAT2WK

# Get order book
x <- board(product_code = "BTC_JPY")
x <- fromJSON(x)
str(x)
#> List of 3
#>  $ mid_price: num 3779321
#>  $ bids     :'data.frame':   2837 obs. of  2 variables:
#>   ..$ price: num [1:2837] 3778213 3778212 3778169 3777966 3777743 ...
#>   ..$ size : num [1:2837] 0.05 0.85 0.088 0.106 0.05 0.175 0.098 0.15 0.05 0.096 ...
#>  $ asks     :'data.frame':   1926 obs. of  2 variables:
#>   ..$ price: num [1:1926] 3780430 3781496 3781499 3781500 3781590 ...
#>   ..$ size : num [1:1926] 0.006 0.03 0.8 0.095 0.139 0.00105 0.175 0.05 0.008 0.1 ...

# Ticker 
ticker(product_code = "BTC_JPY")
#> [1] "{\"product_code\":\"BTC_JPY\",\"state\":\"RUNNING\",\"timestamp\":\"2021-01-11T02:23:02.923\",\"tick_id\":11641542,\"best_bid\":3778990.0,\"best_ask\":3781496.0,\"best_bid_size\":0.195,\"best_ask_size\":0.03,\"total_bid_depth\":905.4001749,\"total_ask_depth\":838.77890196,\"market_bid_size\":0.0,\"market_ask_size\":0.0,\"ltp\":3780430.0,\"volume\":168682.06537567,\"volume_by_product\":13616.4547289}"

# Execution History
head(fromJSON(executions()))
#>           id side   price       size               exec_date
#> 1 2114086954  BUY 3781499 0.05000000  2021-01-11T02:23:00.66
#> 2 2114086953  BUY 3780000 0.05000000  2021-01-11T02:23:00.66
#> 3 2114086952 SELL 3780430 0.95519531 2021-01-11T02:22:59.647
#> 4 2114086951 SELL 3780430 0.03480469 2021-01-11T02:22:59.617
#> 5 2114086950  BUY 3780000 0.01000000 2021-01-11T02:22:59.297
#> 6 2114086948 SELL 3778336 0.01390625 2021-01-11T02:22:58.263
#>   buy_child_order_acceptance_id sell_child_order_acceptance_id
#> 1     JRF20210111-022300-006846      JRF20210111-022258-080121
#> 2     JRF20210111-022300-006846      JRF20210111-022300-030394
#> 3     JRF20210111-022258-100008      JRF20210111-022259-065022
#> 4     JRF20210111-022258-100008      JRF20210111-022259-093027
#> 5     JRF20210111-022258-100008      JRF20210111-022258-101011
#> 6     JRF20210111-022251-002787      JRF20210111-022258-181776

# Get orderbook status
fromJSON(get_board_state())
#> $health
#> [1] "NORMAL"
#> 
#> $state
#> [1] "RUNNING"

# Get the current status of the exchange.
get_health()
#> [1] "{\"status\":\"NORMAL\"}"

The results of this chunk are hidden because you really understand of my portfolio/positions …

# Get a list of which HTTP Private APIs can be used with the specified API key
fromJSON(get_permissions())

# Get Margin Status
fromJSON(get_collateral())

#Send a New Order
x <- send_child_order(
  product_code = "BTC_JPY", 
  child_order_type = "LIMIT", 
  side = "BUY", 
  price = 300*10^4, 
  size = 0.001
)
x
child_order_acceptance_id <- fromJSON(x)$child_order_acceptance_id

# List Orders
fromJSON(get_child_orders(product_code = "BTC_JPY", child_order_acceptance_id=child_order_acceptance_id))
# You can also get all active orders
# fromJSON(get_child_orders(product_code = "BTC_JPY", child_order_state="ACTIVE"))

# Cancel the order
cancel_child_order(product_code = "BTC_JPY", child_order_acceptance_id = child_order_acceptance_id)
# You can also cancel all child orders
# cancel_all_child_orders(product_code = "BTC_JPY")

# No active orders (Check)
fromJSON(get_child_orders(product_code = "BTC_JPY", child_order_state="ACTIVE"))

# Get balance
fromJSON(get_balance())

# Get Parent Order Details
get_parent_orders(product_code = "BTC_JPY")

# List Executions
fromJSON(get_executions(product_code = "BTC_JPY"))

# List Balance History
fromJSON(get_balance_history())

# Get Open Interest Summary
get_positions()

# Get Margin Change History
fromJSON(get_collateral_history())

# Get Trading Commission
get_trading_commission(product_code = "BTC_JPY")

The following APIs are not implemented yet.

Realtime API

… Not implemented yet(under development) …