Von KOINLY auf BLOCKPIT UMZIEH-GUIDE (mit jährlichen Transaktionshistorien von Koinly)

PRELUDE / KONTEXT (optional, Guide siehe unten):

  • Die meisten Leute haben wohl nicht viele Transaktionen und spielen einfach die ganzen Börsen und Wallets halt bei Blockpit nochmal ein und gut ist es.
    Ich habe mich aber so ein halbes Jahr herumgeplagt meine ganzen Börsen und Wallets und Transaktionen (‚was hab ich da im jahr 2015 gemacht als ich 113eur in btc an adresse x geschickt habe?‘ – haufen Dedektivarbeit) irgendwie in Ordnung zu kriegen. Da gabs zb Api’s die fehlerhaft waren (ich musste das herausfinden und händisch korrigierne), Api’s die für manche Zeiträume keine Daten geliefert haben (musste ich mit csv download ausfüllen), Daten von Börsen die hopps und untergegangen sind (also könnte ich an die Daten garnicht mehr von den Börsen direkt kommen). Also das jetzt Alles nochmal machen wäre die totale Hölle gewesen, darum die untere Methode (auch Hölle, aber kleinere).

  • Ich habe bis zum letzten Drücker jetzt gewartet ob

  1. Koinly vielleicht doch die neue österreichische Rechtslage wieder unterstützt. (sie haben vor 6 Monaten gesagt sie arbeiten daran, dann gesagt dass es schwieriger ist als gedacht)

  2. Andere Leute (alle Österreicher die auf Koinly sind hätten starken logischen Grund auf Blockpit umzuziehen, weil Koinly die neue österreichische Rechtslage nicht unterstützt) dass ausarbeiten und bald die Foren voll sind von Austausch darüber wie man es macht, bzw Steuersoftware-firmen einfach ein Makro programmieren und anbieten, oder Blockpit selber einfach eine one-click Integration anbietet (hätt vielleicht auch wirtschaftliche Logik wenn ein Konkurrent ein komplettes Land nicht mehr unterstützt und ein Haufen Leute zur gleichen Zeit eine neue Steuersoftware suchen)

  • Ich habe das für mich selber geschrieben, als Privatperson, also keinerlei Garantien oder so. Ich habe eine spezialisierte Firma zu Crypto-Steuersoftwares zuerst angefragt, sie haben mir Preisvorschlag von 2000euro gemacht. Ich wollte nur für deren Schritt für Schritt Anleitung zahlen, dann haben Sie mir gesagt dass sie es auch einfach händisch machen. Probleme gabs viele, habe sie aber selber gelöst weil die Firma so 170eur pro Stunde verrechnet hätte für Fragen.
    Ich habe auf fivver einen Argentinier für 13euro engagiert der mir einen Makro programmiert hat den ich im Punkt 8 verwende. Ich habe etwa 25 Stunden gebraucht um meine 10 Jahre reinzuspielen, die Haupt-Zeit war natürlich Fehlerbehandlung und rausfinden wie das ganze ordentlich funktioniert, das waren vielleicht 15 Stunden.

Von KOINLY auf BLOCKPIT UMZIEH-GUIDE
(mit jährlichen Transaktionshistorien von Koinly):

  1. Jährlichen Transaktionshistorien von Koinly runterladen
    Gehe auf Koinly webseite koinly.io
    Gehe auf ‘Tax reports’
    Gehe die Seite runter und bei select auf ‘transaction history’
    dann auf ‘Download Report’
    dass für alle Jahre machen
    (du musst wohl die Jahre gekauft haben um die Transaktionshistorien zu kriegen)

(auch gut ist die Transaktionshistorien mal garnicht zu öffnen sondern in einem Ordner zu sichern und zb mit ‘original’ zu beschriften, dann alles zu kopieren und nur mit den Kopien zu arbeiten)

  1. Gehe auf

Speichere das Dokument (blockpit manual import template) ab als excel file

  1. Öffne ein Jahresdokument von Koinly (zb 2013)

Achtung!

Man muss es mit Gebietsschema ‘English (Großbritannien)’ öffnen.
Sonst stimmen die Zahlen evtl nicht (bei mir hat er zb aus 0,004 btc einfach 4btc gemacht, weil ich es mit Gebietsschema Österreich aufgemacht habe)

Öffne blockpit manual import template und speichere es als neue Arbeitsdatei zb ‘Jahr xxxx umgewandelt in blockpit format’
Lösche die Daten in diesem Beispiel-Dokument, behalte die Überschriften

