Terokai Reka Bentuk Strategi Frekuensi Tinggi dari Perubahan Ajaib LeeksReaper

Penulis:Lydia, Dicipta: 2022-11-07 18:05:04, Dikemas kini: 2023-09-15 20:42:34

img

Dalam artikel sebelumnya, kami telah menganalisis idea dan pelaksanaan kod strategi frekuensi tinggi versi spot asli LeeksReaper.

Analisis Strategi LeeksReaperhttps://www.fmz.com/bbs-topic/9725) Analisis Strategi LeeksReaperhttps://www.fmz.com/bbs-topic/9733

Banyak pengguna mata wang digital memberi lebih banyak perhatian kepada strategi pemimpin wang cetak. Strategi pemimpin wang cetak didagangkan dalam kontrak Binance USDT. Dari pemerhatian dan analisis ramai pengikut dapat dilihat bahawa strategi frekuensi tinggi ini serupa dengan prinsip LeeksReaper (pemimpin Xiaocao juga mengatakan bahawa prinsip strategi frekuensi tinggi serupa). Tetapi mesti ada sesuatu yang halus untuk mencapai kadar kemenangan yang stabil dan nisbah keuntungan dan kerugian yang sesuai.

Oleh itu, saya tidak dapat membantu tetapi membuat perubahan ajaib. Walaupun kesan strategi perubahan ajaib jauh lebih buruk daripada strategi pemimpin. Ia juga merupakan amalan pembelajaran untuk strategi frekuensi tinggi. FMZer yang berminat akan membincangkan dan belajar bersama-sama.

LeeksReaper selepas perubahan ajaib

var TickInterval = 100

function LeeksReaper() {
    var self = {}
    self.numTick = 0
    self.lastTradeId = 0
    self.vol = 0
    self.askPrice = 0
    self.bidPrice = 0
    self.orderBook = {
        Asks: [],
        Bids: []
    }
    self.prices = []
    self.tradeOrderId = 0
    self.account = null
    self.buyPrice = 0
    self.sellPrice = 0
    self.state = 0
    self.depth = null

    self.updateTrades = function() {
        var trades = _C(exchange.GetTrades)
        if (self.prices.length == 0) {
            while (trades.length == 0) {
                trades = trades.concat(_C(exchange.GetTrades))
            }
            for (var i = 0; i < 15; i++) {
                self.prices[i] = trades[trades.length - 1].Price
            }
        }
        self.vol = 0.7 * self.vol + 0.3 * _.reduce(trades, function(mem, trade) {
            // Huobi not support trade.Id
            if ((trade.Id > self.lastTradeId) || (trade.Id == 0 && trade.Time > self.lastTradeId)) {
                self.lastTradeId = Math.max(trade.Id == 0 ? trade.Time : trade.Id, self.lastTradeId)
                mem += trade.Amount
            }
            return mem
        }, 0)

    }
    self.updateOrderBook = function() {
        var orderBook = _C(exchange.GetDepth)
        self.depth = orderBook
        self.buyPrice = orderBook.Bids[pendingLevel].Price
        self.sellPrice = orderBook.Asks[pendingLevel].Price
        self.orderBook = orderBook
        if (orderBook.Bids.length < 3 || orderBook.Asks.length < 3) {
            return
        }
        self.bidPrice = orderBook.Bids[0].Price * 0.618 + orderBook.Asks[0].Price * 0.382 + 0.01
        self.askPrice = orderBook.Bids[0].Price * 0.382 + orderBook.Asks[0].Price * 0.618 - 0.01
        self.prices.shift()
        self.prices.push(_N((orderBook.Bids[0].Price + orderBook.Asks[0].Price) * 0.15 +
            (orderBook.Bids[1].Price + orderBook.Asks[1].Price) * 0.1 +
            (orderBook.Bids[2].Price + orderBook.Asks[2].Price) * 0.1 +
            (orderBook.Bids[3].Price + orderBook.Asks[3].Price) * 0.075 +
            (orderBook.Bids[4].Price + orderBook.Asks[4].Price) * 0.05 +
            (orderBook.Bids[5].Price + orderBook.Asks[5].Price) * 0.025))
    }

    self.updateAccount = function() {
        var account = exchange.GetAccount()
        if (!account) {
            return
        }
        self.account = account
        LogProfit(parseFloat(account.Info.totalWalletBalance), account)
    }

    self.CancelAll = function() {
        while (1) {
            var orders = _C(exchange.GetOrders)
            if (orders.length == 0) {
                break
            }
            for (var i = 0; i < orders.length; i++) {
                exchange.CancelOrder(orders[i].Id)
            }
            Sleep(100)
        }
    }

    self.poll = function() {
        self.numTick++
        self.updateTrades()
        self.updateOrderBook()
        var pos = _C(exchange.GetPosition)

        var burstPrice = self.prices[self.prices.length - 1] * burstThresholdPct
        var bull = false
        var bear = false
        LogStatus(_D(), "\n", 'Tick:', self.numTick, 'self.vol:', self.vol, ', lastPrice:', self.prices[self.prices.length - 1], ', burstPrice: ', burstPrice)

        if (self.numTick > 2 && (
                self.prices[self.prices.length - 1] - _.max(self.prices.slice(-6, -1)) > burstPrice ||
                self.prices[self.prices.length - 1] - _.max(self.prices.slice(-6, -2)) > burstPrice && self.prices[self.prices.length - 1] > self.prices[self.prices.length - 2]
            )) {
            bull = true
        } else if (self.numTick > 2 && (
                self.prices[self.prices.length - 1] - _.min(self.prices.slice(-6, -1)) < -burstPrice ||
                self.prices[self.prices.length - 1] - _.min(self.prices.slice(-6, -2)) < -burstPrice && self.prices[self.prices.length - 1] < self.prices[self.prices.length - 2]
            )) {
            bear = true            
        }

        if (pos.length != 0) {
            if (pos[0].Type == PD_LONG) {
                self.state = 1
            } else {
                self.state = 2
            }
        } else {
            self.state = 0
        }


        if ((!bull && !bear)) {
            return
        }

        if (bull) {
            var price = (self.state == 0 || self.state == 1) ? self.buyPrice : self.depth.Bids[coverPendingLevel].Price
            var amount = (self.state == 0 || self.state == 1) ? pendingAmount : pos[0].Amount
            exchange.SetDirection("buy")
            exchange.Buy(price, amount)
        } else if (bear) {
            var price = (self.state == 0 || self.state == 2) ? self.sellPrice : self.depth.Asks[coverPendingLevel].Price
            var amount = (self.state == 0 || self.state == 2) ? pendingAmount : pos[0].Amount
            exchange.SetDirection("sell")
            exchange.Sell(price, amount)                    
        }
        self.numTick = 0
        Sleep(TickInterval)
        self.CancelAll()
        self.updateAccount()
    }

    while (!self.account) {
        self.updateAccount()
        Sleep(500)
    }
    Log("self.account:", self.account)

    return self
}

