1 puntos por GN⁺ 2024-10-28 | 1 comentarios | Compartir por WhatsApp
  • El Grand Exchange de Old School RuneScape es un mercado dentro del juego con límites de compra por ítem e impuestos a las transacciones, por lo que ofrece un entorno de mercado acotado ideal para experimentar con estrategias de bots de compraventa automática.
  • El bot separa en aplicaciones JavaScript, Java y Python la recolección de precios en tiempo real, el control del personaje y la clasificación de órdenes por rentabilidad esperada, respectivamente.
  • Los datos de entrenamiento se construyeron combinando spreads de precios y volúmenes en intervalos de 5 minutos y 1 hora con el gold/second de órdenes realmente ejecutadas, y se separaron los últimos 14 días como conjunto de validación para evitar fugas temporales.
  • En un experimento comparativo de 1 semana, la ganancia promedio por hora fue más alta con random forest, con 150,892 gold/hr; la neural network obtuvo 123,923 gold/hr y el baseline 87,353 gold/hr.
  • Aunque los modelos de machine learning generaron mayores ganancias que el método de referencia, considerando la restricción del rango de predicción de random forest, en operaciones de alta frecuencia y bajo ROI la dispersión de los datos y la estructura del mercado influyen fuertemente en el desempeño.

Estructura de mercado y restricciones de trading del Grand Exchange

  • El Grand Exchange de Old School RuneScape es un mercado donde los jugadores pueden colocar órdenes de compra y venta para casi todos los ítems del juego.
  • Es complejo y caótico como un mercado normal, pero en escalas temporales cortas o a nivel de microestructura hay partes que se pueden modelar.
  • Las órdenes tienen un límite de compra de 4 horas por ítem.
    • Ej.: coal ore se puede comprar hasta un máximo de 13,000 unidades durante 4 horas.
  • Las órdenes de venta ejecutadas tienen un impuesto del 1%.
    • Se aplica a ítems cuyo precio individual de transacción supera los 100 gold.
    • Está limitado a un máximo de 5 million gold por orden.
    • Se calcula por unidad de ítem y los decimales se redondean hacia abajo.
    • Los ingresos por impuestos se usan para que el desarrollador del juego controle la inflación.
  • Si se venden 10,000 coal ore a 142 gold cada una, el impuesto es math.floor(0.01 * 142) * 10000 = 10,000 gold.

Arquitectura del bot y pipeline de datos

  • El bot está dividido en tres aplicaciones.
    • API en JavaScript: interactúa con la API de precios en tiempo real de OSRS Wiki.
    • Cliente Java: controla las acciones del personaje.
    • API en Python: ordena el conjunto de órdenes posibles según su rentabilidad esperada.
  • El proyecto OSRS Wiki registra cada 5 minutos los datos de todos los ítems comerciados en el Grand Exchange.
    • Spread de precios promedio para un período histórico configurable.
    • Volumen para un período histórico configurable.
    • Límite de compra de cada ítem.
  • El pipeline de datos para entrenamiento está compuesto por dos cronjobs que consultan la API de OSRS Wiki.
    • Uno consulta la API cada 5 minutos.
    • El otro consulta la API cada 1 hora.
    • Cada tarea registra en la base de datos el spread de precios y el volumen de todos los ítems negociados en el Grand Exchange durante ese período.
  • También se almacenan datos de órdenes realmente ejecutadas para usarlos en el entrenamiento del modelo.
    • gold/second generado.
    • Ganancia absoluta.
    • Timestamp de inicialización de la orden de compra.
    • ID del ítem negociado.
  • Las dos tablas se unen por timestamp.
    • Cada fila contiene los datos agregados de trading de todo el Grand Exchange en el período inmediatamente anterior a una operación exitosa individual, junto con la rentabilidad de esa operación.
  • El objetivo de la función de pérdida del modelo es gold/second.
  • Para evitar fugas temporales, el conjunto de entrenamiento se compone de transacciones etiquetadas desde 63 días antes hasta 14 días antes, y el conjunto de validación usa los 14 días más recientes.

