बाजार की गतिशीलता में महारत हासिल करना: अल्ट्रा-सटीक टिक इतिहास के साथ लेनदेन लागत विश्लेषण को बदलना - अपाचे स्पार्क के लिए पीसीएपी और अमेज़ॅन एथेना | अमेज़न वेब सेवाएँ

बाजार की गतिशीलता में महारत हासिल करना: अल्ट्रा-सटीक टिक इतिहास के साथ लेनदेन लागत विश्लेषण को बदलना - अपाचे स्पार्क के लिए पीसीएपी और अमेज़ॅन एथेना | अमेज़न वेब सेवाएँ

स्रोत नोड: 3091357

यह पोस्ट एलएसईजी के लो लेटेंसी ग्रुप के प्रमोद नायक, लक्ष्मीकांत मन्नेम और विवेक अग्रवाल के साथ मिलकर लिखी गई है।

लेनदेन लागत विश्लेषण (टीसीए) का उपयोग व्यापारियों, पोर्टफोलियो प्रबंधकों और दलालों द्वारा व्यापार-पूर्व और व्यापार-पश्चात विश्लेषण के लिए व्यापक रूप से किया जाता है, और यह उन्हें लेनदेन लागत और उनकी व्यापारिक रणनीतियों की प्रभावशीलता को मापने और अनुकूलित करने में मदद करता है। इस पोस्ट में, हम विकल्प बिड-आस्क स्प्रेड का विश्लेषण करते हैं एलएसईजी टिक इतिहास - पीसीएपी डेटासेट का उपयोग करना अपाचे स्पार्क के लिए अमेज़न एथेना. हम आपको दिखाते हैं कि डेटा तक कैसे पहुंचें, डेटा पर लागू करने के लिए कस्टम फ़ंक्शन को कैसे परिभाषित करें, डेटासेट को क्वेरी और फ़िल्टर करें, और विश्लेषण के परिणामों की कल्पना करें, यह सब बुनियादी ढांचे की स्थापना या स्पार्क को कॉन्फ़िगर करने के बारे में चिंता किए बिना, यहां तक ​​​​कि बड़े डेटासेट के लिए भी।

पृष्ठभूमि

ऑप्शंस प्राइस रिपोर्टिंग अथॉरिटी (ओपीआरए) एक महत्वपूर्ण प्रतिभूति सूचना प्रोसेसर के रूप में कार्य करता है, जो यूएस ऑप्शंस के लिए अंतिम बिक्री रिपोर्ट, उद्धरण और प्रासंगिक जानकारी एकत्रित, समेकित और प्रसारित करता है। 18 सक्रिय अमेरिकी विकल्प एक्सचेंजों और 1.5 मिलियन से अधिक योग्य अनुबंधों के साथ, ओपीआरए व्यापक बाजार डेटा प्रदान करने में महत्वपूर्ण भूमिका निभाता है।

5 फरवरी, 2024 को, सिक्योरिटीज इंडस्ट्री ऑटोमेशन कॉरपोरेशन (SIAC) OPRA फ़ीड को 48 से 96 मल्टीकास्ट चैनलों में अपग्रेड करने के लिए तैयार है। इस वृद्धि का उद्देश्य अमेरिकी विकल्प बाजार में बढ़ती व्यापारिक गतिविधि और अस्थिरता के जवाब में प्रतीक वितरण और लाइन क्षमता उपयोग को अनुकूलित करना है। एसआईएसी ने सिफारिश की है कि कंपनियां 37.3 जीबीआईटी प्रति सेकंड तक की चरम डेटा दरों के लिए तैयारी करें।

अपग्रेड के बावजूद प्रकाशित डेटा की कुल मात्रा में तुरंत बदलाव नहीं होने के बावजूद, यह ओपीआरए को काफी तेज दर से डेटा प्रसारित करने में सक्षम बनाता है। गतिशील विकल्प बाजार की मांगों को संबोधित करने के लिए यह परिवर्तन महत्वपूर्ण है।

150.4 की तीसरी तिमाही में एक दिन में अधिकतम 3 बिलियन संदेशों और एक ही दिन में 2023 बिलियन संदेशों की क्षमता की आवश्यकता के साथ, ओपीआरए सबसे अधिक मात्रा वाले फ़ीड के रूप में सामने आया है। लेनदेन लागत विश्लेषण, बाजार तरलता निगरानी, ​​ट्रेडिंग रणनीति मूल्यांकन और बाजार अनुसंधान के लिए हर एक संदेश को कैप्चर करना महत्वपूर्ण है।

