وسائل لوڈ ہو رہے ہیں... لوڈنگ...

ایف ایم زیڈ فنڈنگ ریٹ حصول اور نگرانی کی حکمت عملی

مصنف:FMZ~Lydia, تخلیق: 2024-11-04 14:54:42, تازہ کاری: 2024-11-15 09:54:33

img

ملٹی پلیٹ فارم فیوچر فنڈنگ کی شرح کے حصول اور نگرانی کی حکمت عملی

تفصیل:

اس حکمت عملی کا استعمال متعدد فیوچر پلیٹ فارمز جیسے او کے کوئن ، بائننس ، بٹ جیٹ وغیرہ سے فنڈنگ کی شرحوں کو حاصل کرنے اور ان کی نگرانی کرنے کے لئے کیا جاتا ہے۔ یہ متوازی موضوعات کے ذریعہ مختلف تبادلے کے مستقل معاہدے کی منڈیوں کا جائزہ لیتا ہے ، اور فنڈنگ کی شرح کے اعداد و شمار حاصل کرتا ہے ، جبکہ درخواست کی تعدد کو بہتر بنانے کے لئے تاخیر کا طریقہ کار استعمال کرتا ہے۔

یہ مضمون ڈسپلے اور فنڈنگ کی شرح الارم پش افعال کی حمایت کرنے کے لئے حکمت عملی میں کچھ تبدیلیاں کرتا ہے.

اوپن سورس ایڈریس:https://www.fmz.com/strategy/470345

فنکشن:

  • کثیر پلیٹ فارم کی حمایت: متعدد تجارتی پلیٹ فارمز میں فنڈنگ کی شرحوں کو ہم آہنگ کریں اور ہر پلیٹ فارم کے لئے درخواست کی مختلف تاخیر مقرر کریں۔
  • مخصوص علامتوں کا حصول: مخصوص تجارتی جوڑوں (جیسے بی ٹی سی/یو ایس ڈی ٹی، ای ٹی ایچ/یو ایس ڈی ٹی) کی فنڈنگ کی شرح حاصل کرنے میں معاونت کرتا ہے۔
  • مختلف پلیٹ فارمز کے لئے بہتر بنائیں: پلیٹ فارمز کے مابین فرق کریں جن کو ہر مارکیٹ کو ایک ایک کرکے پوچھ گچھ کرنے کی ضرورت نہیں ہے (جیسے بائننس) اور پلیٹ فارمز جن کو تمام مارکیٹوں کو عبور کرنے کی ضرورت ہے (جیسے او کے کوئن) ۔
  • شرح دکھانا: متعدد ٹریڈنگ پلیٹ فارمز کی فنڈنگ کی شرح دکھاتا ہے۔ چونکہ جمع کرنے کے وقفے مختلف ہیں ، لہذا براہ راست موازنہ کے لئے انہیں یکساں طور پر 24 گھنٹے کی شرحوں میں ایڈجسٹ کیا جاتا ہے۔
  • شرح انتباہ دباؤ: ایک مخصوص حد مقرر کی جا سکتی ہے، اور جب 24h برابر شرح اپنی مرضی کے مطابق سے زیادہ ہے، یہ FMZ موبائل اے پی پی پر دھکا دیا جائے گا.

ہدایات:

آپ اپنی مخصوص تجارتی ضروریات کو پورا کرنے کے لئے پلیٹ فارم کی فہرست، علامت کی فہرست اور پولنگ وقفہ کو حسب ضرورت ایڈجسٹ کرسکتے ہیں۔

حکمت عملی کا کوڈ

اسکرپٹ کو کئی اہم حصوں میں تقسیم کیا گیا ہے:

  1. startفنانسنگ ورکر: ہر تبادلے کے لئے ایک علیحدہ تھریڈ شروع کرتا ہے تاکہ فنڈنگ کی شرح کی نگرانی کی جاسکے تاکہ بہت زیادہ ڈیٹا کی درخواست کرنے والے ایک ہی تھریڈ کی وجہ سے تھروٹلنگ سے بچ سکے۔
  2. حاصل کریں فنڈز: اسٹوریج سے مخصوص تبادلہ کے لئے فنڈنگ کی شرح کے اعداد و شمار پڑھتا ہے۔
  3. اپ ڈیٹ اسٹیٹس: تمام تبادلے کے لئے فنڈنگ کی شرح ٹیبل پر عملدرآمد اور اپ ڈیٹ کرتا ہے، ایک جدول کے طور پر مجموعی اعداد و شمار کو ظاہر کرتا ہے، اور اعلی فیس کے ساتھ علامات کو ریکارڈ کرتا ہے.
  4. اہم: مرکزی پروگرام شروع کرتا ہے، نگرانی تھریڈ شروع کرتا ہے اور باقاعدگی سے مجموعی فنڈنگ کی شرح کی حیثیت کو اپ ڈیٹ کرتا ہے۔
