멀티 플랫폼 선물 자금 조달 비율 획득 및 모니터링 전략


생성 날짜: 2024-10-24 17:28:55 마지막으로 수정됨: 2024-10-24 18:36:42
복사: 0 클릭수: 887
11
집중하다
607
수행원

멀티 플랫폼 선물 자금 조달 비율 획득 및 모니터링 전략

설명하다:

이 전략은 OKCoin, Binance, Bitget 등 다양한 선물 플랫폼에서 자금 조달 비율을 얻고 모니터링하는 데 사용됩니다. 다양한 거래소의 영구 계약 시장을 병렬 스레드를 통해 조사하고 자금 조달 비율 데이터를 얻는 동시에 지연 메커니즘을 사용하여 요청 빈도를 최적화합니다.

기능:

  • 다중 플랫폼 지원: 여러 거래소의 자금 조달 비율을 동기화하고 각 거래소에 대해 다른 요청 지연을 설정합니다.
  • 특정 심볼 획득: 특정 거래 쌍(예: BTC/USDT, ETH/USDT)에 대한 자금 조달 비율을 확보하는 것을 지원합니다.
  • 다양한 플랫폼에 최적화됨: 각 시장을 하나하나 쿼리할 필요가 없는 플랫폼(예: 바이낸스)과 모든 시장을 탐색해야 하는 플랫폼(예: OKCoin)을 구분합니다.

지도:

귀하의 특정 거래 요구에 맞게 플랫폼 목록, 심볼 목록 및 폴링 간격을 필요에 따라 조정할 수 있습니다.

전략 소스 코드

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)
    }
}