LibreOffice calc ist gratis, mit dem habe ich angefangen. Dann später auf excel umgestiegen weil ich einen Makro für Excel hab machen lassen (der kannte sich bei libreoffice macros nicht aus). Excel hatte ich noch wo eine alte excel 2010 Installation, ohne Registrierung konnte ich das auch 30 Tage nutzen.

  1. ‚Date‘ von Koinly hat ganz anderes Format als Blockpit. Also müssen wir die Datumseingaben mal umformatieren.

a. Neue excel tabelle aufmachen als hilfstabelle

b. Daten datums von koinly datei kopieren (nur die Datums kopieren, rein ins neue Dokument, so dass das erste Datum ganz links oben in Feld ‘A1’ steht)

c. Dann daten folgendermaßen in form wie blockpit es will umwandeln:

Anleitung für libre office calc:

Die datumsspalte von koinly markieren und rechtsklick ‚zellen formatieren‘ und dann typ ‚text‘ einstellen

Dann in erstem feld neben dem ersten Datum (also B1) dies reinkopieren:

=TEIL(A1;9;2)&„.“&TEIL(A1;6;2)&„.“&TEIL(A1;1;4)&" "&TEIL(A1;12;8)

Also das erste datum muss dazu in Zelle A1 1A stehen

Dann das so runterziehen für die gesamte Spalte

Dann sollten neben den koinly datums nun im blockpit format stehen

2013-12-26 19:52:00 UTC → 26.12.2013 19:52:00

Diese Hilfsdatei kann man behalten und etwas wiederverwenden wenn man noch weitere Jahr zum umwandeln hat

