마카메카의 재배기에서 고주파 전략 설계에 대해 탐구합니다

저자:작은 꿈, 2021-03-09 13:41:54로 만들어졌습니다.

img

마카메카의 재배기에서 고주파 전략 설계에 대해 탐구합니다

지난 몇 건의 기사에서 우리는 초기의 현장 버전의 콩 재배기 고주파 전략의 아이디어와 코드 구현을 분석했습니다.

양배추 재배기 전략 해부 (1) 양배추 재배기 전략 분석 (2)

많은 사람들이 동전 고리를 측정하는 것에 관심이 있습니다.인쇄금이 모든 것은 우리가 할 수 있는 일입니다.인쇄금대우조선해양은 대우조선해양의 전략으로 거래한다. 관찰과 많은 관심사들의 분석을 통해 알 수 있듯이, 이 높은 빈도 전략은 바늘 재배기의 원리에 유사하다. (그라시온은 또한 높은 빈도 전략의 원리에 대해 비교적 가깝다고 말했다). 그러나 확실히 전략이 안정적인 승률과 적절한 수익/손실 비율을 가질 수 있도록 세련된 부분이 있다.

그래서 기술자 소년이 마법을 바꿀 수 없습니다, 비록 마법의 전략 효과는 대신들의 전략에 의해 찌꺼기로 압축되었다. 그러나 또한 높은 주파수 전략에 대한 학습 연습으로, 관심있는 FMZer 동료가 함께 탐구하고 배우십시오.

마법으로 만든 양배추 수확기

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

전략적 사고방식 변경

전략은 비트코인 USDT 계약 시장에서 거래하는 것을 계획하고, 비트코인 계약은 단방향 보유를 지원한다. 그래서 전략은 단방향 보유의 특성에 따라 디자인을 수정한다 ("단방향 보유가 더 편리한 전략 변경), 평형을 고려하지 않고, 판매를 고려한다".

전략은 기본적으로 원본의 단기 가격 트렌드 돌파를 결정하는 기준을 유지하며, 단기 가격 돌파의 폭은 매개 변수에 의해 결정됩니다.burstThresholdPct이 판단 조건에 따라 단기 가격을 판단하는 것은bull(소) 또는bear(곰)

정책은 원래 버전의 일부 모듈, 예를 들어 균형 모듈을 삭제했습니다. 더 큰 변화는 주문을 주문판에 올려서 거래를 기다리는 것으로 변경되었습니다. 오프스케이팅이 격렬한 혼란의 시장을 통해 낮은 비용으로 입장을 개척하고, 단기 트렌드를 따라가며, 단기 트렌드가 반전되면 평형화하고, 반전 단기 입장을 계속합니다.

전략은 다른 쓸모없는 코드를 제거하기 때문에 매우 짧고 간단합니다. 전략은 수익을 내지 못할 전략이지만, FMZer로서는 높은 주파수 전략을 배우고, 높은 주파수 전략의 행동을 관찰하고, 시장의 미세 법칙을 관찰하는 것은 많은 연습, 경험, 이론을 바탕으로 할 수 있는 모델입니다.

잠시 동안

img

시장이 활발하지 않을 때 거래가 더 어렵다는 것을 알 수 있습니다.

전략 최적화

현재로서는 최적화의 좋은 방향은 아직 발견되지 않았습니다. 관심있는 학생은 함께 토론을 위해 강연을 할 수 있습니다.

그라운드:https://www.fmz.com/strategy/260806

이 전략은 학습을 위한 것뿐이며, 시장이 평평해지면 손실이 발생할 수 있습니다.


관련

더 많은

바늘 튀김이 계약은 어떻게 제약율을 설정합니까?

벤슨마인드 총, 당신의 전략은 다른 플랫폼에 나타났습니다. 저작권 인식에 주의하십시오.

박쥐2한쪽 거래가 되면 어떻게 처리해야 할까요?

궤도 생물이것은 거래량을 더할 수 있는지 결정하거나 자동으로 선택된 화폐를 결정하는 것입니다.

qslll이 자료를 공유할 수 있을까요?

을 정량화합니다updateOrderBook에서 계산된 가격의 경우, 원래 버전의 가중된 가격 이후의 가격은 거래소에서 구매한 n의 중위값 근처에 있어야 하며, 이 문서에서 가중된 계산된 가격 이후의 가격은 2배 (매매 거래소 중위값 근처) 이다.

168드림 신 (Dream God) 은 재검토 가능한, 현장에서 사용할 수 있는 버전을 불러줄 수 있나요? 감사합니다.

168main:68:43 - TypeError: undefined의 'totalWalletBalance' 속성을 읽을 수 없습니다 이 자리에서, 이 자리에서, 이 자리에서, 이 자리에서, 이 자리에서, 이 자리에서.

이 사진들은 정말 가볍습니다.

슬프다계약의 트레이드는 얻을 수 없는 것처럼, 전략은 계속 실행되지 않고, 어떻게 이 실행되는지.

작은 꿈단기 기하급수를 조금 낮출 수 있지만, 이 방법은 좋은 깊이와 많은 공간에 대한 격렬한 장면을 필요로 한다.

바늘 튀김꿈은, 이 전략을 계산하면, 100ms 이내에 거래가 안되면 취소됩니다. 저는 한밤중에 (거의 5시간 동안) 5개의 주문을 받았는데, 5개의 주문을 받았는데, 어떻게 그 매개 변수를 바꿀 수 있을까요?

작은 꿈이 자금 거래는 거래소에서 직접 활용을 할 수 있습니다.

작은 꿈哈哈, 좋습니다, 상기시켜 주셔서 감사합니다.

작은 꿈이 전략은 교육 전략이며, 주로 아이디어를 보고, 단지 가르치는 것입니다.

m0606저는 이 제한된 가격도 좋다고 생각합니다.

작은 꿈INFO는 메이어로 되어 있습니다.

지나가면서재검토는 INFO 정보를 지원하지 않습니다.

틱 한정판 디자인 좋은

작은 꿈!>_>! 이것은 단지 프로토타입이고, 수익을 내고, 학습을 하고, 단지 연구 대상을 가지고 있습니다.