交易所API限流
交易所通常都有限流机制。交易所会记录、跟踪你的身份和IP地址, 不允许你过于频繁的访问其API。通过限流措施,交易所可以对访问流量 进行负载均衡,以此保护其API服务被DDOS攻击或被滥用。
警告:为了避免你的账号或IP被封,不要超过交易所的流量限制!
大多数交易所允许每秒1到2个请求。如果你的访问过于有攻击性,交易所可能 会临时限制你访问其API或者封掉你的IP一段时间。
exchange.rateLimit
属性被设置为一个安全的默认值,这是次优的选择。
有些交易所可能针对不同的访问端结点有不同的限流规则。ccxt的用户需要根据
应用的特定目的来修改rateLimit属性。
CCXT库有内置的实验性质的限流器,可以在后台实现访问节流,这一过程 对调用者是透明的。警告:CCXT的用户应当至少启用一种限流机制:要么 实现自己的自定义限流算法,要么使用内置的限流器。
使用.enableRateLimit
属性启用内置的限流器,例如:
下面的JavaScript代码在创建交易所实例时启用内置的限流器:
const exchange = new ccxt.bitfinex ({
'enableRateLimit': true,
})
或者在创建交易所实例之后,开启或关闭内置的限流器:
exchange.enableRateLimit = true // enable
exchange.enableRateLimit = false // disable
下面是使用 Python实现同样功能的代码:
# enable built-in rate limiting upon instantiation of the exchange
exchange = ccxt.bitfinex({
'enableRateLimit': True,
})
# or switch the built-in rate-limiter on or off later after instantiation
exchange.enableRateLimit = True # enable
exchange.enableRateLimit = False # disable
下面是使用PHP实现同样功能的代码:
// enable built-in rate limiting upon instantiation of the exchange
$exchange = new \ccxt\bitfinex (array (
'enableRateLimit' => true,
));
// or switch the built-in rate-limiter on or off later after instantiation
$exchange->enableRateLimit = true; // enable
$exchange->enableRateLimit = false; // disable
如果你的调用达到了限流门槛或者返回nonce错误,ccxt库将抛出以下异常之一:
- DDoSProtectionError:DDOS保护错误
- ExchangeNotAvailable:交易所不可用
- ExchangeError:交易所错误
- InvalidNonce:无效的Nonce值
通常在稍晚时候再重试访问即可解决问题。