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

# DEX 取引

> DEX 取引データのクエリ例

**DEXTrades** Cube には、取引ごとの DEX スワップイベントが格納されています。利用可能な中で最も粒度の細かいトレーディングデータです。個別の取引の取得、ウォレット活動の分析、トークン価格の追跡、トップトレーダーの特定などに使えます。

<Note>
  以下の例はすべて `network: sol`（Solana）を使用しています。他の対応チェーンでは `eth`、`bsc`、`polygon` に置き換えてください。
</Note>

***

## 最新の DEX 取引を取得するには？

Solana 上の直近 10 件の DEX 取引を取得します。ブロック情報、トランザクションハッシュ、売買の詳細、DEX プロトコルを含みます。

```graphql theme={null}
query {
  Solana {
    DEXTrades(
      limit: {count: 10}
      orderBy: {descending: Block_Time}
    ) {
      Block { Time, Slot }
      Transaction { Hash }
      Trade {
        Buy {
          Currency { MintAddress }
          Amount
          PriceInUSD
          Account { Owner }
        }
        Sell {
          Currency { MintAddress }
          Amount
          Account { Owner }
        }
        Dex { ProgramAddress, ProtocolName }
      }
      Pool { Address }
    }
  }
}
```

<Tip>
  [GraphQL IDE で開く](https://ide.chainstream.io) — 上記クエリを貼り付けて、オートコンプリートとスキーマ探索付きで対話的に実行できます。
</Tip>

<AccordionGroup>
  <Accordion title="主要フィールド">
    | フィールド                            | 説明                                          |
    | :------------------------------- | :------------------------------------------ |
    | `Block.Time`                     | ブロックのタイムスタンプ（ISO 8601）                      |
    | `Block.Slot`                     | Solana のスロット番号（Solana 固有）                   |
    | `Transaction.Hash`               | オンチェーンのトランザクションハッシュ — エクスプローラーで tx を調べる際に使用 |
    | `Trade.Buy.Currency.MintAddress` | 買い側トークンのアドレス                                |
    | `Trade.Buy.PriceInUSD`           | 取引時点での買いトークンの USD 価格                        |
    | `Trade.Buy.Account.Owner`        | 買い手ウォレットのアドレス                               |
    | `Trade.Dex.ProtocolName`         | DEX 名（例: Raydium、Orca、Jupiter）              |
    | `Pool.Address`                   | 取引が実行された流動性プールのアドレス                         |
  </Accordion>

  <Accordion title="カスタマイズのヒント">
    * **チェーンの切り替え**: `network: sol` を `network: eth`、`network: bsc`、`network: polygon` に置き換える
    * **件数の増加**: `count: 10` を最大 `10000` まで変更する
    * **時間フィルター**: `where: {Block: {Time: {after: "2025-03-01T00:00:00Z"}}}` を追加して期間を絞る
    * **DEX で絞り込み**: `where: {Trade: {Dex: {ProtocolName: {is: "Raydium"}}}}` を追加して特定プロトコルに限定する
  </Accordion>
</AccordionGroup>

***

## 特定トークンの取引を取得するには？

`tokenAddress` セレクターにトークンアドレスを渡して、そのトークンの取引を取得します。

```graphql theme={null}
query {
  Solana {
    DEXTrades(
      limit: {count: 10}
      tokenAddress: {is: "TOKEN_ADDRESS"}
      orderBy: {descending: Block_Time}
    ) {
      Block { Time }
      Trade {
        Buy { Amount, PriceInUSD, Account { Owner } }
        Sell { Currency { MintAddress }, Amount }
        Dex { ProtocolName }
      }
      Pool { Address }
    }
  }
}
```

<Tip>
  `TOKEN_ADDRESS` を実際のトークン mint アドレスに置き換えてください（例: Solana 上の USDC は `EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v`）。名前からアドレスを調べる場合は [トークンメタデータ](/jp/graphql/examples/ohlc-stats#how-do-i-look-up-token-information) を参照してください。
</Tip>

<AccordionGroup>
  <Accordion title="主要フィールド">
    | フィールド                             | 説明                    |
    | :-------------------------------- | :-------------------- |
    | `Trade.Buy.Amount`                | 買い付けたトークン数量           |
    | `Trade.Buy.PriceInUSD`            | 取引時点のトークン単価（USD）      |
    | `Trade.Buy.Account.Owner`         | 買いを実行したウォレット          |
    | `Trade.Sell.Currency.MintAddress` | 売却側トークンのアドレス（ペアのもう一方） |
    | `Trade.Dex.ProtocolName`          | DEX プロトコル名            |
  </Accordion>

  <Accordion title="カスタマイズのヒント">
    * **最小数量でフィルター**: `where: {Trade: {Buy: {Amount: {gt: 1000}}}}` を追加して大口取引のみ表示
    * **価格帯でフィルター**: `where: {Trade: {Buy: {PriceInUSD: {gte: 0.001, lte: 1.0}}}}` で価格レンジを指定
    * **疑わしい取引の除外**: デフォルトで `IsSuspect = false` フィルターが適用済み — bot/MEV 取引はすでに除外されています
  </Accordion>
</AccordionGroup>

***

## ウォレットの全取引を取得するには？

特定ウォレットアドレスによるすべての取引を取得します。

```graphql theme={null}
query {
  Solana {
    DEXTrades(
      limit: {count: 20}
      walletAddress: {is: "WALLET_ADDRESS"}
      orderBy: {descending: Block_Time}
    ) {
      Block { Time }
      Trade {
        Buy { Currency { MintAddress }, Amount, PriceInUSD }
        Sell { Currency { MintAddress }, Amount }
        Dex { ProtocolName }
      }
      Transaction { Hash, FeeInNative }
    }
  }
}
```

<Info>
  `walletAddress` セレクターは、指定ウォレットが買い手または売り手のいずれかである取引にマッチします。
</Info>

<AccordionGroup>
  <Accordion title="主要フィールド">
    | フィールド                             | 説明                               |
    | :-------------------------------- | :------------------------------- |
    | `Trade.Buy.Currency.MintAddress`  | 買ったトークン                          |
    | `Trade.Sell.Currency.MintAddress` | 売ったトークン                          |
    | `Transaction.FeeInNative`         | ネイティブトークン建てのガス手数料（Solana では SOL） |
  </Accordion>

  <Accordion title="カスタマイズのヒント">
    * **単一トークンに絞る**: `tokenAddress: {is: "TOKEN_ADDRESS"}` と組み合わせて、このウォレットの特定トークン取引のみ表示
    * **時間ウィンドウ**: `where: {Block: {Time: {after: "2025-03-01T00:00:00Z"}}}` を追加して直近の取引に限定
    * **件数の増加**: `count: 100` に設定してより長い履歴を取得（最大 10,000）
  </Accordion>
</AccordionGroup>

***

## トークンの現在価格を取得するには？

最新の非疑義取引から、トークンの最新価格を取得します。

```graphql theme={null}
query {
  Solana {
    DEXTrades(
      limit: {count: 1}
      tokenAddress: {is: "TOKEN_ADDRESS"}
      where: {IsSuspect: {eq: false}}
      orderBy: {descending: Block_Time}
    ) {
      Trade {
        Buy { PriceInUSD, PriceInNative }
      }
      Block { Time }
    }
  }
}
```

<AccordionGroup>
  <Accordion title="主要フィールド">
    | フィールド                     | 説明                               |
    | :------------------------ | :------------------------------- |
    | `Trade.Buy.PriceInUSD`    | 直近取引からの USD 価格                   |
    | `Trade.Buy.PriceInNative` | チェーンのネイティブトークン（SOL、ETH、BNB）建ての価格 |
    | `Block.Time`              | 取引のタイムスタンプ — 価格の新しさを示す           |
  </Accordion>

  <Accordion title="カスタマイズのヒント">
    * **複数価格**: `count` を増やして直近価格の系列を取得し平均化に利用
    * **マルチチェーン**: `network: eth` を使うと Ethereum 上の同一トークン価格を取得（そのチェーンに存在する場合）
  </Accordion>
</AccordionGroup>

<Tip>
  時系列で信頼できるトークン価格が必要な場合は、代わりに [Pairs](/jp/graphql/examples/ohlc-stats#how-do-i-get-k-line-ohlc-candlestick-data) Cube の利用を検討してください — 1 分足の open/high/low/close を事前計算したローソク足データを提供します。
</Tip>

***

## トークンのトップトレーダーを見つけるには？

集約を使ってトークンのトップトレーダーを取得します。このクエリは買い手ウォレットごとに取引をグループ化し、買い件数とボリュームの合計を返します。

```graphql theme={null}
query {
  Solana {
    DEXTrades(
      limit: {count: 100}
      tokenAddress: {is: "TOKEN_ADDRESS"}
      where: {IsSuspect: {eq: false}}
    ) {
      Trade {
        Buy {
          Account { Owner }
          Amount
          PriceInUSD
        }
      }
      count
      sum(of: Trade_Buy_Amount)
    }
  }
}
```

<AccordionGroup>
  <Accordion title="主要フィールド">
    | フィールド                       | 説明                  |
    | :-------------------------- | :------------------ |
    | `Trade.Buy.Account.Owner`   | ウォレットアドレス（グループ化キー）  |
    | `count`                     | このウォレットの取引件数        |
    | `sum(of: Trade_Buy_Amount)` | このウォレットが買い付けたトークン合計 |
  </Accordion>

  <Accordion title="カスタマイズのヒント">
    * **ボリュームでソート**: 結果はディメンションフィールドでグループ化されます — ディメンションを減らすとより高レベルの集約になります
    * **期間付きランキング**: `where: {Block: {Time: {after: "2025-03-01T00:00:00Z"}}}` を追加して特定期間に限定
    * **小口取引の除外**: `where` に `Trade: {Buy: {Amount: {gt: 100}}}` を追加
  </Accordion>
</AccordionGroup>

<Info>
  メトリクスフィールド（`count`、`sum`）をディメンションフィールドと一緒に指定すると、API は選択したディメンションで結果を自動的にグループ化します。詳細は [Metrics & Aggregation](/jp/graphql/schema/metrics-aggregation) を参照してください。
</Info>

***

## マルチチェーンの例

同じクエリは対応チェーンすべてで動作します — `network` パラメータを変更するだけです。

<Tabs>
  <Tab title="Solana">
    ```graphql theme={null}
    query {
      Solana {
        DEXTrades(
          limit: {count: 5}
          orderBy: {descending: Block_Time}
        ) {
          Block { Time, Slot }
          Trade {
            Buy { Currency { MintAddress }, PriceInUSD }
            Dex { ProtocolName }
          }
        }
      }
    }
    ```
  </Tab>

  <Tab title="Ethereum">
    ```graphql theme={null}
    query {
      EVM(network: eth) {
        DEXTrades(
          limit: {count: 5}
          orderBy: {descending: Block_Time}
        ) {
          Block { Time, Height }
          Trade {
            Buy { Currency { MintAddress }, PriceInUSD }
            Dex { ProtocolName }
          }
        }
      }
    }
    ```
  </Tab>

  <Tab title="BSC">
    ```graphql theme={null}
    query {
      EVM(network: bsc) {
        DEXTrades(
          limit: {count: 5}
          orderBy: {descending: Block_Time}
        ) {
          Block { Time, Height }
          Trade {
            Buy { Currency { MintAddress }, PriceInUSD }
            Dex { ProtocolName }
          }
        }
      }
    }
    ```
  </Tab>
</Tabs>

***

## 次のステップ

<CardGroup cols={2}>
  <Card title="送金（Transfers）" icon="paper-plane" href="/jp/graphql/examples/transfers">
    オンチェーンのトークン送金データをクエリします。
  </Card>

  <Card title="残高とホルダー" icon="wallet" href="/jp/graphql/examples/balance-holders">
    ウォレット残高、残高履歴、トップホルダーを調べます。
  </Card>

  <Card title="プールと流動性" icon="droplet" href="/jp/graphql/examples/pools-liquidity">
    DEX プールと流動性データを探索します。
  </Card>

  <Card title="OHLC と統計" icon="chart-candlestick" href="/jp/graphql/examples/ohlc-stats">
    ローソク足、取引統計、時価総額、トークンメタデータを取得します。
  </Card>
</CardGroup>