डेटा के बारे में

एलएसईजी टिक इतिहास - पीसीएपी एक क्लाउड-आधारित रिपॉजिटरी है, जो 30 पीबी से अधिक है, जिसमें अति-उच्च गुणवत्ता वाले वैश्विक बाजार डेटा शामिल है। यह डेटा सावधानीपूर्वक एक्सचेंज डेटा केंद्रों के भीतर सीधे कैप्चर किया जाता है, जो दुनिया भर के प्रमुख प्राथमिक और बैकअप एक्सचेंज डेटा केंद्रों में रणनीतिक रूप से तैनात अनावश्यक कैप्चर प्रक्रियाओं को नियोजित करता है। एलएसईजी की कैप्चर तकनीक दोषरहित डेटा कैप्चर सुनिश्चित करती है और नैनोसेकंड टाइमस्टैम्प परिशुद्धता के लिए जीपीएस टाइम-स्रोत का उपयोग करती है। इसके अतिरिक्त, किसी भी डेटा अंतराल को निर्बाध रूप से भरने के लिए परिष्कृत डेटा आर्बिट्रेज तकनीकों को नियोजित किया जाता है। कैप्चर करने के बाद, डेटा सावधानीपूर्वक प्रसंस्करण और मध्यस्थता से गुजरता है, और फिर इसका उपयोग करके Parquet प्रारूप में सामान्यीकृत किया जाता है एलएसईजी का रियल टाइम अल्ट्रा डायरेक्ट (आरटीयूडी) फ़ीड हैंडलर।

सामान्यीकरण प्रक्रिया, जो विश्लेषण के लिए डेटा तैयार करने का अभिन्न अंग है, प्रति दिन 6 टीबी तक संपीड़ित Parquet फ़ाइलें उत्पन्न करती है। डेटा की भारी मात्रा का श्रेय ओपीआरए की व्यापक प्रकृति को दिया जाता है, जिसमें कई एक्सचेंजों का विस्तार होता है, और विविध विशेषताओं वाले कई विकल्प अनुबंध शामिल होते हैं। बाजार में बढ़ती अस्थिरता और विकल्प एक्सचेंजों पर बाजार निर्माण गतिविधि ओपीआरए पर प्रकाशित डेटा की मात्रा में और योगदान देती है।

टिक हिस्ट्री - पीसीएपी की विशेषताएं कंपनियों को निम्नलिखित सहित विभिन्न विश्लेषण करने में सक्षम बनाती हैं:

  • पूर्व-व्यापार विश्लेषण - संभावित व्यापार प्रभाव का मूल्यांकन करें और ऐतिहासिक डेटा के आधार पर विभिन्न निष्पादन रणनीतियों का पता लगाएं
  • व्यापार पश्चात मूल्यांकन - निष्पादन रणनीतियों के प्रदर्शन का आकलन करने के लिए बेंचमार्क के विरुद्ध वास्तविक निष्पादन लागत को मापें
  • अनुकूलित निष्पादन - बाजार के प्रभाव को कम करने और समग्र व्यापारिक लागत को कम करने के लिए ऐतिहासिक बाजार पैटर्न के आधार पर निष्पादन रणनीतियों को बेहतर बनाएं
  • जोखिम प्रबंधन - स्लिपेज पैटर्न को पहचानें, आउटलेर्स की पहचान करें और व्यापारिक गतिविधियों से जुड़े जोखिमों का सक्रिय रूप से प्रबंधन करें
  • प्रदर्शन एट्रिब्यूशन - पोर्टफोलियो प्रदर्शन का विश्लेषण करते समय व्यापारिक निर्णयों के प्रभाव को निवेश निर्णयों से अलग करें

एलएसईजी टिक हिस्ट्री - पीसीएपी डेटासेट उपलब्ध है AWS डेटा एक्सचेंज और इस पर पहुंचा जा सकता है एडब्ल्यूएस बाज़ार. साथ अमेज़न S3 के लिए AWS डेटा एक्सचेंज, आप सीधे एलएसईजी से पीसीएपी डेटा तक पहुंच सकते हैं अमेज़न सरल भंडारण सेवा (अमेज़ॅन एस3) बकेट, कंपनियों के लिए डेटा की अपनी प्रति संग्रहीत करने की आवश्यकता को समाप्त कर देता है। यह दृष्टिकोण डेटा प्रबंधन और भंडारण को सुव्यवस्थित करता है, जिससे ग्राहकों को उपयोग, एकीकरण और आसानी के साथ उच्च गुणवत्ता वाले पीसीएपी या सामान्यीकृत डेटा तक तत्काल पहुंच प्रदान होती है। पर्याप्त डेटा भंडारण बचत.

