1 poin oleh GN⁺ 2024-10-28 | 1 komentar | Bagikan ke WhatsApp
  • Grand Exchange di Old School RuneScape adalah pasar dalam game dengan batas pembelian per item dan pajak transaksi, sehingga menjadi lingkungan pasar terbatas yang cocok untuk menguji strategi bot trading otomatis
  • Bot membagi tugas pengambilan harga real-time, kontrol karakter, dan pemeringkatan profitabilitas yang diharapkan per order ke dalam aplikasi JavaScript, Java, dan Python yang terpisah
  • Data pelatihan dibuat dengan menggabungkan spread harga dan volume transaksi per 5 menit dan 1 jam dengan gold/second dari order yang benar-benar tereksekusi, lalu 14 hari terbaru dipisahkan sebagai set validasi untuk menghindari kebocoran waktu
  • Dalam eksperimen perbandingan selama 1 minggu, rata-rata profit per jam tertinggi dicapai random forest dengan 150,892 gold/hr, diikuti neural network dengan 123,923 gold/hr, dan baseline dengan 87,353 gold/hr
  • Model machine learning menghasilkan profit lebih tinggi daripada pendekatan acuan, tetapi dengan mempertimbangkan keterbatasan rentang prediksi random forest, pada transaksi berfrekuensi tinggi dengan ROI rendah, sebaran data dan struktur pasar sangat memengaruhi hasil

Struktur pasar dan batasan transaksi di Grand Exchange

  • Grand Exchange di Old School RuneScape adalah pasar tempat pemain dapat memasang order beli dan jual untuk hampir semua item dalam game
  • Seperti pasar pada umumnya, pasar ini kompleks dan kacau, tetapi pada skala waktu singkat atau level mikrostruktur, ada bagian yang bisa dimodelkan
  • Order dikenai batas pembelian 4 jam per item
    • Contoh: coal ore dapat dibeli maksimal 13,000 unit dalam 4 jam
  • Order jual yang tereksekusi dikenai pajak 1%
    • Berlaku untuk item dengan harga transaksi individual di atas 100 gold
    • Dibatasi maksimal 5 million gold per order
    • Dihitung per unit item dan pecahannya dibulatkan ke bawah
    • Pendapatan pajak digunakan oleh pengembang game untuk mengendalikan inflasi
  • Jika menjual 10,000 coal ore seharga 142 gold per unit, pajaknya menjadi math.floor(0.01 * 142) * 10000 = 10,000 gold

Arsitektur bot dan pipeline data

  • Bot dibagi menjadi tiga aplikasi
    • JavaScript API: berinteraksi dengan OSRS Wiki Real-time Price API
    • Java client: mengendalikan tindakan karakter
    • Python API: memberi peringkat kumpulan order yang memungkinkan berdasarkan profitabilitas yang diperkirakan
  • Proyek OSRS Wiki mencatat data semua item yang diperdagangkan di Grand Exchange setiap 5 menit
    • Spread harga rata-rata untuk periode historis yang dapat dikonfigurasi
    • Volume transaksi untuk periode historis yang dapat dikonfigurasi
    • Batas pembelian tiap item
  • Pipeline data untuk pelatihan terdiri dari dua cronjob yang melakukan query ke OSRS Wiki API
    • Satu melakukan query ke API setiap 5 menit
    • Satu lagi melakukan query ke API setiap 1 jam
    • Tiap job mencatat spread harga dan volume transaksi semua item yang diperdagangkan di Grand Exchange selama periode tersebut ke database
  • Data dari order yang benar-benar tereksekusi juga disimpan untuk pelatihan model
    • gold/second yang dihasilkan
    • Profit absolut
    • Timestamp inisialisasi order beli
    • ID item yang diperdagangkan
  • Kedua tabel digabung berdasarkan timestamp
    • Tiap baris berisi data agregat transaksi seluruh Grand Exchange untuk periode tepat sebelum transaksi individual yang sukses, beserta profitabilitas transaksi tersebut
  • Target fungsi loss model adalah gold/second
  • Untuk mencegah kebocoran waktu, set pelatihan terdiri dari transaksi berlabel dari 63 hari lalu hingga 14 hari lalu, dan set validasi menggunakan 14 hari terbaru

