リスク・税金

海外取引所の取引履歴はどう集める?ボット運用者向け損益計算の手順まとめ


※本記事にはアフィリエイト広告(プロモーション)が含まれています。

自動売買ボットは1日に何十回、何百回も取引を繰り返します。確定申告の基本を理解していても、実際に手を動かす段階になると「そもそも取引履歴をどうやって1か所に集めるのか」で手が止まる人が多いはずです。この記事では、海外取引所を使ったボット運用を前提に、取引履歴の集計から損益計算までの一般的な手順を整理します。

※筆者は税理士ではありません。本記事は一般的な情報の整理であり、具体的な判断は国税庁の情報や税理士への相談で確認してください。取引所の仕様や税制は変更されることがあるため、必ず最新情報も確認してください。

なぜ「集める」だけで一苦労なのか

国内取引所の多くは年間取引報告書を発行してくれますが、海外取引所は基本的にこれを提供しません。つまり、自分で取引履歴を取得し、税金の計算ができる形に整える作業が必須になります。ボット運用では特に次の3点が問題になります。

  • 取引回数が多く、手作業でのコピペが現実的でない
  • 複数の取引所・複数の通貨ペアを同時に使っていることが多い
  • 取引所間の資金移動(送金)が、取引ではないのに履歴に混ざって見える

複数取引所対応のボット設計を組んでいる場合は、この問題がさらに深刻になります。取引所ごとに履歴のフォーマットも取得方法も違うため、単純にCSVを並べるだけでは集計できません。

履歴を取得する2つの方法

方法1: 取引所の管理画面からCSVをダウンロードする

多くの取引所は「取引履歴」や「注文履歴」のページからCSVを出力できます。手軽ですが、以下の点に注意が必要です。

  • 出力できる期間に上限があることが多く、数か月おきに分けて取得する必要がある
  • 列の名称・時刻のタイムゾーン・数量の単位が取引所ごとに異なる
  • 現物取引と先物取引で別のCSV形式になっている場合がある

方法2: APIで取得する

ボットを動かしているなら、取引実行に使っているのと同じAPIで履歴も取得できます。ccxtを使ったPython実装の基本で紹介したfetch_my_tradesのような関数を使えば、約定履歴をプログラムで一括取得できます。

import ccxt
import pandas as pd

exchange = ccxt.mexc({
    'apiKey': 'YOUR_API_KEY',
    'secret': 'YOUR_SECRET',
})

trades = exchange.fetch_my_trades(symbol='BTC/USDT', limit=1000)
df = pd.DataFrame(trades)
df.to_csv('mexc_btc_usdt_trades.csv', index=False)

APIキーは読み取り専用の権限で発行するのが基本です。権限管理についてはAPIキーの安全管理の記事も参考にしてください。API取得はCSVの期間制限を回避できる上、取引所間でフォーマットを揃えやすいという利点があります。ただし取引所ごとにAPIの仕様が異なるため、API仕様変更への備えで触れたように、定期的な動作確認は必要です。

集計前に必ず除外すべき「内部送金」

複数の取引所を併用していると、取引所Aから取引所Bへ資金を移動させる場面が出てきます。国内取引所からMEXCへの送金のような操作は、税務上は「取引」ではなく「資産の移動」です。これを損益計算に混ぜてしまうと、実際には発生していない損益が計上されてしまいます。

履歴を集計する際は、次の区別を必ず行ってください。

種類 課税対象になるか 集計での扱い
売買(スポット・先物の約定) なる 損益計算に含める
取引所間・ウォレット間の送金 ならない(移動のみ) 除外する
入出金にかかった手数料 状況により扱いが変わる 別途区分して記録する

送金の履歴は取引履歴とは別のページに記録されていることが多いので、集計対象から漏れなく除外できているかを一取引所ずつ確認しましょう。

移動平均法で損益を計算する考え方

日本の暗号資産の税務では、原則として移動平均法(または総平均法)で取得価額を計算します。これはボットの損益計算の実装記事で紹介した「平均取得単価法」と考え方は近いものの、目的が異なる点に注意してください。

  • ボット内部の平均取得単価: リアルタイムの損益表示や発注判断のために、ボットのロジックの中で計算する
  • 税務上の移動平均法: 1年間の全取引所・全取引を合算した上で、日本円換算した取得価額を計算する

税務上の計算では、USDTなど日本円以外の通貨で取引していても、約定した時点の日本円換算レートで取得価額と譲渡価額を記録する必要があります。取引所が違えば約定時刻の刻み方も変わるため、複数取引所の履歴を時系列で1本にまとめてから計算するのが基本の流れです。

実務的な集計手順のまとめ

  1. 全取引所からAPIまたはCSVで約定履歴を取得する
  2. 列名・タイムゾーン・数量単位を1つのフォーマットに統一する
  3. 送金・移動などの非課税イベントを取引履歴から除外する
  4. 各取引の約定時刻における日本円換算レートを付与する
  5. 移動平均法で取得価額を計算し、実現損益を確定させる

この一連の作業は、取引件数が少なければ表計算ソフトでも対応できますが、ボット運用のように年間数千件を超える場合は現実的ではありません。集計・日本円換算・移動平均法の計算までを自動化できる仮想通貨専用の損益計算サービスを使うのも一つの選択肢です。

PR

複数取引所のAPI連携に対応し、移動平均法での損益計算や日本円換算を自動化できる無料の損益計算サービスです。ボットのように取引件数が多い運用では、手作業での集計より現実的な選択肢になります。

完全無料の仮想通貨税金計算サービス【CRYPTACT(クリプタクト)】

ツールを使う場合でも、取引所別にAPI連携が正しく設定されているか、内部送金が誤って取引としてカウントされていないかは、自分の目で確認する習慣をつけておくと安心です。

まとめ

  • 海外取引所は年間報告書を出さないため、取引履歴は自分で集める必要がある
  • 履歴取得はCSVダウンロードとAPI取得の2通りがあり、件数が多いボット運用ではAPI取得が現実的
  • 取引所間の送金は課税対象の「取引」ではないため、集計前に必ず除外する
  • 税務上の損益計算は移動平均法が基本で、ボット内部の平均取得単価とは目的が異なる
  • 件数が多い場合は、集計から計算までを自動化できるツールの活用も検討する

取引履歴の集計は地味な作業ですが、ここでの精度が確定申告全体の正確さを左右します。焦らず、取引所ごとに漏れがないか確認しながら進めましょう。