> ## Documentation Index
> Fetch the complete documentation index at: https://docs.radion.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Copy-trade a whale

> Watch a wallet's fills live and mirror its Polymarket trades with the trading channel.

Pick a wallet you trust and follow its trades in real time. The [`trading`](/websockets/channels/trading) channel sends every confirmed fill. Filter it by `wallets` and you get only that wallet's order flow, decoded and ready to act on.

## What you need

* An API key from [radion.app/dashboard](https://radion.app/dashboard).
* The wallet addresses you want to follow (`0x…`).
* The [`@radion-app/sdk`](https://github.com/radion-app/radion-typescript) package.

## Follow the wallet

Subscribe to `trading` with a `wallets` filter. The SDK opens the socket, sends the `X-API-Key` header, and resubscribes after a reconnect.

<CodeGroup>
  ```typescript TypeScript theme={null}
  import { Radion } from "@radion-app/sdk";

  const radion = new Radion({ apiKey: process.env.RADION_API_KEY });
  const whales = ["0xWHALE_ADDRESS"];

  radion.realtime.onChannel("trading", (event) => {
    const fill = event.data;
    if (fill.type !== "order_filled_v2") return;

    const side = fill.side === 0 ? "buy" : "sell";
    console.log(`whale ${side} on token ${fill.tokenId}`);
    // place your own order here
  });

  radion.realtime.subscribe({
    id: "whale-trades",
    channel: "trading",
    filters: { wallets: whales },
  });

  await radion.realtime.connect();
  ```

  ```python Python theme={null}
  import asyncio
  from radion import Radion, ChannelFilters, Subscription

  radion = Radion(api_key="YOUR_API_KEY")
  whales = ["0xWHALE_ADDRESS"]

  @radion.realtime.on_channel("trading")
  async def on_fill(event):
      fill = event.data
      if fill["type"] != "order_filled_v2":
          return
      side = "buy" if fill["side"] == 0 else "sell"
      print(f"whale {side} on token {fill['tokenId']}")
      # place your own order here

  async def main():
      await radion.realtime.subscribe(
          Subscription(id="whale-trades", channel="trading", filters=ChannelFilters(wallets=whales))
      )
      await radion.realtime.connect()

  asyncio.run(main())
  ```
</CodeGroup>

The `wallets` filter keeps events where a listed address is the maker or taker. Read `side` (`0` = buy, `1` = sell), `tokenId`, and the filled amounts to size your own trade.

## Front-run the confirmation

Want to act before the fill lands in a block? Add a second [`trading`](/websockets/channels/trading) subscription with `confirmed: false` to get the pending feed. Pending frames are guesses, so treat them as a hint and reconcile against the confirmed `trading` event by `transaction_hash`. See [Mempool front-run alert](/guides/mempool-front-run-alert) for the full pattern.

## Notes

* Multiple wallets in one subscription — the filter matches any of them.
* Add `min_usd` to skip small fills and copy only meaningful size.
* The `trading` channel is order flow only. For a wallet's full activity (transfers, splits, redemptions), use the [`wallets`](/websockets/channels/overview) filter channel.

## Next steps

<Columns cols={2}>
  <Card title="trading channel" icon="radio" href="/websockets/channels/trading">
    Every order-flow event and its payload.
  </Card>

  <Card title="Examples repo" icon="git-branch" href="https://github.com/radion-app/radion-examples">
    Runnable `copytrade` example you can clone.
  </Card>
</Columns>
