7
ध्यान केंद्रित करना
350
समर्थक

कई एक्सचेंजों में स्पॉट मूल्य अंतर मध्यस्थता रणनीति के तर्क को साझा करना

में बनाया: 2022-06-27 21:26:27, को अपडेट: 2024-12-02 21:35:44
comments   4
hits   9491

कई एक्सचेंजों में स्पॉट मूल्य अंतर मध्यस्थता रणनीति के तर्क को साझा करना

रणनीति सिद्धांत

तरलता कारणों से, जब बाजार में बड़ी मात्रा में बिक्री या खींचतान होती है, तो अनिवार्य रूप से बड़ी कीमत में उतार-चढ़ाव होगा, और एक्सचेंजों के बीच एक क्षणिक मूल्य अंतर होगा। रणनीति इन क्षणों को पकड़ने और तेजी से लेनदेन करने की है कम कीमत पर खरीदने और अधिक कीमत पर बेचने की प्रक्रिया पूरी करें। कुछ क्लाइंट ने मुझसे पूछा कि मेरे पास इतने सारे एक्सचेंज क्यों हैं। यह अपरिहार्य है। हम एक्सचेंजों के बीच तात्कालिक मूल्य अंतर से पैसा कमाते हैं। जितने अधिक एक्सचेंज होंगे, क्रॉसओवर के बाद उतने ही अधिक मूल्य अंतर के अवसर होंगे।

रणनीति का मूल तर्क
  1. एक साथ कई एक्सचेंजों की बाजार जानकारी प्राप्त करें। बाजार की जानकारी प्राप्त करने में होने वाली देरी को कम करने के लिए इसे एक साथ प्राप्त करना आवश्यक है। समवर्ती अधिग्रहण के लिए, आप मेरे द्वारा साझा किए गए टूल प्लग-इन का संदर्भ ले सकते हैं।मल्टी-एक्सचेंज समवर्ती प्लगइन
  2. संयुक्त कोटेशन जानकारी प्राप्त करने के लिए सभी एक्सचेंजों की पूछ और बोली को मिलाएं, जहां रियलप्राइस हैंडलिंग शुल्क घटाने के बाद की कीमत है।
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. संयुक्त बाजार जानकारी से सबसे अधिक लाभदायक आर्बिट्रेज स्प्रेड की गणना करें। चूंकि हम ऑर्डर ले रहे हैं, यानी सबसे कम पूछ मूल्य पर खरीद रहे हैं और सबसे अधिक बोली मूल्य पर बेच रहे हैं, जब तक bid.RealPrice > ask.RealPrice है, तब तक लाभ की गुंजाइश है
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