Polymarket Bot Tutorial · 32章中20章

Polymarketのクジラウォレットを追跡し、トップパフォーマーをプログラムでコピートレードします。リーダーボードとオンチェーン分析を使って収益性の高いウォレットを特定し、サイズとタイミングのルールに従ってその取引をミラーリングします。

この章で扱う内容

勝っているPolymarketウォレットをコピーするのは魅力的な考えですが、実際のPolymarket上のクジラの多くは、方向性のあるベットではなく、決済済みマーケットでの遅い時間帯のarbを行っています。本章では、オンチェーン分析に基づく率直な調査を紹介します。実際にコピーすべきウォレットはどれか、なぜ多くはコピーする価値がないのか、そしてポジションサイズの計算方法です。

  • 収益性の高いウォレットの特定
  • オンチェーン取引の検出
  • クジラに対するポジションサイズの決定
  • レイテンシー:どこまで遅いと手遅れか
  • フィルター:検証済みの優位性があるウォレットだけを追う
  • コード:クジラの買いイベントを検出し、サイズ指定のコピー注文を出す

収益性の高いウォレットの特定

クジラをコピーするという前提は、いくつかのウォレットは一貫して利益を出しており、それらのエントリーをコピーすれば優位性の一部を取り込める、というものです。2025〜26年のPolymarket上位ウォレットのオンチェーン分析では、少し厳しい結果が出ました。目に見えるクジラの多くは、方向性トレードではなく、決済済みマーケットでの遅い時間帯の裁定取引をしているだけでした。

測定した3つの候補クジラウォレットのプロファイル:

  • "hhhhhh6"(勝率98.5%、$n Mの出来高)-エントリーの88%が0.95以上の価格、中央値のエントリー時刻は300秒ウィンドウ中226秒。純粋なtail-yield arbで、方向性はなし。
  • "anonymous"(勝率20%)-破滅的なギャンブラー。コピーすると損をします。
  • "Jkim123"(勝率53.5%)-ほぼコイントス。コピーする価値のあるシグナルではない。

これらクジラの取引の0%が、5分ウィンドウの最初の120秒以内に発生していました。予測シグナルがあるとすれば、EARLY-windowの大口エントリーから生まれるはずですが、そうしたウォレットは難しいため、リーダーボードの上位には出てきません。

オンチェーン取引の検出

対象ウォレットの取引を検出するには、Polymarketのdata-apiをポーリングするか、オンチェーンのCTF transferイベントをサブスクライブする方法があります。data-apiの方が簡単です。

def watch_wallet(wallet_addr, last_seen_ts=0):
    while True:
        url = f"https://data-api.polymarket.com/activity?user={wallet_addr}&limit=100"
        events = requests.get(url).json()
        for ev in events:
            ts = int(ev.get("timestamp", 0))
            if ts <= last_seen_ts: continue
            if ev["type"] == "TRADE":
                process_whale_trade(ev)
            last_seen_ts = max(last_seen_ts, ts)
        time.sleep(5)

data-apiで実用的な下限は5秒ポーリングです。これより短くするとレート制限に引っかかります。1秒未満で検出したい場合は、CTFコントラクトからクジラのproxy addressに絞ったオンチェーンERC-1155のTransferSingleイベントをサブスクライブしてください。

クジラに対するポジションサイズ

コピーのサイズをクジラの取引の一定割合にすると、彼らのリスクプロファイルをそのまま引き継ぐことになります。現実的な代替案は2つあります。

  • 上限ベース: クジラのサイズに関係なく、各コピーを固定のドル額($10〜50)にする。複利は遅いですが、1回あたりの損失は限定されます。
  • 勝率加重: クジラの直近勝率に応じてコピーサイズを決める。勝率60%以上 → フルサイズでコピー、40〜60% → 半分、40%未満 → スキップ。

最初の本番投入としては、上限ベースの方が安全です。勝率加重に移行するのは、自分のコピーでのクジラの実際の勝率を測定してからにしてください(到着が遅いため、見出しの数字より普通は悪くなります)。

レイテンシー:どこまで遅いと手遅れか

クジラの取引は、実行後1〜2秒以内に公開されて見えるようになります。これをコピーするには、読み取り側でそれより速いレイテンシーに加えて、自分の注文送信レイテンシーも必要です。

典型的なコピーbotのエンドツーエンドは、5〜10秒のポーリング + 200msの注文送信 = 合計5〜15秒です。コピーが発火する頃には、クジラのシグナルは価格に織り込まれています。

Polymarketの狭いマーケットでは、99%のコピーにとってこれは遅すぎます。クジラのエントリーでmidが1〜2セント動いており、あなたはその1〜2セント分のプレミアムを、クジラより不利な価格で払うことになります。もし彼らの優位性が3cなら、到着時点でその半分はすでに消えています。

