RuneScape Grand Exchange’te algoritmik alım satım botu çalıştırma kayıtları
(tristanrhodes.com)- Old School RuneScape’in Grand Exchange’i, öğe bazında alım limitleri ve işlem vergisi olan oyun içi bir piyasa olduğundan, otomatik alım satım botlarının stratejilerini denemek için iyi, sınırlı bir piyasa ortamı sunar
- Bot, gerçek zamanlı fiyat toplama, karakter kontrolü ve emir bazında beklenen kârlılık sıralamasını sırasıyla JavaScript, Java ve Python uygulamalarına ayırarak işler
- Eğitim verisi; 5 dakika ve 1 saatlik fiyat spread’leri ile işlem hacimlerini, gerçekleşen emirlerin gold/second değeriyle birleştirerek oluşturuldu; zaman sızıntısını önlemek için son 14 gün doğrulama kümesi olarak ayrıldı
- 1 haftalık karşılaştırma deneyinde saat başına ortalama kâr random forest için 150.892 gold/hr ile en yüksek çıktı; neural network 123.923 gold/hr, baseline ise 87.353 gold/hr oldu
- Makine öğrenimi modelleri referans yönteme göre daha yüksek kâr sağladı; ancak random forest’ın tahmin aralığı kısıtları dikkate alındığında, yüksek frekanslı ve düşük ROI’li işlemlerde veri dağılımı ile piyasa yapısının performansı büyük ölçüde belirlediği görülüyor
Grand Exchange’in piyasa yapısı ve işlem kısıtları
- Old School RuneScape’in Grand Exchange’i, oyuncuların oyun içindeki neredeyse tüm öğeler için alım-satım emri verebildiği bir piyasadır
- Normal piyasalar gibi karmaşık ve kaotiktir; ancak kısa zaman ölçeklerinde veya mikro yapı düzeyinde modellenebilir kısımları vardır
- Emirlerde öğe bazında 4 saatlik alım limiti uygulanır
- Örnek: coal ore için 4 saat içinde en fazla 13.000 adet alım yapılabilir
- Gerçekleşen satış emirlerine %1 vergi uygulanır
- Tekil işlem fiyatı 100 gold’u aşan öğeler için geçerlidir
- Emir başına en fazla 5 million gold ile sınırlıdır
- Öğe bazında hesaplanır ve ondalık kısım aşağı yuvarlanır
- Vergi geliri, oyun geliştiricisi tarafından enflasyonu kontrol etmek için kullanılır
- 10.000 adet coal ore, adet başına 142 gold’dan satılırsa vergi
math.floor(0.01 * 142) * 10000 = 10,000 goldolur
Bot bileşenleri ve veri hattı
- Bot üç uygulamaya ayrılır
- JavaScript API: OSRS Wiki gerçek zamanlı fiyat API’si ile etkileşir
- Java istemcisi: karakter davranışlarını kontrol eder
- Python API: olası emir kümelerini beklenen kârlılığa göre sıralar
- OSRS Wiki projesi, Grand Exchange’te işlem gören tüm öğelerin verilerini her 5 dakikada bir kaydeder
- Yapılandırılabilir geçmiş dönem için ortalama fiyat spread’i
- Yapılandırılabilir geçmiş dönem için işlem hacmi
- Her öğenin alım limiti
- Eğitim verisi hattı, OSRS Wiki API’sini sorgulayan iki cronjob’dan oluşur
- Biri API’yi her 5 dakikada bir sorgular
- Diğeri API’yi her 1 saatte bir sorgular
- Her iş, ilgili dönem boyunca Grand Exchange’te işlem gören tüm öğelerin fiyat spread’ini ve işlem hacmini veritabanına kaydeder
- Gerçekleşen emirlerden de model eğitiminde kullanılacak veriler saklanır
- Üretilen gold/second
- Mutlak kâr
- Alım emri başlatma zaman damgası
- İşlem gören öğe ID’si
- İki tablo zaman damgasına göre join edilir
- Her satırda, başarılı tekil işlemden hemen önceki döneme ait Grand Exchange geneli toplulaştırılmış işlem verileri ve söz konusu işlemin kârlılığı birlikte yer alır
- Model kayıp fonksiyonunun hedefi gold/second değeridir
- Zaman sızıntısını önlemek için eğitim kümesi 63 gün öncesinden 14 gün öncesine kadar etiketlenmiş işlemlerden oluşturulur; doğrulama kümesi olarak en son 14 gün kullanılır
Referans yöntemin hesaplama biçimi
- Referans yöntem, önemsiz olmayan bir modelin gerçekten performansı artırıp artırmadığını kontrol etmek için naive baseline olarak kullanılır
- Her öğe için son 5 dakikalık fiyat spread’i ve son 1 saatlik işlem hacmi kullanılarak değişkenler hesaplanır
- ROI:
(sell_total - {1% tax} - buy_total) / buy_total - Hacim oranı:
(1h_volume_traded_high_price / 1h_volume_traded_low_price) - Son 2 haftada ilgili öğenin işlemleri için ortalama gold/second
- ROI:
- Ardından referans yöntem öğeleri şu sırayla sıralar
- Her öğenin ROI Z skorunu hesaplar
- Her öğenin hacim oranı Z skorunu hesaplar
- Geçmiş ortalama gold/second değeri negatif olan öğeleri hariç tutar
(roi_zscore + volume_ratio_zscore)değerine göre azalan sırada sıralar
Makine öğrenimi modelleri karşılaştırma deneyi
- Referans yöntem sonuçları oluşturulduktan sonra, 1 hafta boyunca baseline ile random forest, neural network regresyon modelleri karşılaştırıldı
- Örnek oranı uyumsuzluğunu önlemek için oyun istemcisi, potansiyel emirleri sıralarken her model tipinin çıktısını rastgele seçti
- Sonuçlar, saat başına ortalama kâra göre azalan sırada düzenlendi
| 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 |
Deney sonuçlarının yorumu
- Makine öğrenimi yöntemleri baseline’dan kayda değer ölçüde daha iyi performans gösterdi
- Modeller arasında random forest en yüksek profit/hour değerini kaydetti ve neural network’ün biraz önüne geçti
- Bu sonuç, eğitim sırasında her modelin doğrulama kaybıyla da uyumludur
- random forest’ın en yüksek profit/hour değerini üretmesi biraz şaşırtıcıdır
- random forest tahminleri genellikle eğitim verisindeki hedef değer aralığı içinde kalma eğilimindedir
- Ancak bu modellerin tahmin ettiği piyasa yapıcılığı işlemleri yüksek frekanslı ve düşük ROI karakterinde olduğundan, eğitim verisinin varyansı görece düşüktür
- Model eğitiminde kullanılan kodlara yukarıdaki bağlantılardan ve Github üzerinden ulaşılabilir
1 yorum
Hacker News yorumları
Ben de aynı şeyi Google Sheets ile denemiştim; OSRS Wiki API'si gerçekten harika olduğu için epey eğlenceliydi.
Burada gösterilen saatlik kâr berbat düzeyde, yani pratikte ne yapsanız bundan daha fazla para kazanabilirsiniz.
Tüm piyasa ya da kategori bazında fiyat trendi analizlerini de görmek isterdim. Örneğin tüm büyü savaş ekipmanlarının yükselip yükselmediği, belirli bir eşyanın başka bir eşyayı gecikmeli takip edip etmediği gibi.
Merak eden olursa fiyatlar eski olabilir ama API ile yaptığım kârlılık e-tablom var. Alım satım limitlerini, halka açık olmayan yöntem karşılaştırmalarını, saatlik bakım maliyetini vb. hesaba katabildiği için Wiki'den daha iyi: https://docs.google.com/spreadsheets/u/0/d/1iekEqInA2PwEuj1W...
Hangi yöntemleri otomatikleştirdiğim de muhtemelen görülebilir; bot yazmanın gerçekten oynamaktan daha eğlenceli olduğunu fark ettim. Özel sunucuların hukuki yollarla kapatılması üzücü. Çünkü oralarda etik bir yük olmadan bot çalıştırılabiliyordu.
Her modelin potansiyel işlemlerin yalnızca 1/3'üne eriştiği deney kârı ile yalnızca en iyi model işlem yaptığında elde edilen kârı karıştırıyorlar.
Üstelik bu botlar bir yılı aşkın süre neredeyse her gün çalışmasına rağmen banlanmadı.
RuneScape'in altın çağında Grand Exchange'te aynı nadir eşya için aynı anda alış ve satış emri vermek bile, zamanla ikisi de gerçekleştiğinde kâr ettiriyordu.
Bugünün tabiriyle buna muhtemelen piyasa yapıcılığı denirdi.
Günün sonuna doğru emir genelde gerçekleşmiş olurdu; sonra onları ortalama fiyatın birkaç gp üstünden piyasaya koyunca ertesi sabaha kadar satılırdı.
Çoğu gün küçük bir kâr elde ederdim; bazen gün içinde fiyat biraz düşüp zarar ettiğim olurdu ama tersine yükseldiği günlerde ekstra kazanç da çıkardı.
Üstelik Bernie Madoff gibi, o piyasa yapıcının sahibinin de bir hedge fonu var ve o fon her yıl akıl almaz getiriler sağlıyor. Elbette bu hedge fon, piyasa yapıcılığı işinden tamamen ayrı yürütülüyor varsayım olarak /s /s /s
Bu yüzden piyasa yapıcı perspektifinden bakınca ABD'de işlerin gerçekte nasıl yürüdüğüne epey gerçekçi geliyor.
World of Warcraft'ta müzayede evi mobil uygulaması olduğu dönem aklıma geldi. Müzayede evine göz atabiliyor, eşya koyabiliyor ya da satın alabiliyordunuz; API'yi reverse engineering ile çözmek de kolaydı, bu yüzden müzayede evi botu yapmak kolaydı.
Herhangi bir makine öğrenmesi algoritmasına kadar gitmedim; sadece saçma derecede yanlış fiyatlandırılmış eşyaları topluyor ya da geçen haftaki fiyat aralıklarına göre al-sat yapıyordum. Esas mesele işlem hacmiydi.
Epey iyi kazandım, 1 milyon altınlık bineği aldıktan sonra bıraktım; kısa süre sonra uygulama da kaldırıldı. Bunu yapan tek kişi ben değildim muhtemelen, etkisi kesin olmuştur.
Harici uygulama olarak yapmak için hesapların müzayede evine bağlı bekleyip yenileme yapması ve o verileri uygulamaya itmesi gerekiyordu herhâlde.
Ben 10 yıl boyunca oyun içinde Auctioneer eklentisini kullandım.
RuneScape hakkında ne kadar iyi şey söylesem az. Elbette topluluğun sahiplik yapısına ilişkin haklı şikâyetleri ayrı.
Temelde 20 yılı aşkın bir oyun olmasına rağmen hâlâ güncellemeler geliyor; yeni silahlar, görevler ve seviye üst sınırları da sürekli ekleniyor.
Hypixel'de bir iki ay kadar benzer bir şey denedim.
Çeşitli üretim tariflerinin malzeme fiyatlarını ve üretilen ürünlerin fiyatlarını sürekli izliyordum; belirli bir kâr seviyesine ulaşınca uyarı sesi çalıyor, ben de gidip üretimi elle yapıyordum.
Bilgileri https://wiki.hypixel.net üzerinden kolayca alabiliyordum ve https://wiki.hypixel.net/Travel_Scrolls en sık iyi kâr getiriyordu.
Üretim için belirli beceri ya da seviye gerektiğinden fiyatlar çok hızlı dengelenmiyordu. Sonunda oyun çok derin olmadığı için sıkıldım ama kurcalamak kesinlikle eğlenceliydi.
Yazı gerçekten çok eğlenceliydi. Ben de sanki ezelden beri RuneScape oynayan bir nerd'üm ve artık oyunla etkileşimlerimin çoğu programlama üzerinden gerçekleşiyor.
Başlıca iki tür bot kullanıyorum: biri ekran görüntüsü alıp çevredeki piksel renkleriyle nesneleri algılayan renk botu, diğeri ise temel tıklama botu.
Pratikte pyautogui kullanan yaklaşık 100 satırlık Python kodu, oyunun can sıkıcı unsurlarının önemli bir kısmını otomatikleştirmeye yetti.
Merak ettiğim şey, Java istemcisinin istemci koduna doğrudan çağrı yapan çeşitli açık kaynak bot istemcilerinden biri mi olduğu, yoksa tekrarlı giriş yapan bir tıklama betiği mi olduğu.
İlkinde banlanma deneyimim iyi olmamıştı.
Okuduğunu anlama becerim yetersiz olabilir ama burada tam olarak neyin modellendiğini pek anlayamadım
Yazar, mum grafiğine benzer fiyat verilerini alıyormuş gibi geliyor
Anlamadığım kısım, işlemlerin bahsedilen 5 dakikalık aralık içinde mi gerçekleştiği, yoksa modelin birden fazla zaman aralığına yayılan örüntüler mi aradığı
Makine öğrenimi modeli, her 5 dakikada bir cron işiyle toplanıp veritabanına kaydedilen fiyat spread’i ve hacim verilerini, ayrıca tek tek işlem verilerini öğreniyor
Ancak 63 gün öncesinden 14 gün öncesine kadarki geçmiş verilerle eğitiliyor, kalan son 14 günlük veriyle de doğrulanıyor gibi. Bu, zamansal sızıntıyı (temporal leakage) önlemek için gibi görünüyor; aratınca, eğitim verisinin istemeden gelecek bilgisini içerip tahmini bozması anlamına geldiğini gördüm
Yani soruya cevap olarak, model birkaç haftaya yayılan verilerde örüntüler bulup mevcut andaki en iyi işlem adaylarını sıralıyor, Java bileşeni de oyun içinde oyuncu karakteriyle işlemi gerçekleştiriyor gibi görünüyor
Şahsen anlamadığım şey, bu veri toplama ve eğitimin sürekli çalışan bir süreç mi olduğu, yoksa bir kez eğitildikten sonra da kâr etmeye devam edecek kadar akıllı mı kaldığı. 49 gün eğitim, 14 gün doğrulama yapısını da tam anlamış değilim
Dolayısıyla model, geçmişte iyi performanslı işlemlere yol açan fiyat ve hacim verisi örüntülerini arıyor
Bağımlı değişken, geçmiş işlemlerde üretilen saniye başına altın
Grand Exchange gelmeden önce RuneScape’te ticaret yaparak, çocuk denecek gençlik yıllarımda yaklaşık 1.000 sterlin kazanmıştım
Örneğin parti şapkasını pazarlıkla 6 milyon altına alıp 6,5 milyona satıyor, bunu tekrar ediyordum
Oyunu bırakırken hepsini eBay’de sattım; para gelince annem epey şaşırmıştı
Saatlik kazanç oranı berbatttı ama o deneyim olmasaydı bugün olduğum kişi olamayabilirdim
“OSRS Wiki API ile etkileşen iki cron işi: biri 5 dakikada bir yoklama yapıyor, diğeri her saat yoklama yapıyor”
Neden iki tanesine ihtiyaç olduğunu bilmiyorum. Mevcut 5 dakikalık aralıkta aynı bilgi varsa saatlik yoklama işe yaramaz değil mi?
EVE’in piyasasında da benzer bir deney yapan biri var mı merak ediyorum
Bu tür oyun tarzı oldukça yaygın, geçerli ve memnuniyetle karşılanan bir oynama biçimi. Ama ayrıntı sorarsanız herkes güvenlik gerekçesiyle gizli olduğunu söyleyecektir
EVE Online’ın çok derin ve karmaşık ekonomisi hakkında daha fazla şey öğrenmek istiyorsanız, YouTube’da piyasa ve piyasa analizi içerikleri üreten Oz’a bakabilirsiniz: https://www.youtube.com/@OZeve
Temelde neredeyse her şey, oyuncuların cevher kazıp parça üretmesi, bunları entegratörlere yeniden satması, oradan da dağıtıcılar ve müşterilere uzanan bir zincirle üretilir
Bununla yakından ilgili olarak, EVE Online’da Microsoft tarafından yapılmış resmi bir MS Excel eklentisi de var ve EVE Online API ile tamamen entegre. Bu oyun, MS Excel ve güçlü entegrasyon özelliklerinde ustalaşmanın etkili bir yolu olabilir
Oz’un hızlı rehberi: https://youtu.be/eAogNNeDZuo
EVE Online’da Fanfest adlı bir konvansiyon da var; defcon gibi, insanlar birbirlerine EVE tarzı TED Talk’lar sunuyor. 51 dakikalık Fanfest 2023 “Market Spreadsheet Masterclass” da var: https://www.youtube.com/watch?v=6Ql6IU1eZpM
Bir fikriniz varsa ya da kendiniz denemek istiyorsanız, hâlihazırda bir MS Excel lisansınız olduğu veya kendi çözümünüzü entegre edebildiğiniz varsayımıyla ücretsiz hesapla 0 dolara başlayabilirsiniz. Ancak başlangıç sermayesi, bilgi ve sezgi hiç yoksa zor; ayrıca ücretsiz hesap, yeterince beceri geliştirmiş bir karakter kadar çok emir veremez