翻訳:The Economics of Trading, Part III - BOTS

09/03/2013

MTG Programing ゲーム 翻訳




[原文] The Economics of Trading, Part III - BOTS

MTG Online 上で動くボットに興味を持って、色々調べているうちに見つけた記事です。
他のフォーラムや何かでは AutoIt を使う場合が多いと書いてありましたが、本記事で言及している MTGOLibrary のサイトを見てみると、このボットはもう少し高級な言語で作ってありそうです。
仕組みは理解できましたが、実際作るとなると準備がとても面倒ですね…。

自分は英語が苦手なので、訳はざっくりです。
また訳し方のわからない箇所も多々あり、誤訳もかなりあると思いますので、原文と照らし合わせてご利用ください。
その際にご指摘もいただけるとありがたいです。



The Economics of Trading, Part III - BOTS
By: one million words, Pete Jahn 
Nov 17 2010 2:44am

ボットの経済

ここ2週間、私はトレードでどうやって利益をあげてやるかと夢中になっていた。私が始めたシリーズ「an article on the ethics of trading(クリックすると原文ページに飛びます)」の記事はいまだに反響がある。今までの記事から一段階進み、労力や経費、そして知りたいであろう MTGO のトレーディングでの儲け方をみてみよう。私は長期間一定の利益を得るためにリピーターを増やす必要があることを示した。そのためには、手ごろな価格で売らなければならなかったし、顧客が望む時に望む物を確保しなければならなかった。MTGOは一日中稼動しているので、24時間利用可能でなければならない。どう考えてもボットが必要になるね。

ボットは自動でカードの取引をしてくれるプログラムだ。現実のMTGOのアカウントでボットを動かし、取引を行う。自動でできてしまうから、直接人間が監視する必要もない。私が知る限り、ボットは取引の要請に応じるだけだ。その要請の仕方はあまり馴染みがないものだが。(これは技術的に可能だが、人間がチャット欄に打ち込んだ要求に反応、認識、選択するプログラムは行き過ぎではないだろうか。これはジェリービーンズを使って完全な1分の1サイズの像の複製を作るようなものだ。技術的にはできる、がもっと有効に時間を使えるのではないか?)

今のたとえ話は、グーグルで"elephant made of jelly beans"と検索すると出てくるよ。

 [画像:クリックすると原文の画像に設定されているリンク先へジャンプします]

ええと、何やらこれは "It's Sugar" と呼ばれているらしい。

ボットの話に戻ろう。ボットが何をしているのか見てみようじゃないか。

ボットの取引は自動で行われる。それはあなたが店から品物を買うのとなんら変わらない。よし、もっと掘り下げてみようか。私は紙のカードを買うため、ヒースの店「Cape Fear Games」に入る。入り口を通り過ぎ、挨拶をする。私がアージェンタムの鎧漸増爆弾が欲しいと言うと、ヒースはケースからそれらを取り出し、カウンターに置く。「アージェンタムの鎧が1.25ドルで漸増爆弾は5ドル。合計は…長距離運転の特別割引で10%安くしとくよ。5.6ドルだね。」と彼が言う。私は彼に6ドル渡し、彼は私におつりとカード2枚を手渡す。

もちろんこれは妄想のシナリオだ。Cape Fear は1キロマイル程も先にあって、本当に長距離の運転になる。さらに妄想を続けると、私はドラフトに参加し、槌のコスとオパールのモックスのフォイルを引き当て、マッチをすべて全勝で終える。これが私のシナリオだ。

オンラインにおいても、概ね同じ手順だ。一方がトレードの要求を開始する。買い手は買いたいカードを見つける。売り手は価格を提示する。いくらか交渉があるかもしれない。買い手はカードを手に入れ、売り手はチケットを手にする。オンラインではチケットの端数をサポートしていないため、お釣りを渡すことはできない。代わりに、売り手が端数を記憶しておくか、買い手のほうで端数が余らないように他のカードを追加することができる。一旦両人がそのトレードに合意すると、お互いにトレード内容を確認し、その後カードとチケットが自動的に交換される。

