In cases when you send crypto from one wallet to another it is important that the withdrawal and corresponding deposit match as a transfer. Transferring crypto between your own accounts is not a taxable event and you should be able to do this without worrying about profits or losses.
How the automatic matching algorithm works
A transfer boils down to matching a withdrawal from one wallet to a deposit in another wallet. Since the wallets don't know if you own the other wallet, all the matching of transfers needs to be handled by you (or your tax system). If left unmatched they can create incorrect tax consequences. As such it is important that you check all unlabeled withdrawals and deposits to ensure that they should not in fact be a transfer.
Fortunately, Divly has built an algorithm that automates this process and matches transfers for you. The logic follows:
Check if a withdrawal and a deposit has the same transaction hash. If true, match the transfer. If false, go to step 2.
Check if a withdrawal and deposit sent/received the same cryptocurrency. If true, go to step 3.
Check that the withdrawal did not occur after the deposit (you must send the crypto before you receive it). There is a 5 minute wiggle room to allow for discrepancies when importing data from different wallets. If true, go to step 4.
Check that the withdrawal amount is not less than the deposit amount (you cant receive more than you sent). If true, go to step 5.
Check that the deposit happened within 12 hours of the withdrawal. If true, go to step 6..
Check that the withdrawal amount is max 1.2 times the amount of the deposit. If true, match the transfer.
Some parts of the logic have been amended to handle small time differences that can occur between different wallets.
Why is My Transfer Not Matching?
The algorithm is not bulletproof but does a great job matching the majority of transfers. There are scenarios that could cause a transfer to remain unmatched or incorrectly matched. These include:
The user forgot to import one side of the transfer (either the deposit or the withdrawal).
Transactions were imported using different time zone data.
The transaction took over 12 hours to be processed by the network (included in a block).
The user sends several transfers within 12 hours with values within 20% causing the wrong withdrawals and deposits to match.
It is always worth checking that all transfers have been matched. If not, you can always solve it by matching it manually.