Управление динамикой рынка: преобразование аналитики транзакционных издержек с помощью сверхточной истории тиков — PCAP и Amazon Athena для Apache Spark | Веб-сервисы Amazon

Управление динамикой рынка: преобразование аналитики транзакционных издержек с помощью сверхточной истории тиков — PCAP и Amazon Athena для Apache Spark | Веб-сервисы Amazon

Исходный узел: 3091357

Этот пост написан в соавторстве с Прамодом Наяком, ЛакшмиКантом Маннемом и Вивеком Аггарвалом из группы низкой задержки LSEG.

Анализ транзакционных издержек (TCA) широко используется трейдерами, портфельными менеджерами и брокерами для предторгового и постторгового анализа и помогает им измерять и оптимизировать транзакционные издержки и эффективность своих торговых стратегий. В этом посте мы анализируем спреды опционов бид-аск от История тиков LSEG – PCAP набор данных с использованием Amazon Athena для Apache Spark. Мы покажем вам, как получать доступ к данным, определять пользовательские функции для применения к данным, запрашивать и фильтровать набор данных, а также визуализировать результаты анализа, и все это без необходимости беспокоиться о настройке инфраструктуры или настройке Spark, даже для больших наборов данных.

проверка данных

Управление по отчетности о ценах опционов (OPRA) выступает в качестве важнейшего обработчика информации о ценных бумагах, собирая, консолидируя и распространяя отчеты о последних продажах, котировки и соответствующую информацию для опционов США. Обладая 18 активными биржами опционов в США и более чем 1.5 миллионами соответствующих контрактов, OPRA играет ключевую роль в предоставлении комплексных рыночных данных.

5 февраля 2024 года Корпорация автоматизации индустрии ценных бумаг (SIAC) собирается обновить канал OPRA с 48 до 96 многоадресных каналов. Это усовершенствование направлено на оптимизацию распределения символов и использования емкости линий в ответ на рост торговой активности и волатильности на рынке опционов в США. SIAC рекомендовал фирмам подготовиться к пиковой скорости передачи данных до 37.3 Гбит/с.

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

OPRA выделяется как один из самых объемных каналов с пиком в 150.4 миллиарда сообщений за один день в третьем квартале 3 года и требуемым запасом мощности в 2023 миллиардов сообщений в течение одного дня. Регистрация каждого отдельного сообщения имеет решающее значение для анализа транзакционных издержек, мониторинга ликвидности рынка, оценки торговой стратегии и исследования рынка.

О данных

История тиков LSEG – PCAP — это облачное хранилище объемом более 30 ПБ, в котором хранятся данные мирового рынка сверхвысокого качества. Эти данные тщательно собираются непосредственно в центрах обработки данных обмена с использованием избыточных процессов сбора, стратегически расположенных в основных основных и резервных центрах обработки данных обмена по всему миру. Технология захвата LSEG обеспечивает сбор данных без потерь и использует источник времени GPS для наносекундной точности отметки времени. Кроме того, используются сложные методы арбитража данных для беспрепятственного заполнения любых пробелов в данных. После захвата данные подвергаются тщательной обработке и арбитражу, а затем нормализуются в формат Parquet с использованием Ultra Direct в реальном времени от LSEG (RTUD) обработчики кормов.

Процесс нормализации, который является неотъемлемой частью подготовки данных для анализа, генерирует до 6 ТБ сжатых файлов Parquet в день. Огромный объем данных объясняется всеобъемлющим характером OPRA, охватывающим несколько бирж и содержащим многочисленные опционные контракты, характеризующиеся различными атрибутами. Повышенная волатильность рынка и рыночная активность на биржах опционов также способствуют увеличению объема данных, публикуемых на OPRA.

Атрибуты Tick History – PCAP позволяют фирмам проводить различные анализы, в том числе следующие:

  • Предторговый анализ – Оценить потенциальное влияние торговли и изучить различные стратегии исполнения на основе исторических данных.
  • Постторговая оценка – Измеряйте фактические затраты на выполнение по сравнению с контрольными показателями для оценки эффективности стратегий исполнения.
  • Оптимизированный выполнение – Точная настройка стратегий исполнения на основе исторических рыночных моделей, чтобы минимизировать влияние на рынок и снизить общие торговые издержки.
  • Управление рисками – Выявлять модели проскальзывания, выявлять выбросы и активно управлять рисками, связанными с торговой деятельностью.
  • Атрибуция производительности – Отделяйте влияние торговых решений от инвестиционных решений при анализе эффективности портфеля.