अपाचे स्पार्क के लिए एथेना

विश्लेषणात्मक प्रयासों के लिए, अपाचे स्पार्क के लिए एथेना एथेना कंसोल या एथेना एपीआई के माध्यम से सुलभ एक सरलीकृत नोटबुक अनुभव प्रदान करता है, जो आपको इंटरैक्टिव अपाचे स्पार्क एप्लिकेशन बनाने की अनुमति देता है। अनुकूलित स्पार्क रनटाइम के साथ, एथेना एक सेकंड से भी कम समय में स्पार्क इंजनों की संख्या को गतिशील रूप से स्केल करके डेटा के पेटाबाइट के विश्लेषण में मदद करता है। इसके अलावा, सामान्य पायथन लाइब्रेरी जैसे कि पांडा और न्यूमपी को मूल रूप से एकीकृत किया गया है, जिससे जटिल एप्लिकेशन लॉजिक के निर्माण की अनुमति मिलती है। लचीलापन नोटबुक में उपयोग के लिए कस्टम लाइब्रेरी के आयात तक विस्तारित है। स्पार्क के लिए एथेना अधिकांश ओपन-डेटा प्रारूपों को समायोजित करता है और इसके साथ सहजता से एकीकृत होता है एडब्ल्यूएस गोंद डेटा कैटलॉग।

डेटासेट

इस विश्लेषण के लिए, हमने 17 मई, 2023 से एलएसईजी टिक हिस्ट्री - पीसीएपी ओपीआरए डेटासेट का उपयोग किया। इस डेटासेट में निम्नलिखित घटक शामिल हैं:

  • सर्वोत्तम बोली और प्रस्ताव (बीबीओ) - किसी दिए गए एक्सचेंज में सुरक्षा के लिए उच्चतम बोली और सबसे कम मांग की रिपोर्ट करता है
  • राष्ट्रीय सर्वोत्तम बोली और प्रस्ताव (एनबीबीओ) - सभी एक्सचेंजों में सुरक्षा के लिए उच्चतम बोली और सबसे कम मांग की रिपोर्ट करता है
  • ट्रेडों - सभी एक्सचेंजों में पूर्ण किए गए ट्रेडों का रिकॉर्ड

डेटासेट में निम्नलिखित डेटा वॉल्यूम शामिल हैं:

  • ट्रेडों - 160 एमबी लगभग 60 संपीड़ित Parquet फ़ाइलों में वितरित
  • BBO - 2.4 टीबी लगभग 300 संपीड़ित लकड़ी की फाइलों में वितरित
  • एनबीबीओ - 2.8 टीबी लगभग 200 संपीड़ित लकड़ी की फाइलों में वितरित

विश्लेषण सिंहावलोकन

लेनदेन लागत विश्लेषण (टीसीए) के लिए ओपीआरए टिक इतिहास डेटा का विश्लेषण करने में एक विशिष्ट व्यापार घटना के आसपास बाजार उद्धरण और व्यापार की जांच करना शामिल है। हम इस अध्ययन के भाग के रूप में निम्नलिखित मैट्रिक्स का उपयोग करते हैं:

  • उद्धृत प्रसार (क्यूएस) - बीबीओ पूछताछ और बीबीओ बोली के बीच अंतर के रूप में गणना की गई
  • प्रभावी प्रसार (ईएस) - व्यापार मूल्य और बीबीओ के मध्य बिंदु के बीच अंतर के रूप में गणना की जाती है (बीबीओ बोली + (बीबीओ आस्क - बीबीओ बोली)/2)
  • प्रभावी/उद्धृत प्रसार (ईक्यूएफ) - (ईएस/क्यूएस) * 100 के रूप में गणना की गई

हम इन स्प्रेड की गणना व्यापार से पहले और इसके अतिरिक्त व्यापार के बाद चार अंतरालों पर करते हैं (व्यापार के ठीक बाद, 1 सेकंड, 10 सेकंड और व्यापार के 60 सेकंड बाद)।