ボットには、しなければならない点がいくつかある。トレードの要求に応じ、買い手の望むカードを認識し、価格を提示し、そしてトレードする。買い手の気が変わることも理解し、対応できるようにしなければならない。例えば、私が起源の波が安ければ欲しいと思っていたとする。たいていの場合、そのカードが売っているか確かめるために、ボットとのトレードを試みる。今回はカードを追加した後に、(まてよ…まだドラフトもシールドもやるよな。きっとこのカードも引き当てるさ。)と思い直し、そのカードのトレードを取りやめる。ボット側は私の今の行動を理解し、適切に対処しなければならない。(例えば私が取り消したカードの請求はしない、とかね。)

私がその取引内容に満足すれば、ボットは私のアカウントから必要な分だけチケットを取る。そうすればもうすぐトレードは終わりだ。私が Confirm Trade ボタンをクリックする。ボットも同じ動作が可能だが、私がカードを追加し終えたか把握する必要がある。通常の慣習では、買い手がメッセージボックスに "done" と打ち込むことになっている。ボットがその言葉を確認すると、ボット側の確認ボタンが押される。最終確認が済んだら、トレードは完了だ。

例を出そう。下のスクリーンショットは MTGOTradersBot というボットでカードを購入しているところだ。メッセージ欄を見てみると、カードの価格、ボットが得る額(この場合、私はすでに要求額以上をボットにストックしていた)、そしてカードをトレードから除外する方法も記されている。(興味深い点:私がこの2枚のカードを買った理由は、ドラフト、シールドで一度も引かず、尚且つ構築で使いたかったからだ。しかし購入後にプレイした4パックシールドで、両方とも当たってしまった。これは陰謀に違いない。)

 [画像:クリックすると原文に記載された画像へジャンプします。] 

ボットはカードを購入するために動かすこともできるが、その場合は販売とは少しだけ違った動きをする。この場合ボットは、売り手が提供可能なカードを走査、その中から欲しいカードをピックアップし、価格とその分のチケットを提示、その後トレードとなる。MTGOTradersBUYBOT がその良い例となるだろう。理論的には、ボットは売りと買いの両方を同時にこなすことができるが、実際は片方の機能だけをこなすボットを複数構築し動かす。(それには多くの理由があるが、大きな理由のひとつには、買取専用ボットはチケットを保有しておくだけでよく、販売専用ボットはカードだけで済むため、プログラミングが楽だからだ。)

ボットはどうやって動くのか

ちょっと一言。その昔、私はコンピュータプログラムを書いていた。それはとても昔のことで、歴史書にしか登場しないような言語を扱っていた。(Pasqual, FORTRAN, BASIC, C64 machine code, などなど。) 私はもう10年以上プログラミングをしていない。しかしMTGOに詳しいプログラマーについて語ることはできる。(やぁ、ジョーダン!) 以下の情報は主に彼によるものだが、何らかの過失については十中八九私によるものだ。彼が技術的な説明を易しくしてくれたものを、私がさらに簡単にしている。だからあまりに簡単すぎることをご勘弁願いたい。

ボットは実際の MTGO のセッションを動かし、セッション上で影響も受ける。実際のセッションが必要ということはつまり、ボット専用のアカウントを買う必要があるということだ。(もしくはあなたがオンラインのときだけボットの機能をオフにする。多少目的から離れてしまうがね。) ボットは MTGO のプログラムをハッキングすべきではない。それは難しいだろうし、もっと重要なことは、ハッキングは行動規範に違反しアカウントの停止や凍結になる可能性がある。アカウントが停止されすべてのカードとチケットを失うのはいただけない。

幸いボットは、カーソルを動かしたりボタンをクリックするコードを使用しての交渉が可能だ。また、ディスカッションボックスの強調されたテキストやコメントをノートパッドにコピーしたり、 OCR を使って関係する文字列を見つけ出し読むこともできる。(例えば "done"とかね。) また特定のピクセルの位置や色の変化を記憶しておくことで、ボットの安定した動作を可能にする。このためにはクライアントをフルスクリーンにし位置を固定した状態でボットを動かす必要がある。(こうすることにより、 "Confirm" ボタンは常に左上からXピクセル下でYピクセル右の位置ということが明らかだ。)

ボットは、使うドキュメントが何であれテキストの一部をコピーし、メッセージボックスの入力欄にペーストすることで顧客と対話できる。(例えば、トレードの最後には毎回「購入ありがとう。友達登録を忘れずに、それからまたカードが欲しくなったらきてね!」とペーストすることができる。)

