4 पॉइंट द्वारा GN⁺ 2023-07-01 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • NYSE और NASDAQ में सूचीबद्ध 5,500 से अधिक stocks को real time में मॉनिटर करते हुए automated trading करने वाला retail trading bot, Go भाषा में बनाया गया एक personal project
  • शुरुआत में यह तेज़ी से नुकसान करने के स्तर पर था, लेकिन वर्षों के trial and error के बाद यह break-even स्तर तक पहुँचा और कभी-कभी मुनाफ़ा कमाने के चरण तक विकसित हुआ
  • यह तीन मुख्य components से बना है: data provider, Go application, और broker; और market open/close के समय प्रति सेकंड 60,000 से अधिक events को in-memory प्रोसेस करता है
  • random buying के ज़रिए system testing, tick bar आधारित self-made candlestick generation, और in-memory migration जैसी field lessons इसकी प्रमुख बातें हैं
  • यह finance, programming, और data analysis के संगम पर personal trading platform बनाने की वास्तविक जटिलता और संभावनाओं को दिखाने वाला उदाहरण है

प्रोजेक्ट की पृष्ठभूमि और प्रेरणा

  • विचार की शुरुआत पूरे stock market में लगभग 500 short-term trades को अपने आप execute/manage करके, हर trade से थोड़ा-थोड़ा profit लेने वाली trend-following approach से हुई
  • manual trading की सीमाओं के कारण automation शुरू किया गया
    • किसी एक stock में पूरी पूँजी लगाना बेहद जोखिम भरा था, लेकिन दर्जनों short-term bets को एक साथ मॉनिटर करना इंसानी क्षमता से बाहर था
    • तेज़ entry/exit सिर्फ़ high-liquidity stocks में संभव थी, और fast execution के लिए कम quantity में खरीदना ज़रूरी था
  • position management भी एक बड़ी चुनौती थी; 25 से अधिक simultaneous bets में entry/exit timing को संभालना बहुत जटिल था
  • पूँजी का आकार बढ़ने पर bets की संख्या भी बढ़ानी पड़ती थी, यानी scalability problem मौजूद थी
  • spread, fees, slippage, API charges, tax आदि trading costs को तेज़ी से गणना करके trade की viability तय करनी पड़ती थी

solution architecture

  • NYSE और NASDAQ के 5,500 से अधिक stocks को real time में मॉनिटर करके तेज़ trading decisions लेने वाला automated tool, कई वर्षों में विकसित किया गया
  • Linux environment वाले high-performance gaming system पर चलता है: 16-core, 128GB RAM, 8TB NVMe storage, 1Gbps internet
  • तीन मुख्य components

    • Data Provider (Massive.com): पूरे market के historical और real-time data को कवर करता है; developer-friendly और intuitive API/documentation देता है। बिना artificial restrictions के सभी market data तक पहुँच वाला सरल pricing model
    • Go application: data feed को collect/interpret करता है, calculated trading decisions लेता है, और buy/sell orders को broker API पर भेजने वाला core engine
    • Broker (Interactive Brokers): simple API देकर order execution संभालता है
  • Go भाषा चुनने का कारण

    • hedge fund industry भले C++ और Python पर निर्भर हो, लेकिन वर्षों से Go इस्तेमाल करने के कारण इसे चुना गया, क्योंकि यह data stream processing और API integration के लिए बेहद उपयुक्त साबित हुई

Go application की मुख्य क्षमताएँ

  • Data Ingestion Loop

    • Massive.com के ज़रिए 5,500 से अधिक stocks का real-time data लगातार collect किया जाता है
    • शुरुआत में data को database में store करने की कोशिश की गई, लेकिन market open/close पर प्रति सेकंड 60,000 से अधिक events संभालना संभव नहीं था, इसलिए पूरी तरह in-memory approach अपनाई गई
  • Build Our View Of The Stock Market

    • collected data से पूरे market का real-time in-memory view बनाया जाता है, जिसमें price, spread, trading activity आदि ट्रैक होते हैं
    • इससे mainstream news से पहले मौके पकड़कर trade करना संभव होता है
    • pre-market, regular market, after-hours trading activity तक पहुँच मिलती है
  • BUY Signal Loop

    • मौका दिखते ही broker API को buy order request भेजी जाती है
    • यह कोई simple trigger नहीं है; इसमें spread-based profit estimate, ज़रूरी shares की संख्या तय करना, fees/tax शामिल करना जैसी pre-calculations होती हैं
    • price changes, partial fills, order cancellation जैसी परिस्थितियों की logic भी शामिल है
  • Position Tracking System

    • held positions को लगातार मॉनिटर करने वाला loop, जो position table और current price की real-time तुलना करके P&L ट्रैक करता है
    • GUI के ज़रिए trade trigger का कारण, current status, और sell timing देखा जा सकता है
    • BUY/SELL logic को refine करने में इसकी अहम भूमिका है
  • SELL Signal Loop

    • अच्छा profit या ज़्यादा नुकसान detect होने पर broker API के ज़रिए sell order execute किया जाता है
    • इसमें तेज़ी से चलने वाले stocks के price updates और partial fills handling जैसी complex logic शामिल है