अपाचे स्पार्क के लिए एथेना कॉन्फ़िगर करें

अपाचे स्पार्क के लिए एथेना को कॉन्फ़िगर करने के लिए, निम्नलिखित चरणों को पूरा करें:

  1. एथेना कंसोल पर, नीचे शुरू हो, चुनते हैं PySpark और Spark SQL का उपयोग करके अपने डेटा का विश्लेषण करें.
  2. यदि आप पहली बार एथेना स्पार्क का उपयोग कर रहे हैं, तो चुनें कार्यसमूह बनाएं.
  3. के लिए कार्यसमूह का नाम¸ कार्यसमूह के लिए एक नाम दर्ज करें, जैसे tca-analysis.
  4. में विश्लेषिकी इंजन अनुभाग चुनें अपाचे स्पार्क.
  5. में अतिरिक्त विन्यास अनुभाग, आप चुन सकते हैं डिफ़ॉल्ट का उपयोग करें या एक कस्टम प्रदान करें AWS पहचान और अभिगम प्रबंधन (IAM) भूमिका और गणना परिणामों के लिए Amazon S3 स्थान।
  6. चुनें कार्यसमूह बनाएं.
  7. कार्यसमूह बनाने के बाद, पर जाएँ नोटबुक टैब और चुनें नोटबुक बनाएं.
  8. अपनी नोटबुक के लिए एक नाम दर्ज करें, जैसे tca-analysis-with-tick-history.
  9. चुनें बनाएं अपनी नोटबुक बनाने के लिए.

अपनी नोटबुक लॉन्च करें

यदि आपने पहले ही स्पार्क कार्यसमूह बना लिया है, तो चयन करें नोटबुक संपादक लॉन्च करें के अंतर्गत शुरू हो.


आपकी नोटबुक बन जाने के बाद, आपको इंटरैक्टिव नोटबुक संपादक पर पुनः निर्देशित किया जाएगा।


अब हम निम्नलिखित कोड को अपनी नोटबुक में जोड़ और चला सकते हैं।

एक विश्लेषण बनाएं

विश्लेषण बनाने के लिए निम्नलिखित चरणों को पूरा करें:

  • सामान्य पुस्तकालय आयात करें:
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go

  • बीबीओ, एनबीबीओ और ट्रेडों के लिए हमारे डेटा फ़्रेम बनाएं:
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|
+---------------------+---------------------+---------------------+-------------------+-----------------+

हम व्यापार उत्पाद (टीपी), व्यापार मूल्य (टीपीआर), और व्यापार समय (टीटी) के लिए आगे बढ़ने वाली हाइलाइट की गई व्यापार जानकारी का उपयोग करते हैं।

  • यहां हम अपने विश्लेषण के लिए कई सहायक फ़ंक्शन बनाते हैं
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

  • निम्नलिखित फ़ंक्शन में, हम डेटासेट बनाते हैं जिसमें व्यापार से पहले और बाद के सभी उद्धरण शामिल होते हैं। एथेना स्पार्क स्वचालित रूप से निर्धारित करता है कि हमारे डेटासेट को संसाधित करने के लिए कितने डीपीयू लॉन्च करने हैं।
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

  • आइए अब हमारे चयनित व्यापार की जानकारी के साथ टीसीए विश्लेषण फ़ंक्शन को कॉल करें:
tp = "QQQ 230518C00329000"
tpr = 1.16
tt = 1684338579104713924
c = get_tca_analysis_via_df_single_query(tp, tpr, tt)

विश्लेषण परिणामों की कल्पना करें

आइए अब वे डेटा फ़्रेम बनाएं जिनका उपयोग हम अपने विज़ुअलाइज़ेशन के लिए करते हैं। प्रत्येक डेटा फ़्रेम में प्रत्येक डेटा फ़ीड (बीबीओ, एनबीबीओ) के लिए पांच समय अंतरालों में से एक के लिए उद्धरण शामिल हैं:

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)]

निम्नलिखित अनुभागों में, हम विभिन्न विज़ुअलाइज़ेशन बनाने के लिए उदाहरण कोड प्रदान करते हैं।

व्यापार से पहले क्यूएस और एनबीबीओ प्लॉट करें

व्यापार से पहले उद्धृत स्प्रेड और एनबीबीओ को प्लॉट करने के लिए निम्नलिखित कोड का उपयोग करें:

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