Тиковая история LSEG – набор данных PCAP доступен в Обмен данными AWS и доступен на Торговая площадка AWS. С Обмен данными AWS для Amazon S3, вы можете получить доступ к данным PCAP непосредственно из LSEG. Простой сервис хранения Amazon (Amazon S3), что избавляет компании от необходимости хранить собственную копию данных. Этот подход упрощает управление и хранение данных, предоставляя клиентам немедленный доступ к высококачественным PCAP или нормализованным данным, а также простоту использования, интеграции и простоты использования. существенная экономия на хранении данных.

Афина для Apache Spark

Для аналитических усилий, Афина для Apache Spark предлагает упрощенный интерфейс записной книжки, доступный через консоль Athena или API-интерфейсы Athena, что позволяет создавать интерактивные приложения Apache Spark. Благодаря оптимизированной среде выполнения Spark Athena помогает анализировать петабайты данных за счет динамического масштабирования количества механизмов Spark менее чем за секунду. Более того, общие библиотеки Python, такие как pandas и NumPy, легко интегрируются, что позволяет создавать сложную логику приложений. Гибкость распространяется на импорт пользовательских библиотек для использования в ноутбуках. Athena for Spark поддерживает большинство форматов открытых данных и легко интегрируется с Клей AWS Каталог данных.

Dataset

Для этого анализа мы использовали набор данных LSEG Tick History – PCAP OPRA от 17 мая 2023 года. Этот набор данных включает в себя следующие компоненты:

  • Лучшее предложение и предложение (BBO) – Сообщает о самой высокой цене и самой низкой цене за ценную бумагу на данной бирже.
  • Национальное лучшее предложение и предложение (NBBO) – Сообщает о самой высокой цене и самой низкой цене за ценную бумагу на всех биржах.
  • Торги – Записывает завершенные сделки на всех биржах

Набор данных включает в себя следующие объемы данных:

  • Торги – 160 МБ распределено примерно по 60 сжатым файлам Parquet.
  • ВВО – 2.4 ТБ распределено примерно по 300 сжатым файлам Parquet.
  • НББО – 2.8 ТБ распределено примерно по 200 сжатым файлам Parquet.

Обзор анализа

Анализ данных тиковой истории OPRA для анализа транзакционных затрат (TCA) включает в себя тщательное изучение рыночных котировок и сделок вокруг конкретного торгового события. В рамках данного исследования мы используем следующие показатели:

  • Котируемый спред (QS) – Рассчитывается как разница между аском BBO и бидом BBO.
  • Эффективный спред (ES) – Рассчитывается как разница между ценой сделки и средней точкой BBO (бид BBO + (аск BBO – бид BBO)/2)
  • Эффективный/котируемый спред (EQF) – Рассчитывается как (ES/QS) * 100

Мы рассчитываем эти спреды до сделки и дополнительно через четыре интервала после сделки (сразу после, через 1 секунду, 10 секунд и 60 секунд после сделки).

Настройка Athena для Apache Spark

Чтобы настроить Athena для Apache Spark, выполните следующие действия:

  1. На консоли Athena в разделе Начать, наведите на Анализируйте свои данные с помощью PySpark и Spark SQL..
  2. Если вы впервые используете Athena Spark, выберите Создать рабочую группу.
  3. Что касается Имя рабочей группы¸ введите имя рабочей группы, например tca-analysis.
  4. В Механизм аналитики раздел, выберите Apache Spark.
  5. В Дополнительные конфигурации раздел, вы можете выбрать Использовать значения по умолчанию или предоставить индивидуальный Управление идентификацией и доступом AWS (IAM) и расположение Amazon S3 для результатов вычислений.
  6. Выберите Создать рабочую группу.
  7. После создания рабочей группы перейдите к Ноутбуки и выберите Создать блокнот.
  8. Введите имя для своего блокнота, например tca-analysis-with-tick-history.
  9. Выберите Создавай для создания своего блокнота.

Запустите свой блокнот

Если вы уже создали рабочую группу Spark, выберите Запустить редактор блокнота под Начать.


После создания блокнота вы будете перенаправлены в редактор интерактивных блокнотов.