トレードの操作において、ボットはトレードを開始し、顧客が購入を決めたカードを把握する必要がある。ボットはそれらのカードをチェックし、こちらで定めた価格表に基づいてカードの価格と合計金額を顧客に伝える。ボットは何らかの割引やすでに顧客がボットにストックしている額を適用し、合計の端数を切り上げた額のチケットを顧客のアカウントから追加する。そして顧客がカードを追加したり取り下げたり、"done" が入力されるまで待つ。(もしくは様々な問題に対処する処理を実行することもできる。例えば「チケットが足りません。トレード可能なチケット数を増やしてください。」と打ち、待つこともできる。若い娘のようにね。)

買取ボットはそれとは逆のよく似た動きをする。チケットを渡しカードを受け取る。買取ボットには価格表と買取の優先順位やどれだけ買うかを識別するリストが必要だ。(例えば、売り手が原始のタイタンを追加で売ろうとしているのに、ボットの買取スロットがアージェンタムの鎧と稲妻でいっぱいになることは望まないだろう。優先順位のリストはスロットがアルファベット順に埋まっていくような問題を解決してくれる。)

さらに、問題や不正を防止するプログラムやルーチンも必要だ。裏口からカードやチケットを失いたくなければ、事前にプログラムしておく必要がある。確認ボタンを押す前に再確認するルーチンを導入し、トレードする金額やカードをダブルチェックする。(古い詐欺で言えば、最初のトレードスクリーンでトレード可能にしたカードを、次の画面でトレード不可にするというものがある。) また、もし売買価格がゼロ以下になったときは、トレードを中断するルーチンも必要だ。価格を入力し間違えてしまい、1枚の原始のタイタン(35チケット)と4枚のオパールのモックス(10チケット)を5チケットで買えることに気づいた顧客のせいで悲惨な一日を過ごすことも十分ありうる。

のろのろトレードしている顧客がいたら、一定時間で追い出すことも必要だ。時折、トレード画面を開いたあとにドラフトが始まり、トレード画面を開いたまま去って行くプレイヤーもいる。トレード画面が開いたままでは他の誰ともトレードできないため、一定の時間が経過したらセッションを閉じる必要がある。「1分間アクションが無いか、5分間が経過するとトレードを終了します。」というようなルールが働いても良いが、トレードの総額が10チケット増える毎に制限時間を延ばすことも、顧客への良きサービスとなる。

最後にもちろん、各顧客とストックされたチケットの端数を含むすべてのトレードの記録を残しておく必要がある。もしあなたがトレードで生計を立てようとしているなら、トレード毎にさらに情報を必要とするだろう。なぜなら税金を払うだろうから。十分に記録することは会計監査を単に苦痛にさせるが、それをしなかった場合はその比ではない。

応用

今まで挙げた基本的な機能に加えて、いくつかの機能を実行させたい。それらは多くのボットに標準搭載されているだろうが、まぁ無くても問題ない。

私であれば、トレードルームにボットのメッセージを書き込みたいと思う。すばらしい取引につながるかもしれないし、人気カードの宣伝もできる。そしてメッセージは毎日でもそれ以上の間隔でも書き込める。メッセージは他の場所にも書き込めるが、それぞれの場所での規約に十分注意しなければならない。もしオークションルームでスパム行為をすれば、そのボットは好意的にはみられないだろう。

ボットにはトレード毎にリセットできる機能をつけておきたい。トレード時には提供できるカードをそれぞれ4枚までにしておくが、ボット自体にはたくさんのストックを持たせておきたい。カードが売れたあとに、すべてのコレクションをリセットして4枚までトレード可能に設定し直すということだ。その後、カードを売るボットであればチケットを取引不可にする。(買取ボットの場合は何も問題ない。新たに手に入れたカードははじめからトレード不可に設定されており、残ったチケットは元からトレード可のままだ。)

常にトレード可能枚数を4枚にするのは簡単だが、多くの洗練されたボットは、いくつかのカードについてはそれよりも多くの量を売れるようにしている。例えば顧客が20枚のアンヒンジド版の森を買おうとしているときに、私は彼が5回もトレードするのを望ましいとは思わない。もっと簡単にしたい。多くの洗練されたボットでは、基本土地や氷雪土地は32枚までトレード可としている。

