avatar of 发明者量化-小小梦 发明者量化-小小梦
fokus pada mesej peribadi
4
fokus pada
1271
Pengikut

Amalan Kuantitatif Pertukaran DEX (4) - Ujian Akses Strategi WOOFi / EdgeX

Dicipta dalam: 2025-04-10 15:36:06, dikemas kini pada: 2025-04-11 13:35:33
comments   0
hits   674

Amalan Kuantitatif Pertukaran DEX (4) - Ujian Akses Strategi WOOFi / EdgeX

Dalam beberapa artikel yang lalu, kami telah membincangkan akses kepada DEX arus perdana, dan artikel ini akan menumpukan pada penggunaan sebenar dan menjalankan ujian penggunaan strategi sebenar. Platform FMZ baru-baru ini telah menambah sokongan untuk pertukaran terdesentralisasi WOOFi dan EdgeX. Dalam artikel ini, kami akan berlatih menjalankan beberapa strategi pengajaran mudah pada dua pertukaran ini.

WOOFi

Sambungkan dompet anda pada WOOFi, dan kemudian pada halaman API KEY, anda boleh melihat maklumat kunci API, menyalin dan menampalnya dan mengkonfigurasinya pada FMZ.

Gunakan hos terbaharu FMZ, yang sudah menyokong WOOFi DEX dan EdgeX DEX, selepas memuat turun dan menggunakan. Konfigurasikan objek pertukaran pada halaman: https://www.fmz.com/m/platforms/add, dan konfigurasikan AccountId, AccessKey dan SecretKey WOOFi.

Dalam ujian ini, kami menggunakan aPrototaip strategi pembuatan pasaran asas, digabungkan dengan penunjuk turun naik pasaran (ATR), selang antara pesanan belum selesai dikira secara dinamik, dan pengenalan pintar kedudukan dan logik meletakkan pesanan dengan keutamaan pada kedudukan penutup direalisasikan. Strategi ini menyegarkan buku pesanan dalam setiap pusingan, memperoleh semula maklumat kedalaman dan kedudukan, dan membuat pesanan mengikut selang harga yang ditetapkan dan kuantiti pesanan. Keseluruhan proses meliputi:

  • Pengekstrakan maklumat pasaran masa nyata dan analisis penunjuk;
  • Kawalan logik pesanan belum selesai dalam kedua-dua arah panjang dan pendek;
  • Penghakiman dan pengalihan kedudukan penutup dan pembukaan;
  • Output visual kedudukan dan status akaun.

Melalui strategi ini, kita boleh melihat kecekapan transaksi sebenar, kelewatan pesanan dan pengalaman pemadanan pada WOOFi, meletakkan asas untuk reka bentuk seterusnya bagi strategi yang lebih kompleks.

Kami menggunakan persekitaran ujian dan rangkaian ujian WOOFi: Arbitrum Sepolia.

