Chiến lược giám sát và mua lại tỷ lệ tài trợ tương lai đa nền tảng


Ngày tạo: 2024-10-24 17:28:55 sửa đổi lần cuối: 2024-10-24 18:36:42
sao chép: 0 Số nhấp chuột: 887
11
tập trung vào
607
Người theo dõi

Chiến lược giám sát và mua lại tỷ lệ tài trợ tương lai đa nền tảng

mô tả:

Chiến lược này được sử dụng để thu thập và theo dõi tỷ lệ tài trợ từ nhiều nền tảng tương lai như OKCoin, Binance, Bitget, v.v. Khảo sát thị trường hợp đồng vĩnh viễn của nhiều sàn giao dịch khác nhau thông qua các luồng song song và thu thập dữ liệu về tỷ lệ tài trợ, đồng thời sử dụng cơ chế trì hoãn để tối ưu hóa tần suất yêu cầu.

Chức năng:

  • Hỗ trợ đa nền tảng: Đồng bộ hóa tỷ lệ tài trợ trên nhiều sàn giao dịch và thiết lập độ trễ yêu cầu khác nhau cho từng sàn.
  • Thu thập biểu tượng cụ thể:Hỗ trợ lấy tỷ giá tài trợ cho các cặp giao dịch cụ thể (như BTC/USDT, ETH/USDT).
  • Được tối ưu hóa cho các nền tảng khác nhau:Phân biệt giữa các nền tảng không cần phải truy vấn từng thị trường một (như Binance) và các nền tảng cần phải truy vấn tất cả các thị trường (như OKCoin).

Hướng dẫn:

Bạn có thể điều chỉnh danh sách nền tảng, danh sách ký hiệu và khoảng thời gian thăm dò khi cần để đáp ứng nhu cầu giao dịch cụ thể của mình.

Mã nguồn chiến lược

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