洗練されたボットの多くは販売したカードのリストを作り、メールや通知などで知らせてくれる。また売る金額が100チケットに達するなど、何かあったときにも知らせてくれる。普段と違う売りパターンが生じた際に、それを認識もする。例えば、短時間のうちに複数の顧客がカスレアを買うと、ボットは自動で価格を10~25%ほど引き上げ、一度に売る数も2枚に絞り、そのことを私に知らせてくれる。簡単な買取ボットは静的なカードリストを使用するが、洗練されたボットは在庫や需要の変化を加味してリストを調整する。それは仲間のボットにも伝達されるだろう。例えば、販売ボットが大量の墓所のタイタンを売ったなら、賢い買取ボットは墓所のタイタンの買取優先度を上げるだろう。

これらの機能は可能なのだ。これらは一般的に在庫追跡システムや管理システムと呼ばれるものだ。在庫管理システムは洗練されたデータベースであり、精度の差は様々ある。私が家具の販売に使用しているスプレッドシートは原始的だ。ウォルマートが世界規模で管理しているシステムとは違う。あなたのボットがどのシステムを使うべきかは、何が欲しいのか、いくら払うつもりかによる。

ボットを手に入れる

私はボットを使っていない。使う意志もない。なのでボットの市場を深く研究していない。しかしながら一つだけ確かなことは、あなたは既存のボットを買うか、プログラマーに作ってもらうことができる。

1時間かそこらグーグルで検索しても、ボットを販売している情報はあまり得られなかった。その小数のうちの一つが MTGOLibrary だ。このサイトではボットのレンタルと多様なサービスを提供している。しかしながら、MTGOLibrary は CBSBots の新しい姿なのだ。彼らには疑惑の歴史がある。詳細は以下の2つのリンクを参照して欲しい。CBSBot Malicious Software、 MTGO Library is CBSBot Re-Branded。彼らが合法か否か私には分からない。公開されている情報を読んで各自判断して欲しい。他方、検索でこれとは違うボット販売業者にめぐり合わなかったのは、私の探し方が悪かったのかもしれない。(もし何か間違いがあれば、コメントで指摘して欲しい。)

この情報が役に立つか分からないが、MTGOLibrary のボットはトレード毎に3.5%の手数料を徴収し、アップデートの度に0.2ドルかかる。したがって、このボットのコストは利用する量によって変わってくる。MTGOLibrary のボットについて一つだけ前向きな点を挙げれば、彼らのウェブサイトは情報が豊富だ。もしボットの動きを理解したいなら、彼らのウェブサイトを読むことを薦める。彼らのボットが推奨に値するかは分からないが、彼らのFAQはお勧めだ。

MTGOLibrary からボットを借りるか、私がしたよりもうまく探して、プログラマーにボットを作ってもらうかの二者択一だ。有能なプログラマーを雇うならば、安全で信頼のおけるボットを作ってもらわなければならない。ジョーダンが見積もったところ、プログラミングの知識がまあまあで MTGO も知っているプログラマーであれば、一週間程度で作れるということだ。費用は大体1,000ドルだが、それはあなたが独立したプログラマーを知っている場合で、業者を通すとさらにコストはかかるだろう。

出来の良い在庫管理システムを内臓した賢いボットであれば、追加でプログラミングが必要だ。それには5,000ドル以上、MTGOTraders.com のようなボットなら多分10,000ドル以上かかる。少なくともジョーダンと私の結論はこうだ。プログラマーにボットを作ってもらうなら、絶対に1,000ドルから10,000ドル以上かかる。膨大な費用だ。その費用をどれだけのトレードで回収できるか考えてほしい。

ボットのコストに加えて、どう手に入れるかにはかかわらず、他にも先行投資と追加の費用を負うだろう。ボットを動かすために専用のコンピュータを用意する必要がある。そのコンピュータは少なくとも1台で1ボットを動かすことができる必要があるだろう。ボットの数だけアカウントも必要だ。最後に、複数のボットを動かせるだけの十分なインターネット許容量が必要だ。私の場合、遅いDSL回線しか使えないため、2つのボットを動かすのにも不十分だと思う。特別な通信サービスが必要になるにせよ、負担には変わらない。