Теперь мы можем добавить и запустить следующий код в нашем блокноте.

Создать анализ

Для создания анализа выполните следующие шаги:

  • Импортируйте общие библиотеки:
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go

  • Создайте наши фреймы данных для BBO, NBBO и сделок:
bbo_quote = spark.read.parquet(f"s3://<bucket>/mt=bbo_quote/f=opra/dt=2023-05-17/*")
bbo_quote.createOrReplaceTempView("bbo_quote")
nbbo_quote = spark.read.parquet(f"s3://<bucket>/mt=nbbo_quote/f=opra/dt=2023-05-17/*")
nbbo_quote.createOrReplaceTempView("nbbo_quote")
trades = spark.read.parquet(f"s3://<bucket>/mt=trade/f=opra/dt=2023-05-17/29_1.parquet")
trades.createOrReplaceTempView("trades")

  • Теперь мы можем определить сделку, которую будем использовать для анализа транзакционных издержек:
filtered_trades = spark.sql("select Product, Price,Quantity, ReceiptTimestamp, MarketParticipant from trades")

Получаем такой вывод:

+---------------------+---------------------+---------------------+-------------------+-----------------+ 
|Product |Price |Quantity |ReceiptTimestamp |MarketParticipant| 
+---------------------+---------------------+---------------------+-------------------+-----------------+ 
|QQQ 230518C00329000|1.1700000000000000000|10.0000000000000000000|1684338565538021907,NYSEArca|
|QQQ 230518C00329000|1.1700000000000000000|20.0000000000000000000|1684338576071397557,NASDAQOMXPHLX|
|QQQ 230518C00329000|1.1600000000000000000|1.0000000000000000000|1684338579104713924,ISE|
|QQQ 230518C00329000|1.1400000000000000000|1.0000000000000000000|1684338580263307057,NASDAQOMXBX_Options|
|QQQ 230518C00329000|1.1200000000000000000|1.0000000000000000000|1684338581025332599,ISE|
+---------------------+---------------------+---------------------+-------------------+-----------------+

В дальнейшем мы используем выделенную торговую информацию для торгового продукта (tp), торговой цены (tpr) и времени торговли (tt).

  • Здесь мы создаем ряд вспомогательных функций для нашего анализа.
def calculate_es_qs_eqf(df, trade_price):
    df['BidPrice'] = df['BidPrice'].astype('double')
    df['AskPrice'] = df['AskPrice'].astype('double')
    df["ES"] = ((df["AskPrice"]-df["BidPrice"])/2) - trade_price
    df["QS"] = df["AskPrice"]-df["BidPrice"]
    df["EQF"] = (df["ES"]/df["QS"])*100
    return df

def get_trade_before_n_seconds(trade_time, df, seconds=0, groupby_col = None):
    nseconds=seconds*1000000000
    nseconds += trade_time
    ret_df = df[df['ReceiptTimestamp'] < nseconds].groupby(groupby_col).last()
    ret_df['BidPrice'] = ret_df['BidPrice'].astype('double')
    ret_df['AskPrice'] = ret_df['AskPrice'].astype('double')
    ret_df = ret_df.reset_index()
    return ret_df

def get_trade_after_n_seconds(trade_time, df, seconds=0, groupby_col = None):
    nseconds=seconds*1000000000
    nseconds += trade_time
    ret_df = df[df['ReceiptTimestamp'] > nseconds].groupby(groupby_col).first()
    ret_df['BidPrice'] = ret_df['BidPrice'].astype('double')
    ret_df['AskPrice'] = ret_df['AskPrice'].astype('double')
    ret_df = ret_df.reset_index()
    return ret_df

def get_nbbo_trade_before_n_seconds(trade_time, df, seconds=0):
    nseconds=seconds*1000000000
    nseconds += trade_time
    ret_df = df[df['ReceiptTimestamp'] < nseconds].iloc[-1:]
    ret_df['BidPrice'] = ret_df['BidPrice'].astype('double')
    ret_df['AskPrice'] = ret_df['AskPrice'].astype('double')
    return ret_df

