রিসোর্স লোড হচ্ছে... লোডিং...

মাল্টি এক্সচেঞ্জের অবিলম্বে মূল্য বিপরীতে সুইচ কৌশল যৌক্তিক ভাগ

লেখক:@cqz, সৃষ্টিঃ ২০২২-০৬-২৭ ২১ঃ২৬ঃ২৭, আপডেটঃ ২০২৩-০৯-১৮ ১৯ঃ৪৪ঃ৩২

img

কৌশলগত নীতি

তরলতার কারণে, যখন বাজারে বড় আকারের টান টান হয় তখন অবশ্যই বড় আকারের দামের ওঠানামা ঘটে এবং এক্সচেঞ্জগুলির মধ্যে মুহুর্তের দামের পার্থক্য তৈরি হয়। কৌশলটি হ'ল এই মুহুর্তগুলিতে দ্রুত লেনদেন সম্পাদন করার প্রক্রিয়াটি ক্যাপচার করা। আমার এক ক্লায়েন্ট আমাকে জিজ্ঞেস করেছে, কেন এতগুলো এক্সচেঞ্জের সাথে কাজ করছি, এটা অনিবার্য, আমরা যেটা করছি তা হল এক্সচেঞ্জের মধ্যে তাত্ক্ষণিক মূল্যের পার্থক্য, যত বেশি এক্সচেঞ্জ থাকবে, ক্রসিংয়ের পর দামের পার্থক্যের সম্ভাবনা তত বেশি।

কৌশলগত মূল যুক্তি
  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. একত্রিত খোলার তথ্য থেকে সর্বাধিক সুদের পার্থক্য গণনা করা হয়। যেহেতু আমরা একক, সর্বনিম্ন মূল্য থেকে কিনতে এবং সর্বোচ্চ মূল্য থেকে বিক্রয়, যদি 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. তবে, এখন আমরা শুধু লাভের হিসাব করতে পারবো, ব্যর্থ অর্ডার বন্ধ করার জন্য কাজ করতে পারবো।
এই কৌশলটি বাস্তব যুদ্ধে লাভজনক

img img img

বর্তমান বাস্তব চিত্র প্রদর্শন, মূল যুক্তি অপরিবর্তিত, মাল্টি মুদ্রা সমর্থন অপ্টিমাইজ করা

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

অবশেষে, ওয়েলকাম টু দ্য ওয়াল অক্সফোর্ড কোয়ালিটি এক্সচেঞ্জঃhttps://t.me/laoqiu_arbitrage


সম্পর্কিত

আরো

ইয়ানজেং১২৩ভাই, minTakerAmount কিভাবে সেট করা হয়?

নববধূওআমি মনে করি, এটা খুবই গুরুত্বপূর্ণ যে, আমরা সবাই মিলে একটি ছোট্ট এক্সচেঞ্জের জন্য কাজ করি।

জনি।প্রশংসা

h503059288অক্ষয় ওয়াই-ওয়াও।