// Start the funding rate monitoring thread and create a separate thread for each exchange's funding rate data
function startFundingWorker() {
    exchanges.forEach((_, pos) => {
        __Thread(function (pos) {
            let e = exchanges[pos]
            let eName = e.GetName()
            // Set request delays for different exchanges to prevent frequent requests from causing throttling
            let delaySettings = {
                'Futures_OKCoin': 20,
                'Futures_Binance': 500,
                'Futures_MEXC': 100,
            }
            // Need to traverse the list of exchange names for all markets, these exchanges do not support getting all trading pairs at once
            let needInterate = ['Futures_OKCoin', 'Futures_Bitget','Futures_OKX', 'Futures_KuCoin', 'Futures_MEXC'] 
            // Set delay based on exchange name
            let delay = function () {
                let n = delaySettings[eName]
                if (n) {
                    Sleep(n)
                }
            }
            // Set the update interval to update every two minutes
            let epoch = 60000 * 2;
            let ts = 0;
            let fundings = {}
            // Infinite loop, get funding rate at fixed intervals
            while (true) {
                let now = new Date().getTime()
                if (now - ts < epoch) {
                    // If the update cycle is not reached, pause for 1 second and then continue checking
                    Sleep(1000)
                    continue
                }
                let markets = e.GetMarkets()
                if (!markets) {
                    // If market information cannot be obtained, try again after a delay
                    Sleep(1000)
                    continue
                }
                // If the exchange is in the list that needs to be traversed, request the funding rate for each market
                if (needInterate.includes(eName)) {
                    for (let symbol in markets) {
                        if (symbol.includes('.swap') && symbol.includes('_USDT')) {
                            let ret = e.GetFundings(symbol)
                            if (ret) {
                                for (let r of ret) {
                                    fundings[r.Symbol] = r
                                }
                            }
                            delay();
                        }
                    }
                } else {
                    // For exchanges not in the traversal list, only request the funding rate of USDT.swap
                    let ret = e.GetFundings('USDT.swap')
                    if (ret) {
                        for (let r of ret) {
                            fundings[r.Symbol] = r
                        }
                    }
                }
                // Update data timestamp
                ts = now
                // Stores the exchange's funding rate data
                __threadSetData(0, eName+"_funding", fundings)
            }
        }, pos)
    })
}

// Get the funding rate data of the specified exchange
function getFundings(eName) {
    let efundings = __threadGetData(0, eName+"_funding")
    if (!efundings) {
        return null
    }
    return efundings
}

// Update the funding rate table and display it in the log
function UpdateStatus(){
    let table = { 
        type: 'table', 
        title: 'Funding Rate%', 
        cols: ['index', 'symbol'], // Initialization column, containing symbol
        rows: [] 
    };
    let fundingRates = {};
    exchanges.forEach((e) => {
        let eName = e.GetName();
        if (fundings[eName]) {
            for (let symbol in fundings[eName]) {
                // Parse short symbol names and remove unnecessary prefixes
                let short_symbol = symbol.split('_')[0].replace(/^(100|1000|10000|100000|1000000|10000000)|^(100|1000|10000|100000|1000000|10000000)$/g, '');
                let rate = fundings[eName][symbol].Rate;
                let day = 24 / (fundings[eName][symbol].Interval / 3600000)
                // Initialize symbol data structure
                if (!fundingRates[short_symbol]) {
                    fundingRates[short_symbol] = { total: 0, count: 0,  day_rate: {},  next_time: {}, last_time:0};
                }
                // Record and push rates that exceed the threshold
                if (Math.abs(rate) > 0.01 && Date.now() - fundingRates[short_symbol].last_time > 30*60*1000) {
                    Log(e.GetName(), symbol, rate, '@')
                    fundingRates[short_symbol].last_time = Date.now()
                }
                fundingRates[short_symbol].total += rate;
                fundingRates[short_symbol].count++;
                fundingRates[short_symbol].day_rate[eName] = _N(rate * day , 6); // Record rates
                fundingRates[short_symbol].next_time[eName] = _N((fundings[eName][symbol].Time - Date.now()) / 3600000 , 1) + 'h'
            }
        }
    });
    // Added rate columns and next update time columns for each exchange
    for (let e of exchanges) {
        table.cols.push(e.GetName()+' Rate');
        table.cols.push('Next Time');
    }
   
    table.cols.push('Average Rate'); // Add an average rate column
    let i = 0;
    // Iterate over each symbol and fill in the data
    for (let symbol in fundingRates) {
        let data = fundingRates[symbol];
        if (data.count == 1) {
            continue // Symbols containing only a single data point are ignored
        }
        let averageRate = data.total / data.count; // Calculate average rate
        let row = [i++, symbol];
        for (let e of exchanges) {
            row.push(data.day_rate[e.GetName()] || null); // Filling the fees of various exchanges
            row.push(data.next_time[e.GetName()] || null);
        }
        row.push(_N(averageRate, 6)); // Filling average rate
        table.rows.push(row);
    }
    LogStatus('`' + JSON.stringify(table) + '`');
}

// Main function, start funding rate monitoring and status update
var fundings = {}
function main() {
    startFundingWorker() // Start monitoring threads for each exchange
    while (true) {
        exchanges.forEach((e) => {
            let eName = e.GetName()
            let eFundings = getFundings(eName)
            fundings[eName] = eFundings
        })
        Sleep(15000) // Update every 15 seconds
        UpdateStatus()
    }
}

مزید