Sumber daya yang dimuat... Pemuatan...

Perdagangan Forex di Bursa Efek Rumah Kaca

Penulis:@cqz, Dibuat: 2022-06-27 21:26:27, Diperbarui: 2023-09-18 19:44:32

img

Prinsip Strategi

Karena alasan likuiditas, ketika pasar mengalami fluktuasi harga besar, maka akan terjadi fluktuasi harga yang besar, dan perbedaan harga akan terbentuk antara bursa, strategi adalah untuk menangkap momen ini untuk melakukan transaksi cepat untuk menyelesaikan proses jual beli rendah. Ada pelanggan yang bertanya kepada saya mengapa saya harus membuat begitu banyak bursa, dan itu tidak bisa dipungkiri, kami membuat perbedaan harga instan antara bursa, dan semakin banyak bursa, semakin banyak peluang harga yang terbentuk setelah persilangan.

Logika inti dari strategi
  1. Akses simultan ke informasi transaksi dari berbagai bursa harus dilakukan secara simultan, mengurangi keterlambatan transaksi yang diperoleh, akses simultan ke plugin yang dapat saya bagikan.Plugin Simultan Berbagai Bursa
  2. Dengan menggabungkan semua penawaran dan permintaan dari semua bursa untuk mendapatkan informasi penawaran yang dikombinasikan, RealPrice adalah harga setelah biaya transaksi dikurangi.
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. Dari informasi transaksi yang digabungkan, perhitungan selisih harga teratas dilakukan. Karena kita hanya membeli dari harga paling rendah, kita akan membeli dari harga terendah dan menjual dari harga terendah, jika bid.RealPrice > ask.RealPrice berarti 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. Di sini kita telah mendapatkan informasi tentang perbedaan harga yang tersedia di pasar, bagaimana memilih apakah akan melakukan transaksi, dan berapa banyak transaksi yang akan dilakukan, berikut adalah beberapa poin untuk menilai:
  • Aset yang tersisa
  • Ukuran perbedaan harga (perbedaan harga yang terlalu kecil hanya menyeimbangkan jumlah mata uang, harga yang cukup besar untuk memaksimalkan jumlah transaksi)
  • Jumlah pesanan yang dipesan
    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. Menghitung jumlah pesanan yang dapat dieksekusi, strategi menggunakan cara langsung menggeser titik makan pesanan secara bersamaan.
            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. Yang tersisa adalah logika menghitung keuntungan, menangani perintah yang gagal dan hal-hal seperti stop loss.
Strategi ini bermanfaat secara nyata

img img img

Saat ini, platform menunjukkan bahwa logika inti tidak berubah dan mendukung multi-mata uang yang dioptimalkan.

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

Dan akhirnya, selamat datang untuk bergabung dalam pertukaran kuantitatif:https://t.me/laoqiu_arbitrage


Berkaitan

Lebih banyak

Ianzeng123Bagaimana parameter minTakerAmount diatur?

Perempuan juga."Saya takut pasar kecil akan berlarian.

Johnny.Terima kasih.

h503059288Aku tidak tahu apa yang terjadi.