カードとチケットをボットに仕込む必要もあるだろう。ボットで金を稼げるようになるまでに、たくさんのカードを買ったり交換してボットの品揃えを充実させなければならない。

その他の経費として大きいのは、価格設定だ。頻繁に価格を設定し直さなければならないだろう。もし売値が高すぎたら、誰もあなたからは買わない。(稀に現在の価格を知らず調べもしないで、最初にあなたのボットに入る人もいるかもしれないが、そんなのは一般的ではない。) もし売値を低くしすぎると、他のトレーダーが全部買っていく。得られたはずの利益をみすみす渡すということだ。これでは一生幸せにはなれない。

余談だが、ある一定の凄腕トレーダーたちは、更新の遅いボットから市場より安くカードを買うのは、彼らのカードの価格と価値の知識を活用しているからだと言う。しかし、彼が逆の側にいたら、「ボット荒らしにやられた!」と言う。私はそれが可笑しくて仕方ない。

何にせよ、定期的に価格の設定を見直さなければならない。売値と買値の両方ともにね。MTGO には何千という種類のカードがあって、まともなボットはその多くを扱っているだろう。それらの多くは、例えばくすぶり獣平和な心のいくつかのバージョンは値段が変動しないだろうが、需要のあるカードはそうはいかない。必要以上に価格の記録を取り、トレードすべきだ。トレーディング自体は非常に簡単に理解できる。売買リストを更新することはそれよりも難しく、いくつかの落とし穴もある。まずあなたは価格についての膨大な量のデータベースを編集することになる。それには手間がかかり、さらにリマインダー処理やデータ照合などが必要になることもある。(例えば、新しいレガシーのデッキにシヴのヘルカイトが使われ、価格が急騰したとしよう。あなたはいくつのカード価格を更新しなければならないだろうか?答えは8つ。シヴのヘルカイトは M10 と Urza's Legacy の二つのエキスパンションに存在し、それぞれの通常版とフォイル版の売値と買値を更新しなければならないからだ。一つでも忘れると損をする。そう、「ボット荒らしにやられた!」状態だ。)

費やす時間は、新しい価格の把握と入力によるものだけではない。スプレッドシードやデータベースをロードし、更新し、ボットに新しい価格を読み込ませる時間もかかる。データの編集時にダブルチェックの時間もとったほうが良い。原始のタイタンの売値を35.50ドルではなく3.550ドルと入力することは、高くつくエラーだ。忘れてはならないのは、あなたが何を意図していようとコンピューターはあなたの言うことを正確に汲み取ってはくれないのだ。

それとは別に、価格表を定期購入する方法もある。MTGOLibrary は価格表を提供し、定期的に自動更新するものを販売している。彼らはそれを多数のボットに販売しているので、安価に提供できる。悪い話として、彼らが価格情報を入手する手段が、大手の価格表を「パクる」ことだと聞いたことがある。それが事実かは分からない。話を聞いたまでだ。自分で地道にデータベースを更新していくにしろ、金を払って手に入れるにしろ、価格表を最新に保つには時間も金もかかるということだ。他に考えてみると、他人の価格表を使うと目立たなくて済む。

MTGOLibrary.com では、価格表を更新するたびに0.2ドルかかる。たいてい6時間毎に行われる。もしあなたがそれを購読したとすると、一ヶ月に25ドルも費やすことになる。もしあなたが自ら更新することを選ぶなら、更新にどれだけの時間を費やすだろうか?毎日毎日、6時間毎にデータベースをいじることを望んでいるか?もしアップデートを怠ったら、どのくらい「ボット荒らし」に損失を食わされるだろうか?

価格表の更新維持には膨大な費用がかかる。過小評価してはいけないのだ。

ボットについて私が語るべきことは以上だ。もし意見や感想があれば投稿してくれたまえ。これは長ったらしいボットの宣伝のためのフォーラムではないし、MTGOLibrary への不支持や攻撃を繰り返すことは名誉毀損になるかもしれないことをよくよくお間違えなきこと。それだけだ。

PRJ

"one million words" on MTGO


[翻訳終わり]

Major Contents

Contact us

名前

メール *

メッセージ *

QooQ