Strategi akuisisi dan pemantauan tingkat pendanaan berjangka multi-platform


Tanggal Pembuatan: 2024-10-24 17:28:55 Akhirnya memodifikasi: 2024-10-24 18:36:42
menyalin: 0 Jumlah klik: 887
11
fokus pada
607
Pengikut

Strategi akuisisi dan pemantauan tingkat pendanaan berjangka multi-platform

menggambarkan:

Strategi ini digunakan untuk memperoleh dan memantau tingkat pendanaan dari berbagai platform berjangka seperti OKCoin, Binance, Bitget, dll. Melakukan jajak pendapat pasar kontrak abadi berbagai bursa melalui rangkaian paralel dan memperoleh data tingkat pendanaan, sembari menggunakan mekanisme penundaan untuk mengoptimalkan frekuensi permintaan.

Fungsi:

  • Dukungan multi-platform: Sinkronkan nilai tukar pendanaan di beberapa bursa dan atur penundaan permintaan yang berbeda untuk masing-masing bursa.
  • Akuisisi simbol tertentu:Mendukung perolehan tingkat pendanaan untuk pasangan perdagangan tertentu (seperti BTC/USDT, ETH/USDT).
  • Dioptimalkan untuk berbagai platform: Bedakan antara platform yang tidak perlu memeriksa setiap pasar satu per satu (seperti Binance) dan platform yang perlu melintasi semua pasar (seperti OKCoin).

Petunjuk:

Anda dapat menyesuaikan daftar platform, daftar simbol, dan interval polling sesuai kebutuhan untuk memenuhi kebutuhan perdagangan spesifik Anda.

Kode Sumber Strategi

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