c34f7862创建于 1月15日历史提交
README.md

Binance API Handler

This handler integrates with the Binance API to make aggregate trade (kline) data available to use for model training and predictions.

Example: Forecast Cryptocurrency Prices

To see how the Binance handler is used, let's walk through a simple example to create a time series model to predict the future price of Bitcoin (BTC) in terms of USDT.

Connect to the Binance API

We start by creating a database to connect to the Binance API. Currently, there is no need for an API key:

CREATE DATABASE my_binance
WITH
  ENGINE = 'binance'
  PARAMETERS = {};

Select Data

To see if the connection was successful, try searching for the most recent trade data. By default, aggregate data (klines) from the latest 1000 trading intervals with a length of 1m each are returned.

SELECT *
FROM my_binance.aggregated_trade_data
WHERE symbol = 'BTCUSDT';

Each row should look like this:

symbol open_time open_price high_price low_price close_price volume close_time quote_asset_volume number_of_trades taker_buy_base_asset_volume taker_buy_quote_asset_volume
BTCUSDT 1678338600 21752.65000 21761.33000 21751.53000 21756.7000 103.8614100 1678338659.999 2259656.20520700 3655 55.25763000 1202219.60971860

where:

  • symbol - Trading pair (BTC to USDT in the above example)
  • open_time - Start time of interval in seconds since the Unix epoch (default interval is 1m)
  • open_price - Price of base asset at beginning of trading interval
  • high_price - Highest price of base asset during trading interval
  • low_price - Lowest price of base asset during trading interval
  • close_price - Price of base asset at end of trading interval
  • volume - Total amount of base asset traded during interval
  • close_time - End time of interval in seconds since the Unix epoch
  • quote_asset_volume - Total amount of quote asset (USDT in above case) traded during interval
  • number_of_trades - Total number of trades made during interval
  • taker_buy_base_asset_volume - How much of the base asset volume is contributed by taker buy orders
  • taker_buy_quote_asset_volume - How much of the quote asset volume is contributed by taker buy orders

You can customize open_time, close_time, and interval:

SELECT *
FROM my_binance.aggregated_trade_data
WHERE symbol = 'BTCUSDT'
AND open_time > '2023-01-01'
AND close_time < '2023-01-03 08:00:00'
AND interval = '1s'
LIMIT 10000;

Supported intervals are listed here:

  • 1s
  • 1m
  • 3m
  • 5m
  • 15m
  • 30m
  • 1h
  • 2h
  • 4h
  • 6h
  • 8h
  • 12h
  • 1d
  • 3d
  • 1w

Train a Model

Now it's time to create a time series model using 10000 trading intervals in the past with duration 1m.

CREATE MODEL mindsdb.btc_forecast_model
FROM my_binance
(
  SELECT * FROM aggregated_trade_data
  WHERE symbol = 'BTCUSDT'
  AND close_time < '2023-01-01'
  AND interval = '1m'
  LIMIT 10000
)

PREDICT open_price

ORDER BY open_time
WINDOW 100
HORIZON 10;

It may take a few minutes to complete. For more accuracy, you should increase the limit to be higher (e.g. 100,000)

Making Predictions

First let's make a view for the most recent BTCUSDT aggregate trade data:

CREATE VIEW recent_btcusdt_data AS (
  SELECT * FROM my_binance.aggregated_trade_data
  WHERE symbol = 'BTCUSDT'
)

Now let's predict the future price of BTC:

SELECT m.*
FROM recent_btcusdt_data AS t
JOIN mindsdb.btc_forecast_model AS m
WHERE m.open_time > LATEST

This should give you the predicted BTC price for the next 10 minutes (we set the horizon to 10) in terms of USDT.