Deploy ứng dụng Machine learning lên Web server. Phần 3: Crawl dữ liệu từ sàn Binance.com
Tìm hiểu về một số API trên Binance được dùng và tạo CSDL Exchange information GET /api/v1/exchangeInfo Trả về thông tin các cặp coin hiện có trên Binance { "timezone": "UTC", "serverTime": 1508631584636, "rateLimits": [{ ...
Tìm hiểu về một số API trên Binance được dùng và tạo CSDL
Exchange information
GET /api/v1/exchangeInfo
Trả về thông tin các cặp coin hiện có trên Binance
{ "timezone": "UTC", "serverTime": 1508631584636, "rateLimits": [{ "rateLimitType": "REQUESTS_WEIGHT", "interval": "MINUTE", "limit": 1200 }, { "rateLimitType": "ORDERS", "interval": "SECOND", "limit": 10 }, { "rateLimitType": "ORDERS", "interval": "DAY", "limit": 100000 } ], "exchangeFilters": [], "symbols": [{ "symbol": "ETHBTC", "status": "TRADING", "baseAsset": "ETH", "baseAssetPrecision": 8, "quoteAsset": "BTC", "quotePrecision": 8, "orderTypes": ["LIMIT", "MARKET"], "icebergAllowed": false, "filters": [{ "filterType": "PRICE_FILTER", "minPrice": "0.00000100", "maxPrice": "100000.00000000", "tickSize": "0.00000100" }, { "filterType": "LOT_SIZE", "minQty": "0.00100000", "maxQty": "100000.00000000", "stepSize": "0.00100000" }, { "filterType": "MIN_NOTIONAL", "minNotional": "0.00100000" }] }] }
Trên đây ta cần lưu ý một số thông tin quan trọng cần lưu lại:
symbol # Thông tin cặp coin giao dịch minQty # min quantity: Đơn vị khối lượng nhỏ nhất cho 1 giao dịch (tạm dịch) tickSize # Đơn vị giá nhỏ nhất cho 1 giao dịch status # Trạng thái trên Binance: TRADING - còn giao dịch được, BREAK: không giao dịch được baseAsset # Coin hiện thời quoteAsset # Market trên Binance: BTC, ETH, USDT, BNB
Còn 1 số thông tin khác nữa nhưng hiện tại thì mình chỉ quan tâm mấy thông tin này thôi ace mà cần lưu thông tin gì khác thì tìm hiểu thêm và comment chia sẻ nhé!
Dưới đây là query tạo table:
DROP TABLE IF EXISTS `coin_info`; CREATE TABLE `coin_info` ( `id` smallint(6) NOT NULL AUTO_INCREMENT, `symbol` char(20) DEFAULT NULL, `minQty` decimal(15,10) DEFAULT NULL, `tickSize` decimal(15,10) DEFAULT NULL, `status` char(20) DEFAULT NULL, `baseAsset` char(10) DEFAULT NULL, `quoteAsset` char(10) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `symbol` (`symbol`) USING HASH ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
Kline/Candlestick data
GET /api/v1/klines
Thông tin trả về giá trong khung thời gian để vẽ biểu đồ candlestick cái này ae nào đầu tư và tìm hiểu về thị trường chứng khoán, coin, forex sẽ rõ.
Parameters
Name | Type | Mandatory | Description |
---|---|---|---|
symbol | STRING | YES | |
interval | ENUM | YES | 1m, 3m, 5m, 15m, 30m, 1h, 2h, 4h, 6h, 8h, 12h, 1d, 3d, 1w, 1M |
startTime | LONG | NO | |
endTime | LONG | NO | |
limit | INT | NO | Default 500; max 1000. |
Nếu startTime và endTime không có trong parameter thì respon sẽ là dữ liệu mới nhất.
Response:
[ [ 1499040000000, // Open time "0.01634790", // Open "0.80000000", // High "0.01575800", // Low "0.01577100", // Close "148976.11427815", // Volume 1499644799999, // Close time "2434.19055334", // Quote asset volume 308, // Number of trades "1756.87402397", // Taker buy base asset volume "28.46694368", // Taker buy quote asset volume "17928899.62484339" // Ignore. ] ]
Query tạo table:
DROP TABLE IF EXISTS `candlestick_data`; CREATE TABLE `candlestick_data` ( `id` int(11) NOT NULL AUTO_INCREMENT, `idCoin` smallint(6) DEFAULT NULL, `openTime` bigint(20) DEFAULT NULL, `open` decimal(20,10) DEFAULT NULL, `high` decimal(20,10) DEFAULT NULL, `low` decimal(20,10) DEFAULT NULL, `close` decimal(20,10) DEFAULT NULL, `volume` decimal(20,10) DEFAULT NULL, `closeTime` bigint(20) DEFAULT NULL, `quoteAssetVolume` decimal(20,10) DEFAULT NULL, `numberOfTrader` int(11) DEFAULT NULL, `takerBuyBaseAssetVolume` decimal(20,10) DEFAULT NULL, `takerBuyQuoteAssetVolume` decimal(20,10) DEFAULT NULL, `ignore` decimal(20,10) DEFAULT NULL, PRIMARY KEY (`id`), KEY `openTime` (`openTime`), KEY `idCoin` (`idCoin`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
Ở đây mình đánh index 2 trường là openTime, idCoin vì 2 trường này được query where rất nhiều. Đồng thời dữ liệu ta crawl về sẽ tương đối nhiều tính đến ngày 11/11/2018 thì mình crawl về được khoảng gần 3 triệu bản ghi với khung là 1h.
Ngoài ra còn 1 số API khác để check thông tin tài khoản, check order, đặt order thì cần tạo API Key và API Secret để tạo tool tự động giao dịch, báo cáo, ... hiện tại thì nó không liên quan đến bài viết nên mình không giới thiệu. Sẽ có một bài khác giới thiệu về các API này và làm tool giao dịch tự động.
Oke vậy là tạm xong về phần tìm hiểu về API và tạo table để lưu dữ liệu rồi.
Code Python
Install Pip3
sudo apt install python3-pip
Install libraries
pip3 install numpy
pip3 install python-binance
sudo apt-get install python3-dev
pip3 install mysqlclient
Nếu install mysqlclient không được thì bạn thử lệnh sau:
sudo apt-get install python3-dev default-libmysqlclient-dev
Code
Các bạn tham khảo code tại đây nhé: https://github.com/hung96ad/crawl_data_binance
Lưu ý: là hàm insertcoininfotodb chỉ chạy lần đầu khi bạn tạo CSDL thôi nhé còn đâu lần sau mà vẫn chạy là lỗi đó