def get_nbbo_trade_after_n_seconds(trade_time, df, seconds=0):
    nseconds=seconds*1000000000
    nseconds += trade_time
    ret_df = df[df['ReceiptTimestamp'] > nseconds].iloc[:1]
    ret_df['BidPrice'] = ret_df['BidPrice'].astype('double')
    ret_df['AskPrice'] = ret_df['AskPrice'].astype('double')
    return ret_df

  • В следующей функции мы создаем набор данных, содержащий все котировки до и после сделки. Athena Spark автоматически определяет, сколько DPU запустить для обработки нашего набора данных.
def get_tca_analysis_via_df_single_query(trade_product, trade_price, trade_time):
    # BBO quotes
    bbos = spark.sql(f"SELECT Product, ReceiptTimestamp, AskPrice, BidPrice, MarketParticipant FROM bbo_quote where Product = '{trade_product}';")
    bbos = bbos.toPandas()

    bbo_just_before = get_trade_before_n_seconds(trade_time, bbos, seconds=0, groupby_col='MarketParticipant')
    bbo_just_after = get_trade_after_n_seconds(trade_time, bbos, seconds=0, groupby_col='MarketParticipant')
    bbo_1s_after = get_trade_after_n_seconds(trade_time, bbos, seconds=1, groupby_col='MarketParticipant')
    bbo_10s_after = get_trade_after_n_seconds(trade_time, bbos, seconds=10, groupby_col='MarketParticipant')
    bbo_60s_after = get_trade_after_n_seconds(trade_time, bbos, seconds=60, groupby_col='MarketParticipant')
    
    all_bbos = pd.concat([bbo_just_before, bbo_just_after, bbo_1s_after, bbo_10s_after, bbo_60s_after], ignore_index=True, sort=False)
    bbos_calculated = calculate_es_qs_eqf(all_bbos, trade_price)

    #NBBO quotes
    nbbos = spark.sql(f"SELECT Product, ReceiptTimestamp, AskPrice, BidPrice, BestBidParticipant, BestAskParticipant FROM nbbo_quote where Product = '{trade_product}';")
    nbbos = nbbos.toPandas()

    nbbo_just_before = get_nbbo_trade_before_n_seconds(trade_time,nbbos, seconds=0)
    nbbo_just_after = get_nbbo_trade_after_n_seconds(trade_time, nbbos, seconds=0)
    nbbo_1s_after = get_nbbo_trade_after_n_seconds(trade_time, nbbos, seconds=1)
    nbbo_10s_after = get_nbbo_trade_after_n_seconds(trade_time, nbbos, seconds=10)
    nbbo_60s_after = get_nbbo_trade_after_n_seconds(trade_time, nbbos, seconds=60)

    all_nbbos = pd.concat([nbbo_just_before, nbbo_just_after, nbbo_1s_after, nbbo_10s_after, nbbo_60s_after], ignore_index=True, sort=False)
    nbbos_calculated = calculate_es_qs_eqf(all_nbbos, trade_price)

    calc = pd.concat([bbos_calculated, nbbos_calculated], ignore_index=True, sort=False)
    
    return calc

  • Теперь давайте вызовем функцию анализа TCA с информацией из выбранной нами сделки:
tp = "QQQ 230518C00329000"
tpr = 1.16
tt = 1684338579104713924
c = get_tca_analysis_via_df_single_query(tp, tpr, tt)

Визуализируйте результаты анализа

Теперь давайте создадим фреймы данных, которые мы используем для нашей визуализации. Каждый кадр данных содержит котировки для одного из пяти временных интервалов для каждого потока данных (BBO, NBBO):

bbo = c[c['MarketParticipant'].isin(['BBO'])]
bbo_bef = bbo[bbo['ReceiptTimestamp'] < tt]
bbo_aft_0 = bbo[bbo['ReceiptTimestamp'].between(tt,tt+1000000000)]
bbo_aft_1 = bbo[bbo['ReceiptTimestamp'].between(tt+1000000000,tt+10000000000)]
bbo_aft_10 = bbo[bbo['ReceiptTimestamp'].between(tt+10000000000,tt+60000000000)]
bbo_aft_60 = bbo[bbo['ReceiptTimestamp'] > (tt+60000000000)]

