【コインチェック】確定申告を効率的に!Pythonで仮想通貨収益を自動計算

当ページには広告が含まれています。

こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!

こんな方におすすめ!
  • Coincheck(コインチェック)での仮想通貨取引をもとに収支計算し、確定申告したい。
  • Pythonで仮想通貨取引の収益計算を自動で行いたい。
目次

仮想通貨取引の確定申告を効率化!プログラムで収益計算を自動化

仮想通貨の確定申告に際して、上記のような不満を感じたことはありませんか?

本記事では上記の悩みを解決します。具体的に、プログラミング言語Pythonを用いて仮想通貨取引の収益計算を自動化し、確定申告を手間なく行う方法について解説します。

【参考】会計ソフトを用いた仮想通貨取引の収益計算方法

本記事ではプログラミング言語Pythonを用いた収益計算方法を解説しています。プログラム言語は無料かつ一度構築してしまえば使い勝手が良いのが利点です。一方で、「プログラム言語ってなんか難しそう。」「プログラム環境構築が手間」と感じられる方もいらっしゃるでしょう。

そのような方向けに仮想通貨取引の集計計算に対応したおすすめ会計ソフトも併せて紹介します。使い勝手も良く、特に仮想通貨取引を頻繁に実施される方におすすめです。

おすすめ(1)
おすすめ(2)

【Python】Coincheck(コインチェック)での仮想通貨取引から収益計算

【引用】公式

本記事では「Pythonを用いてCoincheckでの暗号資産取引明細情報を取得し、収益計算する方法」について、以下手順で言及します。

  • 【データ準備】仮想通貨取引明細データのダウンロード
  • 【Python準備】Python環境のインストール
  • 【Python準備】Pythonライブラリのインストール
  • 【Python】仮想通貨取引明細データの加工
  • 【Python】移動均法を用いた損益計算
  • 【Python】総平均法を用いた損益計算

【事前準備】仮想通貨取引明細書をダウンロード

はじめに、コインチェックのホームページから仮想通貨取引明細(CSVファイル)を取得します。以下の手順でCSVファイルはダウンロードできます。

コインチェック会員ページにログイン

をクリックし、会員ページにログインします。

取引履歴をクリック

「取引履歴」をクリックします。

取引履歴をクリック

Coincheckフォーマット(新)タブ内の年をクリックすると、「XXXX年ファイル作成」が表示されます。

それをクリックすると「XXXX年ダウンロード」と表示されるため、再びクリックし、取引履歴のダウンロードを完了します。

ダウンロードしたCSVファイルを確認

ダウンロードしたCSVファイルを開くと上図のような取引履歴が確認できます。後述では、このCSVファイルをPythonで読込、収益計算を実行します。

【Python準備】Python環境のインストール

お手元のPCでPythonが利用できる環境を整えます。Python環境の構築がお済みでない方は、こちらの記事をご覧下さい。

【事前準備】Pythonライブラリのインストール

Pythonプログラミングに際して、データ加工や計算処理全般に便利なライブラリである「Pandas」を利用します。コマンドプロンプト(Windows)またはターミナル(Mac)を開き、以下を実行し、Pandasをインストールしましょう。

pip install pandas

【Python】仮想通貨取引明細データの加工

ここから実際にPythonプログラムを実行していきます。はじめに、Coincheckで取得した仮想通貨取引明細書のCSVファイルを収支計算しやすい形式にデータ加工するプログラムを実行します。以下、確認してみましょう。

コード

filenameの部分に前述で取得したコインチェックの取引明細CSVファイルのファイル名を記述しましょう。また、このCSVファイルは実行するPythonファイルと同じ階層に配置しておきましょう。

# =====================================================================================
# データ読込
# =====================================================================================

import pandas as pd

# コインチェックの取引明細取得
data = pd.read_csv("./Coincheck.csv")

# =====================================================================================
# データ加工
# =====================================================================================

# データ加工
df = pd.DataFrame()

BuySellList = []  # 売買区分
RateList    = []  # 約定レート

for i in range(len(data)):
    
    # 売買区分の算出
    if data["trading_currency"][i] == "JPY" and data["amount"][i] < 0:
        BuySellList.append("買")
    elif data["trading_currency"][i] != "JPY" and data["amount"][i] > 0:
        BuySellList.append("買")
    else:
        BuySellList.append("売")
        
    # 約定レートの算出
    try:
        Rate = float(data["comment"][i].split(",")[0].replace("Rate: ",""))
        RateList.append(Rate)
    except AttributeError:
        RateList.append(0)


# =====================================================================================
# データ加工(レコード)
# =====================================================================================

