Review Accounting After a Cash Sync
Expected Behavior
After a cash sync, the cashbook shouldn't change a lot.
Actual Behavior
The live deployment to Kraken starts with:
CashBook Total Value: ₿0.24
2024-04-05T00:00:49.7808038Z TRACE:: Total margin information: TotalMarginUsed: 0.18, MarginRemaining: 0.06
Then we have a cash sync where the margin information jumps:
2024-04-05T11:45:00.0572082Z TRACE:: Brokerage.PerformCashSync(): Sync cash balance
2024-04-05T11:45:10.4329261Z TRACE:: Total margin information: TotalMarginUsed: 0.13, MarginRemaining: 0.32
Potential Solution
N/A
Checklist
- [x] I have completely filled out this template
- [x] I have confirmed that this issue exists on the current
masterbranch - [x] I have confirmed that this is not a duplicate issue by searching issues
- [x] I have provided detailed steps to reproduce the issue
5 is pretty big in BTC which is what the user is using, so it should be relative to the TPV I think
kraken, sounds like it accounting for the holdings again on each cash sync but should be the first only really
After doing some research about this bug I found the following things:
-
I found that the Margin Remaining value changes even without applying the balances values obtained from Kraken API each time the method
KrakenBrokerage.GetCashBalance()is called. To find that I ran the algoBasicTemplateCryptoAlgorithmusing live-kraken environment and USD as account currency, and commented the following line (531) so that the new balance cash amount wasn't applied to the algorithm's Cashbook: -
Martin and I thought that the MarginReamining value could have been changing since Kraken was taking into account the profit/loss of an open position so that
KrakenBrokerage.GetCashBalance()was always adjusting to the current price, profit/loss included, but LEAN wasn't. In order to see if our hypothesis was right we took 2 snapshots (with a difference of 10 minutes between them) of the state of the LEAN Holdings, Cashbook and TPV as well as the Holdings and Cash balances from Kraken API responses. After comparing those snapshots we found that the responses from the Kraken API changed just in two fields (valueandnet) but those weren't used when computing the cash balances for LEAN. Below is a screenshot of the difference between the Kraken resposes as well as the file with the two snapshots:KrakenCashBalanceBugLogs.txt
Shipping fix at https://github.com/QuantConnect/Lean.Brokerages.Kraken/pull/48, starting from version 16546