exchange.SetBase(”https://testnet-api.orderly.org”)

Terdapat faucet pada rangkaian ujian WOOFi yang membolehkan anda mendapatkan USDC untuk ujian dengan mudah.

Kod strategi:

function createOrders(e, symbol, side, ordersNum, beginPrice, firstAmount, spacing, pos) {
    if (side == "buy" || side == "closesell") {
        if (spacing > 0) {
            throw "spacing error"
        }
    } else if (side == "sell" || side == "closebuy") {
        if (spacing < 0) {
            throw "spacing error"
        }
    } else {
        throw "side error"
    }
    
    var holdAmount = 0
    if (pos) {
        holdAmount = pos.Amount
    }

    var amount = firstAmount
    for (var i = 0 ; i < ordersNum ; i++) {
        var id = null 
        amount = amount * 2
        var price = beginPrice + i * spacing

        if (price <= 0 || amount <= 0) {
            Log("continue loop:", price, amount, "#FF0000")
            continue 
        }

        if (holdAmount - amount >= 0) {
            id = e.CreateOrder(symbol, side == "buy" ? "closesell" : "closebuy", price, holdAmount)
            holdAmount = 0
        } else {
            id = e.CreateOrder(symbol, side, price, amount)
        }

        Sleep(100)
    }
}

function cancelAll(e, symbol) {
    while (true) {
        var orders = _C(e.GetOrders, symbol)
        var sideOrders = []
        for (var o of orders) {
            sideOrders.push(o)
        }
        if (sideOrders.length == 0) {
            break
        }

        for (var o of sideOrders) {
            e.CancelOrder(o.Id, o)
        }

        Sleep(500)
    }
}

function main() {
    LogReset(1)
    LogProfitReset()
    exchange.SetBase("https://testnet-api.orderly.org")

    // 参数
    var symbol = "ETH_USDC.swap"
    var ordersNum = 5
    var orderAmount = 0.01
    var priceSpace = 0

    // 初始化
    exchange.SetPrecision(2, 3)    
    var msg = []
    var buyOrdersNum = ordersNum
    var sellOrdersNum = ordersNum

    while (true) {
        cancelAll(exchange, symbol)

        var r = _C(exchange.GetRecords, symbol, 60 * 5)
        var art = TA.ATR(r, 20)
        priceSpace = art[art.length - 1]
        var pos = _C(exchange.GetPositions, symbol)        

        // depth
        var depth = _C(exchange.GetDepth, symbol)
        if (depth.Bids.length == 0 || depth.Asks.length == 0) {
            msg.push("invalid depth")
        } else {
            var bid1Price = depth.Bids[0].Price
            var ask1Price = depth.Asks[0].Price

            var longPos = null
            var shortPos = null
            for (var p of pos) {
                if (p.Type == PD_LONG) {
                    longPos = p
                } else if (p.Type == PD_SHORT) {
                    shortPos = p
                }
            }

            // long
            createOrders(exchange, symbol, "buy", buyOrdersNum, bid1Price, orderAmount, -priceSpace, shortPos)
            // short
            createOrders(exchange, symbol, "sell", sellOrdersNum, ask1Price, orderAmount, priceSpace, longPos)
        }
        
        var acc = _C(exchange.GetAccount)
        var orders = _C(exchange.GetOrders, symbol)
        LogProfit(acc.Equity, "&")

        var posTbl = {"type": "table", "title": "pos", "cols": ["Symbol", "Type", "Price", "Amount"], "rows": []}
        for (var p of pos) {
            posTbl["rows"].push([p.Symbol, p.Type == PD_LONG ? "多" : "空", p.Price, p.Amount])
        }

        var ordersTbl = {"type": "table", "title": "orders", "cols": ["Symbol", "Type", "Price", "Amount"], "rows": []}
        for (var o of orders) {
            ordersTbl["rows"].push([o.Symbol, o.Type == ORDER_TYPE_BUY ? "买" : "卖", o.Price, o.Amount])
        }

        LogStatus(_D(), "priceSpace:", priceSpace, "\n`" + JSON.stringify([posTbl, ordersTbl]) + "`")
        Sleep(1000 * 60)
        LogReset(1000)
    }
}

Amalan Strategi di WOOFi

Amalan Kuantitatif Pertukaran DEX (4) - Ujian Akses Strategi WOOFi / EdgeX

Amalan Kuantitatif Pertukaran DEX (4) - Ujian Akses Strategi WOOFi / EdgeX

Amalan Kuantitatif Pertukaran DEX (4) - Ujian Akses Strategi WOOFi / EdgeX

EdgeX

Maklumat API untuk mengkonfigurasi EdgeX pada FMZ pada asasnya sama dengan WOOFi, tetapi pertukaran yang berbeza memerlukan maklumat API yang berbeza. Pada EdgeX, anda hanya perlu mengkonfigurasi AccountId dan SecretKey. Ini juga boleh dilihat pada halaman pengurusan API akaun selepas menggunakan dompet untuk menyambung ke hujung hadapan EdgeX.

Strategi yang akan kami laksanakan pada EdgeX adalah berdasarkanJalur Bollinger Berbilang LapisanLogik dagangan kuantitatif pembukaan terbalik + penutupan pertengahan trek boleh merealisasikan arbitraj turun naik jangka pendek.

Strateginya sangat mudah, idea terasnya ialah:

  • Dengan menggunakan berbilang Sisihan Piawai Bollinger, keamatan turun naik pasaran boleh dikira.
  • Terdapat logik untuk membuka dan meningkatkan kedudukan. Semakin kuat penembusan, semakin besar kedudukannya.
  • Terdapat logik yang jelas untuk menutup kedudukan, dan anda akan menarik diri apabila kedudukan kembali ke trek tengah.
  • Kelantangan adalah berkadar dengan berbilang sisihan piawai: pecahan yang lebih kuat membawa kepada kedudukan yang lebih besar.

Anda mungkin tidak percaya, tetapi menulis strategi lengkap di FMZ hanya memerlukan 50 baris kod. Perkembangan semasa model AI yang besar telah banyak merendahkan ambang untuk reka bentuk strategi. Idea strategi yang kami uji boleh dihasilkan dengan mudah oleh AI, dan kualiti penulisan adalah mencukupi. Satu-satunya perkara ialah pembetulan manual diperlukan, tetapi ia telah merendahkan ambang untuk orang biasa menggunakan teknologi dagangan kuantitatif.

Kod strategi:

function main() {
    var symbol = "ETH_USDT.swap"
    var arrUp = []
    var arrDown = []
    let c = KLineChart({
        overlay: true
    }) 
    while (true) {
        var bolls = []
        var r = _C(exchange.GetRecords, symbol)
        for (var i = 0; i < 3; i++) {
            var boll = TA.BOLL(r, 20, i + 1)
            bolls.push(boll)
            var up = boll[0][boll[0].length - 1]
            var mid = boll[1][boll[1].length - 1]
            var down = boll[2][boll[2].length - 1]
            var close = r[r.length - 1].Close
            if (close > up && i >= arrUp.length) {
                exchange.CreateOrder(symbol, "sell", -1, 0.01 * (i + 1))
                arrUp.push({"symbol": symbol, "amount": 0.01 * (i + 1)})
            } else if (close < down && i >= arrDown.length) {
                exchange.CreateOrder(symbol, "buy", -1, 0.01 * (i + 1))
                arrDown.push({"symbol": symbol, "amount": 0.01 * (i + 1)})
            } else if ((arrUp.length > 0 && close < mid) || (arrDown.length > 0 && close > mid)) {
                var pos = exchange.GetPositions(symbol)
                for (var p of pos) {
                    if (p.Type == PD_LONG) {
                        exchange.CreateOrder(symbol, "closebuy", -1, p.Amount)
                    } else if (p.Type == PD_SHORT) {
                        exchange.CreateOrder(symbol, "closesell", -1, p.Amount)
                    }
                }
                arrUp = []
                arrDown = []
            }
        }
        r.forEach(function(bar, index) {
            c.begin(bar)
            for (var i in bolls) {
                var b = bolls[i]
                c.plot(b[0][index], 'up_' + (i + 1))
                c.plot(b[1][index], 'mid_' + (i + 1))
                c.plot(b[2][index], 'down_' + (i + 1))
            }
            c.close()
        })
        LogStatus(_D(), "\n", arrUp, "\n", arrDown)
        Sleep(500)
    }
}

Mari buat ujian belakang jangka panjang dahulu:

Amalan Kuantitatif Pertukaran DEX (4) - Ujian Akses Strategi WOOFi / EdgeX

Amalan Kuantitatif Pertukaran DEX (4) - Ujian Akses Strategi WOOFi / EdgeX

Gunakan ujian EdgeX

Amalan Kuantitatif Pertukaran DEX (4) - Ujian Akses Strategi WOOFi / EdgeX

END

Strategi di atas adalah untuk tujuan pengajaran dan penyelidikan sahaja. Sila berhati-hati semasa memohonnya. Terima kasih kerana membaca.