RuneScape Grand Exchange में algorithmic trading bot चलाने का रिकॉर्ड
(tristanrhodes.com)- Old School RuneScape का Grand Exchange एक in-game मार्केट है, जहाँ आइटम-वार buy limit और transaction tax है, इसलिए यह automated trading bot की strategy को परखने के लिए एक अच्छा सीमित market environment देता है
- bot real-time price collection, character control, और order-वार expected profitability ranking को अलग-अलग JavaScript·Java·Python applications में बाँटकर संभालता है
- training data 5 मिनट·1 घंटे के price spread और trading volume को वास्तव में filled orders के gold/second के साथ जोड़कर बनाया गया, और time leakage से बचने के लिए हाल के 14 दिनों को validation set के रूप में अलग रखा गया
- 1 हफ्ते के comparative experiment में औसत hourly profit के हिसाब से random forest सबसे आगे रहा, 150,892 gold/hr के साथ; neural network 123,923 gold/hr और baseline 87,353 gold/hr रहा
- machine learning models ने baseline से ज़्यादा profit दिया, लेकिन random forest की prediction range limitations को देखते हुए high-frequency·low-ROI trades में data variance और market structure performance को काफ़ी प्रभावित करते हैं
Grand Exchange की market structure और trading constraints
- Old School RuneScape का Grand Exchange एक ऐसा market है जहाँ players game के भीतर लगभग सभी items के लिए buy और sell orders दे सकते हैं
- आम markets की तरह यह भी complex और chaotic है, लेकिन short time scale या microstructure level पर इसके कुछ हिस्सों को model किया जा सकता है
- orders पर item-specific 4-hour buy limit लागू होती है
- उदाहरण: coal ore को 4 घंटे में अधिकतम 13,000 units तक खरीदा जा सकता है
- executed sell orders पर 1% tax लगता है
- यह उन items पर लागू होता है जिनकी individual trade price 100 gold से अधिक हो
- प्रति order अधिकतम 5 million gold तक सीमित है
- item unit के आधार पर calculate किया जाता है और decimals को नीचे की ओर round किया जाता है
- tax revenue का उपयोग game developer inflation को नियंत्रित करने के लिए करता है
- अगर coal ore के 10,000 units को 142 gold प्रति unit पर बेचा जाए, तो tax
math.floor(0.01 * 142) * 10000 = 10,000 goldहोगा
bot architecture और data pipeline
- bot को तीन applications में बाँटा गया है
- JavaScript API: OSRS Wiki real-time price API के साथ interact करता है
- Java client: character actions को control करता है
- Python API: possible orders के set को expected profitability के आधार पर rank करता है
- OSRS Wiki project हर 5 मिनट पर Grand Exchange में traded सभी items का data record करता है
- configurable past period का average price spread
- configurable past period का trading volume
- हर item की buy limit
- training data pipeline में OSRS Wiki API को query करने वाले दो cronjob शामिल हैं
- एक हर 5 मिनट पर API को query करता है
- दूसरा हर 1 घंटे पर API को query करता है
- हर job उस period में Grand Exchange पर traded सभी items का price spread और trading volume database में record करता है
- वास्तव में filled orders से भी model training के लिए data store किया जाता है
- generated gold/second
- absolute profit
- buy order initialization timestamp
- traded item ID
- दोनों tables को timestamp के आधार पर join किया जाता है
- हर row में सफल individual trade से ठीक पहले की अवधि का Grand Exchange aggregate trading data और उस trade की profitability साथ में होती है
- model loss function का target gold/second है
- time leakage रोकने के लिए training set में 63 दिन पहले से 14 दिन पहले तक के labeled trades रखे गए, और validation set के लिए सबसे हाल के 14 दिन इस्तेमाल किए गए
baseline method की calculation
- baseline method को एक naive baseline की तरह इस्तेमाल किया गया, ताकि यह जाँचा जा सके कि कोई non-trivial model वास्तव में performance improve करता है या नहीं
- हर item के लिए हाल का 5-minute price spread और हाल का 1-hour trading volume इस्तेमाल कर variables निकाले गए
- ROI:
(sell_total - {1% tax} - buy_total) / buy_total - volume ratio:
(1h_volume_traded_high_price / 1h_volume_traded_low_price) - पिछले 2 हफ्तों में उस item की trades का average gold/second
- ROI:
- इसके बाद baseline method items को इस क्रम में sort करता है
- हर item का ROI Z-score calculate किया जाता है
- हर item का volume ratio Z-score calculate किया जाता है
- जिन items का historical average gold/second negative हो, उन्हें हटा दिया जाता है
(roi_zscore + volume_ratio_zscore)के आधार पर descending order में sort किया जाता है
machine learning models का comparative experiment
- baseline results तैयार करने के बाद, 1 हफ्ते तक baseline, random forest, और neural network regression models की तुलना की गई
- sample ratio mismatch से बचने के लिए, game client potential order ranking करते समय हर model type का output randomly चुनता था
- results को average hourly profit के descending order में व्यवस्थित किया गया
| Model Type | n | L2 loss | Mean profit/hr | 95% CI profit/hr |
|---|---|---|---|---|
| random forest | 257 | 53 | 150,892 | 129,140 - 172,643 |
| neural network | 191 | 57 | 123,923 | 103,279 - 144,566 |
| baseline | 216 | N/A | 87,353 | 79,493 - 95,212 |
experiment results की व्याख्या
- machine learning approach ने baseline की तुलना में काफ़ी बेहतर performance दी
- models में random forest ने सबसे ज़्यादा profit/hour दर्ज किया और neural network से थोड़ा आगे रहा
- यह नतीजा training के दौरान हर model के validation loss से भी मेल खाता है
- random forest का सबसे ज़्यादा profit/hour देना कुछ हद तक अप्रत्याशित है
- random forest predictions आमतौर पर training data के target value range के भीतर सीमित रहने की प्रवृत्ति रखते हैं
- लेकिन जिन market-making trades की ये models prediction करते हैं, वे high-frequency·low-ROI प्रकृति के होते हैं, इसलिए training data का variance अपेक्षाकृत कम होता है
- model training में इस्तेमाल किया गया code ऊपर दिए गए links और Github पर देखा जा सकता है
1 टिप्पणियां
Hacker News की रायें
मैंने भी यही चीज़ Google Sheets से आज़माई थी, और OSRS Wiki API सचमुच शानदार है, इसलिए काफ़ी मज़ा आया
यहां दिखाया गया प्रति घंटे मुनाफ़ा बेहद खराब स्तर का है, इसलिए असल में आप लगभग कुछ भी करके इससे ज़्यादा पैसा कमा सकते हैं
पूरे बाजार या category-wise price trends का analysis भी देखना चाहूंगा। जैसे, क्या सारे magic combat gear महंगे हो रहे हैं, या कोई खास item दूसरे item को delay के साथ follow करता है
अगर किसी को दिलचस्पी हो तो prices पुराने हो सकते हैं, लेकिन API से बनाई गई मेरी profitability spreadsheet मौजूद है। यह Wiki से बेहतर है क्योंकि इसमें trade limits, private method comparison, hourly upkeep जैसी चीज़ें ध्यान में रखी जा सकती हैं: https://docs.google.com/spreadsheets/u/0/d/1iekEqInA2PwEuj1W...
शायद यह भी दिख जाएगा कि मैं कौन-कौन से methods automate कर रहा हूं, और मुझे पता चला कि bot बनाना, असल में game खेलने से ज़्यादा मज़ेदार है। legal तरीकों से private servers का बंद होना अफ़सोसजनक है, क्योंकि वहां बिना ethical बोझ के bots चला सकते थे
आप उस experiment की कमाई, जहां हर model को संभावित trades के सिर्फ़ 1/3 तक access था, और उस कमाई को मिला रहे हैं जो सिर्फ़ best model से trade करने पर होती
इसके अलावा, ये bots एक साल से ज़्यादा समय तक लगभग रोज़ चले, फिर भी ban नहीं हुए
RuneScape के peak दिनों में Grand Exchange पर उसी rare item के लिए buy order और sell order एक साथ लगा देने भर से, समय के साथ दोनों execute हो जाते थे और profit हो जाता था
आज की भाषा में शायद इसे market making कहा जाएगा
दिन खत्म होने तक आम तौर पर order execute हो जाता था, और फिर उन्हें average price से कुछ gp ऊपर market में डालता तो अगली सुबह तक बिक जाते थे
ज़्यादातर दिनों में थोड़ा profit होता था, और कभी-कभी दिन में price थोड़ा गिरने से loss भी हो जाता था, लेकिन उल्टा price बढ़ने वाले दिनों में extra profit भी मिल जाता था
ऊपर से Bernie Madoff की तरह, उस market maker के owner के पास भी hedge fund है, और वह fund हर साल बेतुके returns देता है। बेशक, यह設定 है कि वह hedge fund market making business से पूरी तरह अलग चलता है /s /s /s
इसलिए market maker के perspective से देखें तो यह अमेरिका में असल में चीज़ें कैसे चलती हैं, उससे काफी realistic लगता है
World of Warcraft में auction house mobile app वाले दिन याद आ गए। आप auction house browse कर सकते थे, items list या buy कर सकते थे, और API को reverse engineer करना भी आसान था, इसलिए auction house bots बनाना आसान था
कोई machine learning algorithm तक बात नहीं गई; बस बहुत गलत price वाले items उठा लेता था या पिछले हफ्ते की price range के आधार पर खरीद-फरोख्त करता था। असली बात volume थी
ठीक-ठाक कमाई हुई, 1 million gold mount खरीदने के बाद छोड़ दिया, और थोड़े ही समय बाद app भी बंद हो गया। मैं अकेला ऐसा नहीं कर रहा था, इसलिए इसका असर ज़रूर पड़ा होगा
external app बनाने के लिए accounts को auction house से connected रहकर इंतज़ार करना और refresh करना पड़ता होगा, फिर वह data app तक push किया जाता होगा
मैंने 10 साल तक game के अंदर Auctioneer add-on इस्तेमाल किया
RuneScape के बारे में जितनी भी अच्छी बातें कही जाएं, कम हैं। बेशक ownership structure को लेकर community की जायज़ शिकायतें अलग बात हैं
मूल रूप से यह 20 साल से ज़्यादा पुराना game है, फिर भी अब तक updates आते हैं, और नए weapons, quests, level caps लगातार जोड़े जा रहे हैं
Hypixel पर मैंने एक-दो महीने तक कुछ ऐसा ही किया था
कई crafting recipes की material prices और crafted output prices को बार-बार monitor करता था, और जब कोई खास profit level पहुंचता, तो alert sound बजता और मैं खुद जाकर crafting करता था
जानकारी https://wiki.hypixel.net से आसानी से मिल जाती थी, और https://wiki.hypixel.net/Travel_Scrolls सबसे अक्सर अच्छा profit देता था
crafting के लिए खास skill या level चाहिए होता था, इसलिए prices बहुत जल्दी बराबर नहीं होते थे। आखिरकार game बहुत deep नहीं था, इसलिए bore हो गया, लेकिन इसके साथ experiment करना definitely मज़ेदार है
लेख सचमुच मज़ेदार था। मैं भी ऐसा nerd हूं जो जैसे हमेशा से RuneScape खेलता आया है, और अब game के साथ मेरी ज़्यादातर interaction programming के ज़रिए होती है
मैं मुख्य रूप से दो तरह के bots इस्तेमाल करता हूं: एक color bot, जो screenshot लेकर आसपास के pixel colors से objects detect करता है, और दूसरा basic click bot
असल में pyautogui इस्तेमाल करने वाले करीब 100 lines के Python code ही game के कई annoying हिस्सों को automate करने के लिए काफ़ी थे
मेरी जिज्ञासा यह है कि Java client उन कई open-source bot clients में से एक है जो client code को सीधे call करते हैं, या फिर repeated inputs देने वाली click script है
पहले वाले में ban होने का अनुभव अच्छा नहीं रहा
हो सकता है मेरी समझने की क्षमता कम हो, लेकिन मुझे ठीक-ठीक समझ नहीं आ रहा कि यहाँ मॉडल किस चीज़ को model कर रहा है
लेखक ऐसा लगता है जैसे candlestick chart जैसी price data ला रहा हो
जो हिस्सा समझ नहीं आता वह यह है कि trades बताए गए 5-minute interval के भीतर होती हैं, या model कई time ranges में फैले patterns ढूँढता है
machine learning model हर 5 मिनट पर cron job से collect करके database में save किए गए price spread और volume data, साथ ही हर individual trade data से सीखता है
लेकिन लगता है कि यह 63 दिन पहले से 14 दिन पहले तक के historical data पर train होता है, और बाकी हाल के 14 दिनों के data से validate करता है। शायद temporal leakage रोकने के लिए, और search करने पर पता चला कि इसका मतलब वह स्थिति है जहाँ training data अनजाने में future information शामिल कर लेता है और prediction बिगाड़ देता है
इसलिए सवाल का जवाब दें तो, model कई हफ्तों के data में patterns ढूँढकर मौजूदा समय के best trade candidates को rank करता है, और Java component game के अंदर player character के रूप में trades execute करता है, ऐसी structure लगती है
मुझे व्यक्तिगत रूप से जो समझ नहीं आता वह यह है कि यह data collection और training लगातार चलती रहती है या फिर एक बार train होने के बाद भी इतना smart है कि लगातार profit कमाता रहता है। 49 दिन training, 14 दिन validation वाली structure भी पूरी तरह समझ नहीं आती
इसलिए model price और volume data के वे patterns ढूँढता है जो past में अच्छा performance देने वाली trades तक ले गए
dependent variable past trades से generated gold per second है
Grand Exchange आने से पहले RuneScape में trading करके, शुरुआती teenage years में मैंने लगभग 1,000 pounds कमाए थे
उदाहरण के लिए party hat को 6 million gold तक bargain करके खरीदता, फिर 6.5 million में बेचता, और यह दोहराता रहता था
जब game छोड़ रहा था तो सब eBay पर बेच दिया, और पैसे आने पर मेरी माँ काफी हैरान हुई थीं
hourly return rate भयानक था, लेकिन अगर वह अनुभव न होता तो शायद आज मैं जैसा हूँ वैसा नहीं बन पाता
"OSRS Wiki API के साथ interact करने वाले दो cron jobs: एक हर 5 मिनट में poll करता है, और दूसरा हर घंटे poll करता है"
समझ नहीं आता कि दो की ज़रूरत क्यों है। अगर current 5-minute interval में वही information है, तो hourly polling बेकार नहीं है क्या?
उत्सुक हूँ कि क्या किसी ने EVE के market में भी ऐसा ही experiment किया है
इस तरह का play काफी common, valid और welcome playstyle है। हालांकि अगर details पूछें तो सब security reasons से secret बताएँगे
अगर EVE Online की बहुत गहरी और complex economy के बारे में और जानना हो, तो YouTube पर markets और market analysis content बनाने वाले Oz को देखें: https://www.youtube.com/@OZeve
मूल रूप से लगभग सब कुछ players द्वारा ore mine करके parts बनाने, उन्हें integrators को resell करने, और फिर distributors और customers तक पहुँचने के तरीके से बनता है
इससे closely related, EVE Online में Microsoft द्वारा बनाया गया official MS Excel plugin भी है और यह EVE Online API के साथ पूरी तरह integrated है। यह game MS Excel और powerful integration features में mastery हासिल करने का effective तरीका हो सकता है
Oz की quick guide: https://youtu.be/eAogNNeDZuo
EVE Online में Fanfest नाम का convention भी है, जहाँ defcon की तरह लोग एक-दूसरे को EVE-style TED Talk देते हैं। 51-minute Fanfest 2023 "Market Spreadsheet Masterclass" भी है: https://www.youtube.com/watch?v=6Ql6IU1eZpM
अगर आपके पास कोई idea है या खुद try करना चाहते हैं, तो मानकर चलें कि आपके पास पहले से MS Excel license है या आप अपना solution integrate कर सकते हैं, free account से 0 dollars में शुरू कर सकते हैं। लेकिन constraints हैं कि आपके पास कोई initial capital, knowledge, intuition नहीं होगी, और free account उतने orders नहीं लगा सकता जितने पर्याप्त skill-up किए हुए character लगा सकता है