Как преодолеть Tick прием лимит товарных фьючерсов

Автор:рубин, Создано: 2018-08-27 15:58:30, Обновлено:

Что такое Тик? Например, данные о транзакциях можно представить в виде реки, а Tick - это данные отрезка реки. Наилучшая гранулированность внутренних фьючерсов составляет два раза в секунду. Другими словами, внутренние фьючерсы отправляют до одного Tick в 500 миллисекунд.

Как большинство отечественных (в этой статье Китай) программ получают Tick?

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

Большинство торговых платформ на рынке используют режим обратного вызова, что означает, что в идеальной ситуации в 500 миллисекунд существует не больше одного Tick. В реальной ситуации на Bar/onTick лучше не пропустить Tick. почему? Потому что вам нужно иметь дело со всей логикой кода в функции onBar/onTick, что занимает много времени. Хотите вы этого или нет, ваша логика стратегии должна быть прервана, вы должны использовать состояние бездействия, как это:

img

Более совершенный механизм

ФМЗ количественная торговая платформа не использует этот механизм обратного вызова, но использует основной функциональный механизм, который не прерывает логику стратегии, позволяя пользователям контролировать поток стратегии более естественно. Используя C ++ и Golang в качестве базового уровня стратегии, верхний уровень стратегии использует JavaScript / Python для решения логических проблем. В сочетании с механизмом запуска событий, стратегия также может быть использована для обработки рынка с самой быстрой скоростью в первый раз.

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

Итак, как мы можем получить более точные данные о фьючерсах Tick быстрее? В рамках модели стратегии FMZ Quant можно легко управлять счетами различных фьючерсных компаний и объединять их цены для обработки заказов с самой быстрой скоростью. При нормальных обстоятельствах мы можем получить два Tick в секунду от фьючерсной компании, но с помощью технологии объединения рынка, например, MA801, мы можем получить Tick до шести раз в секунду и без повторения.

img

Демонстрация кода

Если вы не используете этот код на платформе FMZ Quant, вы можете ссылаться только на принцип. При добавлении биржи можно добавить множество фьючерсных компаний для одновременной обработки рынка.

img

Код следующий:

img

Эффект демо

img

Как показано выше, в 21:24:44 данные первой фьючерсной компании являются более ранними, чем второй. Добавление двух фьючерсных компаний может показать эффект, если вы добавите более 5 фьючерсных компаний для слияния вместе, то у вас в основном нет возможности пропустить Tick; если вы разрабатываете высокочастотную торговую стратегию, вы решили очень важный и решающий шаг, а именно скорость и стабильность получения Tick.

Получить полный код:

function main() {
    log("Prepare to connect to the exchange and subscribe to the market")
    //step 1:All futures front-end machines are starting to subscribe to the variety
    _.each(exchanges, function(e){
        /*Waiting to connect to the exchange. The strategy is running without 
          interruption, and it is not the logic of the event callback. */
        while(!e.IO("status"))Sleep(1000);
        /*Use _C function to troubleshoot network errors. If subscribe to the market just 
        after connecting to exchanges, there may be a CTP unprepared error. */
        _C(e.SetContractType, "MA801")
        /*Switch the market receiving mode to the immediate return mode instead of the 
          event trigger mode. Refer to the API documentation on FMZ website. */
        e.IO("mode", 0)
    })
    Log("start fusing the data")
    //step 2: the important part begins
    var preVolume = 0
    while (true) {
        var ts = new Date().getTime()
        //Return if any exchanges occur tick event
        var ret = exchange.IO("wait_any")
        //Reset Volume at the right time
        if (ret.Nano/1000000 - ts > 60000) {
            preVolume = 0
        }
        //Target the exchange where the event occurred
        var e = exchanges[ret.Index]
        //Get ticker,  because of switching mode as return before, so here is the updated market, and GetTicker won't fail
        //Only the Tick with increasing volume is displayed. It no need to compare actual process, just process it.
        var ticker = e.GetTicker()
        if (ticker.Volume >= preVolume){
            Log(ret,ticker.Last, ticker.Volume)
            preVolume = ticker.Volume
        }
    }
}   



Больше