function main() {
    LogProfitReset()
    exchange.SetPrecision(pricePrecision, amountPrecision)
    exchange.SetContractType("swap")
    var reaper = LeeksReaper()  
    while (true) {
        reaper.poll()
        Sleep(100)
    }
}

img

Idea perubahan strategi

Strategi ini adalah untuk merancang untuk berdagang di pasaran kontrak Binance USDT, yang menyokong kedudukan satu hala. Oleh itu, strategi diubahsuai mengikut ciri-ciri kedudukan satu hala (kedudukan satu hala lebih mudah untuk mengubah strategi), kami tidak mempertimbangkan untuk menutup kedudukan, kami hanya mempertimbangkan jual beli. Idea ini lebih dekat dengan versi spot LeeksReaper.

Strategi pada dasarnya mengekalkan kriteria asal terobosan trend harga jangka pendek, yang dikawal oleh parameterburstThresholdPCT, berdasarkan mana untuk menilai sama ada harga jangka pendek adalahbullataubear.

Strategi ini menghapuskan beberapa modul asal, seperti modul baki. Perubahan yang lebih besar adalah pembuat dalam buku pesanan, menunggu transaksi. Ia dijangka adalah untuk membuka kedudukan dengan kos yang lebih rendah dalam permainan panjang / pendek yang kacau, mengikuti trend jangka pendek, dan menutup kedudukan apabila trend jangka pendek berbalik dan terus membuka kedudukan dengan perintah menunggu yang terbalik.

Walaupun strategi adalah strategi yang tidak menghasilkan wang, atau bahkan kehilangan wang, tetapi sebagai FMZer yang belajar strategi frekuensi tinggi, memerhatikan tingkah laku strategi frekuensi tinggi, memerhatikan mikro-hukum pasaran adalah model yang boleh digunakan.

Pengoptimuman strategi

Pada masa ini, tiada arah yang baik untuk pengoptimuman telah dijumpai. Seseorang yang berminat boleh meninggalkan komen anda dan membincangkan bersama.

Strategi daripada:https://www.fmz.com/strategy/260806

Strategi ini hanya untuk belajar, bot sebenar mungkin mengalami kerugian apabila pasaran tidak terlalu optimis.


Berkaitan

Lebih lanjut