प्रत्येक बाज़ार के लिए क्यूएस और व्यापार के बाद एनबीबीओ प्लॉट करें

व्यापार के तुरंत बाद प्रत्येक बाजार और एनबीबीओ के लिए उद्धृत प्रसार को प्लॉट करने के लिए निम्नलिखित कोड का उपयोग करें:

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

प्रत्येक समय अंतराल और बीबीओ के लिए प्रत्येक बाजार के लिए क्यूएस प्लॉट करें

बीबीओ के लिए प्रत्येक समय अंतराल और प्रत्येक बाजार के लिए उद्धृत प्रसार को प्लॉट करने के लिए निम्नलिखित कोड का उपयोग करें:

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 के लिए बाज़ार

बीबीओ के लिए प्रत्येक समय अंतराल और बाजार के लिए प्रभावी प्रसार की साजिश रचने के लिए निम्नलिखित कोड का उपयोग करें:

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 के लिए बाज़ार बनाएं

बीबीओ के लिए प्रत्येक समय अंतराल और बाजार के लिए प्रभावी/उद्धृत प्रसार की साजिश रचने के लिए निम्नलिखित कोड का उपयोग करें:

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

एथेना स्पार्क गणना प्रदर्शन

जब आप एक कोड ब्लॉक चलाते हैं, तो एथेना स्पार्क स्वचालित रूप से निर्धारित करता है कि गणना को पूरा करने के लिए कितने डीपीयू की आवश्यकता है। अंतिम कोड ब्लॉक में, जहां हम कॉल करते हैं tca_analysis फ़ंक्शन, हम वास्तव में स्पार्क को डेटा संसाधित करने का निर्देश दे रहे हैं, और फिर हम परिणामी स्पार्क डेटाफ़्रेम को पांडा डेटाफ़्रेम में परिवर्तित करते हैं। यह विश्लेषण का सबसे गहन प्रसंस्करण हिस्सा है, और जब एथेना स्पार्क इस ब्लॉक को चलाता है, तो यह प्रगति बार, बीता हुआ समय और कितने डीपीयू वर्तमान में डेटा संसाधित कर रहे हैं, दिखाता है। उदाहरण के लिए, निम्नलिखित गणना में, एथेना स्पार्क 18 डीपीयू का उपयोग कर रहा है।

जब आप अपने एथेना स्पार्क नोटबुक को कॉन्फ़िगर करते हैं, तो आपके पास डीपीयू की अधिकतम संख्या निर्धारित करने का विकल्प होता है जिसका वह उपयोग कर सकता है। डिफ़ॉल्ट 20 डीपीयू है, लेकिन हमने 10, 20 और 40 डीपीयू के साथ इस गणना का परीक्षण किया ताकि यह प्रदर्शित किया जा सके कि एथेना स्पार्क हमारे विश्लेषण को चलाने के लिए स्वचालित रूप से कैसे स्केल करता है। हमने देखा कि एथेना स्पार्क रैखिक रूप से स्केल करता है, जब नोटबुक को अधिकतम 15 डीपीयू के साथ कॉन्फ़िगर किया गया था तो 21 मिनट और 10 सेकंड, जब नोटबुक को 8 डीपीयू के साथ कॉन्फ़िगर किया गया था तो 23 मिनट और 20 सेकंड और जब नोटबुक को कॉन्फ़िगर किया गया था तो 4 मिनट और 44 सेकंड का समय लगा था। 40 डीपीयू के साथ कॉन्फ़िगर किया गया। क्योंकि एथेना स्पार्क प्रति सेकंड ग्रैन्युलैरिटी पर डीपीयू उपयोग के आधार पर शुल्क लेता है, इन गणनाओं की लागत समान है, लेकिन यदि आप उच्च अधिकतम डीपीयू मान सेट करते हैं, तो एथेना स्पार्क विश्लेषण के परिणाम को बहुत तेजी से वापस कर सकता है। एथेना स्पार्क मूल्य निर्धारण के बारे में अधिक जानकारी के लिए कृपया क्लिक करें यहाँ उत्पन्न करें.

निष्कर्ष