Cara menghitung pendekatan acuan

  • Pendekatan acuan digunakan sebagai naive baseline untuk memeriksa apakah model non-sepele benar-benar meningkatkan performa
  • Untuk tiap item, dihitung variabel menggunakan spread harga 5 menit terbaru dan volume transaksi 1 jam terbaru
    • ROI: (sell_total - {1% tax} - buy_total) / buy_total
    • Rasio volume transaksi: (1h_volume_traded_high_price / 1h_volume_traded_low_price)
    • Rata-rata gold/second transaksi item tersebut selama 2 minggu terakhir
  • Setelah itu, pendekatan acuan mengurutkan item dalam urutan berikut
    • Hitung Z-score ROI untuk tiap item
    • Hitung Z-score rasio volume transaksi untuk tiap item
    • Keluarkan item yang rata-rata historis gold/second-nya negatif
    • Urutkan menurun berdasarkan nilai (roi_zscore + volume_ratio_zscore)

Eksperimen perbandingan model machine learning

  • Setelah membuat hasil pendekatan acuan, selama 1 minggu dilakukan perbandingan antara baseline dan model regresi random forest, neural network
  • Untuk menghindari ketidaksesuaian rasio sampel, game client memilih output tipe model secara acak saat memberi peringkat order potensial
  • Hasil disusun dalam urutan menurun berdasarkan rata-rata profit per jam
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

Interpretasi hasil eksperimen

  • Pendekatan machine learning menghasilkan performa yang jauh lebih tinggi daripada baseline
  • Di antara model, random forest mencatat profit/hour tertinggi, sedikit unggul atas neural network
  • Hasil ini juga sejalan dengan loss validasi masing-masing model selama pelatihan
  • Fakta bahwa random forest menghasilkan profit/hour tertinggi agak mengejutkan
    • Prediksi random forest umumnya cenderung terbatas pada rentang nilai target dalam data pelatihan
    • Namun, transaksi market making yang diprediksi model-model ini bersifat frekuensi tinggi dengan ROI rendah, sehingga varians data pelatihannya relatif rendah
  • Kode yang digunakan untuk melatih model dapat dilihat pada tautan di atas dan di Github

