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

Введение в высокочастотную стратегию цифровой валюты

Автор:Трава, Создано: 2023-03-10 10:09:13, Обновлено: 2024-11-11 22:39:27

img

[TOC] В 2020 году я написал статью о высокочастотных стратегиях, которые помогают людям, которые хотят работать на высоких частотах, получить доступ к цифровым технологиям.https://www.fmz.com/digest-topic/6228После публикации статьи, моя стратегия высокой частоты была стабильной в течение длительного времени, но медленная прибыль постепенно снижалась, и даже однажды была прекращена. В последние месяцы я снова потратил усилия на реорганизацию, и в настоящее время я могу заработать немного денег. Эта статья будет более подробно рассказывать о моих идеях высокой частоты и части упрощенного кода, который играет роль бросающего козырьки.

Условия для высокочастотных операций

  • Например, в настоящее время maker возвращает комиссию в размере 5 из 100 000 если ежедневный объем торгов составляет 100 миллионов U, а комиссию - 5000 U. Конечно, taker также основан на VIP-коэффициенте, поэтому, если стратегия не требует оплаты, VIP-класс не имеет большого влияния на высокочастотную стратегию. В общем обмене различные классы имеют различные комиссионные ставки, которые требуют поддержания более высокой транзакции.

  • Скорость. Политика высокой частоты называется высокой частотой, потому что она быстрая. Присоединение к цветовому серверу обмена, получение минимальной задержки и наиболее стабильного соединения также является одним из условий внутреннего волокна.

  • Подходящий рынок. Высокочастотный трейдинг называют жемчужиной количественного трейдинга. Я считаю, что многие программируемые трейдеры пытались, но большинство людей должны остановиться, потому что не зарабатывают и не могут найти направления для улучшения. Основная причина должна быть в том, что они искали неправильный рынок. Начальная стадия стратегии должна найти относительно легкий рынок, чтобы зарабатывать деньги на сделках, чтобы быть выгодным, а также улучшить обратную связь, что способствует продвижению стратегии.

  • Столкнуться с конкуренцией. Рынок любой сделки динамично меняется, нет стратегии торговли, которая может быть использована раз и навсегда. Высокочастотные сделки более очевидны, вход на этот рынок напрямую соперничает с группой самых умных и усердных трейдеров. На рынке с нулевым игровым режимом вы зарабатываете больше, чем другие.

Принцип высокой частоты

Высокочастотные стратегии различаются

  • Высокочастотный хеджирование, возможность найти хеджирование через данную или другую биржу, чтобы получить прибыль, используя преимущества скорости.
  • Высокочастотные тенденции, которые приносят прибыль путем суждения о краткосрочных тенденциях
  • Как торговец, он ведет торговлю с обеих сторон, контролирует запасы и получает прибыль, получая комиссионные.
  • И многое другое.

Моя стратегия состоит в том, чтобы сочетать тренд и рынок, сначала определить тренд, а затем разместить заказ, продать заказ сразу после сделки, не держать запасные позиции.

Стратегическая структура