# カラム
df["日付"]      = data["time"]
df["注文タイプ"] = data["operation"].replace("Limit Order","指値注文").replace("Market Order","成行注文").replace("Completed trading contracts","約定")    
df["取引通貨"] = data["trading_currency"]
df["売買区分"] = BuySellList         
df["数量"] = data["amount"]
df["取引金額[円]"] = data["amount"]
df["約定レート"] = RateList

# 数量・合計金額の加工
for i in range(len(df)):
    if df["取引通貨"][i] == "JPY":
        df["取引金額[円]"][i] = df["数量"][i]
        df["数量"][i] = df["数量"][i] / df["約定レート"][i]
    else:
        df["取引金額[円]"][i]  = df["数量"][i] * df["約定レート"][i]

# レコード抽出
df = df[df["注文タイプ"] == "約定"].reset_index()
del df["注文タイプ"]
del df["index"]

# レコード日付の昇順でソート
df.sort_values("日付", ascending=True, inplace=True)

出力イメージ

上記を実行すると、次のような中間出力結果が得られます。後述でこの結果を用いて最終的な収支計算を実行します。

# 出力イメージ
#    日付                          注文タイプ 売買区分    通貨ペア 取引通貨     数量   約定レート
# 0  2022-05-05 19:49:01 +0900    約定        買      btc_jpy    BTC      0.005  5130798.0
# 1  2022-05-05 19:49:01 +0900    約定        買      btc_jpy    BTC      0.005  5130807.0
# 2  2022-05-05 23:40:12 +0900    約定        売      btc_jpy    JPY  49981.320  4998132.0
# 3  2022-05-11 21:19:54 +0900    約定        買      btc_jpy    BTC      0.005  4094000.0
# 4  2022-05-11 21:20:01 +0900    約定        買      btc_jpy    BTC      0.015  4094000.0
# 5  2022-09-19 10:44:51 +0900    約定        売      btc_jpy    JPY  13913.340  2782668.0

【Python】総平均法を用いた仮想通貨取引の収益計算

仮想通貨収益計算結果を出力するコードを以下に示します。収益計算は総平均法を採用しました。総平均法など仮想通貨の収益計算理論について詳しく知りたい方はこちらの記事をご覧ください。

あわせて読みたい
【確定申告を効率化】Pythonプログラムで仮想通貨収益を自動計算 暗号資産(仮想通貨)の確定申告が必要、手間なく収益計算を行いたい方向けに、Pythonプログラムを利用した自動収益計算について紹介します。

コード

# 購入したBTCから平均単価を算出
buy_mean_yen = df["取引金額[円]"][df["売買区分"]=="買"].sum() / len(df["取引金額[円]"][df["売買区分"]=="買"])

# 売却したBTCの収益計算[円]
sell_sum_yen = df["取引金額[円]"][df["売買区分"]=="売"].sum()   # 売却金額合計[円]
sell_sum_btc = df["数量"][df["売買区分"]=="売"].sum()          # 取引数量[BTC]
profit       = sell_sum_yen - (buy_mean_yen * sell_sum_btc)  # 損益

# 出力
print(f'通年収益:{profit} 円')

# 出力イメージ
# 通年収益:63,395 円

【仮想通貨・ビットコイン】自動取引実践法・その他優良情報

最後までご覧いただきありがとうございました。当サイトでは仮想通貨・ビットコインにおける多様な自動取引手法の解説記事を多数取り扱っております。

取引所別:APIの取得手順と使い方の解説記事

スクロールできます
対応言語記事名
Python【GMOコイン】 APIで仮想通貨取引の自動化
Python【BitTrade】 APIで仮想通貨取引の自動化
Python【bitbank】 APIで仮想通貨取引の自動化
Python【Coincheck】APIで仮想通貨取引の自動化
Python【bitFlyer】APIで仮想通貨取引を自動化
Python【BITPOINT】APIで仮想通貨取引の自動化

機械学習やテクニカル分析を採用した仮想通貨取引の解説記事

スクロールできます
対応言語記事名指標
共通自動売買の種類・自作時のポイント全て
Pythonリアルタイムチャート分析基礎トレンド
Python移動平均線トレンド
Pythonゴールデンクロス・デッドクロストレンド
Pythonアービトラージ(裁定取引)時間・値幅
Pythonボリンジャーバンドオシレータ
PythonMACDオシレータ
PythonRSIオシレータ
Python時系列予測モデルの構築機械学習・AI
【トレンド】:値動きが上昇・下降どちらのトレンドなのか判断に有効
【オシレータ】:現在の相場に対する買われすぎ・売られすぎの判断に有効

その他仮想通貨自動トレード解説記事

スクロールできます
対応言語記事名
Python【データ収集】仮想通貨の過去データを大量取得する方法
Python【初心者向け】ccxtを活用した仮想通貨の自動取引
Node.js【初心者向け】ccxtを活用した仮想通貨の自動取引

最後に

この記事が気に入ったら
フォローしてね!

目次