Método de cálculo del enfoque de referencia

  • El enfoque de referencia se usa como naive baseline para comprobar si un modelo no trivial realmente mejora el rendimiento.
  • Para cada ítem, se calculan variables usando el spread de precios de los últimos 5 minutos y el volumen de trading de la última 1 hora.
    • ROI: (sell_total - {1% tax} - buy_total) / buy_total
    • Ratio de volumen: (1h_volume_traded_high_price / 1h_volume_traded_low_price)
    • gold/second promedio de las operaciones de ese ítem durante las últimas 2 semanas.
  • Luego, el método de referencia ordena los ítems en el siguiente orden.
    • Calcula el Z-score de ROI de cada ítem.
    • Calcula el Z-score del ratio de volumen de cada ítem.
    • Excluye los ítems cuyo gold/second promedio histórico sea negativo.
    • Ordena en orden descendente según el valor (roi_zscore + volume_ratio_zscore).

Experimento comparativo de modelos de machine learning

  • Después de obtener los resultados del método de referencia, durante 1 semana se compararon el baseline y modelos de regresión random forest y neural network.
  • Para evitar desajustes en la proporción de muestras, el cliente del juego seleccionaba aleatoriamente la salida de cada tipo de modelo al clasificar órdenes potenciales.
  • Los resultados se organizaron en orden descendente según la ganancia promedio por hora.
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

Interpretación de los resultados del experimento

  • Los enfoques de machine learning tuvieron un desempeño considerablemente superior al baseline.
  • Por modelo, random forest registró el profit/hour más alto y superó por poco a neural network.
  • Este resultado también coincide con la pérdida de validación de cada modelo durante el entrenamiento.
  • Que random forest haya producido el profit/hour más alto es algo inesperado.
    • Las predicciones de random forest generalmente tienden a quedar limitadas dentro del rango de valores objetivo de los datos de entrenamiento.
    • Sin embargo, las operaciones de creación de mercado que predicen estos modelos son de alta frecuencia y bajo ROI, por lo que la dispersión de los datos de entrenamiento es relativamente baja.
  • El código usado para entrenar los modelos puede consultarse en los enlaces anteriores y en Github.

