Nodejs https .post() запрос; Есть ли более быстрый способ, чем через пакет запроса?

Итак, я читал об автоматической (крипто) торговле, и я подумал, давайте попробуем. Мне удалось сделать простого трейдера для обмена Poloniex.

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

Сделки на покупку / продажу отправляются через HTTPS POST метод, к API Poloniex.

Я хочу, чтобы время нескольких последовательных сделок было минимальным. Тем не менее, я заметил, что один запрос на покупку / продажу занимает примерно500 [ms] (иногда даже больше секунды) с пакетом запросов npm.

Теперь мне интересно, есть ли более быстрый способ отправить эти HTTPS POST запросов, таких, что вероятность изменения цены при втором последовательном запросе минимальна.

Мой текущий метод заключается в следующем:

            //   create timestamp and encrypt secret
            //                              + message
            //   with current timestamp using Hmac
            timeStamp = Math.floor(Date.now());
            sign = ...

            var headers = {
                'Key':    key,
                'Sign':   sign
            };

            // make first trade
            request.post({
                'headers': headers,
                'url':    'https://poloniex.com/tradingApi',
                'form':    ... 
            }, function (error, response, body) {
                // go on to second trade if previous finished correctly
                if (!error)
                {
                    // use same procedure again for encryption
                    timeStamp = Math.floor(Date.now());
                    sign      = ... 

                    headers = {
                        'Key':    key,
                        'Sign':   sign
                    };

                    request.post({
                        'headers': headers,
                        'url':    'https://poloniex.com/tradingApi',
                        'form':    ...
                    }, function (error, response, body) {
                        if (!error)
                        {
                         // same pattern for the third one

1 ответ

Предложение купить немного лучший компьютер (см. Ниже) для ускоренной фазы SSL-шифрования / дешифрования (шаг [3] ниже), с дополнительным замечанием, что большая часть из 500 [мс], вероятно, в основном просто время отклика для сервер, на который вы отправляете."(при всем уважении) прямое неверное и сильно вводящее в заблуждение утверждение.

(цит., выделенные слова):

"... Возможно, что немного более быстрый компьютер мог бы выполнить вычисления соединения SSL быстрее для начального соединения, но это всего лишь предположение. К вашему сведению, вам не нужно ждать завершения одной транзакции, прежде чем начинать следующую. может запускать несколько транзакций одновременно и видеть, когда они все будут выполнены. Все они будут тогда "в полете" в одно и то же время. Задержка в 500 мс, которую вы заметили, вероятно, в основном является просто временем отклика для сервера, на который вы отправляете. - jfriend00 10 часов назад

(Ой, этот комментарий, который я все еще вижу здесь, на экране, подписанный jfriend00, датированный [2017-10-27 09:15:37Z] ... теперь, кажется, удалено автором, вместо того, чтобы явным образом указать на запрашиваемое ниже разъяснение того, сколько [мс] действительно будет выбрито, поскольку она / он предложила использовать немного более быстрый компьютер для O/P)


Ну, это типичный результат выбора прямых НЕПРАВИЛЬНЫХ инструментов...



Внимательно прочитайте актуальный e2e.RTT цифры,
а также их дисперсия (которая на два порядка больше, чем общий латентный шум на этапе доставки сети L3),

который
только в том случае, если они собраны вместе, действительно отражают реальное сквозное время кругового обхода подтверждения для самой простой из всех инструкций XTO, которая не требует какой-либо дополнительной [Risk-Management] или другой пост-обработки на API-провайдер BackOffice/NDD/ECN-сторона

Также можно увидеть
сколько пропущенных ответов от API-провайдера потеряно - отправлено BEEP[7238] против только что получил LAST[7206]

Готовы обрабатывать даже потерянные API-вызовы?

Побывав в области технологий FX-рынков более нескольких десятилетий (несколько> 3), я чувствую, что могу сказать следующее:

  • Поставщик Market-Access (вы называете их всех) решил продать / предоставить API для публики
  • Их CIO + COO решили обернуть + легкие шифрованные сервисы в HTTPS -envelopes
  • Ваше приложение просто должно соответствовать их логике API-Finite-State-Machine, в т.ч. их выбранная переупаковка все в / из HTTPS -envelopes.

Как это устроено:

  1. Ваша логика приложения может быть решена [СЕЙЧАС] отправить некоторую XTO-инструкцию в торговый движок

  2. В этот момент ваше приложение должно выполнить переформулировку XTO-инструкций в формат, который удаленно управляемый API может принимать и обрабатывать. Это занимает некоторое время, обычно не более нескольких десятков ~ [нас]

  3. Затем ваша XTO-инструкция, соответствующая API, должна быть обернута + зашифрована в HTTPS конверт, снова несколько десятков ~ [нас] добавил

  4. Далее, ваш локальный маршалл HTTPS конверт к интерфейсу локальной сети, добавьте несколько [нас]

  5. Следующее препятствие - доставить такой конверт через общедоступный интернет (будь то глобальный (оплата +1 .. +10 мс по континенту или ~ 100 мс при подключении по подводным кабелям или через спутниковую связь из Новой Зеландии). и др.) ИЛИ в случае, если локальная интрасеть названного провайдера выставила в своем расположенном центре обработки данных зону для совместного размещения в одноранговой сети (при этом затраты на нее составляют всего несколько футов (+ ~ ~ несколько нс)) по кабелю 10 ГБЕ (если У провайдера API есть такое предложение для вас)).

  6. Здесь - еще не конец истории - ваш HTTPS -обернутый конверт только что достиг входного порта очереди собственного шлюза API-предоставления провайдера, поэтому ни одна обработка не была запущена до этого момента, до которого вы уже собрали много сотен [нас] (по крайней мере), Указанный провайдер API через какое-то время появится HTTPS конверт из очереди, чтобы начать декодирование + распаковка содержимого выпущенной очереди HTTPS -nvelop (добавьте стоимость + несколько [нас], в зависимости от моделей трафика и политик организации очередей, используемых при декодировании шлюза API-Обеспечение +, зависит от того, какую технологию они используют для этого разложения, даже самая сложная технология на основе кремния не может выполнить это намного быстрее)
  7. После предыдущего шага API-Обеспечивающий Шлюз может доставить вашу декодированную XTO-инструкцию в API-сервис (угадайте, что, добавьте несколько +[нас] для этого шага)
  8. Здесь API-FSA начинает переводить вашу XTO-инструкцию, соответствующую API, в Trade Execution (в зависимости от резервной производительности и рабочих нагрузок / моделей трафика, здесь вы платите несколько десятков, сотен, тысяч [мс] в зависимости также от того, насколько интеллектуальными являются интегрированные инструменты место проведения торгов и как сложно их оценка рисков, ценовые потоки, пул ликвидности и ведение архипелаговой книги, с которыми работают механизмы и политики исполнения NDD / ECN и которые в конечном итоге устанавливают фактические MarketPrice, которые XTO будет быть казненным в.

-------- до этого момента это была критическая по времени (цене) часть единственного сквозного пути транзакции XTO.

  1. Как только ваш XTO будет фактически "сопоставлен" с записями в книге заказов, будут созданы подтверждения, которые будут отправлены обратно на вашу сторону (некритичная по времени операция, поэтому не ожидайте никаких высших приоритетов ни при обработке, ни в политике очередей, чтобы иметь место, так что добавьте + несколько [мс])

  2. Ради доставки повторите ту же последовательность шагов: сборка ответов, совместимых с API + организация очередей + перевод API-ответов в API-шлюзе предоставления доступа в текстовый формат с HTTPS-шифрованием + организация очередей + серии всех задействованных ISO/ Маршруты доставки OSI-L3 (будь то в одном месте или через глобальную сеть)

  3. Здесь ваша локальная сеть доставила серию IP-пакетов на ваш интерфейс localhost для распаковки, дешифрования, преобразования и начала декодирования значения сообщения.
  4. В этот момент ответ вашей XTO-инструкции можно сравнить и лучше всего сопоставить с намерением первоначально отправленной XTO-инструкции.
  5. Нажмите на секундомер, чтобы прочитать E2E-RTT продолжительность.

Вот почему вы можете встретить что-то от нескольких десятков [нас] до чего-то выше +1000 [мс]


Как это сделать Bests of the Bests?

  • избегать запуска проектов без тщательной проверки их выполнимости (как с точки зрения задержек при высоких нагрузках, так и общего масштабирования) - вещи, которые могут работать при легких нагрузках, имеют тенденцию приводить к неприятным сюрпризам и необычайным проблемам при тяжелых и длительных нагрузках схемы нагрузки и паразитные штормы...
  • избегайте полагаться на "Wannabe-TechGuru(s)" (даже если все говорят об API, основанном на REST/HTTP, никогда не перемещайте подобный опыт за пределы зоны, где этого может быть достаточно, тем меньше в зону, где в конечном итоге жесткая реальность контрольные циклы не могут обеспечить стабильные результаты)
  • избегайте следования квази-аргументам "Маркетинг" (даже если все говорят о какой-то технологии - будь то { JSON | XML | CORBA-BLOBs } - никогда не используйте такую ​​технологию автоматически для вашей чувствительной к задержкам распределенной системы реального времени и др.)
  • внедрить инструменты с малой задержкой + избежать дорогостоящих накладных расходов
  • никогда не переупаковывать вещи (лучше всего доставлять в двоично-плотных картах)
  • всегда регистрируйте временные метки времени и регистрируйте / сверяйте записи доказательств в соответствии с контрактными условиями и положениями, запрашивая финансовые средства защиты, если П и Т не соблюдены или иным образом нарушены в процессе производства (это долгий путь)

Лучший следующий шаг?

Если вы дошли до чтения этого трейлера, вы, должно быть, заметили, что ни один из этих вариантов не был на самом деле вашим.

При любых обстоятельствах вы будете нести риск изменения цены между товаром [1..8] и при условии проскальзывания цены внутри [8]

Лучше иди и попроси лучшего и более быстрого API + совмещенный сервер-хостинг.


БОНУС:

Если действительно в поисках продвинутого

"метод отправки... запросов, такой, что вероятность изменения цены при втором последовательном запросе минимальна".

затем слушайте - есть способ - в случае, если вашей торговой стратегии не требуется взаимодействовать с подтверждениями E2E-распределенных транзакций / { price | DoM-L3 } изменения, объявленные асинхронно через все входящие [_>>_price-stream_>>_] -каналы, просто умничайте и отправляйте все такие XTO-инструкции в [PARALLEL] сразу (есть проверенные способы сделать это на вашей локальной стороне).

Используя этот подход, ваш залп просто вытянет всю необходимую ликвидность из фактического состояния Книги заказов по цене наилучшего исполнения (если не обманут политикой оператора (снова, см. Журнальные записи доказательств, чтобы проверить и, возможно, попросить FSA защитить ваши интересы в случае наличия каких-либо несоответствий в справедливой торговле + справедливой цене)).

Обновить

Хорошо, @jfriend00 вступил и возразил (цит., Выделенные слова):

Вы слишком усложнили заданный вопрос. У OP есть HTTP API, и они хотят знать, могут ли они делать что-либо быстрее, чем модуль request() для отправки запросов к этому API. Это заданный вопрос. Вы не обращаетесь к этому вообще, и вы идете во все виды вещей, которые не имеют абсолютно никакого отношения к заданному вопросу. Длинный, сложный, трудный для понимания ответ, который на самом деле даже не отвечает на заданный вопрос, для чего нужны отрицательные голоса. - jfriend00 28 минут назад

быть:

  • долго - ну конечно - алгоритмически-торговые инфраструктуры НЕ ПРОСТО

  • сложный - многопартийные (противоположные интересы) распределенные транзакции усложняются

  • трудно понять - любой может появиться здесь и лучше объяснить такую ​​сложную проблему E2E
  • не отвечая на этот вопрос - единственное значимое решение, предоставленное WAS, вместе со всеми соответствующими аргументами, ПОЧЕМУ любое другое (более простое, изолированное всего за один шаг или даже слишком упрощенное, чтобы стать "более легким") НЕ РАБОТАЕТ для решения проблемы. / P стоит лицом к лицу.

Извините, что должен повторить, что после 30 с лишним лет, я осмелюсь сказать, что я довольно хорошо знаю, что нет ничего другого (и если все еще сомневаюсь, переосмыслите историю - если таковые были, все высокопоставленные HFT-акулы уже продемонстрировали бы свое немедленное продвижение в этом. Итак, если ни один из них не сделал ни одного такого легкого и тривиального магического выстрела, но все остались прямо по периметру нижеприведенного наиболее известного решения, то это ясное и убедительное доказательство, лучше нет. QED)

Другие вопросы по тегам