7
fokus pada
350
Pengikut

Berkongsi logik strategi arbitraj perbezaan harga spot dalam berbilang bursa

Dicipta dalam: 2022-06-27 21:26:27, dikemas kini pada: 2024-12-02 21:35:44
comments   4
hits   9491

Berkongsi logik strategi arbitraj perbezaan harga spot dalam berbilang bursa

Prinsip Strategi

Disebabkan oleh sebab kecairan, apabila terdapat jumlah jualan atau tarikan yang besar dalam pasaran, sudah pasti akan berlaku turun naik harga yang besar, dan akan terdapat perbezaan harga seketika antara pertukaran Strategi ini adalah untuk menangkap detik-detik ini dan melaksanakan transaksi yang pantas untuk selesaikan proses beli rendah dan jual tinggi . Beberapa pelanggan bertanya kepada saya mengapa saya mempunyai begitu banyak pertukaran. Ini tidak dapat dielakkan daripada apa yang kami perolehi ialah perbezaan harga serta-merta antara pertukaran, lebih banyak peluang perbezaan harga akan ada.

Logik teras strategi
  1. Dapatkan maklumat pasaran berbilang bursa secara serentak untuk mengurangkan kelewatan mendapatkan maklumat pasaran Untuk pemerolehan serentak, anda boleh merujuk kepada pemalam alat yang saya kongsikan.Pemalam Serentak Berbilang Pertukaran
  2. Gabungkan permintaan dan bidaan semua bursa untuk mendapatkan maklumat sebut harga gabungan, dengan RealPrice ialah harga selepas ditolak yuran pengendalian.
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. Kira spread arbitraj yang paling menguntungkan daripada maklumat pasaran gabungan. Oleh kerana kami mengambil pesanan iaitu membeli dari harga permintaan terendah dan menjual dari harga bida tertinggi, asalkan bid.Harga Sebenar > tanya.Harga Sebenar, ada ruang keuntungan
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. Memandangkan kami telah memperoleh maklumat penyebaran arbitraj dalam pasaran, bagaimana kami memutuskan sama ada untuk melaksanakan urus niaga dan berapa banyak untuk berdagang Berikut adalah beberapa perkara penting untuk dipertimbangkan:
  • Aset yang tinggal semasa
  • Saiz spread (jika spread terlalu kecil, ia hanya akan mengimbangi jumlah mata wang, dan jika spread cukup besar, ia akan memaksimumkan bilangan transaksi)
  • Bilangan pesanan belum selesai
    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. Setelah kuantiti pesanan dikira, urus niaga boleh dilaksanakan Strategi ini menggunakan kaedah penambahan terus slip untuk mengambil pesanan dan membuat pesanan pada masa yang sama
            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. Apa yang tinggal ialah logik untuk mengira keuntungan, mengendalikan stop loss untuk pesanan yang gagal, dsb.
Faedah sebenar strategi ini

Berkongsi logik strategi arbitraj perbezaan harga spot dalam berbilang bursa Berkongsi logik strategi arbitraj perbezaan harga spot dalam berbilang bursa Berkongsi logik strategi arbitraj perbezaan harga spot dalam berbilang bursa

Paparan masa nyata semasa, logik teras kekal tidak berubah, dioptimumkan untuk menyokong berbilang mata wang

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

Akhir sekali, dialu-alukan untuk menyertai Laoqiu Quantitative Exchange: https://t.me/laoqiu_arbitrage