1 comentarios

 
GN⁺ 2024-10-28
Comentarios en Hacker News
  • Yo también probé algo parecido con Google Sheets, y la API de la OSRS Wiki es realmente excelente, así que fue bastante divertido
    La ganancia por hora que se muestra aquí es lamentable, así que en la práctica casi cualquier cosa daría más dinero que esto
    También me gustaría ver un análisis de tendencias de precios de todo el mercado o por categorías. Por ejemplo, si todo el equipo de combate mágico está subiendo, o si ciertos ítems siguen con retraso a otros ítems
    Por si a alguien le da curiosidad, tengo una hoja de cálculo de rentabilidad hecha con la API; puede que los precios estén desactualizados, pero sigue siendo mejor que la Wiki porque permite considerar límites de intercambio, comparar métodos privados y costos de mantenimiento por hora: https://docs.google.com/spreadsheets/u/0/d/1iekEqInA2PwEuj1W...
    Probablemente también se vea qué métodos estoy automatizando, pero terminé descubriendo que programar bots es más divertido que jugar de verdad. Es una lástima que tumben servidores privados por vías legales, porque ahí se podían usar bots sin carga ética

    • La ganancia real habría sido de alrededor de 600 mil de oro por hora si el bot no hubiera elegido aleatoriamente entre cada versión del modelo
      Se están confundiendo las ganancias experimentales, donde cada modelo solo accedía a 1/3 de las operaciones potenciales, con las ganancias que habría habido si solo operara el mejor modelo
      Además, estos bots corrieron casi todos los días durante más de un año y aun así no fueron suspendidos
    • Me da curiosidad por qué los bots estarían bien en servidores privados. ¿Eso significa que los demás jugadores aceptan que se usen bots?
  • En la época dorada de RuneScape, bastaba con poner al mismo tiempo órdenes de compra y venta sobre el mismo ítem raro en el Grand Exchange, y con el tiempo ambas se ejecutaban y dejaban ganancia
    Hoy probablemente a eso se le llamaría creación de mercado

    • Antes de ir a la escuela me levantaba y metía todo mi oro en el Grand Exchange, dejando órdenes para comprar huesos unos cuantos gp por debajo del precio promedio
      Para el final del día normalmente la orden ya se había ejecutado, y si luego los volvía a listar unos cuantos gp por encima del promedio, para la mañana siguiente ya se habían vendido
      La mayoría de los días sacaba una pequeña ganancia, y a veces perdía porque el precio bajaba un poco durante el día, pero en otros días, cuando subía, también conseguía una ganancia extra
    • En realidad, la creación de mercado suele funcionar más o menos así
    • El mercado de EE. UU. en realidad se parece bastante a esto. Hay un creador de mercado absurdamente grande, y además resulta ser el mayor donante político. Según dicen, aporta 100 millones de dólares al año solo a los republicanos
      Encima, igual que Bernie Madoff, el dueño de ese creador de mercado también tiene un hedge fund, y ese fondo obtiene rendimientos ridículos cada año. Claro, se supone que ese hedge fund opera completamente por separado del negocio de creación de mercado /s /s /s
      Así que, visto desde la perspectiva de un creador de mercado, suena bastante realista respecto a cómo funcionan de verdad las cosas en Estados Unidos
  • Esto me recordó cuando World of Warcraft tenía una app móvil de la casa de subastas. Podías revisar la casa de subastas, publicar ítems o comprarlos, y la API también era fácil de hacerle ingeniería inversa, así que era sencillo crear bots para la subasta
    No llegué a usar algún algoritmo de aprendizaje automático ni nada así; simplemente aprovechaba ítems con precios absurdamente mal puestos o compraba y vendía según el rango de precios de la semana anterior. La clave era el volumen de operaciones
    Gané bastante bien, lo suficiente para comprar una montura de 1 millón de oro, y luego lo dejé. Poco después también retiraron la app. Seguro que yo no era el único haciendo esto, así que sin duda eso habrá influido

    • A WoW realmente no le importaba mucho el juego de mercado en sí, y probablemente la retiraron por la forma en que estaba implementada
      Para hacerlo como app externa, las cuentas seguramente tenían que quedarse conectadas a la casa de subastas, refrescando y empujando esos datos hacia la app
      Yo usé el addon Auctioneer dentro del juego durante 10 años
  • No se puede hablar lo suficiente de lo bueno que es RuneScape en general. Claro, eso aparte de las quejas totalmente válidas de la comunidad sobre su estructura de propiedad
    Básicamente es un juego de más de 20 años y aun así sigue recibiendo actualizaciones, además de nuevas armas, misiones y aumentos del límite de nivel

  • Hice algo parecido en Hypixel durante uno o dos meses
    Estaba monitoreando repetidamente el precio de los materiales de varias recetas de fabricación y el precio del resultado fabricado, y cuando llegaba a cierto nivel de ganancia sonaba una alerta para que yo fuera a fabricar manualmente
    Era fácil sacar la información de https://wiki.hypixel.net, y https://wiki.hypixel.net/Travel_Scrolls era lo que más seguido daba buenas ganancias
    Como fabricar requería ciertas habilidades o nivel, los precios no se nivelaban demasiado rápido. Al final el juego no era tan profundo y me aburrí, pero definitivamente es divertido para experimentar un rato

    • El arbitraje es mucho más divertido cuando la tasa libre de riesgo es 0
  • El artículo estuvo buenísimo. Yo también soy un nerd que siente que ha jugado RuneScape desde siempre, y ahora la mayor parte de mi interacción con el juego pasa por programación
    Principalmente uso dos tipos de bots: uno es un bot de color que toma capturas de pantalla y detecta objetos por el color de los píxeles cercanos, y el otro es un bot básico de clics
    En la práctica, unas 100 líneas de código Python usando pyautogui bastaban para automatizar buena parte de lo tedioso del juego
    Lo que me da curiosidad es si se trata de uno de esos varios clientes de bots de código abierto que el cliente Java invoca directamente en el código del cliente, o si es un script de clics que repite entradas
    Con lo primero no he tenido buenas experiencias: sí me han suspendido

  • Puede que me falte comprensión lectora, pero no me queda claro qué es exactamente lo que se está modelando aquí
    Suena a que el autor obtiene datos de precios parecidos a un gráfico de velas
    Lo que no entiendo es si las operaciones ocurren dentro del intervalo de 5 minutos que se menciona, o si el modelo busca patrones a lo largo de varios marcos temporales

    • No es un tema que domine, pero si intento resumir de forma probabilística como loro lo que acabo de leer, sería algo así:
      El modelo de aprendizaje automático aprende de los datos de spread de precios y volumen de transacciones recolectados cada 5 minutos mediante una tarea cron y guardados en una base de datos, junto con los datos de cada operación individual
      Eso sí, parece que entrena con datos históricos desde hace 63 días hasta hace 14 días, y valida con los 14 días más recientes. Supongo que es para evitar la fuga temporal (temporal leakage), que por lo que veo al buscarlo significa que los datos de entrenamiento incluyen sin querer información futura y arruinan la predicción
      Así que, para responder la pregunta, parece que el modelo busca patrones en datos que abarcan varias semanas para clasificar los mejores candidatos de intercambio en el momento actual, y que un componente en Java ejecuta las operaciones dentro del juego usando un personaje jugador
      Personalmente, lo que no entiendo es si esta recolección de datos y entrenamiento sigue corriendo de forma continua, o si con entrenarlo una vez ya queda lo bastante listo como para seguir generando ganancias. Tampoco termino de entender del todo la estructura de 49 días de entrenamiento y 14 días de validación
    • Los datos de entrenamiento están compuestos por las operaciones reales ejecutadas por el bot durante los últimos 63 días, combinadas con datos de precios y volumen
      Por lo tanto, el modelo busca patrones de datos de precio y volumen que llevaron en el pasado a operaciones con buen rendimiento
      La variable dependiente es el oro por segundo generado en operaciones pasadas
  • Hice trading en RuneScape antes de que existiera el Grand Exchange, y cuando era un adolescente joven gané aproximadamente 1,000 libras
    Por ejemplo, negociaba para comprar party hats por hasta 6 millones de oro y luego las vendía por 6.5 millones, y repetía eso una y otra vez
    Cuando dejé el juego, vendí todo en eBay, y cuando entró el dinero mi madre se sorprendió bastante
    La ganancia por hora era terrible, pero es muy posible que sin esa experiencia no sería quien soy hoy

  • "Dos tareas cron que interactúan con la API de OSRS Wiki: una consulta cada 5 minutos y la otra cada hora"
    No entiendo por qué hacen falta dos. Si la información actual ya está en el intervalo de 5 minutos, ¿no sería inútil consultar cada hora?

  • Me pregunto si alguien ha hecho experimentos parecidos en el mercado de EVE

    • Sí. Muchísima gente lo hace en EVE Online
      Es un estilo de juego bastante común, válido y bien recibido. Eso sí, si preguntas por detalles, todos te dirán que es secreto por seguridad
      Si quieres aprender más sobre la economía tan profunda y compleja de EVE Online, puedes ver a Oz en YouTube, que hace contenido sobre mercados y análisis de mercado: https://www.youtube.com/@OZeve
      Básicamente, casi todo se produce porque los jugadores minan mineral, fabrican componentes, se los revenden a integradores, y de ahí pasan a distribuidores y clientes
      Muy relacionado con esto, EVE Online también tiene un plugin oficial de MS Excel creado por Microsoft y totalmente integrado con la API de EVE Online. Este juego puede ser una forma efectiva de desarrollar habilidad con MS Excel y sus potentes integraciones
      Guía rápida de Oz: https://youtu.be/eAogNNeDZuo
      EVE Online también tiene una convención llamada Fanfest, donde, como en defcon, la gente da sus propias charlas estilo TED pero versión EVE. También hay una charla de 51 minutos de Fanfest 2023, "Market Spreadsheet Masterclass": https://www.youtube.com/watch?v=6Ql6IU1eZpM
      Si tienes una idea o quieres probarlo tú mismo, puedes empezar con una cuenta gratuita por 0 dólares, suponiendo que ya tengas una licencia de MS Excel o puedas integrar tu propia solución. Eso sí, hay limitaciones si no tienes capital inicial, conocimientos ni intuición, y además una cuenta gratuita no puede poner tantas órdenes como un personaje con suficientes habilidades desarrolladas