投資數據平台現代化戰略Beplay体育安卓版本
2021年1月29日 在工程的博客
2020年,個人和機構投資者的投資胃口都達到了曆史高點。一項研究表明“在新冠肺炎引發的波動之後,散戶交易員占股市的近25%”.此外,機構投資者對加密貨幣進行了大量投資,其中36%投資於加密貨幣,正如《商業內幕》所概述的那樣.隨著投資者獲得和交易加密貨幣等替代資產,交易量飆升,並帶來了新的數據挑戰。此外,尖端研究已不再局限於華爾街的機構投資者——如今的投資世界已擴展到矽穀的數字交易所、以數據為中心的做市商,以及越來越多地投資於為投資者提供人工智能工具的零售經紀商。數據湖已經成為構建金融數據產品和研究的標準,但它們也麵臨著一係列獨特的挑戰:
- 缺乏如何在雲端建立企業數據湖的藍圖
- 組織仍在努力保證其數據的可靠性和及時性,導致次優流程和稀釋的見解
因此,由於維護成本高,以及缺乏規模和交易盈利能力的藍圖,難以實現可擴展的人工智能(例如波動率預測)。作為我們建議的藍圖的一部分,我們建議在Delta Lake上進行標準化,這是一個開源存儲層,它將ACID事務帶到Apache Spark™和大數據工作負載。Delta Lake中的表既是批處理表,也是流源和流彙。流式數據攝取、批處理曆史回填和交互式查詢都可以開箱即用。特別是,由於原始市場數據是實時交付的,必須近實時地使用來支持交易決策,因此Delta Lake對於支持交易用例至關重要。
這個博客有兩個主要部分。第一份報告詳細介紹了將金融市場數據輸入Delta Lake的方案。第二部分涵蓋了產品化用例的藍圖,例如金融產品波動預測以及Delta Lake的市場監視。值得注意的是,作為用例的一部分,我們介紹了一個由Databricks Labs開發的開源時間序列包,它有助於為上麵的用例構建基礎。
如何打造市場三角洲湖
在本博客中,通過一係列設計模式和實際示例,我們將解決上一節中的數據挑戰。作為一個視覺指南,下麵的參考體係結構將是如何構建數據湖源和為最終報告、交易摘要和市場監控警報策劃數據集的基礎。
基本數據源攝取
基本數據(位於圖1的左上方)被寬泛地定義為用於衡量公司內在價值的經濟和財務因素,目前可以從大多數財務數據供應商獲得。最常見的兩種來源包括Factset而且標準普爾市場情報平台Beplay体育安卓版本.這兩個源都可以通過FTP、API和SQL Server數據庫提供數據。由於數據可以通過數據庫進行因子分析,因此有三個簡單的選擇可以攝入到三角洲湖:
選項1 -合作夥伴攝入網絡
Databricks與六家公司合作,組成了“合作夥伴數據攝取網絡”。我們的合作夥伴能夠從各種來源攝取數據,包括FTP、crm、營銷源和數據庫源。由於金融供應商允許金融客戶托管數據庫,因此可以使用我們的合作夥伴工具提取數據,直接存儲在Delta Lake中。關於如何使用該網絡攝入的完整文檔和合作夥伴的列表位於Databricks的文檔中,合作夥伴數據集成.
選項2 -使用原生的基於雲的攝取工具
雲服務提供商也有將數據庫複製到Delta Lake的現有工具。下麵是從數據庫(本地或雲)攝取到Delta Lake的兩個選項。
AWS
AWS提供了一種解決方案,即數據庫遷移服務(Database Migration Services),它允許組織建立變更數據捕獲(CDC)流程,將數據庫更改複製到雲數據湖。我們在博客中概述了將數據庫更改複製到Delta Lake的具體方法,“使用AWS DMS將事務性數據遷移到Delta Lake。”例如,由於Xpressfeed標準普爾數據有數百個來源,從ESG風險評分和替代數據到基本收益和新聞情緒數據集,因此將這些數據自動複製到Delta Lake的方法至關重要。上麵提到的AWS解決方案提供了一種簡單的設置方法。
Azure
Azure最受歡迎的服務之一是Azure數據工廠(ADF),這是有充分理由的。ADF允許從許多不同的數據源進行複製,包括數據庫、FTP甚至跨雲數據源(如BigQuery)。具體來說,有兩種方法可以將數據從SQL數據庫寫入Delta Lake:
- ADF提供了一個簡單的”複製到的工廠它隻是簡單地將數據庫表複製到blob存儲(blob或ADLS Gen2), Delta Lake是這個複製功能的有效目標表。
- 對於從數據庫到Delta Lake的更自定義轉換,ADF足夠靈活,可以使用如下所示的信息模式從數據庫讀取所有表在這裏.從這裏,您可以簡單地配置Databricks筆記本,它使用來自信息模式的輸入表名,並通過執行Databricks筆記本來複製每個表,後者使用JDBC從數據庫中讀取數據。的例子是在這裏.
基於api的數據源攝取
彭博社是市場數據、參考數據和數百個其他feed的行業標準之一。為了展示一個來自彭博數據訂閱的基於API的攝取(圖1中左)的示例,B-PIPE(用於訪問市場數據源的彭博數據API)模擬器將被使用。下麵的代碼修改了原始模擬器中的Java市場數據訂閱客戶端代碼,以便使用AWS SDK將事件發布到Kinesis實時流中。
將B-PIPE市場數據寫入流媒體服務
//開放市場數據訂閱服務session.openServiceAsync(“/ / blp / mktdata”,新CorrelationID (-9999年));//創建列表的證券來不斷攝取成三角洲湖SubscriptionList slist=新SubscriptionList ();slist.add (新訂閱("SPY US EQUITY", runmarketdatasubscript ._fields));slist.add (新訂閱("AAPL 150117C00600000股權",runmarketdatasubscript ._fields));slist.add (新訂閱("AMD美國股票",runmarketdatasubscript ._fields));session.subscribe (slist)//內循環通過連續流的消息從B-管道市場數據訂閱//使用Kinesis客戶端來檢索到的寫記錄從API來運動流AmazonKinesisClient kinesisClient=新AmazonKinesisClient (新BasicAWSCredentials (,));字符串kinesisEndpointUrl=“https://kinesis.us -東- 1. - amazonaws.com”;字符串regionName=“us-east-1”;kinesisClient.setEndpoint (kinesisEndpointUrl);//創建PutRecordRegust與字節從API請求(輸出)而且包括序列號PutRecordRequest PutRecordRequest=新PutRecordRequest ();putRecordRequest。setStreamName(" databicks -bpipe");putRecordRequest.setData (ByteBuffer。wrap(output.getBytes()));putRecordRequest。setPartitionKey(" mpt -data- partitionkey ");putRecordRequest。setsequencenumberforordered (sequenceNumberOfPreviousRecord);PutRecordResult PutRecordResult=kinesisClient。putRecord(putRecordRequest);sequenceNumberOfPreviousRecord=putRecordResult.getSequenceNumber ();
從運動流寫入數據到三角洲湖
薇爾運動=spark.readStream.format(“運動”).option(“streamName”、“databricks-bpipe”).option(“地區”、“us-east-1”).option(“initialPosition”、“最新”).load ()val df=運動.withColumn(“mktdata坳(“數據”)。投(“字符串”)).withColumn(“event_ts”,分裂(坳(“mktdata”)、“,”)(0)).withColumn(“股票”,分裂(分裂(坳(“mktdata”)、“,”)(1), " ")(1)).withColumn(“quote_pr”,翻譯(分裂(坳(“mktdata”)、“,”)(2), "$", "")).withColumn(“event_dt坳(“event_ts”)。投(“時間戳”)。投(“日期”)
df.writeStream.partitionBy(“event_dt”).format(“δ”).option(“路徑”、“/ tmp /磚/ bpipe”).option(“checkpointLocation”、“/ tmp /磚/ bpipe_cp”).開始()
轉換和讀取記錄
顯示器(spark.read。格式(“δ”) .load (“/ tmp /磚/ bpipe”))
標記數據源攝取
標記數據(位於圖1的左下角)是高分辨率日內市場數據的總稱,通常來自數據供應商,以CSV、JSON或二進製格式作為批處理源。計時數據的類型包括交易、報價和合同數據,交付的示例是Tick數據曆史服務由湯森路透提供。從這些來源連續將數據輸入Delta Lake的最簡單方法是建立Databricks自動裝卸機從存儲桶讀取數據並將數據重定向到單獨的Delta Lake表。從這裏開始,各種ETL流程可以將每種消息類型整理到精煉的或聚合的Delta表中。自動裝彈機的好處有兩方麵:
- 從Delta Lake繼承的可靠性和性能
- 由於底層使用SQS (AWS)或AQS (Azure)以避免重新列出輸入文件,以及托管檢查點以避免手動選擇最新未讀文件,從而降低了成本。
從Delta Lake到金融服務用例產品化
除了在構建任何數據平台時所麵臨的數據收集挑戰之外,投資管理公司越來越需要解決將人工智能納入產品套件的問題,以及管理功能工程的成本。Beplay体育安卓版本特別是:
- 零售和機構投資公司也需要能夠以經濟有效的方式在數據湖上查詢和運行ETL,並最大限度地減少與豐富和查詢數據湖相關的維護成本.
- 散戶投資者期待在訂閱中提供人工智能支持的產品和見解。最佳解決方案將以這樣的方式托管人工智能基礎設施,用戶可以創建人工智能驅動的應用程序和儀表板,其中將花在設置庫和彈性計算基礎設施上的時間降至最低,並且底層處理可以擴展到每天從事務數據源(客戶事務和引號等)獲得的數十億個數據點。
現在,我們已經提出了將金融數據集登陸雲數據湖的可靠、有效的方法,我們希望解決雲和人工智能產品中金融數據集之間的一些現有差距。
上圖顯示了數據集和筒倉式基礎設施是如何不足以交付投資分析產品。大多數fsi已經采用了右側幾乎所有的AI用例啟用器,但未能最大限度地擴大這些與核心數據集的體積加權重疊。Databricks統一數據分析平台包含了前四個開箱即用的AI用例。Beplay体育安卓版本為了使生產更加具體,我們將展示如何使用新的Databricks開源包tempo大規模地操作時間序列。然後,我們將深入研究以下使用tempo的用例特性創建模板,並展示如何在上麵的維恩圖中獲得兩個世界的最佳效果。
- 零售投資詳細使用基本數據來告知每日波動率預測。
- 市場監測詳細說明總結價格改進和檢測欺騙的過程。
節拍-時間序列包
在金融服務中,時間序列無處不在,我們發現我們的客戶很難大規模地操縱時間序列。beplay体育app下载地址在過去,我們已經概述了一些方法擴展時間序列查詢。現在,Databricks Labs發布了一套簡單的時間序列實用程序,使時間序列處理變得更簡單節奏.這個包包含實用程序來做以下工作:
- AS OF將多達數百萬個不規則時間序列合並在一起
- 通過滾動聚合現有指標來創建功能
- 優化的寫入Delta Lake非常適合臨時時間序列查詢
- 量加權平均價格(VWAP)計算
- 重采樣
- 指數移動平均計算
通過結合tick數據的多功能性、可靠的數據管道和tempo等開源軟件,組織可以以最低的成本和快速的執行周期從各種用例中釋放指數級價值。下一節將介紹資本市場中利用節奏的兩個反複出現的主題:波動預測和市場監督。
波動率預測方法與基本和技術數據
標普全球市場情報提供基本數據可以使用稱為Xpressfeed的機製(本指南前麵介紹過)來攝取。關於這個提要的一些要點是:
- 它涵蓋了數千個基本數據指標
- 它涵蓋了數十萬隻全球上市和非上市股票
- 報告頻率是每天-有一個歸檔日期,可以用於時間點分析
雖然我們不涵蓋對tick ETL的管理過程(聯係Databricks)銷售關於這個用例的更多信息),我們概述了使用tempo庫從標準節拍格式到最終預測對象的處理過程;我們的實現在本博客底部報告的鏈接中。高層細節如下:
- 創建時間點日曆-將最新的基本數據合並到最新的日曆日期,使用提交日期(基本數據點提交日期為交易日)。通常稱為as - of連接,這種操作通常成本很高,並且在高度不平衡的數據集中受到技術瓶頸的影響。Tempo將保證該操作均勻分布,以最大限度地利用雲彈性(及其相關成本)。
- 創建對等組-使用有意義的基本數據項目,如每股收益、股本回報率、浮動百分比(代表股東持股),根據每個指標形成對等組。請注意,這裏需要對數據項值進行旋轉,以執行有意義的特性工程。
- 重新采樣tick數據精確到小時(或所需的任何粒度)。之所以選擇以小時為單位,是因為每日聚合不能提供足夠的粒度來很好地預測波動。
- 預測市場波動在Databricks使用運行時進行機器學習。
- 綜合預測結果根據所評估的證券找出最大/最小波動率公司。
該數據架構值得注意的一個方麵是創建黃金預測表時的最後轉換。特別是,
- 我們已經將ML作為特征工程處理的一部分。這意味著我們應該將CI/CD作為ML治理的一部分。在這裏是一個模板,完成這在完全嚴格。
- 我們選擇強調gpu在預測波動率方麵的重要性。在本博客最後的筆記本示例中,我們選擇使用xgboost和各種報價指標的簡單範圍統計數據作為我們的功能的一部分。通過利用gpu_hist樹方法和完全托管的GPU集群和運行時,我們可以節省2.65倍的成本(和2.27倍的運行時),為數據團隊展示了硬成本的降低和生產力的節省。這些指標是根據美國主要交易所6個月的tick數據獲得的。
最終,在節奏和Databricks運行時機器學習在美國,零售經紀公司可以通過使用人工智能技術統一基本麵和技術分析的儀表板為客戶提供服務。以下是我們同行預測的結果。
使用蜱蟲數據的市場監測方法
市場監管是金融服務生態係統的重要組成部分,旨在減少市場操縱,提高透明度,並對各種資產類別實施基準規則。一些有廣泛監督計劃的政府和私人組織的例子包括納斯達克、FINRA、CFTC和CME集團。隨著散戶投資行業不斷壯大,新投資者和缺乏經驗的投資者(源),特別是在數字貨幣領域,了解如何建立一個基本的監督程序,減少金融欺詐,增加市場波動、風險和最佳執行等領域的透明度是很重要的。在下一節中,我們將展示如何構建基本的價格改進摘要,以及將基本的欺騙實現組合在一起。
價格提高
價格提升指的是經紀人提供給客戶的買入價(在賣單的情況下)或賣出價(在買單的情況下)的提升量。這對一個零售經紀人來說很重要,因為它通常有助於一個經紀人的感知質量,如果它不斷地為客戶節省一組交易的錢。價格改善的基本概念是:
- Maria在上午10點向XYZ股票下了100股的市場訂單,最佳出價/賣出價為10美元/ 11美元
- 經紀人A將訂單發送到交易所,以獲得每股10.95美元的執行價格
- 在這次執行中節省了$0.05 * 100 = $5.00,這代表了一些適度的價格改進
盡管改善很小,但隨著時間的推移,這些節省可以累積到數百筆交易中。一些經紀人在應用程序中顯示這些信息也是為了透明度,並展示通往適當的市場中心或做市商以獲得好價格的能力。
計算價格改進
價格改善確實是一種特殊情況滑動(訂單到達時執行價格與最佳買入價/賣出價之間的變動幅度)。它對數字貨幣的影響與傳統股票一樣大,可以說影響更大,因為數字貨幣的波動性和訂單量波動很大。例如,這裏有一些對金融市場深度和滑坡的洞察。下麵是如何使用tempo計算滑移的基本藍圖(詳細代碼可在附件筆記本中獲得):
- 攝取市場訂單信息(已下的訂單)
- 攝取執行消息
- 使用tempo執行AS OF連接到訂單到達時間
- 使用tempo執行AS OF連接到執行時間
- 衡量執行價格和訂單到達時的買入價/賣出價之間的差異
- 根據公司進行總結,並在SQL分析和/或BI儀表板中提供
從內部係統或OMS(訂單管理係統)獲取訂單簿數據以獲取訂單和執行,通常以JSON或其他平麵文件格式提供。一旦該數據可用,AS OF連接就會按照官方tempo文檔中描述的那樣對一對數據幀進行操作在這裏:
下麵我們將顯示執行連接的代碼。
從tempo.tsdf進口TSDF交易= spark.table(“exchange_trades”)trades_tsdf = TSDF(交易,ts_col =“event_ts”, partition_cols = [“日期”,“股票”])quotes_tsdf = TSDF(“tempo.delta_tick_quotes_6mo”), ts_col =“event_ts”, partition_cols = [“日期”,“股票”])Ex_asof = trades_tsdf。asofJoin(quotes_tsdf, right_prefix = .“asof_ex_time”)orders_tsdf = TSDF(ex_asof。Df, ts_col =“order_arrival_ts”, partition_cols = [“日期”,“股票”])Order_asof = ex_asof。asofJoin(quotes_tsdf, right_prefix = .“asof_ord_time”)
order_asof \.df \.write \.格式(“δ”) \.mode (“覆蓋”) \.saveAsTable (“tempo.silver_trade_slippage”)
一旦這些數據在Delta Lake可用,就可以以各種方式切片,以得到那些有明顯滑移的證券的摘要。請參閱下麵的示例,該示例總結了交易日某段時間內的總滑動量的日誌。
欺騙
欺騙指的是一種市場操縱模式,涉及人為的興趣進入(通過虛假的訂單投放),然後在對麵執行,以利用受原始人為興趣錯誤影響的最佳買入價/賣出價變化。事件的欺騙順序通常還包括取消訂單—下麵我們概述一個簡單的示例。
欺騙是數百種不同的市場操縱技術之一,發生在許多不同的資產類別中。特別是,它一直是大多數股票市場監控計劃的一部分,但由於比特幣和以太幣等數字貨幣需求的增加,它的重要性越來越高。事實上,由於加密貨幣的波動性如此之大,保護客戶免受潛在的欺騙活動,以確保對加密平台(無論是交易所還是DeFi框架)的信任至關重要。Beplay体育安卓版本
樣本模式
檢測欺騙的步驟序列也適用於其他操作模式(例如,提前運行、分層等),因此我們概述了一種簡單的方法來突出一些底層技術。
- 保存訂單放置信息-鍵上的訂單ID和序列號
- 保存所有訂單的取消信息(附帶ORDER ID)
- 記錄訂單到達時的NBBO(下麵數據中的order_rcvd_ts)以及訂單到達前的NBBO,加入訂單和取消(尋找完全取消的訂單),並記錄以下形式的序列:
- 限價下單前幾秒的NBBO變化(對於賣出訂單,最佳報價減少)
- 下單時取消(我們將虛假訂單稱為非真誠訂單)
- 執行對麵的訂單放置上麵
- 同一市場參與者的清洗交易(自我交易)活動(或者作為細微差別,這可以表示同一CRD下的不同mpid)
示例模式捕捉NBBO(引用作為代理)信息使用的速度as連接:
從tempo.tsdf進口TSDForders_and_cncls_tsdf=TSDF (orders_and_cncls ts_col=“prior_order_rcvd_ts”, partition_cols=(“日期”、“股票”))prior_quotes_tsdf=TSDF (prior_quotes ts_col=“event_ts”, partition_cols=(“日期”、“股票”))prior_order_asof=orders_and_cncls_tsdf。asofJoin (prior_quotes_tsdf right_prefix=“asof_prior_order”)prior_order_asof=TSDF (prior_order_asof。df, ts_col=“order_rcvd_ts”, partition_cols=(“日期”、“股票”))order_asof=prior_order_asof。asofJoin (prior_quotes_tsdf right_prefix=“asof_order”)nbbo_deltas=order_asof。df \.withColumn(“nbbo_ask_delta_direction”符號(坳(“asof_prior_order_ASK_PRICE”)-坳(“asof_order_ASK_PRICE”)))\.withColumn(“nbbo_bid_delta_direction”符號(坳(“asof_order_BID_PRICE”)-坳(“asof_prior_order_BID_PRICE”)))\.withColumn(“nbbo_ask_delta”,腹肌(坳(“asof_prior_order_ASK_PRICE”)-坳(“asof_order_ASK_PRICE”)))\.withColumn(“nbbo_bid_delta”,腹肌(坳(“asof_order_BID_PRICE”)-坳(“asof_prior_order_BID_PRICE”)))
下麵,我們將幾個樣本訂單的NBBO向下運動可視化,這驗證了我們在NBBO變化中尋找的模式。
最後,我們避免了一些公司的報告,這些公司的非真誠執行恰好與一些洗賬交易活動相吻合。
結論
在這個藍圖中,我們關注的是將公共數據集導入Delta Lake,以及在Delta Lake對象上生成管道的策略。利用Delta Lake使金融服務機構能夠專注於為客戶提供產品,最終導致資產管理規模的增加,金融欺詐的減少,以及隨著投資世界擴展到越來beplay体育app下载地址越多的散戶投資者而增加的訂閱量。從技術角度來看,以上所有用例都是通過現代數據架構的核心原則,以及新發布的tempo庫的幫助而實現的:
- 支持開源包,並與業界接受的框架集成
- AI用例的基礎設施支持
- 特性創建模板
- 時間序列分析支持
我們已經記錄了這些方法,並在下麵的筆記本鏈接中為一些流行的用例提供了功能創建模板。此外,我們還介紹了tempo及其在這些模板中的應用,作為投資數據平台的基礎。Beplay体育安卓版本
試試下麵的筆記本在Databricks加速你的投資平台Beplay体育安卓版本聯係我們了解更多關於我們如何幫助具有類似用例的客戶的信息。beplay体育app下载地址