इस पोस्ट में, हमने दिखाया कि आप एथेना स्पार्क का उपयोग करके लेनदेन लागत विश्लेषण करने के लिए एलएसईजी के टिक हिस्ट्री-पीसीएपी से उच्च-निष्ठा ओपीआरए डेटा का उपयोग कैसे कर सकते हैं। समयबद्ध तरीके से ओपीआरए डेटा की उपलब्धता, अमेज़ॅन एस 3 के लिए एडब्ल्यूएस डेटा एक्सचेंज की पहुंच नवाचारों के साथ पूरक, महत्वपूर्ण व्यापारिक निर्णयों के लिए कार्रवाई योग्य अंतर्दृष्टि बनाने की चाहत रखने वाली कंपनियों के लिए विश्लेषण में लगने वाले समय को रणनीतिक रूप से कम कर देती है। ओपीआरए हर दिन लगभग 7 टीबी सामान्यीकृत परक्वेट डेटा उत्पन्न करता है, और ओपीआरए डेटा के आधार पर विश्लेषण प्रदान करने के लिए बुनियादी ढांचे का प्रबंधन करना चुनौतीपूर्ण है।

टिक हिस्ट्री के लिए बड़े पैमाने पर डेटा प्रोसेसिंग को संभालने में एथेना की स्केलेबिलिटी - ओपीआरए डेटा के लिए पीसीएपी इसे एडब्ल्यूएस में तेज और स्केलेबल एनालिटिक्स समाधान चाहने वाले संगठनों के लिए एक आकर्षक विकल्प बनाती है। यह पोस्ट एडब्ल्यूएस पारिस्थितिकी तंत्र और टिक हिस्ट्री-पीसीएपी डेटा के बीच सहज बातचीत को दिखाती है और कैसे वित्तीय संस्थान महत्वपूर्ण व्यापार और निवेश रणनीतियों के लिए डेटा-संचालित निर्णय लेने के लिए इस तालमेल का लाभ उठा सकते हैं।


लेखक के बारे में

प्रमोद नायक एलएसईजी में लो लेटेंसी ग्रुप के उत्पाद प्रबंधन के निदेशक हैं। प्रमोद के पास वित्तीय प्रौद्योगिकी उद्योग में सॉफ्टवेयर विकास, एनालिटिक्स और डेटा प्रबंधन पर ध्यान केंद्रित करने का 10 वर्षों से अधिक का अनुभव है। प्रमोद एक पूर्व सॉफ्टवेयर इंजीनियर हैं और बाजार डेटा और मात्रात्मक व्यापार के शौकीन हैं।

लक्ष्मीकांत मन्नम एलएसईजी के लो लेटेंसी ग्रुप में उत्पाद प्रबंधक हैं। वह कम-विलंबता बाज़ार डेटा उद्योग के लिए डेटा और प्लेटफ़ॉर्म उत्पादों पर ध्यान केंद्रित करते हैं। लक्ष्मीकांत ग्राहकों को उनकी बाज़ार डेटा आवश्यकताओं के लिए सबसे इष्टतम समाधान बनाने में मदद करता है।

विवेक अग्रवाल एलएसईजी के लो लेटेंसी ग्रुप में एक वरिष्ठ डेटा इंजीनियर हैं। विवेक कैप्चर किए गए बाज़ार डेटा फ़ीड और संदर्भ डेटा फ़ीड के प्रसंस्करण और वितरण के लिए डेटा पाइपलाइनों के विकास और रखरखाव पर काम करता है।

अल्केत मेमुशाज AWS में वित्तीय सेवा बाज़ार विकास टीम में एक प्रमुख वास्तुकार हैं। एल्केट तकनीकी रणनीति के लिए जिम्मेदार है, यहां तक ​​कि सबसे अधिक मांग वाले पूंजी बाजार वर्कलोड को एडब्ल्यूएस क्लाउड पर तैनात करने के लिए भागीदारों और ग्राहकों के साथ काम करता है।

समय टिकट:

से अधिक एडब्ल्यूएस बिग डेटा

एलेक्सा स्मार्ट प्रॉपर्टीज अमेज़ॅन क्विकसाइट एंबेडेड के साथ आतिथ्य, वरिष्ठ जीवन और स्वास्थ्य देखभाल संपत्तियों के लिए मूल्य बनाती है

स्रोत नोड: 2593331
समय टिकट: अप्रैल 18, 2023

अमेज़ॅन रेडशिफ्ट पार्टनर एकीकरण का उपयोग करके थॉटस्पॉट के साथ ऑनबोर्डिंग और निर्बाध एकीकरण में तेजी लाएं | अमेज़न वेब सेवाएँ

स्रोत नोड: 2756605
समय टिकट: जून 21, 2023