193 lines
5.7 KiB
Markdown
193 lines
5.7 KiB
Markdown
|
|
> Name
|
|
|
|
各大交易所资金费率汇总
|
|
|
|
> Author
|
|
|
|
小草
|
|
|
|
|
|
|
|
|
|
|
|
> Source (javascript)
|
|
|
|
``` javascript
|
|
var funding_rates = {'Binance':{},'Huobi':{},'OKEX':{},'Gate':{},'Bybit':{}};
|
|
var all_symbols = new Set();
|
|
var avg = 0;
|
|
var update_avg_time = 0;
|
|
|
|
function CanParse(json_string) {
|
|
try {
|
|
JSON.parse(json_string);
|
|
} catch (e) {
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function GetFundingRate(){
|
|
var finding_rate = HttpQuery("https://fapi.binance.com/fapi/v1/premiumIndex");
|
|
var symbol = null;
|
|
if(finding_rate && CanParse(finding_rate)){
|
|
finding_rate = JSON.parse(finding_rate);
|
|
for (var i = 0; i < finding_rate.length; i++) {
|
|
symbol = finding_rate[i].symbol.slice(0, finding_rate[i].symbol.length - 4);
|
|
if(!finding_rate[i].symbol.endsWith("USDT")){
|
|
continue;
|
|
}
|
|
if(symbol.startsWith(1000)){
|
|
symbol = symbol.slice(4,symbol.length);
|
|
}
|
|
all_symbols.add(symbol);
|
|
funding_rates.Binance[symbol] = _N(parseFloat(finding_rate[i].lastFundingRate)*100,5);
|
|
}
|
|
}
|
|
|
|
|
|
finding_rate = HttpQuery("https://api.hbdm.com/swap-api/v1/swap_batch_funding_rate");
|
|
if(finding_rate && CanParse(finding_rate)){
|
|
finding_rate = JSON.parse(finding_rate).data;
|
|
for (var i = 0; i < finding_rate.length; i++) {
|
|
symbol = finding_rate[i].contract_code.split('-')[0];
|
|
all_symbols.add(symbol);
|
|
funding_rates.Huobi[symbol] = _N(parseFloat(finding_rate[i].funding_rate)*100,5);
|
|
}
|
|
}
|
|
|
|
finding_rate = HttpQuery("https://www.okex.com/priapi/v5/public/funding-rate-all?currencyType=1");
|
|
|
|
if(finding_rate && CanParse(finding_rate)){
|
|
finding_rate = JSON.parse(finding_rate).data[0].fundingList;
|
|
for (var i = 0; i < finding_rate.length; i++) {
|
|
symbol = finding_rate[i].instId.split('-')[0];
|
|
all_symbols.add(symbol);
|
|
funding_rates.OKEX[symbol] = _N(parseFloat(finding_rate[i].fundingRate)*100,5);
|
|
}
|
|
}
|
|
|
|
finding_rate = HttpQuery("https://api.gateio.ws/api/v4/futures/usdt/tickers");
|
|
if(finding_rate && CanParse(finding_rate)){
|
|
finding_rate = JSON.parse(finding_rate);
|
|
for (var i = 0; i < finding_rate.length; i++) {
|
|
symbol = finding_rate[i].contract.split('_')[0];
|
|
all_symbols.add(symbol);
|
|
funding_rates.Gate[symbol] = _N(parseFloat(finding_rate[i].funding_rate)*100,5);
|
|
}
|
|
}
|
|
|
|
var info = HttpQuery("https://api.bybit.com/v2/public/symbols");
|
|
if(info && CanParse(info)){
|
|
info = JSON.parse(info).result;
|
|
for (var i = 0; i < info.length; i++) {
|
|
if(info[i].quote_currency != 'USDT'){
|
|
continue
|
|
}
|
|
symbol = info[i].base_currency;
|
|
finding_rate = HttpQuery("https://api-testnet.bybit.com/public/linear/funding/prev-funding-rate?symbol="+info[i].name);
|
|
Sleep(10);
|
|
if(finding_rate && CanParse(finding_rate)){
|
|
finding_rate = JSON.parse(finding_rate).result;
|
|
if(symbol.endsWith(1000)){
|
|
symbol = symbol.slice(0,symbol.length-4);
|
|
}
|
|
all_symbols.add(symbol);
|
|
funding_rates.Bybit[symbol] = _N(parseFloat(finding_rate.funding_rate)*100,5);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
|
|
function GetAvg(symbol){
|
|
var exs = ['Binance', 'Huobi', 'OKEX', 'Gate', 'Bybit'];
|
|
var count = 0;
|
|
var total = 0;
|
|
for(var i = 0; i < exs.length; i++){
|
|
if(symbol in funding_rates[exs[i]]){
|
|
count += 1;
|
|
total += funding_rates[exs[i]][symbol];
|
|
}
|
|
}
|
|
return _N(total/count, 5);
|
|
}
|
|
|
|
function UpdateStatus(){
|
|
let table = {
|
|
type: 'table',
|
|
title: 'Funding Rate%',
|
|
cols: ['symbol'], // 初始化列,包含 symbol
|
|
rows: []
|
|
};
|
|
|
|
let fundingRates = {};
|
|
|
|
// 直接从已有的 fundings 数据中构建费率信息
|
|
exchanges.forEach((e) => {
|
|
let eName = e.GetName();
|
|
let fundings = getFundings(eName);
|
|
|
|
if (fundings) {
|
|
for (let symbol in fundings) {
|
|
let rate = fundings[symbol].Rate; // 假设每个返回对象中有一个 Rate 属性
|
|
if (!fundingRates[symbol]) {
|
|
fundingRates[symbol] = { total: 0, count: 0, exchanges: {} };
|
|
}
|
|
fundingRates[symbol].total += rate;
|
|
fundingRates[symbol].count++;
|
|
fundingRates[symbol].exchanges[eName] = rate; // 记录费率
|
|
}
|
|
}
|
|
});
|
|
|
|
// 构建每个交易对的行和平均费率
|
|
for (let symbol in fundingRates) {
|
|
let data = fundingRates[symbol];
|
|
let averageRate = data.total / data.count; // 计算平均费率
|
|
|
|
// 将列头添加到表格中
|
|
if (table.cols.length === 1) { // 只在第一次添加交易对列
|
|
for (let e of exchanges) {
|
|
table.cols.push(e.GetName());
|
|
}
|
|
table.cols.push('Average Rate'); // 添加平均费率列
|
|
}
|
|
|
|
// 构建行数据
|
|
let row = [symbol];
|
|
for (let e of exchanges) {
|
|
row.push(data.exchanges[e.GetName()] || 0); // 填充各个交易所的费率
|
|
}
|
|
row.push(averageRate); // 填充平均费率
|
|
|
|
table.rows.push(row);
|
|
}
|
|
|
|
// 记录状态
|
|
LogStatus(logString + '`' + JSON.stringify(table) + '`');
|
|
}
|
|
|
|
function main() {
|
|
while(true){
|
|
try{
|
|
GetFundingRate();
|
|
UpdateStatus();
|
|
Sleep(10*1000);
|
|
}catch(e){
|
|
Log(e);
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
> Detail
|
|
|
|
https://www.fmz.com/strategy/333315
|
|
|
|
> Last Modified
|
|
|
|
2024-11-01 17:02:18
|