nbbo = c[~c['MarketParticipant'].isin(['BBO'])]
nbbo_bef = nbbo[nbbo['ReceiptTimestamp'] < tt]
nbbo_aft_0 = nbbo[nbbo['ReceiptTimestamp'].between(tt,tt+1000000000)]
nbbo_aft_1 = nbbo[nbbo['ReceiptTimestamp'].between(tt+1000000000,tt+10000000000)]
nbbo_aft_10 = nbbo[nbbo['ReceiptTimestamp'].between(tt+10000000000,tt+60000000000)]
nbbo_aft_60 = nbbo[nbbo['ReceiptTimestamp'] > (tt+60000000000)]

В следующих разделах мы приводим пример кода для создания различных визуализаций.

Постройте график QS и NBBO перед сделкой

Используйте следующий код, чтобы построить график котируемого спреда и NBBO перед сделкой:

fig = px.bar(title="Quoted Spread Before The Trade",
    x=bbo_bef.MarketParticipant,
    y=bbo_bef['QS'],
    labels={'x': 'Market', 'y':'Quoted Spread'})
fig.add_hline(y=nbbo_bef.iloc[0]['QS'],
    line_width=1, line_dash="dash", line_color="red",
    annotation_text="NBBO", annotation_font_color="red")
%plotly fig

Постройте QS для каждого рынка и NBBO после сделки

Используйте следующий код, чтобы построить котировочный спред для каждого рынка и NBBO сразу после сделки:

fig = px.bar(title="Quoted Spread After The Trade",
    x=bbo_aft_0.MarketParticipant,
    y=bbo_aft_0['QS'],
    labels={'x': 'Market', 'y':'Quoted Spread'})
fig.add_hline(
    y=nbbo_aft_0.iloc[0]['QS'],
    line_width=1, line_dash="dash", line_color="red",
    annotation_text="NBBO", annotation_font_color="red")
%plotly fig

Постройте QS для каждого временного интервала и каждого рынка для BBO.

Используйте следующий код, чтобы построить котировочный спред для каждого временного интервала и каждого рынка для BBO:

fig = go.Figure(data=[
    go.Bar(name="before trade", x=bbo_bef.MarketParticipant.unique(), y=bbo_bef['QS']),
    go.Bar(name="0s after trade", x=bbo_aft_0.MarketParticipant.unique(), y=bbo_aft_0['QS']),
    go.Bar(name="1s after trade", x=bbo_aft_1.MarketParticipant.unique(), y=bbo_aft_1['QS']),
    go.Bar(name="10s after trade", x=bbo_aft_10.MarketParticipant.unique(), y=bbo_aft_10['QS']),
    go.Bar(name="60s after trade", x=bbo_aft_60.MarketParticipant.unique(), y=bbo_aft_60['QS'])])
fig.update_layout(barmode='group',title="BBO Quoted Spread Per Market/TimeFrame",
    xaxis={'title':'Market'},
    yaxis={'title':'Quoted Spread'})
%plotly fig

Постройте график ES для каждого временного интервала и рынка для BBO.

Используйте следующий код, чтобы построить эффективный спред для каждого временного интервала и рынка для BBO:

fig = go.Figure(data=[
    go.Bar(name="before trade", x=bbo_bef.MarketParticipant.unique(), y=bbo_bef['ES']),
    go.Bar(name="0s after trade", x=bbo_aft_0.MarketParticipant.unique(), y=bbo_aft_0['ES']),
    go.Bar(name="1s after trade", x=bbo_aft_1.MarketParticipant.unique(), y=bbo_aft_1['ES']),
    go.Bar(name="10s after trade", x=bbo_aft_10.MarketParticipant.unique(), y=bbo_aft_10['ES']),
    go.Bar(name="60s after trade", x=bbo_aft_60.MarketParticipant.unique(), y=bbo_aft_60['ES'])])
fig.update_layout(barmode='group',title="BBO Effective Spread Per Market/TimeFrame",
    xaxis={'title':'Market'}, 
    yaxis={'title':'Effective Spread'})
%plotly fig

Постройте EQF для каждого временного интервала и рынка для BBO.

Используйте следующий код, чтобы построить эффективный/котируемый спред для каждого временного интервала и рынка для BBO:

fig = go.Figure(data=[
    go.Bar(name="before trade", x=bbo_bef.MarketParticipant.unique(), y=bbo_bef['EQF']),
    go.Bar(name="0s after trade", x=bbo_aft_0.MarketParticipant.unique(), y=bbo_aft_0['EQF']),
    go.Bar(name="1s after trade", x=bbo_aft_1.MarketParticipant.unique(), y=bbo_aft_1['EQF']),
    go.Bar(name="10s after trade", x=bbo_aft_10.MarketParticipant.unique(), y=bbo_aft_10['EQF']),
    go.Bar(name="60s after trade", x=bbo_aft_60.MarketParticipant.unique(), y=bbo_aft_60['EQF'])])