1 komentar

 
GN⁺ 2024-10-28
Komentar Hacker News
  • Aku juga pernah mencoba hal yang sama dengan Google Sheets, dan OSRS Wiki API benar-benar bagus, jadi cukup menyenangkan
    Keuntungan per jam yang ditampilkan di sini sangat menyedihkan, jadi pada dasarnya melakukan apa pun akan menghasilkan uang lebih banyak daripada ini
    Aku juga ingin melihat analisis tren harga untuk seluruh pasar atau per kategori. Misalnya, apakah semua perlengkapan tempur sihir naik, atau apakah item tertentu mengikuti item lain dengan jeda
    Kalau ada yang penasaran, harganya mungkin sudah lama, tapi aku punya spreadsheet profitabilitas yang kubuat dengan API. Ini lebih baik daripada Wiki karena bisa memperhitungkan batas transaksi, perbandingan metode privat, biaya pemeliharaan per jam, dan semacamnya: https://docs.google.com/spreadsheets/u/0/d/1iekEqInA2PwEuj1W...
    Mungkin juga terlihat metode apa saja yang kuotomatisasi, dan aku sadar bahwa menulis bot ternyata lebih menyenangkan daripada benar-benar bermain. Sayang server privat ditutup lewat jalur hukum, karena di sana aku bisa menjalankan bot tanpa beban etis

    • Keuntungan sebenarnya mestinya sekitar 600 ribu gold per jam kalau bot tidak memilih secara acak di antara tiap versi model
      Mereka mencampuradukkan keuntungan eksperimen ketika tiap model hanya punya akses ke 1/3 transaksi potensial dengan keuntungan ketika hanya model terbaik yang melakukan transaksi
      Selain itu, bot-bot ini berjalan hampir setiap hari selama lebih dari setahun dan tetap tidak diblokir
    • Aku penasaran kenapa bot dianggap oke di server privat. Apakah itu berarti pemain lain menerima penggunaan bot?
  • Pada masa kejayaan RuneScape, hanya dengan memasang order beli dan order jual secara bersamaan untuk item langka yang sama di Grand Exchange, seiring waktu keduanya akan tereksekusi dan menghasilkan untung
    Dengan istilah sekarang, mungkin ini disebut market making

    • Sebelum berangkat sekolah, aku bangun dan memasukkan semua gold yang kupunya ke Grand Exchange, lalu memasang order untuk membeli tulang beberapa gp di bawah harga rata-rata
      Menjelang akhir hari, order itu biasanya tereksekusi, lalu kalau kuletakkan lagi di pasar beberapa gp di atas harga rata-rata, item itu terjual sampai keesokan paginya
      Pada sebagian besar hari ada untung kecil, dan kadang aku rugi karena harga sedikit turun pada siang hari, tapi sebaliknya ketika harga naik aku mendapat keuntungan tambahan
    • Memang, market making pada umumnya bekerja kurang lebih seperti itu
    • Pasar AS juga pada dasarnya cukup mirip dengan cara ini. Ada satu market maker yang luar biasa besar, dan pihak itu juga merupakan donor politik terbesar. Katanya mereka menyumbang 100 juta dolar per tahun hanya ke Partai Republik
      Selain itu, seperti Bernie Madoff, pemilik market maker itu juga punya hedge fund, dan fund tersebut menghasilkan return yang tidak masuk akal setiap tahun. Tentu saja, ceritanya hedge fund itu dijalankan sepenuhnya terpisah dari bisnis market making /s /s /s
      Jadi dari sudut pandang market maker, ini terdengar cukup realistis dibandingkan cara kerja yang sebenarnya terjadi di AS
  • Aku jadi teringat masa ketika World of Warcraft punya aplikasi mobile Auction House. Kita bisa melihat-lihat auction house, memasang item, atau membelinya, dan API-nya juga mudah di-reverse engineering, jadi mudah membuat bot auction house
    Aku tidak sampai memakai algoritma machine learning apa pun; hanya mengambil item yang harganya sangat salah atau membeli dan menjual berdasarkan rentang harga minggu sebelumnya. Kuncinya adalah volume transaksi
    Hasilnya cukup lumayan sampai aku membeli mount 1 juta gold, lalu berhenti, dan tidak lama setelah itu aplikasinya juga diturunkan. Aku pasti bukan satu-satunya yang melakukan hal seperti ini, jadi itu jelas juga berpengaruh

    • WoW tidak terlalu peduli dengan permainan pasar itu sendiri, dan kemungkinan besar aplikasinya diturunkan karena cara implementasinya
      Untuk membuatnya sebagai aplikasi eksternal, akun-akun kemungkinan harus tetap tersambung ke auction house sambil menunggu dan me-refresh, lalu mendorong data itu ke aplikasi
      Aku memakai add-on Auctioneer di dalam game selama 10 tahun
  • Sebanyak apa pun pujian untuk RuneScape secara umum rasanya tidak akan cukup. Tentu saja itu terpisah dari keluhan sah komunitas soal struktur kepemilikannya
    Pada dasarnya ini adalah game berusia lebih dari 20 tahun, tetapi masih mendapat update, dan senjata, quest, serta batas level baru terus ditambahkan

  • Aku pernah mencoba hal serupa di Hypixel selama sekitar satu atau dua bulan
    Aku terus memantau harga bahan untuk berbagai resep crafting dan harga hasil crafting-nya, lalu ketika mencapai tingkat profit tertentu, aku membuat bunyi notifikasi dan pergi sendiri untuk melakukan crafting
    Informasinya mudah diambil dari https://wiki.hypixel.net, dan https://wiki.hypixel.net/Travel_Scrolls paling sering menghasilkan profit bagus
    Karena crafting membutuhkan skill atau level tertentu, harganya tidak terlalu cepat menjadi rata. Pada akhirnya gamenya tidak terlalu dalam sehingga aku bosan, tapi jelas menyenangkan untuk diutak-atik

    • Arbitrase jauh lebih menyenangkan ketika suku bunga bebas risiko adalah 0
  • Tulisannya benar-benar menarik. Aku juga seorang nerd yang rasanya sudah bermain RuneScape selamanya, dan sekarang sebagian besar interaksiku dengan game dilakukan lewat pemrograman
    Aku terutama memakai dua jenis bot: satu adalah bot warna yang mengambil screenshot dan mendeteksi objek dari warna piksel di sekitarnya, dan satu lagi adalah bot klik dasar
    Dalam praktiknya, sekitar 100 baris kode Python yang memakai pyautogui sudah cukup untuk mengotomatisasi banyak bagian game yang menyebalkan
    Yang membuatku penasaran adalah apakah klien Java itu salah satu dari berbagai klien bot open source yang memanggil langsung kode klien, atau sekadar skrip klik yang melakukan input berulang
    Untuk yang pertama, pengalamanku terkena ban tidak bagus

  • Mungkin karena kemampuan membaca saya kurang, tapi saya tidak benar-benar paham apa tepatnya yang dimodelkan di sini
    Kedengarannya penulis mengambil data harga yang mirip dengan candlestick chart
    Bagian yang tidak saya pahami adalah apakah transaksi terjadi di dalam interval 5 menit yang disebutkan, atau apakah model mencari pola di berbagai rentang waktu

    • Ini bukan bidang yang saya kuasai, tapi kalau saya merangkum secara probabilistis seperti burung beo dari apa yang baru saja saya baca, kira-kira begini
      Model machine learning mempelajari data spread harga dan volume transaksi yang dikumpulkan setiap 5 menit lewat cron job dan disimpan ke database, serta data tiap transaksi
      Namun sepertinya model dilatih dengan data historis dari 63 hari lalu hingga 14 hari lalu, lalu divalidasi dengan sisa data terbaru selama 14 hari. Tampaknya ini untuk mencegah temporal leakage, dan dari hasil pencarian, istilah itu berarti fenomena ketika data latih tanpa sengaja memuat informasi masa depan sehingga merusak prediksi
      Jadi untuk menjawab pertanyaannya, model tampaknya mencari pola dari data selama beberapa minggu untuk memberi peringkat kandidat transaksi terbaik pada saat ini, lalu komponen Java mengeksekusi transaksi di dalam game melalui karakter pemain
      Yang secara pribadi belum saya pahami adalah apakah pengumpulan data dan pelatihan ini berjalan terus-menerus, atau apakah setelah dilatih sekali modelnya sudah cukup pintar untuk terus menghasilkan profit. Struktur 49 hari pelatihan dan 14 hari validasi juga belum sepenuhnya saya pahami
    • Data latih terdiri dari transaksi yang benar-benar dijalankan bot selama 63 hari terakhir yang digabungkan dengan data harga dan volume
      Karena itu, model mencari pola data harga dan volume yang pada masa lalu mengarah ke transaksi dengan kinerja baik
      Variabel dependennya adalah gold per detik yang dihasilkan dari transaksi masa lalu
  • Saya pernah berdagang di RuneScape sebelum Grand Exchange diperkenalkan, dan saat masih remaja awal saya menghasilkan kira-kira 1.000 pound sterling
    Misalnya, saya menawar party hat sampai 6 juta gold, lalu menjualnya seharga 6,5 juta, dan mengulanginya
    Saat berhenti bermain, saya menjual semuanya di eBay, dan ibu saya cukup terkejut ketika uangnya masuk
    Tingkat pendapatan per jamnya mengerikan, tapi tanpa pengalaman itu kemungkinan besar saya tidak akan menjadi diri saya yang sekarang

  • "Dua cron job yang berinteraksi dengan OSRS Wiki API: satu polling setiap 5 menit, satu lagi polling setiap jam"
    Saya tidak tahu mengapa perlu dua. Kalau informasi yang sama ada di interval 5 menit saat ini, bukankah polling setiap jam tidak berguna?

  • Saya penasaran apakah ada orang yang pernah melakukan eksperimen serupa di pasar EVE

    • Ada. Di EVE Online, sangat banyak orang melakukannya
      Gaya bermain seperti ini cukup umum, efektif, dan diterima. Namun kalau ditanya detailnya, semua orang akan menjawab bahwa itu rahasia demi keamanan
      Kalau ingin tahu lebih banyak tentang ekonomi EVE Online yang sangat dalam dan kompleks, lihat Oz di YouTube, yang membuat konten tentang pasar dan analisis pasar: https://www.youtube.com/@OZeve
      Pada dasarnya, hampir semuanya dibuat oleh pemain yang menambang ore, membuat komponen, menjualnya kembali ke integrator, lalu berlanjut ke distributor dan pelanggan
      Terkait erat dengan itu, EVE Online juga punya plugin MS Excel resmi buatan Microsoft dan terintegrasi penuh dengan EVE Online API. Game ini bisa menjadi cara efektif untuk menguasai integrasi yang kuat dengan MS Excel
      Panduan singkat dari Oz: https://youtu.be/eAogNNeDZuo
      EVE Online juga punya konvensi bernama Fanfest, tempat orang saling membawakan TED Talk versi EVE, mirip defcon. Ada juga Fanfest 2023 "Market Spreadsheet Masterclass" berdurasi 51 menit: https://www.youtube.com/watch?v=6Ql6IU1eZpM
      Kalau punya ide atau ingin mencobanya sendiri, dengan asumsi Anda sudah punya lisensi MS Excel atau bisa mengintegrasikan solusi sendiri, Anda bisa mulai dengan akun gratis seharga 0 dolar. Namun batasannya adalah Anda tidak punya modal awal, pengetahuan, atau intuisi sama sekali, dan akun gratis tidak bisa memasang order sebanyak karakter yang skill-nya sudah cukup tinggi