Следующий код, основанный на архитектуре бесконечных контрактов, в основном подписывается на websocket deep-depth order flowtrades market, а также на информацию о позиции. Поскольку информация о рынке и учетной записи подписывается отдельно, необходимо постоянно использовать read ((-1) для определения доступа к последней информации, здесь используется EventLoop ((1000), что избегает прямых мертвых циклов и снижает нагрузку на систему. EventLoop ((1000) блокирует до WSS или отправляет совместные задания, когда время возвращения превышает 1000 мс.

var datastream = null
var tickerstream = null
var update_listenKey_time = 0

function ConncetWss(){
    if (Date.now() - update_listenKey_time < 50*60*1000) {
        return
    }
    if(datastream || tickerstream){
        datastream.close()
        tickerstream.close()
    }
    //需要APIKEY
    let req = HttpQuery(Base+'/fapi/v1/listenKey', {method: 'POST',data: ''}, null, 'X-MBX-APIKEY:' + APIKEY) 
    let listenKey = JSON.parse(req).listenKey
    datastream = Dial("wss://fstream.binance.com/ws/" + listenKey + '|reconnect=true', 60)
    //Symbols是设定的交易对
    let trade_symbols_string = Symbols.toLowerCase().split(',')
    let wss_url = "wss://fstream.binance.com/stream?streams="+trade_symbols_string.join(Quote.toLowerCase()+"@aggTrade/")+Quote.toLowerCase()+"@aggTrade/"+trade_symbols_string.join(Quote.toLowerCase()+"@depth20@100ms/")+Quote.toLowerCase()+"@depth20@100ms"
    tickerstream = Dial(wss_url+"|reconnect=true", 60)
    update_listenKey_time = Date.now()
}

function ReadWss(){
    let data = datastream.read(-1)
    let ticker = tickerstream.read(-1)
    while(data){
        data = JSON.parse(data)
        if (data.e == 'ACCOUNT_UPDATE') {
            updateWsPosition(data)
        }
        if (data.e == 'ORDER_TRADE_UPDATE'){
            updateWsOrder(data)
        }        
        data = datastream.read(-1)
    }
    while(ticker){
        ticker = JSON.parse(ticker).data
        if(ticker.e == 'aggTrade'){
            updateWsTrades(ticker)
        }
        if(ticker.e == 'depthUpdate'){
            updateWsDepth(ticker)
        }
        ticker = tickerstream.read(-1)
    }
    makerOrder()
}

function main() {
    while(true){
        ConncetWss()
        ReadWss()
        worker()
        updateStatus()
        EventLoop(1000)
    }
}

Стратегические показатели

Как я уже говорил ранее, моя высокочастотная стратегия требует предварительного определения тренда, а затем выполнения покупки. Определение краткосрочных тенденций основывается на данных по каждой сделке, т.е. aggTrade в подписке, включает направление, цену, количество, время сделки и т.д.

  • Средний объем сделок в каждой сделке - это сумма заказов в одном направлении и разные цены в пределах 100 мс, что отражает размер заказов на покупку и продажу.
  • Частота заказов или интервал заказов, также основанные на данных о транзакциях в отдельных частях, предыдущие средние транзакции независимо от концепции времени, не совсем точны, если заказ в одном направлении, хотя средний объем транзакций является небольшим, но частота высока, также способствует интенсивности этого направления. Средний объем транзакций * Частота заказов представляет собой общий объем транзакций с фиксированным интервалом, может быть использована для прямого сравнения.
  • Средняя дисковая разница, это более понятное сравнение, то есть продать один или купить один. Большая часть текущих дисковых торгов - это дисковая разница одного тика, если дисковая разница увеличивается, часто это означает, что есть рынок.
  • Средняя цена покупки и продажи, рассчитанная на среднюю цену покупки и продажи по отдельности, сравнивается с последней ценой.

Стратегическая логика

Определение краткосрочных тенденций

//bull代表短期看涨,bear短期看跌
let bull =  last_sell_price > avg_sell_price && last_buy_price > avg_buy_price &&
            avg_buy_amount / avg_buy_time > avg_sell_amount / avg_sell_time;
let bear =  last_sell_price < avg_sell_price && last_buy_price < avg_buy_price && 
            avg_buy_amount / avg_buy_time < avg_sell_amount / avg_sell_time;

Если последняя цена продажи больше средней цены продажи, последняя цена покупки больше средней цены покупки, а стоимость фиксированного интервала покупки больше стоимости продажи, тогда следует судить о краткосрочной положительной стороне.

Снижение цены

function updatePrice(depth, bid_amount, ask_amount) {

    let buy_price = 0
    let sell_price = 0
    let acc_bid_amount = 0
    let acc_ask_amount = 0

    for (let i = 0; i < Math.min(depth.asks.length, depth.bids.length); i++) {
        acc_bid_amount += parseFloat(depth.bids[i][1])
        acc_ask_amount += parseFloat(depth.asks[i][1])
        if (acc_bid_amount > bid_amount  && buy_price == 0) {
            buy_price = parseFloat(depth.bids[i][0]) + tick_size
        }
        if (acc_ask_amount > ask_amount  && sell_price == 0) {
            sell_price = parseFloat(depth.asks[i][0]) - tick_size
        }
        if (buy_price > 0 && sell_price > 0) {
            break
        }
    }
    return [buy_price, sell_price]
}

Здесь все еще используется старый подход, повторяющийся глубину до требуемой суммы, здесь предполагается, что в течение 1s можно совершить оплату в размере 10 копеек, без учета новых заказов, цена продажи установлена на место, где упадет оплата в размере 10 копеек.

Количество заказов

let buy_amount = Ratio * avg_sell_amount / avg_sell_time
let sell_amount = Ratio * avg_buy_amount / avg_buy_time

Ratio представляет собой фиксированную пропорцию, которая представляет собой фиксированную пропорцию количества покупок к количеству недавно проданных заказов. Такая стратегия может адаптироваться к размерам заказов в зависимости от текущей активности продаж.

Условия

if(bull && (sell_price-buy_price) > N * avg_diff) {
    trade('buy', buy_price, buy_amount)
}else if(position.amount < 0){
    trade('buy', buy_price, -position.amount)
}
if(bear && (sell_price-buy_price) >  N * avg_diff) {
    trade('sell', sell_price, sell_amount)
}else if(position.amount > 0){
    trade('sell', sell_price, position.amount)
}

При этом avg_diff представляет собой разницу в среднем расчете, которая будет оплачиваться только в том случае, если текущая цена покупки и продажи больше определенного кратного значения, и будет оплачиваться только тогда, когда вы видите, что вы хотите, если у вас есть пустые заказы, это также будет равномерно, избегая долгосрочных счетов.

Совместная архитектура

var tasks = []
var jobs = []

function worker(){
    let new_jobs = []
    for(let i=0; i<tasks.length; i++){
        let task = tasks[i]
        jobs.push(exchange.Go.apply(this, task.param))
    }
    _.each(jobs, function(t){
        let ret = t.wait(-1)
        if(ret === undefined){
            new_jobs.push(t)//未返回的任务下次继续等待
        }
    })
    jobs = new_jobs
    tasks = []
}

/*
需要的任务参数写在param里
tasks.push({'type':'order','param': ["IO", "api", "POST","/fapi/v1/order",
        "symbol="+symbol+Quote+"&side="+side+"&type=LIMIT&timeInForce=GTX&quantity="+
        amount+"&price="+price+"&newClientOrderId=" + UUID() +"&timestamp="+Date.now()]})
*/

Данные наблюдения

  • Промедление, скорость высокочастотных стратегий, важность которой уже подчеркнута, должна контролироваться и записываться в стратегии различных промедлений, таких как снижение ордера, снятие, возврат позиций, глубина, поток заказов, позиции, общий цикл и т. д.
  • Соотношение объемов сделок, доля сделок в общем объеме сделок, если соотношение низкое, есть место для роста. В пиковые моменты, стратегическая доля может достигать более 10% от общего объема сделок.
  • Уровень прибыли, средний показатель прибыли, является наиболее важным показателем эффективности стратегии.
  • Соотношение комиссионных, статистические комиссионные в процентах от общего дохода, отражает степень зависимости стратегии от комиссионных; торговля всеми различными уровнями комиссионных, невыгодные стратегии могут быть выгодными, если их комиссионные выше одного уровня.
  • Уровень неудачи заказа, когда заказ выполняется только по заказу, может быть невыполнен из-за задержки заказа. Если этот показатель высок, это говорит о том, что скорость стратегии не является хорошей.
  • В то же время, если количество заказов, сделанных на платформе, слишком низкое, это указывает на то, что стратегия снятия заказов слишком часто и требует решения.
  • Среднее расстояние между ордерами на покупку и продажу, которое отражает промежуток между стратегическими заказами и расчетами, показывает, что большая часть из них занимает позиции покупки и продажи.

Другие предложения

  • Торговля в нескольких валютах, высокочастотная стратегия данной статьи относится только к одной биржевой биржевой биржевой биржевой биржевой бирже, ограниченность большая, большинство ситуаций и большинство валют нерентабельны, но также невозможно предсказать, какая валюта будет прибыльной в будущем, поэтому можно торговать несколькими или даже всеми валютами, не упуская возможности. Даже при ограничении частоты биржи один робот может торговать несколькими парами, конечно, для оптимальной скорости, можно с одной учетной записью торговать одной сделкой, один сервер для одного робота, просто так будет стоить много.
  • В зависимости от доходности определяется объем и условия размещения. Торговля многовалютой приводит к слишком высоким затратам на попытку, если мониторинг нерентабелен, используйте минимальный объем торгов и уменьшайте частоту торгов до тех пор, пока стратегический динамик не будет контролировать доходность до положительного, а затем постепенно увеличивать объем торгов, чтобы повысить доход.
  • Для получения большей информации, высокочастотная торговля еще одна особенность - большее количество обрабатываемых данных, больше информации. Вся информация о рынке, в которой торгуется пары внутри одной биржи, должна быть ссылкой, и постоянно можно также ссылаться на данные на месте, а также на данные другой биржи, в которой торгуется эта пара, и даже на данные других валют. Чем больше данных, тем больше соответствующих преимуществ.
  • Сервер Binance находится в Токио, а серверы других бирж различаются.
  • Код стратегии в данной статье представляет собой простой примерный код, из которого удалены многие громоздкие детали, которые приходится учитывать, и используемые показатели предназначены только для ссылки, а не для прямого использования.

Связанные

Больше

mztcoinСпросите, что за логика в продаже? Поставьте заказ на продажу сразу после сделки, не имея запасов, то есть поставьте заказ в одном и том же цикле, что заказать, что за цена, что делать?

mztcoinСтремительный бог травы

ДАНГОУСтрельба с богом травы

77924998Какой сервер AWS использует Grasshopper?

Сюкити.Ожесточенный

БвксяокГрас-бог предлагает платные высокочастотные курсы

Мое сердце по-прежнемуЕсли вы хотите сделать копию, это может быть полезным.

Автор: ТрэйдменПозвонив травяному богу, я хочу больше преподавать и учиться внедрять высокочастотные сделки.

*Волна в ветровом проеме*Ожесточенный

Фмнуро"Серьезный бог травы!"

Ок количественныйОжесточенный

ТраваЭто слишком сложно, и это не имеет большого смысла.