7
پر توجہ دیں
350
پیروکار

متعدد ایکسچینجز میں اسپاٹ پرائس کے فرق کی ثالثی حکمت عملی کی منطق کا اشتراک کرنا

میں تخلیق کیا: 2022-06-27 21:26:27, تازہ کاری: 2024-12-02 21:35:44
comments   4
hits   9495

متعدد ایکسچینجز میں اسپاٹ پرائس کے فرق کی ثالثی حکمت عملی کی منطق کا اشتراک کرنا

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

لیکویڈیٹی وجوہات کی بناء پر، جب مارکیٹ میں بڑی مقدار میں فروخت یا کھنچاؤ ہوتا ہے، تو لامحالہ قیمتوں میں بڑا اتار چڑھاو ہوتا ہے، اور تبادلے کے درمیان قیمتوں میں ایک لمحاتی فرق ہوتا ہے اور حکمت عملی یہ ہے کہ ان لمحات کو پکڑنا اور تیزی سے لین دین کرنا کم خریدنے اور زیادہ فروخت کرنے کا عمل مکمل کریں۔ کچھ کلائنٹس نے مجھ سے پوچھا کہ میرے پاس اتنے زیادہ تبادلے کیوں ہیں جو ہم تبادلے کے درمیان فوری قیمت کا فرق ہے، کراس اوور کے بعد قیمتوں میں فرق کے اتنے ہی زیادہ مواقع ہوں گے۔

حکمت عملی کی بنیادی منطق
  1. بیک وقت متعدد ایکسچینجز کی مارکیٹ کی معلومات حاصل کرنا ضروری ہے۔ملٹی ایکسچینج کنکرنٹ پلگ ان
  2. کوٹیشن کی مشترکہ معلومات حاصل کرنے کے لیے تمام ایکسچینجز کی طلب اور بولی کو یکجا کریں، جہاں ہینڈلنگ فیس کو کم کرنے کے بعد RealPrice قیمت ہے۔
function createOrders(depths, askOrders, bidOrders) {
    let asksIndex = 0;
    let bidIndex = 0;
    for (let i = 0; i < depths.length; i++) {
        let exchangeTariff = getExchangeTariff(i);
        let asks = depths[i].Asks;
        let bids = depths[i].Bids;
        for (let j = 0; j < Math.min(asks.length, bids.length, 20); j++) {
            if (asks[j].Amount >= minTakerAmount) {
                askOrders[asksIndex] = {
                    "Price": asks[j].Price,
                    "Amount": asks[j].Amount,
                    "Fee": asks[j].Price * exchangeTariff,
                    "RealPrice": asks[j].Price * (1 + exchangeTariff),
                    "Index": i,
                };
                asksIndex++;
            }
            if (bids[j].Amount >= minTakerAmount) {
                bidOrders[bidIndex] = {
                    "Price": bids[j].Price,
                    "Amount": bids[j].Amount,
                    "Fee": bids[j].Price * exchangeTariff,
                    "RealPrice": bids[j].Price * (1 - exchangeTariff),
                    "Index": i,
                };
                bidIndex++;
            }
        }
    }
    askOrders.sort(function (a, b) {
        return a.RealPrice - b.RealPrice;
    });
    bidOrders.sort(function (a, b) {
        return b.RealPrice - a.RealPrice;
    });
}
  1. مشترکہ مارکیٹ کی معلومات سے سب سے زیادہ منافع بخش ثالثی پھیلاؤ کا حساب لگائیں۔ چونکہ ہم آرڈر لے رہے ہیں، یعنی سب سے کم قیمت سے خرید رہے ہیں اور سب سے زیادہ بولی کی قیمت سے فروخت کر رہے ہیں، جب تک کہ بولی۔ ریئل پرائس > پوچھیں۔
