我们以币安和火币这两个交易所为例,查看它们的API文档,发现它们都有聚合行情接口: 币安合约:https://fapi.binance.com/fapi/v1/ticker/bookTicker 火币现货币币:https://api.huobi.pro/market/tickers
但实际上,火币接口返回的结构并不是我们预想的那样。在处理接口返回的数据时需要注意。
接下来,我们来看如何封装这两个接口并处理数据。我们可以先编写一个构造函数来构造控制对象。使用FMZ的API函数HttpQuery函数发出请求,访问交易所接口。使用HttpQuery时需要使用异常处理try...catch处理接口返回失败等异常情况。
由于交易所接口返回的数据结构和字段命名各不相同,我们可以使用回调函数解决这个问题。通过将特殊处理的部分独立出来,我们可以在对象初始化后,根据具体情况使用回调函数处理数据。
例如,我们可以监控币安期货合约:["BTCUSDT","ETHUSDT","EOSUSDT","LTCUSDT","ETCUSDT","XRPUSDT"]和火币现货交易对:["btcusdt","ethusdt","eosusdt","etcusdt","ltcusdt","xrpusdt"]。
然后我们运行测试,将第一个交易所对象添加币安期货,第二个交易所对象添加火币现货。可以看到,通过使用回调函数对接口返回的数据做特异化处理,我们成功获取到了行情数据。
接下来,我们可以开始设计获取账户资产的方法。由于是多品种策略,所以账户资产数据也需要是多个的。好在大多数交易所的账户资产接口都是返回全资产数据的。因此,我们可以在构造函数createManager中添加获取资产的方法。
同样地,由于交易所接口返回的格式和字段命名不同,我们也需要使用回调函数对其进行特异化处理。以火币现货和币安期货为例,我们可以编写相应的回调函数。
最后,我们可以运行具有获取行情和资产功能的策略框架。通过获取到的行情数据,我们可以计算不同品种的差价,监控多个交易对的期现差价。通过这样的设计方式,我们还可以扩展到其他交易所。有兴趣的同学可以尝试一下!