Scripts sind outdated, ich hab neue, bessere. Wenn jemand ernsthaft interesse anmeldet, werde ich die Sachen hier updatenMoin Jungs,
ich war mal wieder bei meinem Steuerberater... ich hatte ihm vorab die 2 Antworten von Koschyk zugesandt.
Hier in Kurzform was ich aus dem Gespräch mitgenommen hab:
- Die Unsicherheit kotzt Ihn genauso an wie uns, wirkliche Klarheit gibt's in 5-10 Jahren wenn der Bundesfinanzhof (oberstes Finanzgericht?) was entscheidet
- Er stimmt nicht mit Koschyk überein was die Umsatzbesteuerung gemineter coins angeht
- Wir können also jetzt nur eins tun und eine Gewinnermittlung fahren, welche für uns "nicht nachteilig" erscheint, müssen aber damit rechnen, daß der ganze Käse evtl. neu aufgerollt wird sollte der BFH eine relevante Entscheidung fällen
- Es gibt ein Urteil vom BFH welches besagt, daß Depots getrennt geführt werden dürfen. (Er sucht mir das Urteil noch raus). Inwiefern das auf Bitcoin passt bleibt meiner Ansicht nach zu beurteilen, mein Stuerberater ist sich aber sicher, daß das Urteil hier zur Anwendung gebracht werden darf (ich beschreibe weiter unten wie das geht mit getrennten Depots)
Nochmals zur Übersicht wie ich die Möglichkeiten der Verbuchhaltung sehe:- 1.) FIFO über alle Depots (auch persönlicher Geldbeutel) vereinigt
- 2.) LIFO über alle Depots (auch persönlicher Geldbeutel) vereinigt
- 3.) FIFO separat pro Depot
- 4.) LIFO separat pro Depot
(FIFO heisst: First In First Out, LIFO: Last In First Out)Getrennte DepotsEine [F|L]IFO-Buchhaltung pro Depot getrennt abzufahren ist ja kein Problem. Jeder Exchange-Account kann als Depot betrachtet werden (es können nur Bitcoins verkauft werden, welche dort auch liegen). Zusätzlich kann man alle private Geldbeutel als 1 Depot führen (analog zu: "safe zuhause mit Aktien drin").
Bleibt die Frage was passiert beim Transfer von Bitcoins zwischen Depots: Grundsätzlich "klebt" an den coins natürlich das Kaufdatum und der Kaufpreis ("Topf"). Die Coins werden inklusive dieser infos transferiert. Wurden nun beispielsweise tatsächlich Bitcoins von mtGox Account in den privaten Geldbeutel transferiert, so ergibt sich natürlich die Frage: aus welchem Topf entnehme ich die coins aus dem mtGox Depot. Überraschende Antwort meines Steuerberaters: "Das können sie frei wählen".
Dies bedeutet also:
Der Transfer zwischen Depots muss tatsächlich (nachweisbar) stattgefunden haben (Nachweis im Falle mtGox ist einfach: die Historie enthält ja "withdraw" und "deposit" events, die blockchain muss nicht bemüht werden, das FA kann gegebenenfalls die Daten von mtGox anfordern und alles prüfen). D.h: transfer zwischen Depots kann nicht "nachträglich" rein buchhalterisch gemacht werden. Was allerdings
erst in der Buchhaltung festgelegt werden muss ist die
Auswahl des Topfes und hier entsteht natürlich großes "
Optimierungspotential" (wg. Unterschiedlichen Kaufpreisen und natürlich der 1-jährigen Haltefrist)
Und nun?Ich will jetzt einfach mal versuchen für meinen Fall alle Möglichkeiten durchzuspielen. Das ist natürlich recht aufwendig und ich dachte mir ich teile mal 'ne kleine Anleitung und Scripte mit euch:
Datenbank erstellenErstmal brauchen wir 'ne Datenbank. Ich nehm hier Postgres:
bash$ psql postgres
postgres=# create database bitbuch;
postgres=#
bash$ psql bitbuch
bitbuch=#
DatenimportIch verteile die Beschreibung der Datenimports auf einzelne posts und verlinke diese hier:
Dannach kontrollieren wir jewils ob's gut aussieht und kriegen auch schon summarische Ergebnisse. ('mtgox' ggf mit 'intersango', 'bitcoin.de', etc... ersetzen)
bitbuch=# select * from trades where exchange = 'mtgox' order by datum limit 10;
bitbuch=# select extract(year from datum) as y, sum(delta_BTC) as BTC, sum(delta_fiat) as fiat, sum(fee_BTC) as fee_BTC, sum(fee_fiat) as fee_fiat
from trades where exchange = 'mtgox' group by y order by y asc;
bitbuch=# select extract(year from datum) as y, extract(month from datum) as m, sum(delta_BTC) as BTC, sum(delta_fiat) as fiat, sum(fee_BTC) as fee_BTC, sum(fee_fiat) as fee_fiat from trades where exchange = 'mtgox' group by y, m order by y, m asc;
Wechselkurse anwendenDieser Post beschreibt den Import von Wechselkursen (gegnüber USD). Das durchführen, dann können wir die _EUR-Spalten der trades-tabelle befüllen:
bitbuch=> update trades t set delta_eur = null, fee_eur = null;
bitbuch=> update trades t set delta_eur = t.delta_fiat / r.rate, fee_eur = t.fee_fiat / r.rate from rate r where t.fiat_currency = 'USD' and r.currency = 'EUR' and r.datum = t.datum::date;
bitbuch=> update trades t set delta_eur = (t.delta_fiat / r1.rate) * r2.rate, fee_eur = (t.fee_fiat / r1.rate) * r2.rate from rate r1, rate r2 where t.fiat_currency <> 'USD' and r1.currency = t.fiat_currency and r2.currency = 'EUR' and r1.datum = t.datum::date and r2.datum = t.datum::date;
und schauen, ob alle Einträge erwischt wurden:
bitbuch=> select * from trades t where delta_eur is null or fee_eur is null; -- should return 0 rows
(hier sollten 0 Ergebnisse kommen)Buchhaltung (fifo oder lifo) durchführenNun kommt ein script zum einsatz, welches die [f|l]ifo-Buchhaltung durchführt. Zunächst braucht man aber "node" (node js) und ein paar abhängigkeiten, welche mit npm installiert werden können.
bash$ npm install moment pg request
Dann buchhalt.js downloaden und starten
bash$ wget http://slf-software.de/buchhalt.js
bash$ node buchhalt.js
Am Anfang von buchhalt.js kann man ein paar sachen konfigurieren, z.B. "method" ("fifo" oder "lifo").
Das Ding führt dann die Buchhaltung mit den Töpfen durch und schreibt ein csv-file weg
("out.csv"), in welchen die einzelnen Käufe und Verkäufe (mit ermitteltem Gewinn) ausweist. Des weiteren werden die 3 ältesten (bei fifo) oder neuesten (bei lifo) Töpfe ausgewiesen.
Das CSV mit office aufmachen (Trennzeichen: ",") und die Gewinn-Spalte aufsummieren (pro Jahr per autofilter oder sonstwie) ergibt dann ohne jegliche Gewähr den zu versteuernden Gewinn. Ich würde mich freuen, wenn jemand die Korrektheit nachvollziehen könnte.
Was noch fehlt bzw. nicht berücksichtigt ist:- handling getrennte Depot-Führung
- beachtung der Haltefrist (momentan wird alles als Steuerpflichtig angesehen)
- Behandlung von Gebühren (?)
- Umrechnung Gewinn nach EUR laut Tageskurs EUR/USD
- import Daten intersango, bitcoin-central, bitcoin.de,...
Ich hoffe jemand hat hierfür Verwendung. Vielleicht steuert jemand auch was bei... z.B. import-code für andere Exchanges oder sogar Geld? (donation address: 1Cdx9apmXESPNdXik3e64LbgtoyYTUNwLm). Bin ausserdem für jeden Kommentar oder Bug-Report dankbar!
EDIT:
- 13.11.2013: change type of datum from date -> timestamp
- 13.11.2013: Datenimport mtGox in separaten Post ausgelagert
- 13.11.2013: Beschreibung Anwendung Wechselkurse hinzugefügt
- 24.11.2013: Adding bitcoin.de, Bitcoin Central imports
Scripts sind outdated, ich hab neue, bessere. Wenn jemand ernsthaft interesse anmeldet, werde ich die Sachen hier updaten