Table of Contents

暗号通貨取引の実現損益計算

このページの情報が間違っていることによって追徴課税が発生した場合であっても、著者はあなたの不利益の一切の責任を取りません。

CSVから実現損益を求める

bitbankの全期間約定履歴CSVに対して以下のawkスクリプトを使うことで、移動平均法による実現損益の計算ができる。 年内の総利益は、今年の最後のレコードのearningから去年の最後のレコードのearningを差し引いた額となる。

このスクリプトは、すべての取引が日本円ペアであることを前提としている。

BEGIN {
  revenue = 0;
  expense = 0;
 
  print "date", "time", "revenue", "expense", "earning";
}
{
  valid  = 0;
  pair   = $3;
  type   = $4;
  order  = $5;
  dir    = $6;
  amount = $7;
  price  = $8;
  fee    = $9;
  date   = $11;
}
dir=="buy"{
  valid = 1;
 
  accumulated_paid[pair]   += amount * price;
  accumulated_amount[pair] += amount;
 
  expense += fee;
  pair_expense[pair] += fee;
}
dir=="sell"{
  valid = 1;
 
  avg_buy_price = accumulated_paid[pair] / accumulated_amount[pair];
  profit        = (price - avg_buy_price) * amount;
 
  accumulated_paid[pair]   -= avg_buy_price * amount;
  accumulated_amount[pair] -= amount;
 
  revenue += profit;
  pair_revenue[pair] += profit;
 
  expense += fee;
  pair_expense[pair] += fee;
}
valid {
  print date, revenue, expense, revenue-expense;
}
$ cat b.csv | sort | grep -v matic | awk -F, -f a.awk
date        time          revenue      expense     earning                                                                                                               
2022-07-11  14:02:50.745  0            -0.956682   0.956682                                                                                                              
2022-07-11  14:07:41.906  3.6176       -1.91409    5.53169                                                                                                               
2022-07-11  16:23:48.439  3.6176       -2.86556    6.48316                                                                                                               
2022-07-11  16:25:02.811  3.6176       2.50659     1.11101                                                                                                               
2022-07-11  16:31:27.159  3.6176       1.72307     1.89453                                                                                                               
2022-07-11  16:34:51.998  3.86303      1.66705     2.19598                                                                                                               
2022-07-11  16:34:54.552  7.05365      0.938872    6.11477
...

グラフにしてみる

awkの出力に対して、gnuplotを使う。

↓は出力例。(y軸ticsは隠している) 実現損益のグラフなので、8月の暴落で狼狽売りしたのが丸見え笑。

set xdata time
set timefmt "%Y-%m-%d"
set format x "%Y-%m-%d"
set style data lines
set yrange [0:]
set xrange ["2023-01-01":system("date +'%Y-%m-%d'")]
set decimal locale
set ytics format "%'.0f"
set mouse mouseformat 3
set grid

plot "accumulated.dat" u 1:5 w filledcurves x1 t "earnings"
$ gnuplot -p graph.plt

著者はあなたの不利益の一切の責任を取りません.