私は普段、暗号資産のクォンツ戦略をティックレベルで検証する仕事をしています。バックテストの精度は「どのデータ系列を選ぶか」と「どのフィールドを保持するか」で8割決まると断言しても過言ではありません。本記事では Binance の aggTradestrades (raw) の差分、現場で詰まりやすいフィールド選定、そして LLM を併用した高速フィールド抽出ワークフローを紹介します。後半は HolySheep AI を実機レビューし、比較表と ROI まで算出しました。今すぐ登録して無料クレジットを獲得できます。

aggTrades と raw trades の根本的な違い

Binance Spot 公式 API が公開するティック系エンドポイントは大きく2系統あります。/api/v3/aggTrades は「同一価格・同一 taker 方向の連続約定を集約した合成レコード」、/api/v3/trades は「1約定=1レコード」の生ログです。

観点aggTradesraw trades (/trades)
1レコードの意味集約約定(同一条件の合算)個別約定1件
主要フィールドa, p, q, f, l, T, m, Mid, price, qty, quoteQty, time, isBuyerMaker
レコード間隔長い(集約分を含む)短い(ms単位)
レート制限weight=1〜20weight=1〜25
過去遡及範囲数年分(公式アーカイブ)直近〜数日が中心
推奨用途OHLC再構築、ボリューム分析、TWAP板近傍の瞬間挙動、HFT検証

フィールド選定の実践ガイド

私がバックテストで実際に保存しているのは、次の最小フィールドセットです。

それぞれで不要になるのが f/l (First/Last tradeId) と M (Ignore) です。これらは約定束ねのためのメタ情報で、ティック集計では冗長になります。

コード1: aggTrades のフィールド抽出

import requests, pandas as pd

BASE = "https://api.binance.com"
SYMBOL = "BTCUSDT"
START, END = 1700000000000, 1700086400000  # 1日分

def fetch_aggtrades(symbol, start, end):
    out, cursor = [], start
    while cursor < end:
        r = requests.get(f"{BASE}/api/v3/aggTrades", params={
            "symbol": symbol,
            "startTime": cursor,
            "endTime": end,
            "limit": 1000,
        }, timeout=10)
        r.raise_for_status()
        batch = r.json()
        if not batch: break
        out.extend(batch)
        cursor = batch[-1]["T"] + 1
    return out

rows = fetch_aggtrades(SYMBOL, START, END)

必要フィールドのみ抽出(不要な f, l, M を捨てる)

df = pd.DataFrame(rows)[["a", "p", "q", "T", "m"]] df.columns = ["agg_id", "price", "qty", "ts_ms", "is_buyer_maker"] df.to_parquet("btcusdt_agg_20231114.parquet") print(f"rows={len(df):,} size={df.memory_usage(deep=True).sum()/1e6:.1f}MB")

コード2: raw trades のフィールド抽出

import requests, pandas as pd

BASE = "https://api.binance.com"
SYMBOL = "BTCUSDT"

def fetch_raw_trades(symbol, limit=1000):
    r = requests.get(f"{BASE}/api/v3/trades", params={
        "symbol": symbol, "limit": limit
    }, timeout=10)
    r.raise_for_status()
    return r.json()

raw = fetch_raw_trades(SYMBOL, limit=1000)
df = pd.DataFrame(raw)[["id", "price", "qty", "time", "isBuyerMaker"]]
df.rename(columns={"time": "ts_ms", "isBuyerMaker": "is_buyer_maker"}, inplace=True)
df["price"] = df["price"].astype(float)
df["qty"]   = df["qty"].astype(float)
print(df.head())

コード3: HolySheep AI で「差分フィールド解説」を生成

import os, requests, json

API_KEY = os.environ["YOUR_HOLYSHEEP_API_KEY"]
BASE_URL = "https://api.holysheep.ai/v1"

prompt =