function getArbitrageOrders(askOrders, bidOrders) {
    let ret = [];
    for (let i = 0; i < askOrders.length; i++) {
        for (let j = 0; j < bidOrders.length; j++) {
            let bidOrder = bidOrders[j];
            let askOrder = askOrders[i];
            if (bidOrder.Index === askOrder.Index) {
                continue
            }
            let minMigrateDiffPrice = ((askOrder.Price + bidOrder.Price) / 2 * minMigrateDiffPricePercent / 100);
            if (bidOrder.RealPrice - askOrder.RealPrice > minMigrateDiffPrice) {
                ret.push({
                    "Ask": askOrder,
                    "Bid": bidOrder,
                })
            }
        }
    }
    if (ret.length === 0) {
        ret.push({
            "Ask": askOrders[0],
            "Bid": bidOrders[0],
        });
    }
    //按最优价差排序
    ret.sort((a, b) => {
        return (b.Bid.RealPrice - b.Ask.RealPrice) - (a.Bid.RealPrice - a.Ask.RealPrice);
    });
    return ret;
}
  1. اب جب کہ ہم نے مارکیٹ میں ثالثی کے پھیلاؤ کی معلومات حاصل کر لی ہیں، ہم یہ کیسے طے کرتے ہیں کہ لین دین کو انجام دینا ہے اور کتنی تجارت کرنی ہے؟
  • موجودہ باقی اثاثے
  • اسپریڈ کا سائز (اگر اسپریڈ بہت چھوٹا ہے، تو یہ صرف کرنسی کی مقدار کو متوازن کرے گا، اور اگر اسپریڈ کافی بڑا ہے، تو یہ لین دین کی تعداد کو زیادہ سے زیادہ کرے گا)
  • زیر التواء آرڈرز کی تعداد
    var askOrder = arbitrageOrder.Ask;
    var bidOrder = arbitrageOrder.Bid;
    var perAmountFee = arbitrageOrder.Ask.Fee + arbitrageOrder.Bid.Fee;
    var minRealDiffPrice = (askOrder.Price + bidOrder.Price) / 2 * minDiffPricePercent / 100;
    var minMigrateDiffPrice = ((askOrder.Price + bidOrder.Price) / 2 * minMigrateDiffPricePercent / 100);
    var curRealDiffPrice = arbitrageOrder.Bid.RealPrice - arbitrageOrder.Ask.RealPrice;
    var buyExchange = exchanges[arbitrageOrder.Ask.Index];
    var sellExchange = exchanges[arbitrageOrder.Bid.Index];
    var buySellAmount = 0;
    if (curRealDiffPrice > minRealDiffPrice) {
        buySellAmount = math.min(
            bidOrder.Amount,
            askOrder.Amount,
            maxTakerAmount,
            runningInfo.Accounts[bidOrder.Index].CurStocks,
            runningInfo.Accounts[askOrder.Index].CurBalance / askOrder.Price
        );
    } else if (bidOrder.Index !== askOrder.Index) {
        if (migrateCoinEx == -1) {
            if (curRealDiffPrice > minMigrateDiffPrice && runningInfo.Accounts[bidOrder.Index].CurStocks - runningInfo.Accounts[askOrder.Index].CurStocks > maxAmountDeviation) {
                buySellAmount = math.min(
                    bidOrder.Amount,
                    askOrder.Amount,
                    maxTakerAmount,
                    runningInfo.Accounts[bidOrder.Index].CurStocks,
                    runningInfo.Accounts[askOrder.Index].CurBalance / askOrder.Price,
                    runningInfo.Accounts[bidOrder.Index].CurStocks - ((runningInfo.Accounts[bidOrder.Index].CurStocks + runningInfo.Accounts[askOrder.Index].CurStocks) / 2)
                );
                if (buySellAmount >= minTakerAmount) {
                    Log("启动交易所平衡!");
                }
            }
        } else if (migrateCoinEx == askOrder.Index) {
            if (curRealDiffPrice > minMigrateDiffPrice && runningInfo.Accounts[bidOrder.Index].CurStocks > 0) {
                buySellAmount = math.min(
                    bidOrder.Amount,
                    askOrder.Amount,
                    maxTakerAmount,
                    runningInfo.Accounts[bidOrder.Index].CurStocks,
                    runningInfo.Accounts[askOrder.Index].CurBalance / askOrder.Price
                );
                if (buySellAmount >= minTakerAmount) {
                    Log("启动货币迁移:", exchanges[bidOrder.Index].GetName(), "-->", exchanges[askOrder.Index].GetName());
                }
            }
        }
    }
  1. آرڈر کی مقدار کا حساب لگانے کے بعد، حکمت عملی ایک ہی وقت میں آرڈر لینے اور آرڈر دینے کے لیے براہ راست پھسلن کو شامل کرنے کا طریقہ استعمال کرتی ہے۔
            var buyWait = buyExchange.Go("Buy", _N(askOrder.Price * (1.01), pricePrecision), buySellAmount);
            var sellWait = sellExchange.Go("Sell", _N(bidOrder.Price * (0.99), pricePrecision), buySellAmount);
            var startWaitTime = new Date().getTime()
            Sleep(3000);
            var buyOrder = buyWait.wait()
            var sellOrder = sellWait.wait()
  1. جو چیز باقی رہ جاتی ہے وہ ہے منافع کا حساب لگانے، ناکام آرڈرز کے لیے سٹاپ لاسز کو سنبھالنا وغیرہ۔
اس حکمت عملی کے حقیقی فوائد

متعدد ایکسچینجز میں اسپاٹ پرائس کے فرق کی ثالثی حکمت عملی کی منطق کا اشتراک کرنا متعدد ایکسچینجز میں اسپاٹ پرائس کے فرق کی ثالثی حکمت عملی کی منطق کا اشتراک کرنا متعدد ایکسچینجز میں اسپاٹ پرائس کے فرق کی ثالثی حکمت عملی کی منطق کا اشتراک کرنا

موجودہ ریئل ٹائم ڈسپلے، بنیادی منطق میں کوئی تبدیلی نہیں، متعدد کرنسیوں کو سپورٹ کرنے کے لیے بہتر بنایا گیا

https://www.fmz.com/robot/464965

آخر میں، لاؤقیو کوانٹیٹیو ایکسچینج میں شامل ہونے میں خوش آمدید: https://t.me/laoqiu_arbitrage