【確定申告】仮想通貨の取引履歴をpythonでまとめてみる
2017年末の第1次仮想通貨ブームに乗っかり、少額の取引で数万円の利益が出て調子に乗って百万単位の取引を始めた途端、ネム盗難事件に漏れず被害に遭い、その後の相場暴落にも巻き込まれ、すぐに円換金して引き出したのはいいものの百万単位で損失が出てしまったので、怖くて4年ほど全くふれていませんでした。
実際の損失額も怖て計算していなかったのですが、ここにきてやっと心の傷も癒えてきたので、Pythonで損失額を計算してみようと思います。
僕が使っている仮想通貨取引所は、コインチェックです。主に取引していたのは、ビットコイン、リップル、ネムとかでした。
コインチェックでは、CSVで年間の取引データをダウンロードできます。
ログイン後、ホームページの「取引履歴」を開くと、
月ごと、年ごとにダウンロードできるようになっています。
取引をしていない月は、データはありません。2021年は取引していないはずなのにデータがあるのは、LISKのステーキングサービスで少額の受け取りがあるから。
こんな感じで年ごとのデータをダウンロード。
import pandas as pd
import numpy as np
必要なライブラリをインポート
df_2017=pd.read_csv('2017.csv')
df_2018=pd.read_csv('2018.csv')
df_2019=pd.read_csv('2019.csv')
df_2020=pd.read_csv('2020.csv')
df_2021=pd.read_csv('2021.csv')
各年のデータを読み込みます。
df_2017
2017年、始めたばかりの時のデータはこんな感じ。
取引日時 取引種別 取引形態 通貨ペア 増加通貨名 増加数量 減少通貨名 減少数量 約定価格/数量 単価 手数料通貨 手数料数量 送付元アドレス 送付先アドレス 登録番号 社名 備考
カラムは上記の項目になっている。
「取引種別」が「入金」なっているものを合計したのが総入金額になる。そこから、そう引き出し額と現在の総資産額を引けば、損益が計算できそうだ。
2017年には出金はしていなかったので、2018年の取引種別の値を見てみる。
やっぱり、「出金」という項目がある。ので、全取引の出金合計は出せそう。
2017年は9行、2018年は294行のデータ。
df_all= pd.concat([df_2017, df_2018], axis=0)
これで、結合できてそう。
全データを結合します。
入金したのは2回しかないみたい。入金で数量が結構高いので、一気に入金したんだろうな。
pd.set_option('display.max_rows', None)
念の為、全行表示させて確認してみても確かに、最初に1回とその10日後ぐらいの1回しかない。やめておけばよかったのに、、、、、、
pd.options.display.float_format = '{:.2f}'.format
数値が指数表記だとわかりにくいので、小数点以下2桁のみの表示にします。
df_all[df_all['取引種別']=='入金']
これで、入金行だけ抽出できました。年末年始にあれだけデータ分析でpandas使い倒してたのに、こんな抽出方法もすっかり忘れてしまってる、、、
df_all['増加数量'] = df_all['増加数量'].apply(lambda x: '{0:,}'.format(x))
金額が読みにくいので、千単位でカンマ区切りを追加。
これをやっちゃうとオブジェクト型になっちゃうのか。
df_in['増加数量'].sum()
カンマ区切りはあきらめて、合計を計算。合計で200万円を入金していたらしい。
df_out=df_all[df_all['取引種別']=='出金']
続いて、出金行の抽出。出勤も2回しかしてない。
df_out['減少数量'].sum()
出金金額は、減少数量カラムの合計になる。合計は95万5674円。
df_in_sum=df_in['増加数量'].sum()
df_out_sum=df_out['減少数量'].sum()
df_out_sum-df_in_sum
最後に、総入金額から総出金額を引いて通算損益を計算すると、▲104万4326円ということがわかりました。
以上で、これまでの通算損益を計算できました。年毎で計算すれば確定申告にも使えると思うので、参考にしてください。
「Codes&Co.」「コーズコー」