avatar of 发明者量化-小小梦 发明者量化-小小梦
fokus pada Pesan pribadi
4
fokus pada
1271
Pengikut

Praktik Kuantitatif Pertukaran DEX (4) - Uji Akses Strategi WOOFi / EdgeX

Dibuat di: 2025-04-10 15:36:06, diperbarui pada: 2025-04-11 13:35:33
comments   0
hits   674

Praktik Kuantitatif Pertukaran DEX (4) - Uji Akses Strategi WOOFi / EdgeX

Dalam beberapa artikel terakhir, kami telah membahas akses ke DEX utama, dan artikel ini akan berfokus pada penggunaan aktual dan melakukan pengujian penerapan strategi aktual. Platform FMZ baru-baru ini menambahkan dukungan untuk bursa terdesentralisasi WOOFi dan EdgeX. Dalam artikel ini, kita akan berlatih menjalankan beberapa strategi pengajaran sederhana pada kedua pertukaran tersebut.

WOOFi

Hubungkan dompet Anda di WOOFi, lalu pada halaman KUNCI API, Anda dapat melihat informasi kunci API, menyalin dan menempelkannya, dan mengonfigurasinya di FMZ.

Gunakan host terbaru FMZ, yang sudah mendukung WOOFi DEX dan EdgeX DEX, setelah mengunduh dan menyebarkan. Konfigurasikan objek pertukaran di halaman: https://www.fmz.com/m/platforms/add, dan konfigurasikan AccountId, AccessKey, dan SecretKey WOOFi.

Dalam pengujian ini, kami menggunakanPrototipe strategi pembuatan pasar dasar, dikombinasikan dengan indikator volatilitas pasar (ATR), interval antara order yang tertunda dihitung secara dinamis, dan identifikasi posisi yang cerdas serta logika penempatan order dengan prioritas pada penutupan posisi terwujud. Strategi ini menyegarkan buku pesanan di setiap putaran, memperoleh kembali informasi kedalaman dan posisi, dan menempatkan pesanan sesuai dengan interval harga dan jumlah pesanan yang ditetapkan. Seluruh proses meliputi:

  • Ekstraksi informasi pasar waktu nyata dan analisis indikator;
  • Kontrol logika pada order yang tertunda pada arah panjang dan pendek;
  • Penghakiman dan pengalihan posisi penutupan dan pembukaan;
  • Output visual posisi dan status akun.

Melalui strategi ini, kita dapat mengamati efisiensi transaksi aktual, penundaan pesanan, dan pengalaman pencocokan di WOOFi, yang menjadi dasar bagi desain strategi yang lebih kompleks selanjutnya.

Kami menggunakan lingkungan pengujian dan jaringan pengujian WOOFi: Arbitrum Sepolia.

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

Terdapat keran di jaringan uji WOOFi yang memudahkan Anda memperoleh USDC untuk pengujian.

Kode 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)
    }
}

Praktik Strategi di WOOFi

Praktik Kuantitatif Pertukaran DEX (4) - Uji Akses Strategi WOOFi / EdgeX

Praktik Kuantitatif Pertukaran DEX (4) - Uji Akses Strategi WOOFi / EdgeX

Praktik Kuantitatif Pertukaran DEX (4) - Uji Akses Strategi WOOFi / EdgeX

EdgeX

Informasi API untuk mengonfigurasi EdgeX pada FMZ pada dasarnya sama dengan WOOFi, tetapi bursa yang berbeda memerlukan informasi API yang berbeda. Di EdgeX, Anda hanya perlu mengonfigurasi AccountId dan SecretKey. Ini juga dapat dilihat di halaman manajemen API akun setelah menggunakan dompet untuk terhubung ke antarmuka depan EdgeX.

Strategi yang akan kami terapkan pada EdgeX didasarkan padaBollinger Bands Berlapis-lapisLogika perdagangan kuantitatif dari pembukaan terbalik + penutupan tengah jalur dapat mewujudkan arbitrase volatilitas jangka pendek.

Strateginya sangat sederhana, ide intinya adalah:

  • Dengan memanfaatkan beberapa Deviasi Standar Bollinger, intensitas volatilitas pasar dapat diukur.
  • Ada logika untuk membuka dan menambah posisi. Semakin kuat terobosannya, semakin besar posisinya.
  • Ada logika yang jelas untuk menutup posisi, dan Anda akan menarik diri ketika posisi kembali ke jalur tengah.
  • Volume proporsional dengan kelipatan deviasi standar: terobosan yang lebih kuat menghasilkan posisi yang lebih besar.

Anda mungkin tidak percaya, tetapi menulis strategi lengkap di FMZ hanya membutuhkan 50 baris kode. Perkembangan model AI besar saat ini telah menurunkan ambang batas untuk desain strategi. Ide-ide strategi yang kami uji dapat dengan mudah diproduksi oleh AI, dan kualitas penulisannya memadai. Satu-satunya hal adalah bahwa koreksi manual diperlukan, tetapi hal ini telah sangat menurunkan ambang batas bagi orang awam untuk menggunakan teknologi perdagangan kuantitatif.

Kode 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 kita lakukan backtest jangka panjang terlebih dahulu:

Praktik Kuantitatif Pertukaran DEX (4) - Uji Akses Strategi WOOFi / EdgeX

Praktik Kuantitatif Pertukaran DEX (4) - Uji Akses Strategi WOOFi / EdgeX

Terapkan pengujian EdgeX

Praktik Kuantitatif Pertukaran DEX (4) - Uji Akses Strategi WOOFi / EdgeX

END

Strategi di atas hanya untuk tujuan pengajaran dan penelitian. Harap berhati-hati saat menerapkannya. Terima kasih telah membaca.