Esta estrategia se utiliza para obtener y monitorear las tasas de financiación de múltiples plataformas de futuros como OKCoin, Binance, Bitget, etc. Sondee los mercados de contratos perpetuos de varios intercambios a través de subprocesos paralelos y obtenga datos de la tasa de financiación, mientras utiliza un mecanismo de retraso para optimizar la frecuencia de solicitud.
Puede ajustar la lista de plataformas, la lista de símbolos y el intervalo de sondeo según sea necesario para satisfacer sus necesidades comerciales específicas.
function startFundingWorker() {
exchanges.forEach((_, pos) => {
__Thread(function (pos) {
let e = exchanges[pos]
let eName = e.GetName()
let delaySettings = {
'Futures_OKCoin': 20,
'Futures_Binance': 500,
}
let needInterate = ['Futures_OKCoin', 'Futures_Bitget','Futures_OKX', 'Futures_KuCoin', 'Futures_MEXC', 'Futures_Crypto', 'Futures_Deribit']
let delay = function () {
let n = delaySettings[eName]
if (n) {
Sleep(n)
}
}
let epoch = 60000*2;
let ts = 0;
let fundings = {}
while (true) {
let now = new Date().getTime()
if (now - ts < epoch) {
Sleep(1000)
continue
}
let markets = e.GetMarkets()
if (!markets) {
Sleep(1000)
continue
}
if (needInterate.includes(eName)) {
for (let symbol in markets) {
if (symbol.includes('.swap')) {
let ret = e.GetFundings(symbol)
if (ret) {
for (let r of ret) {
fundings[r.Symbol] = r
}
}
delay();
}
}
} else {
let zones = []
for (let symbol in markets) {
if (symbol.includes('.swap') && !zones.includes(markets[symbol].QuoteAsset)) {
zones.push(markets[symbol].QuoteAsset)
let ret = e.GetFundings(markets[symbol].QuoteAsset + '.swap')
if (ret) {
for (let r of ret) {
fundings[r.Symbol] = r
}
}
delay();
}
}
}
ts = now
__threadSetData(0, eName+"_funding", fundings)
}
}, pos)
})
}
function getFundings(eName, symbols) {
let fundings = __threadGetData(0, eName+"_funding")
if (!fundings) {
return null
}
if (typeof(symbols) === 'undefined') {
return fundings
}
let ret = {}
symbols.forEach((s) => {
if (fundings[s]) {
ret[s] = fundings[s]
}
})
return ret
}
function main() {
startFundingWorker()
while (true) {
exchanges.forEach((e) => {
let eName = e.GetName()
let fundings = getFundings(eName, ['BTC_USDT.swap', 'ETH_USDT.swap'])
Log(eName, fundings)
})
Sleep(5000)
}
}