В процессе загрузки ресурсов... загрузка...

Высокочастотный стратегический дизайн с помощью марихуаны

Автор:Изобретатели количественного измерения - мечты, Создано: 2021-03-09 13:41:54, Обновлено: 2023-09-26 20:53:41

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, где цена после взвешивания должна быть близка к среднему числу покупателей и продавцов на бирже, цена после взвешивания в данной статье примерно в два раза (ближе к среднему числу покупателей и продавцов), здесь не очень понятно.

168Может быть, DreamWorks сможет выпустить версию, которую можно было бы перепроверять и использовать на месте?

168main:68:43 - TypeError: Cannot read property 'totalWalletBalance' of undefined Не удалось найти свойство 'totalWalletBalance' из undefined Прошу, маленький сон, это не может быть проверено, это должно быть на реальном диске?

БэнгбанФотографии с реальными событиями слишком скудны.

Счастливчик.В то же время, как и в случае с другими компаниями, которые не могут получить контрактные сделки, стратегии не работают, как это происходит?

Изобретатели количественного измерения - мечтыМожно немного снизить одноразовый диапазон, но это имеет свои плюсы и минусы. Эта высокочастотная стратегия требует хорошей глубины на диске, многопространственных игровых сцен.

Горячая капустаВ общем, я вычислил эту стратегию, и если я не сделаю покупку в течение 100 мс, то она будет отменена, я пробежал ночь (почти 5 часов) и не сделал покупку, и сделал 5 заказов, как это изменить параметры?

Изобретатели количественного измерения - мечтыЕсли вы хотите, чтобы ваш рынок был более конкурентоспособным, вы можете установить рычаг напрямую на бирже.

Изобретатели количественного измерения - мечтыХа-ха, хорошо, спасибо за напоминание.

Изобретатели количественного измерения - мечтыЭта стратегия - это педагогическая стратегия, в основном, с точки зрения идей, но только для обучения.

m0606Я тоже думаю, что это хорошая цена.

Изобретатели количественного измерения - мечтыИнфо на маэзийском языке.

ПрохожийПроверка не поддерживает информацию INFO

БэнгбанTick - это очень хорошая идея.

Изобретатели количественного измерения - мечты!>_>! Это всего лишь прототип, который приносит убытки, используется для обучения, и есть только объект исследования.