こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!
- Coincheck(コインチェック)での仮想通貨取引をもとに収支計算し、確定申告したい。
- Pythonで仮想通貨取引の収益計算を自動で行いたい。
仮想通貨取引の確定申告を効率化!プログラムで収益計算を自動化
仮想通貨の確定申告に際して、上記のような不満を感じたことはありませんか?
本記事では上記の悩みを解決します。具体的に、プログラミング言語Pythonを用いて仮想通貨取引の収益計算を自動化し、確定申告を手間なく行う方法について解説します。
【参考】会計ソフトを用いた仮想通貨取引の収益計算方法
本記事ではプログラミング言語Pythonを用いた収益計算方法を解説しています。プログラム言語は無料かつ一度構築してしまえば使い勝手が良いのが利点です。一方で、「プログラム言語ってなんか難しそう。」「プログラム環境構築が手間」と感じられる方もいらっしゃるでしょう。
そのような方向けに仮想通貨取引の集計計算に対応したおすすめ会計ソフトも併せて紹介します。使い勝手も良く、特に仮想通貨取引を頻繁に実施される方におすすめです。
【Python】Coincheck(コインチェック)での仮想通貨取引から収益計算
本記事では「Pythonを用いてCoincheckでの暗号資産取引明細情報を取得し、収益計算する方法」について、以下手順で言及します。
- 【データ準備】仮想通貨取引明細データのダウンロード
- 【Python準備】Python環境のインストール
- 【Python準備】Pythonライブラリのインストール
- 【Python】仮想通貨取引明細データの加工
- 【Python】移動均法を用いた損益計算
- 【Python】総平均法を用いた損益計算
【事前準備】仮想通貨取引明細書をダウンロード
はじめに、コインチェックのホームページから仮想通貨取引明細(CSVファイル)を取得します。以下の手順でCSVファイルはダウンロードできます。
コインチェック会員ページにログイン
Coincheckをクリックし、会員ページにログインします。
取引履歴をクリック
「取引履歴」をクリックします。
取引履歴をクリック
Coincheckフォーマット(新)タブ内の年をクリックすると、「XXXX年ファイル作成」が表示されます。
それをクリックすると「XXXX年ダウンロード」と表示されるため、再びクリックし、取引履歴のダウンロードを完了します。
ダウンロードしたCSVファイルを確認
ダウンロードしたCSVファイルを開くと上図のような取引履歴が確認できます。後述では、このCSVファイルをPythonで読込、収益計算を実行します。
【Python準備】Python環境のインストール
お手元のPCでPythonが利用できる環境を整えます。Python環境の構築がお済みでない方は、こちらの記事をご覧下さい。
【仮想通貨】Python開発環境の構築してビットコイン自動売買実践#2
ビットコイン自動売買に興味があり体験してみたい方向けに「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】総平均法を用いた仮想通貨取引の収益計算
仮想通貨収益計算結果を出力するコードを以下に示します。収益計算は総平均法を採用しました。総平均法など仮想通貨の収益計算理論について詳しく知りたい方はこちらの記事をご覧ください。
コード
# 購入した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 | ボリンジャーバンド | オシレータ |
Python | MACD | オシレータ |
Python | RSI | オシレータ |
Python | 時系列予測モデルの構築 | 機械学習・AI |
【オシレータ】:現在の相場に対する買われすぎ・売られすぎの判断に有効
その他仮想通貨自動トレード解説記事
対応言語 | 記事名 |
---|---|
Python | 【データ収集】仮想通貨の過去データを大量取得する方法 |
Python | 【初心者向け】ccxtを活用した仮想通貨の自動取引 |
Node.js | 【初心者向け】ccxtを活用した仮想通貨の自動取引 |
最後に
お問い合わせフォーム
上記課題に向けてご気軽にご相談下さい。
お問い合わせはこちら