web interface और screenshots

  • built-in web interface के ज़रिए सभी data structures की browsing, data visualization, trade trigger के कारण और current status देखे जा सकते हैं
  • 5,500 से अधिक tickers की price/spread आदि दिखाने वाली whole-market overview screen
  • individual symbol page (जैसे Tesla TSLA) पर tick bars और related info दिखाया जाता है
  • win/loss ratio और current open positions दिखाने वाला interface (example session में लगभग -$900 loss दर्ज)
  • real-time trades की metadata और charts दिखाने वाली screen, जहाँ buy points को orange line से दिखाया गया
  • real-time events (buy/sell orders) रिकॉर्ड करने वाली console log screen

strategy development और backtesting

  • Go application, strategy, और backtesting को तीन अलग core elements माना गया
  • ज़्यादातर चर्चा strategy (mean reversion, trend following, linear regression आदि) और backtesting पर केंद्रित रहती है, लेकिन real-time intraday trading में strategy implementation की practical details और logistics को अक्सर नज़रअंदाज़ किया जाता है
  • Massive.com के व्यापक historical trade/quote data का उपयोग करके Python में strategy exploration और backtesting किया गया (इसीलिए 8TB NVMe storage काम आया)
  • backtesting को "rear-view mirror देखकर आगे गाड़ी चलाने" जैसा कहा गया है, फिर भी spread, tax, fees, entry/exit points पर निर्णय लेने के लिए यह उपयोगी validation tool है
  • strategy development और backtesting से मिले insights को BUY Signal Loop की logic में बदला गया

code examples

  • high-level pseudocode और actual Go code samples शामिल हैं (असल app लगभग 7,000 lines का है)
  • मुख्य data structures: TrackedSymbols (पूरे symbols का map, trading enabled flag, global lock), Symbol (raw trade/quote data, Aggregate, Position आदि), TradeEvent, QuoteEvent, Aggregate, Position
  • main loop structure
    • websocket connection के ज़रिए trade/quote data collect करना और events parse करना
    • symbol map में store करने के बाद trade+quote data को Aggregate में merge करना
    • Go channels के ज़रिए buy/sell logic को signals भेजना
    • HTTP server से all symbols, positions, और custom watchlist query करने की सुविधा देना

