30 lines
1.5 KiB
Markdown
30 lines
1.5 KiB
Markdown
---
|
||
name: cost_basis_sync
|
||
description: sync_cost_basis.py architecture — order history cost calculation, wallet sync, Bitfinex API quirks
|
||
type: project
|
||
---
|
||
|
||
## sync_cost_basis.py(每30分鐘 cron :02, :32)
|
||
獨立腳本,從 Bitfinex 訂單歷史重算 entry_price,同時從錢包同步 amount 和 USDT 餘額。
|
||
|
||
**職責分離:**
|
||
- `sync_cost_basis.py`:撈訂單 + 錢包,更新 entry_price / amount / 餘額
|
||
- `main.py`(每5分鐘 :01, :06...):只撈錢包同步餘額,不重算成本
|
||
|
||
**Why:** `update_position()` 本地計算的 amount 用 `amount_usdt / price`,跟交易所實際成交量有差異,累積後總值偏差可達 10%+。
|
||
|
||
## Bitfinex 訂單 API 注意事項
|
||
|
||
1. **SELL 訂單 status 不一定是 "EXECUTED"**:可能是 `"INSUFFICIENT BALANCE (U1) was: PARTIALLY FILLED @ ..."`。必須同時檢查 `"EXECUTED"` 和 `"PARTIALLY FILLED"`。
|
||
|
||
2. **排序不可靠**:`/v2/auth/r/orders/{symbol}/hist` 的 `sort` 參數不保證正確排序。必須在 Python 端按 `mts_create`(index 4)手動排序。
|
||
|
||
3. **實際成交量 = amount_orig - amount_remaining**:`amount_orig`(index 7)是原始下單量,`amount`(index 6)是剩餘量。不能直接用 `amount_orig`。
|
||
|
||
4. **nonce: small 錯誤**:API 請求間隔太短會觸發。幣種間至少 `time.sleep(1)`。
|
||
|
||
5. **Bitfinex 不收手續費**:計算出的 amount 應與錢包完全一致(0% deviation)。
|
||
|
||
## cost_tracking.json
|
||
記錄每個幣種的訂單撈取起始時間(ms)。完全賣出設為 null,重新買入時更新為新的第一筆 BUY 時間。
|