Files
ritmex-bot/docs/ccxt/examples/js/huobipro-market-buy-sell-fetch-trading-limits.js
T
2025-10-03 15:28:16 +08:00

98 lines
4.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import ccxt from '../../js/ccxt.js';
import ololog from 'ololog'
const log = ololog.configure .unlimited.handleNodeErrors (),
{ NotSupported } = ccxt,
enableRateLimit = true,
symbol = 'ADA/BTC',
side = 'buy',
// set createMarketBuyOrderRequiresPrice to true or false to see the difference
type = 'market',
// default is true
createMarketBuyOrderRequiresPrice = true,
amount = 191.03,
price = 0.000011,
options = { createMarketBuyOrderRequiresPrice },
exchange = new ccxt.huobipro ({ enableRateLimit, options });
// This is an example that demonstrates the issues discussed here:
// https://github.com/ccxt/ccxt/issues/564
// https://github.com/ccxt/ccxt/issues/3427
// https://github.com/ccxt/ccxt/issues/3460
// https://github.com/ccxt/ccxt/issues/4799
log.green ('CCXT', ccxt.version)
;(async () => {
// preload them first
await exchange.loadMarkets ()
// huobipro has this
if (!exchange.has['fetchTradingLimits']) {
throw new NotSupported (exchange.id + ' does not have fetchTradingLimits() yet, make sure your version of CCXT is up to date');
}
// In this particular case it requires an array of symbols
// otherwise it will load all of them one by one.
// Loading all limits without specifying
// the array of symbols might take a lot of time.
// The array of symbols will contain just one symbol of interest.
const arrayOfSymbols = [ symbol ]
const allLimits = await exchange.fetchTradingLimits (arrayOfSymbols)
// { 'ADA/BTC': { info: { symbol: "adabtc",
// 'buy-limit-must-less-than': 1.1,
// 'sell-limit-must-greater-than': 0.9,
// 'limit-order-must-greater-than': 0.1,
// 'limit-order-must-less-than': 5000000,
// 'market-buy-order-must-greater-than': 0.0001,
// 'market-buy-order-must-less-than': 100,
// 'market-sell-order-must-greater-than': 0.1,
// 'market-sell-order-must-less-than': 500000,
// 'limit-order-before-open-greater-than': 999999999,
// 'limit-order-before-open-less-than': 0,
// 'circuit-break-when-greater-than': 10000,
// 'circuit-break-when-less-than': 10,
// 'market-sell-order-rate-must-less-than': 0.1,
// 'market-buy-order-rate-must-less-than': 0.1 },
// limits: { amount: { min: 0.1, max: 5000000 } } } }
const limits = allLimits[symbol]
log.yellow (symbol, 'limits:')
log.yellow (limits)
// To make things a bit more complicated huobipro specifies
// different minimums for market and limit orders
// and different minimums for buy/sell directions
// therefore we have to work with it in an exchange-specific way
// using the 'info' field from the response that is
// until this aspect is completely unified in ccxt.
const info = limits['info']
const typeSide = type + '-' + side
const min = info[typeSide + '-order-must-greater-than']
const max = info[typeSide + '-order-must-less-than']
// huobipro requires the amount in quote currency for market sell orders
// huobipro requires the cost in quote currency for market buy orders
// cost = amount * price
const cost = createMarketBuyOrderRequiresPrice ? (amount * price) : amount
let color = 'red'
if ((min !== undefined) && (cost < min)) {
log[color] ('The cost is below minimum:', cost, '<', min)
} else if ((max !== undefined) && (cost > max)) {
log[color] ('The cost is above maximum:', cost, '>', max)
} else {
color = 'green'
}
log[color] ({ min, max, cost })
}) ()