fig.update_layout(barmode='group',title="BBO Effective/Quoted Spread Per Market/TimeFrame",
    xaxis={'title':'Market'}, 
    yaxis={'title':'Effective/Quoted Spread'})
%plotly fig

Производительность расчета Athena Spark

Когда вы запускаете блок кода, Athena Spark автоматически определяет, сколько DPU требуется для завершения расчета. В последнем блоке кода, где мы вызываем tca_analysis функции, мы фактически инструктируем Spark обработать данные, а затем преобразуем полученные фреймы данных Spark в фреймы данных Pandas. Это самая интенсивная часть анализа, и когда Athena Spark запускает этот блок, он показывает индикатор выполнения, затраченное время и количество DPU, обрабатывающих данные в данный момент. Например, в следующем расчете Athena Spark использует 18 DPU.

При настройке ноутбука Athena Spark у вас есть возможность установить максимальное количество DPU, которое он может использовать. По умолчанию установлено 20 DPU, но мы протестировали этот расчет с 10, 20 и 40 DPU, чтобы продемонстрировать, как Athena Spark автоматически масштабируется для проведения нашего анализа. Мы заметили, что Athena Spark масштабируется линейно: 15 минут и 21 секунда, если в ноутбуке установлено максимум 10 DPU, 8 минут и 23 секунды, если в ноутбуке установлено 20 DPU, и 4 минуты и 44 секунды, когда ноутбук был сконфигурирован с 40 DPU. Поскольку Athena Spark взимает плату на основе использования DPU с посекундной детализацией, стоимость этих вычислений аналогична, но если вы установите более высокое максимальное значение DPU, Athena Spark сможет вернуть результат анализа гораздо быстрее. Для получения более подробной информации о ценах на Athena Spark нажмите кнопку здесь.

Заключение

В этом посте мы продемонстрировали, как вы можете использовать высокоточные данные OPRA из Tick History-PCAP от LSEG для анализа транзакционных затрат с помощью Athena Spark. Своевременная доступность данных OPRA в сочетании с инновациями доступности AWS Data Exchange для Amazon S3 стратегически сокращает время анализа для компаний, стремящихся получить полезную информацию для принятия важных торговых решений. OPRA генерирует около 7 ТБ нормализованных данных Parquet каждый день, а управление инфраструктурой для предоставления аналитики на основе данных OPRA является сложной задачей.

Масштабируемость Athena при крупномасштабной обработке данных для Tick History — PCAP для данных OPRA делает ее привлекательным выбором для организаций, которым нужны быстрые и масштабируемые аналитические решения в AWS. В этом посте показано плавное взаимодействие между экосистемой AWS и данными Tick History-PCAP, а также то, как финансовые учреждения могут использовать эту синергию для принятия решений на основе данных для важнейших торговых и инвестиционных стратегий.


Об авторах

Прамод Наяк является директором по управлению продуктами группы с низкими задержками в LSEG. Прамод имеет более чем 10-летний опыт работы в сфере финансовых технологий, специализируясь на разработке программного обеспечения, аналитике и управлении данными. Прамод — бывший инженер-программист, увлеченный рыночными данными и количественной торговлей.

ЛакшмиКант Маннем является менеджером по продукту в группе низких задержек компании LSEG. Он специализируется на данных и платформенных продуктах для индустрии рыночных данных с малой задержкой. ЛакшмиКант помогает клиентам создавать наиболее оптимальные решения для удовлетворения их потребностей в рыночных данных.

Вивек Аггарвал — старший инженер по обработке данных в группе малых задержек компании LSEG. Вивек занимается разработкой и обслуживанием конвейеров данных для обработки и доставки собранных потоков рыночных и справочных данных.

Алкет Мемушай — главный архитектор группы развития рынка финансовых услуг в AWS. Алкет отвечает за техническую стратегию, работая с партнерами и клиентами над развертыванием даже самых требовательных рабочих нагрузок рынков капитала в облаке AWS.

Отметка времени:

Больше от AWS Большие данные