うまく機能するコピーbotは、(a) 30秒のレイテンシーが問題にならない動きの遅いマーケットを狙うか、(b) オンチェーンイベントサブスクリプションを使って1秒未満で反応します。

フィルター:検証済みの優位性があるウォレットだけを追う

コピーリストに追加する前に、各ウォレットに対して3つのフィルターをかけます。

  • 30件以上のクローズ済み取引がウォレットの履歴にあること。サンプルが小さいとノイズです。
  • 生涯勝率が60%超、またはエントリー価格に基づく1取引あたりの期待値がプラスであること。どちらか一方でよく、両方ならなお良いです。
  • 遅い時間帯のarbではないこと。エントリー時の決済までの残り秒数の中央値を確認してください。0に近いなら、そのウォレットは再現できないtail-yield arbをしています。

候補クジラの多くは、この3条件のどれかで落ちます。実際にコピー可能なウォレットの母数は小さいです。リストの維持には定期的な再チェックが必要です。先月収益性があったウォレットが今月もそうとは限りません。

コード:クジラの買いイベントを検出し、サイズ指定のコピーを置く

参考:監視対象のクジラに対するCTF TransferSingleイベントを検出し、サイズ指定のコピー買いを実行します。

from web3 import Web3
w3 = Web3(Web3.WebsocketProvider(POLYGON_WSS))
ctf = w3.eth.contract(address=CTF_ADDR, abi=CTF_ABI)
WHALES = {"0xabc...": {"fraction": 0.05, "cap": 50}}

def on_transfer(event):
    to = event.args["to"].lower()
    if to not in WHALES: return
    cfg = WHALES[to]
    token_id = event.args.id
    whale_size = event.args.value / 1e6
    copy_size = min(cfg["cap"], whale_size * cfg["fraction"])
    if copy_size < 5: return  # not worth fees
    book = fetch_book(str(token_id))
    if book.best_ask:
        place_fok(str(token_id), "BUY", book.best_ask + 0.01, copy_size)

# subscribe to ERC-1155 TransferSingle events from CTF
filt = ctf.events.TransferSingle.create_filter(fromBlock="latest")
while True:
    for ev in filt.get_new_entries(): on_transfer(ev)
    time.sleep(0.5)

from(ゼロアドレス = mint = クジラが買った)とto(ゼロアドレス = burn = 売却した)を確認して、買いと売りを区別します。

よくある質問

コピーするのに収益性の高いPolymarketウォレットをどう見つけますか?
Polymarkets独自のリーダーボードでは、複数の期間(週、月、全期間)にわたるPnL順の上位ウォレットを表示します。DeFiLlamaやDune dashboardsなどの独立したオンチェーン分析ツールでもPolymarketウォレットをランキングしています。週単位ではなく、月単位で検証された収益性を持つウォレットを選んでください。短期の好調は反転します。
クジラの取引をリアルタイムでどう検出しますか?
ウォレットアドレスのPolygonトランザクションログ(web3.py / ethers eth_subscribe)をサブスクライブし、Polymarketのexchange contracts上のmatchOrder呼び出しをフィルタします。イベントをデコードしてマーケット、side、サイズを取得します。レイテンシーは、オンチェーン確定からbotが反応するまで2〜10秒です。
クジラの取引を完全にコピーできますか?
完全には無理です。検出して送信した頃には、価格がすでに動いていることが多いからです。現実的なコピーは「scale-in」です。クジラの取引後、数分かけてそのポジションの一部を取る形にし、価格悪化をコピーのコストとして受け入れます。サイズは、1回のコピーにつき彼らのポジションサイズの1〜5%です。
そのクジラが今回は外したらどうなりますか?
負けます。コピートレードは、元の戦略のすべてのリスクに加えて、レイテンシーによる損失も引き継ぎます。ヘッジとしては、複数のクジラをコピーし、それぞれをポートフォリオの小さな一部として扱うことです。もし5匹のクジラがそれぞれ独立して60%の勝率を持つなら、ポートフォリオは複利で増えます。1匹の勝率60%のクジラに集中すると、分散でやられます。
Polymarketでコピー取引は禁止されていますか?
いいえ。Polymarketsの利用規約では、公開リーダーボードや取引を見ることは認められています。禁止されているのはマルチアカウンティングです(制限を回避するために1人で複数ウォレットを運用すること)。単一ウォレットから他人のウォレットをコピーするのは問題ありません。
クジラに対してどうサイズを決めればいいですか?
バンクロール比率でサイズを決めます。クジラがいくら取引したかに関係なく、1回の取引で総バンクロールの2〜5%を超えてコピーしてはいけません。クジラのシグナルは、確実なものではなく、複数シグナルの1つとして扱ってください。自分の10倍のバンクロールを持つクジラでも負けます。強気にサイズを取りすぎると、相対的なドローダウンがひどくなります。