Nun die gesamte Spalte mit den neuen Datums kopieren strg+c,
und dann diese Spaltein das Zieldokument (zb ‚Jahr 2020 von koinly in blockpit umgewandelt.xlsx‘) einfügen, unter der Datums-spalte (rechtsklick → ‚inhalte einfügen‘ → ‚als Text‘ – weil wenn man es einfach normal einfügt gibt es fehler mit ‚#REF!‘)

Dann hat man mal die erste Spalte (Date UTC) erledigt

Diese Sachen kann man mal kopieren, von koinly datei in blockpit datei

Feld in Koinly → Feld in Blockpit:
Sent currency → outgoing asset

Sent amount → outgoing amount

Received currency → incoming asset

Received amount → incoming amount

Fee currency → fee asset

Fee amount → fee amount
TxHash → Trx. ID

Description → Comment
(TxSrc = senderadresse und TxDestTxHash = empfängeradresse einfach mal in koinly dokument lassen, es gibt kein feld in blockpit dafür)

Sending Wallet → Integration Name: das stimmt nicht 100%, das müssen wir nachher nochmal händisch korrigieren, aber derweil einfach mal die Einträge von ‚sending wallet‘ in koinly ins Feld von Blockpit ‚Integration name‘ reinspielen

Und Hilfs-Spalte ‚hilfstabelle receiving wallet‘ anlegen (wie du es nennst ist nicht wichtig):

Hier die werte von koinly ‚receiving wallet‘ einfügen, die brauchen wir später und da ist es superpraktisch wenn man es gleich direkt im Dokument hat

(oder umgekehrt:

Feld in blockpit → feld in koinly:

Outgoing asset → sent currency

Outgoing amount → sent amount

Incoming asset → received currency

Incoming amount → received amount

Fee asset → fee currency

Fee amount → fee amount

Comment → TxSrc (sender wallet adresse) TxDest TxHash (Empfänger wallet adresse) Description
Trx. ID → TxHash
Integration name → sending wallet meistens)

Ergebnis zb etwa:

Speichere das Koinly dokument als neues Dokument ab (damit das original mal sicher gesichert ist)
und dann erstelle ein neues Excel dokument für folgende Hilfstabelle:

Kopiere die ersten 3 Spalten (Date, Type und Tag) in die neue Hilfstabelle

image

(das sind die ersten 3 Spalten…)

Dann ersetze diese Types von Koinly auf die Labels von Blockpit mit der ‚suchen und ersetzen‘ funktion

Zb das erste: bei libreOffice calc unter ‚bearbeiten‘ → ‚suchen und ersetzen‘ (oder: strg+alt+f), da ‚buy‘ in suchen und ‚Trade‘ in ersetzen feld geben

‚Types‘ auf Koinly → ‚Label‘ auf blockpit

Buy → Trade

Sell → Trade

Exchange → Trade

crypto_withdrawal + tag ‚cost‘ → Payment – ok, da bin ich mir nicht sicher… payment ist wenn man für ein produkt oder so crypto ausgegeben hat

(hier muss man händisch schauen, die kombination crypto_withdrawal in spalte ‚type‘ und ‚cost‘ in spalte ‚tag‘ ergibt ‚Payment‘ für Blockpit)

[[crypto_withdrawal + cost → hmm… dass waren bei mir in wahrheit voll oft Fees, also → Fee

crypto_deposit + tag ‚Airdrop‘ → Airdrop

crypto_deposit + tag ‚Lending interest‘ → wohl ‚Interest‘

fiat_deposit → Non-Taxable In

fiat_withdrawal → Non-Taxable Out

Transfer → Das ist das komplizierteste, wir kommen später darauf zurück. In diesem Schritt jetzt mal als ‚Transfer‘ stehen lassen.

transfer + tag ‚to pool‘ → Koinly hat die Funktion ‚to pool‘, das ist praktisch wenn man was native staked – man ‚sendet‘ es praktisch wohin, aber man besitzt es noch. Koinly sendet es praktisch ‚an eigene adresse‘. Bei Blockpit geht das nicht - Bei Blockpit mache ich es so dass ich als ziel, zb wenn ich eth stake, dann einfach ‚eth pool‘ oder ‚eth gestaked‘ angebe. Also für Blockpit ist es dann einfach eine weitere wallet.

Aber: hier schreibe ich mal statt ‚transfer‘ dann ‚pool‘ in die zelle → das ist kompliziert, wird aber später klar, grundsätzlich will ich diese Zellen markieren, damit ich weiß dass es keine normalen Transfers sind

Bei Buy, sell, exchange, fiat_deposit, fiat_withdrawal ist es leicht mit der suchen+ersetzen funktion.

Bei dem anderen zeug wo die zweite spalte ‚tag‘ auch wichtig ist, ist es schwieriger. Da suche+ersetze ich die tags (zb lending interest zu interest, cost zu fee) und kopiere dann händisch diese Tags in erste spalte (auch ‚to pool‘).

(Ergebnis: in diesem Fall wurden buy und sell beide zu ‚Trade‘)

Dann diese nun für Blockpit konformen Bezeichnungen unter ‚Type‘ kopieren und unter ‚Label‘ spalte in deiner ‚Jahr xxxx von koinly in blockpit format umgewandelt.xlsx‘ Datei kopieren

Resultat:

Bei manchen Labels muss man Einträge von Spalte ‚hilfstabelle received‘ in ‚Integration name‘ (dass in dem Fall leer ist) kopieren

Zb bei Labels:

Airdrop

Non-Taxable In

Interest

→ überall wo das ‚Integration Name‘ Feld leer ist

Nachher:

Transfer

In koinly ist ein Transfer nur eine zeile

In blockpit sind es 2 zeilen – ein deposit und ein withdrawal

Also händisch rangehen:

a. Schau händisch (oder nutze die Suche) für ersten Eintrag mit Label ‘transfer’

b. Ganze zeile kopieren und darunter nochmal einfügen, dass der Eintrag doppelt ist
(rechtsklick in die ausgefüllte zeile unter dem Transfer, ‘zellen oberhalb einfügen’ damit mal eine leere Zeile unter der transfer zeile steht, dann strg+c die transfer zeile in die leere Zeile nochmal hinkopieren)

c. In obere Zeil mal ‘Withdrawal’ als ‘label’ eingeben,
(und
sending wallet als integration name steht eh schon dort von Schritt 5 vorher),
und
Werte in ‘incoming asset’ und in ‘incoming amount’ löschen

d. In untere Zeile von den zweien:
Als label ‘Deposit’ angeben und receiving wallet von Koinly als integration (das muss man in koinly original datei nachschlagen was das war → ok, müssen wir nicht mehr, das haben wir ja schon direkt danebenstehen in ‘hilfstabelle receiving’ die wir in Schritt 5 angelegt haben),
und
Werte in ‘outgoing asset’ und in ‘outgoing amount’ löschen

e. Falls fees angefallen sind dann diese fees (fee asset und fee amount) in der deposit zeile löschen (in der withdrawal zeile stehen lassen)

Resultat zb:

Vorher:

Nachher:

Das für alle Transfer Einträge machen

Dann wenn alles fertig ist die Spalte ‚hilfstabelle receiving‘ löschen

Ok, ich habe von einem Inder auf Fivver einen Macro machen lassen für 13euro.

Er konnte nur Excel, darum:

a. Tabelle einfach in excel reinkopieren (2010er excel reicht auch)

b. In Excel Alt+F11 drücken um den Macro Editor zu öffnen

c. Rechtslick auf das project (heißt zb ‘VBAProject (irgendwas)’) und ‘einfügen’ → ‘modul’

d. Auf Modul draufklicken und rechts im Fenster diesen Text reinkopieren:

Sub add_row()

Dim ws As Worksheet

Dim lastRow As Long

Dim i As Long

’ Set activesheet

Set ws = ActiveSheet

’ find the last row from column A

lastRow = ws.Cells(ws.Rows.Count, „A“).End(xlUp).Row

msjIni = MsgBox(„The adjustment process is initiated. Please wait to receive confirmation that the process has been completed.“, vbInformation, „Start Process“)

'Start i

i = 2

’ Loop on rows

Do While i <= lastRow

If ws.Cells(i, 4).Value = „transfer“ Then

'First Step

’ Copy the entire row

ws.Rows(i).Copy

’ Paste row next to the original

ws.Rows(i + 1).Insert Shift:=xlDown

'Second step

'#A# col 3 row 1 to col 2 row 2

ws.Cells(i + 1, 2).Value = ws.Cells(i, 3).Value

'#B# clear col 3 of bow rows

ws.Cells(i, 3).Value = „“

ws.Cells(i + 1, 3).Value = „“

'#C# Set col 4 as „deposit“ and „withdrawal“

ws.Cells(i, 4).Value = „Withdrawal“

ws.Cells(i + 1, 4).Value = „Deposit“

'#D# Clear col 5 and 6 of second row and copy on col 6 the values of the first

ws.Range(Cells(i + 1, 5), Cells(i + 1, 6)).Clear

ws.Range(Cells(i, 5), Cells(i, 6)).Copy

ws.Range(Cells(i + 1, 7), Cells(i + 1, 8)).PasteSpecial (xlPasteAll)

'#E# Clear col 7 and 8 of first row

ws.Range(Cells(i, 7), Cells(i, 8)).Clear

'#F# Clear col 9 and 10 of second row

ws.Range(Cells(i + 1, 9), Cells(i + 1, 10)).Clear

’ Update the last row because we add a row

lastRow = ws.Cells(ws.Rows.Count, „A“).End(xlUp).Row

'Add 2 two two the loop because of the new row added

i = i + 2

Else

'Increment i

i = i + 1

End If

Loop

msjFin = MsgBox(„Process completed successfully.“, vbInformation, „End Process“)

End Sub

e. Zurück auf excel, die datei speichern als .xlsm (excel datei mit makros)

f. Dann im excel ALT+F8 drücken → man kommt auf Makros, dort soll im Makronamen ‘add_row’ stehen, dann auf ‘ausführen’ klicken
Dann kann man dem Makro zuschauen wie er arbeitet

g. Falls man transfers hatte die ‘to pool’ waren in koinly (wie im Schritt 6 beschrieben), dann muss man hier noch etwas ändern → also die ganzen Pool einträge händisch den Transfer in withdrawal + deposit umwandeln, und als deposit-wallet dann zb einen passenden neuen wallet-namen angeben, zb ‘hex pool’ wenn ich hex in einen pool geschickt habe

h. Dann die hilfsspalte ‘hilfstabelle received’ löschen

i. Dann die Datei in excel als ‘xlsx’ Datei speichern, ohne makros → weil xlsm datei kann blockpit nicht importieren

  1. Auf blockpit.io gehen

→ ‚integration‘ → ‚excel importieren‘ → die erstellte datei einfügen

  1. Mögliche Fehler

Meistens gottseidank gibt Blockpit an ‚fehler in zeile 123‘ zb, also dann weiß man die Zeile und dann ist es einfach zu korrigieren

Arg lange habe ich für diesen Fehler gebraucht: ‚Fehler beim importieren‘

Wenn er nur sagt ‚Fehler beim importieren‘ und keine weiteren Infos:

Das war mir 2x wegen diesem Fehler: im Integration Name hat sich in der Mega-Liste ein fehlender Eintrag eingeschlichen.

  1. Mögliche Verbesserungen vom Prozess:
  • Macro libreoffice calc programmieren dass es die ganzen Typen+Tags in richtige Label Bezeichnungen umwandelt

  • Macro machen der Schritt 7 macht → wenn ‚Integration Name‘ leer ist, dann das von nächster Spalte (hilfstabelle receiv) reinkopieren

[- Macro auch in libreoffice calc programmieren dass es das mit den transfers automatisch macht]

7 „Gefällt mir“

Da fragt man sich wirklich, ob es nicht einfacher geht? Wow, was für ein Horror-Aufwand. Bist sicher um Jahre gealtert; oder hast jetzt ein Unternehmen gegründet, um Vieltradern zu helfen.
Danke, dass du uns daran teilhaben hast lassen! Jeder einzelne Schritt so dokumentiert - ein extra dickes +.

1 „Gefällt mir“

Danke freut mich.

Vom Regen in die Traufe:
Hatte jetzt noch ein Problem mit Daten von Binance. Hab dann Experiment gemacht und draufgekommen dass die CSV-Daten stimmen, die Api-Daten aber nicht.

Dachte ‚Supi, dann lösch ich meine api Integration und spiel die CSV’s ein‘… und dann draufgekommen dass Blockpit CSV-integration von Binance nicht unterstützt, also könnt ich mich jetzt wieder tagelang dransitzen und einen guide für Umwandlung binance zu blockpit machen)

Hm.
Ok auf ersten Blick scheint dieses Unterfangen komplett hoffnungslos, weil die csv von Binance ist komplett anders gebaut, Binance hat buys und sells und fees alles untereinander, Blockpit hat es in einer Zeile nebeneinander… händisch müsstest dann immer mehrere Zeilen von Binance in eine Blockpit Zeile umwandeln, gute Nacht sag ich nur.
Also für sowas braucht man guten Makro-Programmierer denk ich, selbst dann wohl sehr schwierig.
(edit: ok händisch durchschauen angefangen, für 1 seite brauchte ich über 5min, es sind 139seiten, das wären 12h - also da brauch ich was anderes, werde gezielt die 10 coins anschauen die abweichen)

1 „Gefällt mir“

Hey, erstmal vielen Dank für Deinen ganzen Einsatz.
Ich bin deiner Anleitung gefolgt, leider komme ich bei dem Makro-Teil nicht wieter. Kannst Du das vielleicht hier im Forum nochmal in einem Code-Fenster posten. Ich erhalte Syntax-Fehler.

hier ist so ein Code-Fenster
Sub add_row()
    
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long
    
    ' Set activesheet
    Set ws = ActiveSheet
    
    ' find the last row from column A
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    msjIni = MsgBox("The adjustment process is initiated. Please wait to receive confirmation that the process has been completed.", vbInformation, "Start Process")
    
    'Start i
    i = 2
    
    ' Loop on rows
    Do While i <= lastRow
        
        If ws.Cells(i, 4).Value = "transfer" Then
            '***First Step***
            ' Copy the entire row
            ws.Rows(i).Copy
            ' Paste row next to the original
            ws.Rows(i + 1).Insert Shift:=xlDown
            
            '***Second step***
            '#A# col 3 row 1 to col 2 row 2
            ws.Cells(i + 1, 2).Value = ws.Cells(i, 3).Value
            
            '#B# clear col 3 of bow rows
            ws.Cells(i, 3).Value = ""
            ws.Cells(i + 1, 3).Value = ""
            
            '#C# Set col 4 as "deposit" and "withdrawal"
            ws.Cells(i, 4).Value = "Withdrawal"
            ws.Cells(i + 1, 4).Value = "Deposit"
            
            '#D# Clear col 5 and 6 of second row and copy on col 6 the  values of the first
            ws.Range(Cells(i + 1, 5), Cells(i + 1, 6)).Clear
            ws.Range(Cells(i, 5), Cells(i, 6)).Copy
            ws.Range(Cells(i + 1, 7), Cells(i + 1, 8)).PasteSpecial (xlPasteAll)
            
            '#E# Clear col 7 and 8 of first row
            ws.Range(Cells(i, 7), Cells(i, 8)).Clear
            
            '#F# Clear col 9 and 10 of second row
            ws.Range(Cells(i + 1, 9), Cells(i + 1, 10)).Clear
            
            ' Update the last row because we add a row
            lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
            
            'Add 2 two two the loop because of the new row added
            i = i + 2
        Else
            'Increment i
            i = i + 1
        End If
        
    Loop
    
    msjFin = MsgBox("Process completed successfully.", vbInformation, "End Process")
    
End Sub
1 „Gefällt mir“