Stratégie d'acquisition et de suivi des taux de financement à terme multi-plateformes


Date de création: 2024-10-24 17:28:55 Dernière modification: 2024-10-24 18:36:42
Copier: 0 Nombre de clics: 887
11
Suivre
607
Abonnés

Stratégie d’acquisition et de suivi des taux de financement à terme multi-plateformes

décrire:

Cette stratégie est utilisée pour obtenir et surveiller les taux de financement de plusieurs plateformes à terme telles que OKCoin, Binance, Bitget, etc. Interrogez les marchés des contrats perpétuels de diverses bourses via des threads parallèles et obtenez des données sur les taux de financement, tout en utilisant un mécanisme de retard pour optimiser la fréquence des demandes.

Fonction:

  • Prise en charge multi-plateforme:Synchronisez les taux de financement sur plusieurs bourses et définissez des délais de demande différents pour chacune d’elles.
  • Acquisition de symboles spécifiques: Prend en charge l’obtention de taux de financement pour des paires de trading spécifiques (telles que BTC/USDT, ETH/USDT).
  • Optimisé pour différentes plateformes:Faites la distinction entre les plateformes qui n’ont pas besoin d’interroger chaque marché un par un (comme Binance) et les plateformes qui doivent parcourir tous les marchés (comme OKCoin).

Instructions:

Vous pouvez ajuster la liste des plateformes, la liste des symboles et l’intervalle d’interrogation selon vos besoins de trading spécifiques.

Code source de la stratégie

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