RuneScape の Grand Exchange でアルゴリズム取引ボットを動かした記録
(tristanrhodes.com)- Old School RuneScape の Grand Exchange は、アイテムごとの購入上限と取引税があるゲーム内市場であり、自動売買ボットの戦略を実験するのに適した、制約のある市場環境である
- ボットは リアルタイム価格収集、キャラクター操作、注文ごとの予想収益性ランキングを、それぞれ JavaScript・Java・Python アプリケーションに分けて処理する
- 学習データは、5分・1時間単位の価格スプレッドと取引量に、実際に約定した注文の gold/second を組み合わせて作成し、直近14日を検証セットとして分離して時間的リークを避けた
- 1週間の比較実験では、平均時間当たり利益は random forest が 150,892 gold/hr と最も高く、neural network は 123,923 gold/hr、baseline は 87,353 gold/hr だった
- 機械学習モデルは基準手法より高い収益を上げたが、random forest の予測範囲の制約を考えると、高頻度・低ROIの取引ではデータの分散と市場構造が成果を大きく左右する
Grand Exchange の市場構造と取引制約
- Old School RuneScape の Grand Exchange は、プレイヤーがゲーム内のほぼすべてのアイテムについて買い注文・売り注文を出せる市場である
- 一般的な市場と同様に複雑で混沌としているが、短い時間スケールやミクロ構造のレベルではモデル化できる部分がある
- 注文にはアイテムごとの 4時間購入上限 が適用される
- 例: coal ore は4時間で最大13,000個まで購入できる
- 約定した売り注文には 1%の税金 がかかる
- 個別取引価格が 100 gold を超えるアイテムに適用される
- 注文あたり最大 5 million gold に制限される
- アイテム単位で計算し、小数点以下は切り捨てる
- 税収はゲーム開発元がインフレを制御するために使われる
- coal ore 10,000個を1個あたり 142 gold で売ると、税金は
math.floor(0.01 * 142) * 10000 = 10,000 goldとなる
ボット構成とデータパイプライン
- ボットは3つのアプリケーションに分かれている
- JavaScript API: OSRS Wiki リアルタイム価格 API と連携する
- Java クライアント: キャラクターの行動を制御する
- Python API: 可能な注文集合を予想収益性の基準でランク付けする
- OSRS Wiki プロジェクトは、Grand Exchange で取引されるすべてのアイテムのデータを5分ごとに記録する
- 設定可能な過去期間の平均価格スプレッド
- 設定可能な過去期間の取引量
- 各アイテムの購入上限
- 学習用データパイプラインは、OSRS Wiki API を問い合わせる 2つの cronjob で構成される
- 1つは5分ごとに API を問い合わせる
- もう1つは1時間ごとに API を問い合わせる
- 各ジョブは、その期間中に Grand Exchange で取引されたすべてのアイテムの価格スプレッドと取引量をデータベースに記録する
- 実際に約定した注文からも、モデル学習に使うデータを保存する
- 生成された gold/second
- 絶対利益
- 買い注文の初期化タイムスタンプ
- 取引されたアイテム ID
- 2つのテーブルはタイムスタンプ基準で結合される
- 各行には、成功した個別取引の直前期間における Grand Exchange 全体の集計取引データと、その取引の収益性が一緒に入る
- モデルの損失関数のターゲットは gold/second である
- 時間的リークを防ぐため、学習セットは63日前から14日前までのラベル付き取引で構成し、検証セットには直近14日を使う
基準手法の計算方法
- 基準手法は、非自明なモデルが実際に性能を改善するか確認するための naive baseline として使われる
- 各アイテムについて、直近5分の価格スプレッドと直近1時間の取引量を使って変数を計算する
- ROI:
(sell_total - {1% tax} - buy_total) / buy_total - 取引量比率:
(1h_volume_traded_high_price / 1h_volume_traded_low_price) - 直近2週間における当該アイテム取引の平均 gold/second
- ROI:
- その後、基準手法は次の順序でアイテムをソートする
- 各アイテムの ROI Zスコアを計算する
- 各アイテムの取引量比率 Zスコアを計算する
- 過去平均 gold/second が負のアイテムを除外する
(roi_zscore + volume_ratio_zscore)の値を基準に降順でソートする
機械学習モデルの比較実験
- 基準手法の結果を作成した後、1週間にわたり baseline と random forest、neural network の回帰モデルを比較した
- サンプル比率の不一致を避けるため、ゲームクライアントは潜在注文をランク付けする際、各モデルタイプの出力をランダムに選択した
- 結果は平均時間当たり利益の降順で整理されている
| 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 |
実験結果の解釈
- 機械学習手法は baseline よりかなり高い成果を出した
- モデル別では random forest が最も高い profit/hour を記録し、neural network をわずかに上回った
- この結果は、学習中の各モデルの検証損失とも一致する
- random forest が最も高い profit/hour を生んだ点は、やや意外である
- random forest の予測は一般に、学習データのターゲット値の範囲内に制限される傾向がある
- ただし、これらのモデルが予測するマーケットメイク取引は高頻度・低ROIの性格を持つため、学習データの分散は相対的に低い
- モデル学習に使ったコードは、上記リンクと Github で確認できる
1件のコメント
Hacker News のコメント
自分も同じようなことを Google Sheets でやってみたが、OSRS Wiki API が本当に素晴らしく、かなり楽しかった。
ここに表示されている時間あたりの利益はひどい水準なので、実質的には何をしてもこれより稼げる。
市場全体やカテゴリ別の価格トレンド分析も見てみたい。たとえば、すべての魔法戦闘装備が値上がりしているのか、特定のアイテムが別のアイテムに遅れて追随するのか、といったもの。
興味がある人向けに、価格は古いかもしれないが、API で作った自分の収益性スプレッドシートがある。取引制限、非公開の手法比較、時間あたりの維持コストなどを考慮できるので Wiki より良い: https://docs.google.com/spreadsheets/u/0/d/1iekEqInA2PwEuj1W...
どんな手法を自動化しているかもおそらく見えるはずだが、ボットを書くことのほうが実際にプレイするより楽しいと分かった。法的手段でプライベートサーバーが潰されていくのは残念だ。そこなら倫理的な負担なしにボットを動かせたから。
各モデルが潜在的な取引の 1/3 にしかアクセスしない実験の収益と、最良のモデルだけが取引した場合の収益を混同している。
さらに、このボットたちは1年以上ほぼ毎日動いていたにもかかわらず、停止されなかった。
RuneScape の全盛期には、Grand Exchange で同じ希少アイテムに買い注文と売り注文を同時に出しておくだけで、時間が経つと両方約定して利益が出た。
今の言葉で言えば、おそらく マーケットメイク と呼べるものだと思う。
一日の終わりごろにはたいてい注文が約定し、それを平均価格より数 gp 高く市場に出し直すと、翌朝までには売れていた。
ほとんどの日は小さな利益が出て、たまに日中に価格が少し下がって損をすることもあったが、逆に上がる日には追加の利益も出た。
そのうえ Bernie Madoff のように、そのマーケットメイカーの所有者もヘッジファンドを持っており、そのファンドは毎年とんでもないリターンを出している。もちろん、そのヘッジファンドはマーケットメイク事業とは完全に別個に運営されている、という建前だ /s /s /s
だからマーケットメイカーの視点から見ると、米国で実際に物事が回っている仕組みとしてかなり現実味があるように聞こえる。
World of Warcraft に オークションハウスのモバイルアプリ があった時代を思い出す。オークションハウスを見て回り、アイテムを出品したり買ったりでき、API もリバースエンジニアリングしやすかったので、オークションハウスのボットを作るのは簡単だった。
何らかの機械学習アルゴリズムにまで進んだわけではなく、とんでもなく誤った価格が付いたアイテムを拾ったり、先週の価格レンジを基準に売買したりしていた。肝心なのは取引量だった。
かなり稼げて100万ゴールドのマウントを買ったあとやめたが、その少し後にアプリも終了した。自分だけがこういうことをしていたわけではないはずなので、その影響も間違いなくあっただろう。
外部アプリとして作るには、アカウント群がオークションハウスに接続したまま待機して更新し、そのデータをアプリへプッシュしていたのだろう。
自分は10年間、ゲーム内で Auctioneer アドオンを使っていた。
RuneScape 全般については、いくら褒めても足りないくらいだ。もちろん、所有構造に対するコミュニティの正当な不満は別として。
基本的に 20年以上前のゲーム なのに、今でもアップデートがあり、新しい武器やクエスト、レベル上限も追加され続けている。
Hypixel で1〜2か月ほど似たようなことをやってみた。
複数のクラフトレシピの材料価格と完成品価格を繰り返し監視し、一定の利益水準に達したら通知音を鳴らして、自分で行ってクラフトを回していた。
情報は https://wiki.hypixel.net から簡単に取得でき、https://wiki.hypixel.net/Travel_Scrolls が最も頻繁に良い利益を出していた。
クラフトには特定のスキルやレベルが必要だったので、価格があまり早く均衡しなかった。結局ゲーム自体はそれほど深くなくて飽きたが、いじって遊ぶには間違いなく楽しい。
記事は本当に面白かった。自分も RuneScape を永遠にやってきたような nerd で、今ではゲームとの関わりの大半がプログラミングを通じたものになっている。
主に2種類のボットを使っていて、1つはスクリーンショットを撮り、周辺ピクセルの色でオブジェクトを検出する カラーボット、もう1つは基本的なクリックボット。
実際には pyautogui を使った Python コード100行程度で、ゲームの面倒な要素のかなりを自動化するには十分だった。
気になるのは、Java クライアントがクライアントコードに直接呼び出しを行う複数のオープンソース・ボットクライアントの一つなのか、それとも反復入力を行うクリック用スクリプトなのかという点だ。
前者では停止された経験があり、あまり良くなかった。
読解力が足りないのかもしれないが、ここで正確に何をモデル化しているのかよく分からない
著者はローソク足チャートに似た価格データを取得しているように聞こえる
分からないのは、取引が言及されている5分間隔の中で起きるのか、それともモデルが複数の時間範囲にまたがるパターンを探すのかという点
機械学習モデルは、5分ごとのcronジョブで収集してデータベースに保存した価格スプレッドと出来高データ、そして個々の取引データを学習する
ただし、63日前から14日前までの過去データで学習し、残りの直近14日分のデータで検証しているようだ。時間的リーケージ(temporal leakage)を防ぐためらしく、調べてみると、学習データが意図せず未来の情報を含んでしまい予測を台無しにする現象を指すとのこと
なので質問に答えるなら、モデルは複数週にわたるデータからパターンを見つけ、現時点での最適な取引候補をランク付けし、Javaコンポーネントがゲーム内でプレイヤーキャラクターとして取引を実行する構造に見える
個人的に分からないのは、このデータ収集と学習が継続的に回り続ける仕組みなのか、それとも一度学習した後も十分賢くて利益を出し続けるのかという点。49日学習、14日検証という構成も完全には理解できていない
したがってモデルは、過去に成績の良かった取引につながった価格・出来高データのパターンを探す
従属変数は、過去の取引で生成された秒あたりのゴールド
Grand Exchangeが導入される前のRuneScapeで取引して、10代前半のころにおよそ1,000ポンドを稼いだ
たとえばパーティーハットを600万ゴールドまで値切って買い、その後650万で売って、それを繰り返していた
ゲームをやめるときに全部eBayで売り、入金されると母はかなり驚いていた
時給換算ではひどいものだったが、あの経験がなければ今の自分にはなっていなかった可能性が高い
「OSRS Wiki APIとやり取りするcronジョブが2つある。1つは5分ごとにポーリングし、もう1つは毎時ポーリングする」
なぜ2つ必要なのか分からない。現在の5分間隔に同じ情報があるなら、毎時ポーリングは不要ではないのか?
EVEの市場でも似た実験をした人がいるのか気になる
こうしたプレイはかなり多く、有効で、歓迎されているプレイスタイルだ。ただし詳しく聞けば、皆セキュリティ上の秘密だと答えるだろう
EVE Onlineの非常に深く複雑な経済についてもっと知りたいなら、YouTubeで市場と市場分析のコンテンツを作っているOzを見るとよい: https://www.youtube.com/@OZeve
基本的にほぼすべてのものは、プレイヤーが鉱石を掘って部品を作り、それを統合業者に売り戻し、さらに流通業者と顧客へつながっていく形で作られている
これに密接に関連して、EVE OnlineにはMicrosoft製の公式MS Excelプラグインもあり、EVE Online APIと完全に統合されている。このゲームは、MS Excelと強力な統合機能を使いこなす効果的な方法になり得る
Ozのクイックガイド: https://youtu.be/eAogNNeDZuo
EVE OnlineにはFanfestというコンベンションもあり、defconのように互いにEVE流のTED Talkを発表する。51分のFanfest 2023「Market Spreadsheet Masterclass」もある: https://www.youtube.com/watch?v=6Ql6IU1eZpM
アイデアがある、または自分で試してみたいなら、すでにMS Excelライセンスを持っているか、独自ソリューションを統合できるという前提で、無料アカウントから0ドルで始められる。ただし初期資本、知識、勘がまったくなく、無料アカウントでは十分にスキルを上げたキャラクターほど多くの注文を出せないという制限がある