मुख्य सीख (Lessons Learned)

  • abstraction को समझना

    • NYSE और NASDAQ कोई single system नहीं, बल्कि 19 से अधिक exchanges से बना एक बड़ा distributed system हैं
    • candlestick data, raw trade (tick) data से बना एक बहुत बड़ा abstraction है; इसे गहराई से समझना ज़रूरी है
    • pre-market, regular market, after-hours जैसे market sessions में अलग-अलग rules लागू होते हैं
  • order management

    • सिर्फ़ buy/sell orders भेजना काफ़ी नहीं; pre-position sizing, fast trading capability, 25+ positions की simultaneous management, tax/fee calculation, slippage management, order status monitoring—ये सब successful trading में योगदान देते हैं
  • edge cases

    • order execution, tracking, modification, cancellation, partial fills, market halt आदि जैसे अनेक edge cases हैं; इन्हें miss करने पर financial loss हो सकता है
    • real money की जगह paper trading (simulation) से testing करना अनिवार्य है
    • pre-market में 40% उछले stock को top पर खरीदने के बाद तेज़ गिरावट आई, और sell order adjustment fail होने से कुछ ही मिनटों में 40% loss हुआ। pre-market और after-hours के नियम regular market से अलग होने के कारण extreme volatility बहुत तेज़ी से आती है
  • random buying का उपयोग

    • कोई secret strategy ढूँढने से ज़्यादा महत्वपूर्ण है system के core functions की testing
    • अगर 1 हफ़्ते तक रोज़ 1,000 random stocks खरीदे जाएँ, तो buy/sell logic, partial fill management, cancellation logic, और position tracking system को प्रभावी ढंग से validate किया जा सकता है
    • paper trading account में random buying को test process का हिस्सा बनाना, system के कई पहलुओं को एक साथ verify करने का efficient तरीका है
  • tick bars vs time bars

    • broker द्वारा दिए गए candlestick bars fixed timeframe (जैसे 30 seconds) को कवर करते हैं, लेकिन market में तेज़ हलचल के समय उसी समय में 100 trades और हज़ारों trades का mix हो सकता है
    • raw tick/quote data से number-of-trades आधारित custom bars बनाए गए, जो market open/close जैसे high-activity phases में बहुत बेहतर resolution देते हैं, और spread जैसी custom metrics जोड़ने की सुविधा भी देते हैं
  • in-memory migration

    • शुरुआती database-based तरीका market open/close पर आने वाले activity spikes को नहीं संभाल पाया
    • mutex lock लगे बड़े map का उपयोग करते हुए पूरी तरह in-memory approach अपनाई गई, जिससे scalability issue हल हुआ
    • सारे data वाले structs को compressed gob files में dump करके store किया जाता है और restart पर दोबारा load किया जा सकता है। यह data एक दिन में 40GB से अधिक तक बढ़ जाता है, और इतने बड़े gob dumps को support करने के लिए Go build patch की ज़रूरत पड़ी
    • power outage के कारण live state में पूरा state data खोने के बाद UPS लगाना अनिवार्य हो गया
  • जटिलता और अकेलापन

    • यह project उम्मीद से कहीं ज़्यादा challenging और time-consuming निकला; एक छोटा hobby project धीरे-धीरे गंभीर obsession में बदल गया
    • क्योंकि अंतिम लक्ष्य account balance बढ़ाना ही है, यह सफ़र अकेला महसूस हो सकता है और इसमें तीव्र emotional rollercoaster शामिल है
  • Go और Python का मिश्रित उपयोग

    • trading system Go में लिखा गया, जबकि data exploration के लिए Python की विशाल data science libraries का उपयोग किया गया—यानी hybrid approach
  • personal PC का उपयोग

    • modern desktop PCs, पर्याप्त optimization के बाद, पूरे stock market की real-time monitoring संभालने लायक शक्तिशाली हैं
  • ChatGPT का उपयोग

    • पहले समस्या का हल न जानने पर search और reading पर निर्भर रहना पड़ता था; अब ChatGPT को समस्या समझाकर समाधान पूछना और code generation तक कराना संभव हुआ, जिससे productivity 3x बढ़ने का अनुभव हुआ

market events का अनुभव

  • meme stock घटनाएँ, बड़े IPO events, market boom/crash, Fed news और interest rate hikes जैसे विभिन्न market anomalies को अपने system से detect करके news से पहले देखना संभव हुआ
  • market events को अपनी आँखों के सामने unfold होते देखना, मानो front-row seat पर बैठकर देखने जैसा अनुभव है

1 टिप्पणियां

 
GN⁺ 2023-07-01
Hacker News टिप्पणियाँ
  • मैंने कुछ समय HFT में काम किया था, और यह पूरा क्षेत्र वाकई बहुत दिलचस्प था; यह देखकर अच्छा लगा कि मूल लेखक को भी इसमें वैसी ही दिलचस्पी मिली
    प्लेटफ़ॉर्म खुद चर्चा में अक्सर इसलिए छूट जाता है, क्योंकि ट्रेडिंग ऐसा क्षेत्र है जहाँ उन्नत तकनीक, जटिलता, कड़ा नियमन, और बेहद तीव्र प्रतिस्पर्धा एक साथ मिलते हैं
    order entry system, risk management system, और position tracking system बनाना अपने आप में बड़ी उपलब्धि है, लेकिन ट्रेडिंग फर्म के नज़रिए से यह लगभग पहले से चुकाई जाने वाली entry cost जैसा है
    इसलिए लोग strategy की बात करते हैं। बुनियादी प्लेटफ़ॉर्म तो सबके पास है; अब सवाल यह है कि उससे पैसा कैसे कमाया जाए
    और ऊपर से, मार्केट के प्रतिभागी एक ही खेल भी नहीं खेल रहे होते। HFT में कुछ सेकंड की alpha के लिए FPGA पर nanosecond घटाने और New Jersey के wireless network में microsecond बचाने की दौड़ थी, लेकिन बैंक Carteret के मौसम से ज़्यादा चुनाव और geopolitics की चिंता करते हैं। बारिश हो जाए तो उस दिन microwave network काम नहीं करता
    बीच में ऐसी अनगिनत strategies भी हैं जो कुछ घंटों से लेकर कुछ हफ्तों तक टिकने वाली alpha को निशाना बनाती हैं, इसलिए public forum में एक ही भाषा में बात करना भी मुश्किल हो जाता है। फिर भी यह एक मज़ेदार दुनिया है, जिसकी कभी-कभी याद आती है

    • प्लेटफ़ॉर्म सिर्फ entry cost नहीं है; उसे बनाना उल्टा ज़्यादा सीधा हिस्सा है। latency के सबसे आगे वाले मोर्चे पर भी ज़्यादातर बात budget की सीमा तक धक्का देने की होती है, पूरी तरह कुछ नया खोजने की नहीं
      वहीं strategy वह क्षेत्र है जहाँ discovery की ज़रूरत होती है। कुछ ऐसी strategies हैं जो सबको पता हैं और अभी भी profitable हैं, लेकिन आम तौर पर वे सबसे बड़ी कंपनियों के पास चली गई हैं, और बाकी सब खोज की प्रक्रिया है। कुछ strategies केवल बहुत छोटे market regime में ही मुनाफ़ा देती हैं
      मुझे भी कभी-कभी इसकी याद आती है, लेकिन अब यह इतना ज़्यादा consolidate हो चुका है कि ज़्यादातर यह बड़ी कंपनियों की दुनिया बन गया है
    • सच कहूँ तो यह crypto से भी ज़्यादा निरर्थक लगता है
    • मेरे पास सिर्फ एक sample है, लेकिन ट्रेडिंग फर्म में 2 साल के contract पर काम करके लगा कि बिज़नेस चलाना सिर्फ technical capability की बात नहीं था
    • मैं इससे सचमुच 100% सहमत हूँ। हाथ लगने वाली लगभग हर किताब पढ़ ली, लेकिन किसी ने भी platform की बात नहीं की, और यह नज़रिया बहुत समझ में आता है
      लगता है कि ऐसी ज़्यादातर चीज़ें हर कंपनी के भीतर siloed रहती हैं और बाहर चर्चा में नहीं आतीं
      HFT बिल्कुल अलग खेल खेल रहा है। मैंने exchange architecture और असली cabling layout के बारे में पढ़ा है; मैं SIP से data लेता हूँ, जबकि HFT सीधे exchange से जुड़ता है [1]
      मैं सेकंड के स्तर पर ट्रेड करता हूँ, और HFT जैसा आपने कहा microsecond के स्तर पर ट्रेड करता है, इसलिए तुलना ही नहीं बनती। कुछ मायनों में यह अच्छा भी है कि मैं उनसे सीधे प्रतिस्पर्धा नहीं कर रहा। या शायद प्रतिस्पर्धा में हूँ, लेकिन फिर भी थोड़ा पैसा कमा सकता हूँ
      [1] https://www.researchgate.net/figure/Latencies-in-the-Electro...
    • मैं mid-frequency trading की तरफ हूँ। कई market conditions की गणना करता हूँ और ज़्यादा से ज़्यादा प्रति मिनट कुछ orders भेजता हूँ। HFT की दुनिया को थोड़ा और समझना चाहता हूँ
      मूल रूप से यह जानना चाहता हूँ कि क्या यह mid-frequency trading को और तेज़ बनाने जैसा है, या फिर order queue में प्राथमिकता पाने जैसा कोई ठोस फ़ायदा भी होता है
  • इस प्रोजेक्ट के बारे में सवाल हों तो मैं जवाब दे सकता हूँ। यह side project के रूप में शुरू हुआ था और फिर मैं इसमें पूरी तरह उलझ गया
    सिस्टम में खुद बहुत ज़्यादा गुप्त चीज़ें नहीं हैं; असली बात यह है कि आपके पास ऐसी मजबूत platform हो जिसमें strategies plug की जा सकें
    शायद मैं इसे open source भी कर दूँ, लेकिन उससे पहले इसमें डाले गए तमाम hacks को साफ़-सुथरा करना होगा

    • यह आपको दिलचस्प लग सकता है: https://www.techtrader.ai/#wall
      Tech Trader को एक पूरी तरह autonomous trading system के रूप में बताया गया है, जो 10 साल से अधिक समय से बिना मानवीय हस्तक्षेप या updates के real trading में चल रहा है
      कहा गया है कि पारंपरिक algorithmic systems से इसका फ़र्क यह है कि यह quantitative, statistical arbitrage, या high-frequency तरीका नहीं अपनाता, बल्कि इंसान जिस तरह stocks को देखते हैं उस तरह देखता है, लेकिन मशीन की कठोर अनुशासन और असीम एकाग्रता का उपयोग करता है
      दिसंबर 2012 में लॉन्च होने के बाद से यह वास्तविक पूंजी के साथ पूरी तरह automated trading कर रहा है, और इसे बनाने वाला pftq नाम का game handle इस्तेमाल करने वाला एक self-taught developer बताया गया है
    • अच्छा लेख था। मैं भी Go में ऐसा ही एक प्रोजेक्ट कर रहा हूँ, लेकिन real-time ticks की बजाय सिर्फ मिनट-स्तर के candlestick data का इस्तेमाल करता हूँ
      जानना चाहता हूँ कि क्या आप अलग-अलग strategies plug करने वाले अपने approach को साझा कर सकते हैं। plugin-style strategy system कई layers में फैल सकता है, इसलिए जल्दी जटिल हो जाता है
      यह भी जानना चाहता हूँ कि backtesting में क्या आप हर bid/ask और tick data को store करके replay करते हैं, या सिर्फ historical aggregated data का उपयोग करते हैं
    • मैं कई सालों से algorithmic trading को side project के रूप में कर रहा हूँ, लेकिन सब कुछ TD Ameritrade के ज़रिए करता हूँ। quotes और बाकी data मुझे account की वजह से free मिल जाता है, और कुछ अन्य free data भी अलग से इस्तेमाल करता हूँ
      लेख पढ़कर सोचा था कि शायद Polygon के साथ WebSocket setup आज़माऊँ, लेकिन देखा कि WebSocket वाला पहला package $29 का है और real-time data वाला Advanced package $200 प्रति माह है
      unlimited API calls के साथ real-time data काफ़ी अच्छा लगता है, लेकिन मेरी strategy सामान्य capital size पर ज़्यादा से ज़्यादा लगभग 78% win rate देती है, इसलिए $200 प्रति माह उचित ठहराना मुश्किल होगा
      जानना चाहूँगा कि आप कौन-सा package इस्तेमाल करते हैं और उसके फ़ायदे-नुकसान क्या हैं। अगर ईमेल से जवाब देना चाहें तो वह मेरी profile में है
    • जानना चाहता हूँ कि क्या आपका कोई ईमेल है। मैं F# में काफ़ी समय से ऐसा ही सिस्टम बना रहा हूँ, इसलिए जुड़ना चाहूँगा
    • अगर आप IB के TWS API से connect कर रहे हैं, और trade execution भी वहीं से करते हैं, तो क्या IB API से real-time prices लेकर polygon.io का बिल्कुल उपयोग न करने का विकल्प नहीं है?
      मुझे नहीं पता कि IB price feed को real-time में भेजता है या नहीं। TWS स्क्रीन लगातार refresh होती रहती है, इसलिए लगता है कि data real-time में आता है, लेकिन जानना चाहता हूँ कि क्या order book भी API के ज़रिए उपलब्ध है
      मुझे पता है कि यह लेख polygon.io ब्लॉग पर पोस्ट हुआ है, लेकिन जिज्ञासा है कि क्या सिर्फ IB/TWS API के सहारे भी यह संरचना काम कर सकती है
  • एल्गोरिदमिक ट्रेडिंग में सबसे ज़्यादा गलत समझी जाने वाली अवधारणाओं में से एक यह है कि ज़्यादातर सिस्टमों में speed निर्णायक कारक नहीं होती।
    मेरे सिस्टम https://grizzlybulls.com/models/vix-ta-macro-mp-extreme जैसा मॉडल 3 साल से अधिक समय से लाइव ट्रेडिंग में बाज़ार को काफ़ी पीछे छोड़ता आया है, लेकिन औसतन लगभग हर 18 ट्रेडिंग दिनों में सिर्फ़ एक बार ट्रेड करता है और सिग्नल भी केवल घंटों के स्तर के turning point के आसपास ही बनते हैं।
    पिछले 18 महीने ऊँची inflation और तेज़ interest rate hikes जैसे बड़े structural बदलावों की वजह से शुरुआती दौर जितने मज़बूत नहीं रहे, लेकिन जनवरी 2022 में साइट लॉन्च होने के बाद से इसने +14.11% रिटर्न दिया है जबकि SPX -7.83% पर था।
    यह बिना leverage के हासिल किया गया, और उसी अवधि में अधिकतम drawdown भी -16.48% रहा, जो SPX के -27.57% से कम था।

    • चार्ट में 2009 से शुरू होने वाले backtest डेटा जैसा कुछ दिखाना थोड़ा ईमानदार नहीं लगता। शुरुआती बिंदु पूरी तरह मनमाना है, और आपने कहा कि यह 3 साल पहले शुरू हुआ था, इसलिए यह वास्तविक performance नहीं है।
      यह प्रस्तुति ऐसी बनाई गई है कि मॉडल सचमुच बाज़ार को बहुत पीछे छोड़ता हुआ लगे। अगर आपके पास सच में कोई अनछुआ सोने की खान है तो यह बड़ी बात है, लेकिन निजी तौर पर मुझे कुछ red flags की वजह से इस पर भरोसा करना मुश्किल लगता है।
    • यह जानने की जिज्ञासा है कि ये मॉडल बाहरी डेटा का कितना उपयोग करते हैं, या इनमें नियमित रूप से इंसानी input या fine-tuning कितनी होती है।
  • अगर आपको एल्गोरिदमिक ट्रेडिंग में दिलचस्पी है, तो Collective2 देखने लायक है। यह ऐसी जगह है जहाँ इंजीनियर subscription fee लेकर buy/sell signals उपलब्ध कराते हैं।
    इसमें एल्गोरिदमिक ट्रेडिंग की minor league जैसा एहसास है और यह काफ़ी दिलचस्प है।
    सिस्टम profit/loss को ट्रैक करता है, इसलिए performance reporting में धोखा देना मुश्किल होता है, और अगर आप Collective2 को अपने Interactive Brokers अकाउंट तक पहुँच की अनुमति दें, तो यह आपकी ओर से ट्रेड सिग्नल execute कर सकता है।
    यह कम से कम 10 साल पुरानी सेवा है, इसलिए लंबी अवधि की performance भी देखी जा सकती है, लेकिन ज़्यादातर सिस्टम इतने लंबे समय तक टिकते नहीं हैं।
    https://collective2.com/leader-board
    अभी के शीर्ष रैंक वाले सिस्टम भी शायद ही लंबे समय तक वहाँ टिके हैं; आम तौर पर 1–2 साल। यह दिखाता है कि ज़्यादातर सिस्टमों का alpha काफ़ी जल्दी गायब हो जाता है
    उनकी return curves भी काफ़ी ऊबड़-खाबड़ होती हैं, और अक्सर कुछ ही ट्रेड अधिकांश मुनाफ़े के लिए ज़िम्मेदार होते हैं।

  • ऑटोमेटेड ट्रेडिंग सिस्टम बनाते समय महत्वपूर्ण स्तंभ हैं data feed और collection, feature generation, signal generation, actual trading और order management, तथा पूरे orchestration का प्रबंधन।
    source data का सीधे निर्णय लेने में उपयोग कम ही होता है, और अच्छी feature generation अक्सर सफलता का मुख्य कारण बनती है। moving average इसका एक उदाहरण है, लेकिन आजकल सिर्फ़ उससे काम लगभग नहीं चलता।
    यह लेख data processing और order management के तकनीकी पहलुओं तथा पूरी pipeline को दिखाता है, लेकिन अच्छा होता अगर solution scaling और asynchronous implementation के बारे में और विवरण होता।
    खासकर Go का उपयोग हो रहा है, तो उस उद्देश्य के लिए उपयुक्त channel structure होने के कारण उसके बारे में और जानने की इच्छा होती है।
    मैं समझता हूँ कि वह इस लेख का मुख्य फ़ोकस नहीं है, लेकिन trading logic, नई strategy को plug in करने के तरीके, और मौजूदा strategy को parameterize करने के सामान्य तरीकों पर जानकारी भी उपयोगी होती।
    अंत के links दिलचस्प थे, और मैं machine learning तथा feature engineering आधारित intelligent trading bot (https://github.com/asavinov/intelligent-trading-bot) विकसित कर रहा हूँ, इसलिए ऐसे लेख मेरे लिए महत्वपूर्ण हो सकते हैं।

    • सहमत हूँ। वह हिस्सा मैं छोड़ गया था।
      संरचना सरल है: goroutine और channel एक-दूसरे से communicate करते हैं, और एक बड़े mutex से locking की जाती है।
      नया data आते ही आवश्यक aggregate values, यानी tick-based candlesticks, बनाए जाते हैं, और वही data BUY logic loop को trigger करता है। अगर कुछ detect होता है, तो IB API order जारी किया जाता है।
      सब कुछ बहुत सरल है, इसमें कोई खास जटिलता नहीं है। मैंने एक समय में 100 से ज़्यादा positions भी ट्रैक की हैं, और यह बस ठीक से चलता रहा, इसलिए मैंने complex asynchronous logic को ज़्यादा नहीं छेड़ा।
      parameters वास्तव में BUY loop के अंदर hardcode किए गए हैं। यह अजीब लग सकता है, लेकिन छोटे setup में वे इतनी बार बदलते नहीं हैं।
      कुछ बार ट्रेड चलाना, values को adjust करना, restart करना और फिर दोबारा test करना—मेरा तरीका यही है। enterprise environment में शायद कोई formal language या hot loading जैसी चीज़ें होतीं, लेकिन मेरे मामले में hardcoding ही काफ़ी अच्छी तरह काम करती है।
  • Go खुद या कोई भी भाषा कोई बड़ा फ़ायदा नहीं देती। फ़ायदा trading algorithm देता है, और उसे खोजना हमेशा मुश्किल होता है
    मैंने कई महीनों तक सबसे अच्छे parameters खोजे, लेकिन अंत में वे सिर्फ historical data पर ही काम करते थे, जबकि वास्तविकता पूरी तरह अलग थी
    अगर algorithm और strategy परफेक्ट हों, तो Visual Basic का इस्तेमाल भी Go, Rust या किसी भी दूसरी भाषा से बेहतर हो सकता है। भाषा सिर्फ एक tool है
    Go का इस्तेमाल करना अच्छा है, लेकिन शीर्षक थोड़ा भ्रामक हो सकता है। लोग इसे किसी तरह के फ़ायदे की तरह ले सकते हैं, जबकि ऐसा नहीं है
    और HFT के लिए मुझे नहीं लगता कि garbage collector वाली भाषा अच्छा विकल्प है

    • आख़िरकार यह तय करना होता है कि buy करना है या sell, और कितना करना है, और वह फ़ैसला दूसरी logic-आधारित फ़ैसलों से प्रतिस्पर्धा करता है
      ऐसी logic, यानी strategy, को manually विकसित करना स्वाभाविक रूप से मुश्किल है, इसलिए मैंने historical data से trading strategy निकालने वाला एक intelligent trading bot बनाया
      https://github.com/asavinov/intelligent-trading-bot
      यह अभी cryptocurrency में काम करता है, लेकिन दूसरे markets पर भी लागू किया जा सकता है
      https://t.me/intelligent_trading_signals
      सिर्फ historical data पर अच्छा काम करना और वास्तविकता में अलग निकलना एक बहुत सामान्य स्थिति है। असली बात ऐसी strategy बनाना है जो भविष्य के अनदेखे data पर भी काम करे
      backtest algorithm को भी इस तरह डिज़ाइन किया जाना चाहिए कि future data अतीत में leak न हो
    • यह पोस्ट मैंने ही लिखी है, और सच में इसे Go में बनाया था। वजह बस यह थी कि Go वही programming language है जिसे मैं सबसे ज़्यादा इस्तेमाल करता हूँ
      industry में C++ और Python ज़्यादा इस्तेमाल होती हैं, इसलिए Go का इस्तेमाल उल्टा नुकसान भी हो सकता है, लेकिन मुझे वही भाषा आती थी
      मेरा इरादा कोई गलतफ़हमी पैदा करने का नहीं था। Go data लेने, उसे process करने और remote API call करने के लिए काफ़ी अच्छा है, इसलिए व्यवहार में इसने अच्छा काम किया
      लेकिन अगर आप इसके आधार पर नौकरी पाने की कोशिश कर रहे हैं, तो शायद इससे ज़्यादा मदद नहीं मिलेगी
    • अगर code इस तरह लिखा जाए कि allocations बिल्कुल न हों, तो garbage collector वाली भाषाएँ भी HFT में इस्तेमाल हो सकती हैं
      कुछ जगहें Java का इस्तेमाल करते हुए startup पर ज़रूरी पूरी memory पहले से allocate कर देती हैं। Jane Street के OCaml इस्तेमाल के लिए मशहूर होने की बात भी जानी-पहचानी है
    • यह स्थिति पर निर्भर करता है। मैंने सुना है कि कुछ जगहें Java इस तरह इस्तेमाल करती हैं कि बड़ा heap बनाया जाता है, allocations लगभग शून्य के करीब रखी जाती हैं, और heap भरने से पहले application को समय-समय पर restart कर दिया जाता है
      इस तरह performance काफ़ी अच्छी मिलती है, और memory bug की चिंता भी नहीं करनी पड़ती
    • यह overfitting है। यह सिर्फ computer optimization में नहीं, इंसान द्वारा की गई optimization में भी हो सकता है
      historical data पर कुछ समय तक प्रयोग करने के बाद उस data की उपयोगिता कम हो जाती है
  • मैं ऐसी भाषा होने के कारण TypeScript में, और tools ज़्यादा होने के कारण Python में bot बना रहा हूँ
    यह बहुत overwhelming और अकेला कर देने वाला काम है। दूसरे projects मैंने हमेशा team में किए थे, और बहुत छोटी team में काम स्वायत्त होने पर भी कभी-कभी meetings और standups होते थे
    यह मैं 6 महीने से अकेले कर रहा हूँ, इसलिए सिर्फ अकेला न रहने के लिए किसी दोस्त को साथ जोड़ने के बारे में सोचा था

    • मैं भी अकेले algorithmic trading विकसित करने वालों में हूँ। चाहें तो जुड़कर बात कर सकते हैं
    • यह पोस्ट सही समय पर आई है। मैं options monitoring को बहाना बनाकर दूसरी technologies सीखने की सोच ही रहा था
      side project होने की वजह से शायद बहुत बड़ी प्रगति न कर पाऊँ, लेकिन बात करने के लिए हमेशा तैयार हूँ
    • मुझे जिज्ञासा है कि आप pros से कैसे प्रतिस्पर्धा करने की उम्मीद करते हैं। उनसे तेज़ होना मुश्किल है, और अगर आपके पास कई math PhD स्तर के लोग नहीं हैं, तो उनसे बेहतर algorithm बनाना भी मुश्किल है
      मेरे हिसाब से एकमात्र तरीका यह है कि आपको ऐसा data मिले जो उनके पास न हो
  • मुझे यह पोस्ट पूरी तरह निरर्थक और clickbait लगती है। सार यह है कि “market data के लिए polygon.io इस्तेमाल किया जा सकता है, लेकिन algorithmic trading वैसे भी कठिन है, इसलिए अभी साझा करने लायक बहुत कुछ नहीं है”

    • यह पोस्ट मैंने ही लिखी है, और आपको ऐसा लगा यह सुनकर अफ़सोस है
      व्यक्तिगत रूप से मैं अपना system बनाते समय की उच्च-स्तरीय संरचना साझा करना चाहता था। जब मैं इस rabbit hole में उतरा था, तब मुझे लगता है कि ऐसी पोस्ट मददगार होती
      अगर आप बता सकें कि इसमें और क्या होना चाहिए था, तो मैं खुशी से उसे शामिल करूँगा
  • अच्छा होगा कि ऐसे लोगों को ढूँढा जाए जिन्हें trading द्वारा मिलने वाला code, strategy और पैसे का शुद्ध feedback loop पसंद हो
    मैं alpha के स्रोत के रूप में stocks और indices के बीच timing और correlation का अध्ययन करता रहा हूँ, और कुछ हद तक सफलता भी मिली है
    अब मैं उस प्रक्रिया को automate करने की कोशिश कर रहा हूँ, और मुझे यह काम सच में बहुत पसंद है
    मैं market maker बनने की कोशिश नहीं कर रहा, न ही लगातार अलग-अलग symbols के पीछे भागना चाहता हूँ। मैं कुछ चुनिंदा symbols पर बहुत अच्छी तरह profit देने वाले सटीक models को निखारने पर ध्यान दे रहा हूँ
    उपयोगी tools में TradingView और Pinescript indicators·strategies, backtest के लिए exported data का उपयोग करने वाले Excel models, backend machine learning के लिए Python और Go, और नए code पर तेज़ी से iterate करने के लिए ChatGPT शामिल हैं
    रुचि हो तो trading @ dianazink.com पर बात करना चाहूँगा

  • अच्छी पोस्ट है, और ठोस विवरण तथा खासकर screenshots अच्छे लगे
    मैं समझता हूँ कि आप strategy को विस्तार से नहीं बताना चाहते, लेकिन यह जानना चाहूँगा कि trading पूरी तरह technical analysis पर आधारित है या आप बाहरी data या alternative data feeds भी इस्तेमाल करते हैं
    दूसरे शब्दों में, क्या यह लगभग बंद system है जिसमें सिर्फ Polygon input और IB API output है, या फिर इसमें news sites, Twitter, Reddit जैसे custom data feeds भी शामिल हैं
    अगर दूसरा मामला है, तो जब कुछ data sources की historical coverage अधूरी हो, तब आप उसे historical backtest के साथ कैसे संतुलित करते हैं, यह भी जानना चाहूँगा

    • मेरा सारा data polygon.io से आता है और कोई बाहरी data नहीं है
      हाल में मैं precomputed historical values की lookup table का इस्तेमाल करके anomaly detection देखने लगा हूँ, जैसे “क्या इस stock में यह activity सामान्य है”
      आज का BXRX इसका अच्छा उदाहरण है [1]
      मैं options trading activity भी देख रहा हूँ ताकि समझ सकूँ कि क्या उसे signal की तरह इस्तेमाल किया जा सकता है
      [1] https://www.google.com/search?q=BXRX