jackyu66git
9163d7fd30
切换到实盘环境
...
- HL: WS/REST 从 testnet 切换到 mainnet
- BG: 删除 paptrading header(实盘 key 不以 bg_ 前缀区分)
- config: 调整交易参数
- scanner: 更新跟踪币种列表
2026-05-04 22:24:30 +08:00
jackyu66git
4b009124d1
fix: revert dashboard bind to :8888 (external access), keep CLI IPC for control
2026-05-04 20:36:44 +08:00
jackyu66git
8ccb439f7a
refactor: replace REST API with Unix socket IPC + CLI subcommands
...
- Remove insecure HTTP API endpoints (positions, close, close-all, pnl)
- Add Unix socket IPC at /tmp/exchange-monitor.sock
- Add CLI subcommands: status, close-all, close <COIN>, stop, start
- Bind dashboard HTTP to 127.0.0.1:8888 (localhost only)
2026-05-04 20:34:00 +08:00
jackyu66git
88462f9829
feat: add API endpoints for positions, close, close-all, pnl, plus DB persistence before goroutine
2026-05-04 20:28:52 +08:00
jackyu66git
06a7e37836
fix: persist positions to DB before goroutine so restarts don't lose open trades
2026-05-04 20:16:44 +08:00
jackyu66git
411365b66e
fix: correct HL fee parsing (OrderStatus not statuses[]) and add productType to BG fills query
2026-05-04 20:06:27 +08:00
jackyu66git
6e9b982c66
config: lower threshold 0.10->0.05, arb 0.03->0.02, amount 0->0
2026-05-04 19:31:08 +08:00
jackyu66git
19443c132a
cleanup: remove 6 coins unsupported on Bitget testnet (OP, WIF, PYTH, SAND, IOTA, MOVE)
...
These coins return 40034 error on Bitget testnet (Parameter does not exist).
Keeping only 14 confirmed-working coins. Update memory with correct list.
2026-05-04 19:18:58 +08:00
jackyu66git
6baae85eaa
feat: actual exchange fees for entry orders
...
- BitgetTrade: added GetTradeFee() queries /mix/order/fills
- HyperLiquidTrade: added GetTradeFee() parses MarketOpen response
- trader.placeOrder() now returns (errMsg, actualFeeUSD)
- executeEntry uses actual fee from exchange, falls back to estimate
2026-05-04 18:35:33 +08:00
jackyu66git
0b2bfd0b02
chore: remove re-tracked gitignored files
2026-05-04 18:27:44 +08:00
jackyu66git
0aa9923067
fix: full arb table + net profit columns in price view
...
- ArbTable: removed slice(0,10) cap, shows all 42 opps (21x2)
- PriceTable: added net_bg_to_hl and net_hl_to_bg columns
- Backend SSE: sends net profit for both directions per coin
2026-05-04 18:26:49 +08:00
jackyu66git
9628100681
chore: remove tracked files that should be gitignored
2026-05-04 18:06:03 +08:00
jackyu66git
5f6578c179
feat: add 17 new cross-exchange pairs (BG↔HL)
...
Added: ALGO, PYTH, SAND, ADA, HBAR, IOTA, MINA, FET, WLD,
SUI, APT, NEAR, FIL, DYDX, JUP, TIA, MOVE
Removed: pixel and VET (fake 195% spreads on testnet)
Also updated GetHLSize() to handle szDecimals for all new coins.
2026-05-04 18:05:53 +08:00
jackyu66git
dd26152c2b
chore: clean tracked ignores (logs, binary, .env, data)
2026-05-04 17:50:46 +08:00
jackyu66git
49da6fd35b
fix: HL balance now reads spot USDC via SpotUserState
...
HL testnet USDC lives in the spot account, not the perp clearinghouse.
GetBalance() was calling UserState() (perp clearinghouseState), which
returned /usr/bin/bash. Switched to SpotUserState() and parse USDC.total - USDC.hold.
Also cleaned up .gitignore to exclude .env, binary, logs, data/.
2026-05-04 17:48:14 +08:00
jackyu66git
156ce22474
feat: HL EVM signing via sonirico/go-hyperliquid SDK - testnet orders work
2026-05-04 16:21:57 +08:00
jackyu66git
24727e4ec4
refactor: HL EVM signing via sonirico/go-hyperliquid SDK
2026-05-04 16:16:21 +08:00
jackyu66git
8b8d4140f9
refactor: HL EVM signing via sonirico/go-hyperliquid SDK
2026-05-04 16:15:51 +08:00
jackyu66git
c5c4c7394f
fix: HL testnet - add API wallet address to signed orders, 3-param constructor
2026-05-04 15:39:31 +08:00
jackyu66git
30436bbe75
fix: BG paper trading API - tradeSide param, correct host, marginMode
2026-05-04 15:28:08 +08:00
jackyu66git
e5ea78ffd2
feat: real trading mode, auto-stop after 5 trades, HL testnet support
...
- config.json: test_mode=false, ready for sim/testnet trading
- trader.go: auto-stop after 5 real trades, exchange response logging,
Stop()/Start() API, shuttingDown flag for graceful stop
- dashboard.go: POST /api/stop + POST /api/start endpoints,
trading status in SSE stats
- exchange/hyperliquid.go: switch HL WS to testnet endpoint
- exchange/hyperliquid_trade.go: switch REST to testnet endpoint,
support base64 + 32-byte EVM private keys
- main.go: listen on trader.StopCh (graceful, no process exit)
- scanner.go: trim TrackedCoins to only 6 core coins (DOGE/LINK/ONDO/OP/WIF/ARB)
- .gitignore: ignore main binary
2026-05-04 14:31:52 +08:00
jackyu66git
5fa3e1bac8
docs: update README for v1.3 — fund management, position click detail, slippage
2026-05-04 13:59:21 +08:00
jackyu66git
f29e78a435
fix: db migration tab char corrupted, restore historical trades
2026-05-04 13:50:49 +08:00
jackyu66git
e74fd084ce
config: raise trade_threshold to 0.20%, mock_slippage to 0.05%
2026-05-04 13:10:22 +08:00
jackyu66git
9eaa4597db
chore: 删除未使用的 SpreadReverseExitPct 配置字段
2026-05-04 06:41:49 +08:00
jackyu66git
ccfa27b1a6
fix: scanner netProfit 漏算exit fees + 孤儿仓位标记failed
...
- scanner.go: netProfit 扣费改为 2*(buyFee+sellFee) 匹配 calcArbPnL
- trader.go: 第二腿失败时设 pos.Status=failed,避免语义混淆
2026-05-04 06:39:24 +08:00
jackyu66git
ddaa5badd2
fix: 重启后总PnL回到0的问题 + 前端PnL图表公式统一
...
- trader.go: NewTrader 启动时从DB GetAllClosedTrades() 加载所有已平仓交易到 closedTrades
- trader.go: 新增 safeFloat/safeStr 辅助函数处理DB空指针
- db/trade_repo.go: 新增 GetAllClosedTrades() 方法
- frontend: PnL图表标题和曲线改用 2*AmountUSD*NetPnl/100 公式,与后端Stats一致
2026-05-04 06:23:35 +08:00
jackyu66git
2f4d03f9b1
优化: 共用一次 store.GetAll() 快照,消除每 tick 两次 map 分配
2026-05-04 06:10:37 +08:00
jackyu66git
5aedcb6566
修复 scale-in 后 leg.EntryPrice 不更新 + 重启恢复时加载 scale prices
...
- trader.go: scale-in 后用 weightedAvgPrice 更新 LongLeg/ShortLeg.EntryPrice
- trader.go: restoreOpenPositions 从 orders 表加载 scale prices 重建完整价格切片
- db/trade_repo.go: 新增 GetScalePrices(tradeID) 方法
- README: v1.2.1 版本记录
2026-05-04 06:06:37 +08:00
jackyu66git
7b8ad6abc8
feat: 交易详情净收益总计加美元金额
2026-05-04 05:43:11 +08:00
jackyu66git
af44e14f39
feat: 交易详情订单按交易所+时间排序, 加仓位列, 多空Pnl显示USD金额
2026-05-04 05:38:08 +08:00
jackyu66git
a9a21de5a2
refactor: 逐批次实时写入DB,删除persistTrade
2026-05-04 05:29:04 +08:00
jackyu66git
ec725ed11a
fix: PnL计算改为美元归一化,加仓不再虚增手续费 (calcArbPnL)
2026-05-04 05:03:16 +08:00
jackyu66git
c44d763ab0
fix: 持仓面板 pnl_est 显示改为美元符号(后台已改为USD)
2026-05-04 04:38:52 +08:00
jackyu66git
0288dc8284
feat: 手续费改为逐笔USD累算 + Vite React前端 + system_orders表 + README
2026-05-04 04:34:27 +08:00
jackyu66git
15a4684208
chore: 增强start.sh, 支持--clean清库/--rebuild强制编译
2026-05-04 02:03:17 +08:00
jackyu66git
d1e6c965cb
fix: blacklistCoin 计算退出PnL字段, 避免DB写入零值
...
blacklistCoin 之前只设 Status=close_failed 就跑了, 没给
ExitDiffPct/ExitNetPnl/ExitLongPnl/ExitTotalFees 等字段赋值。
retryClose 写 TradeRecord 时全为零, 导致DB出现 PnL=0 的假记录。
修复: blacklistCoin 现在接收当前价格, 用 checkExit 相同方式
计算 PnL/价差收敛标签并存入 pos 字段。
2026-05-04 02:00:04 +08:00
jackyu66git
dd15c6fe43
fix: 移除多余的netPnl和反转检查, 收敛即退出(0.02%)
2026-05-04 01:57:56 +08:00
jackyu66git
1c0618583c
fix: 收敛退出放宽到0.02%+净利为正, 恢复到0.02%即退不亏钱
2026-05-04 01:55:22 +08:00
jackyu66git
51b8ee0c8a
chore: 添加.gitignore, 移除日志文件跟踪
2026-05-04 01:51:17 +08:00
jackyu66git
21a3f9a962
feat: 所有参数移至config.json, 重构退出逻辑, 清理遗留接口
...
- 将所有硬编码参数迁移到 config.json (手续费率、止盈/止损阈值、
超时、腿间隔、加仓步进等)
- 退出条件: 净利 >= take_profit_pct 止盈, 价差 <= 0 平仓
- 删除 Binance/dYdX 遗留代码
- 更新 README 文档
- Dashboard: 双交易所价格表、黑名单UI、按币名排序持仓
- Bitget WS: 文本ping保活
- 数据库: 重置, 无历史仓位
2026-05-04 01:46:17 +08:00
jackyu66git
2ed6ffc747
fix: Bitget WS keepalive — send text ping, not WebSocket PingMessage
...
Bitget v2 WS requires a text message "ping" every 30s, not a WebSocket
PingMessage control frame (opcode 0x9). Using the wrong ping type caused
a silent failure: connection stays up and subscription succeeds, but NO
ticker data is pushed — zero errors, zero reconnection logs.
Changes:
- connector.go: Add TextPing bool flag, send text 'ping' when set
- bitget.go: Set TextPing=true, handle text 'pong', add debug logging
- scanner.go: Expand to 179 overlapping Bitget+HL coins
2026-05-04 00:33:03 +08:00
jackyu66git
e04a165d69
fix: start.sh detects embedded web file changes; rebuild on JS/CSS change
2026-05-04 00:09:49 +08:00
jackyu66git
004ff50325
web: spread highlight threshold 0.1% → 0.2%
2026-05-04 00:07:32 +08:00
jackyu66git
b8c73852be
fix: BG taker fee 0.06% → 0.03%
2026-05-04 00:04:14 +08:00
jackyu66git
02ca8e248c
fix: trade_threshold 0.25 → 0.05 (net profit %)
2026-05-03 23:55:40 +08:00
jackyu66git
5d6d9352f3
fix: use taker fees (BG 0.06%, HL 0.045%) + threshold 0.25%
...
All IOC market orders incur taker fees, not maker fees. Previous
makerFees (BG 0.02%, HL 0.015%) caused 0.10% threshold trades to
actually lose 0.11% per round trip.
Changes:
- scanner.go: makerFees → takerFees (BG 0.060, HL 0.045)
- dashboard.go: makerFees → takerFees
- types.go: makerFees → takerFees
- trader.go: makerFees → takerFees
- config.json: trade_threshold 0.1 → 0.25
2026-05-03 23:34:01 +08:00
jackyu66git
68c0a342a6
fix: retryClose saves trade record and persists to DB on success
2026-05-03 23:19:15 +08:00
jackyu66git
cf6548c37f
fix: 4 bugfixes for production readiness
...
1. GetHLSize: add minimum size checks (prevent size=0 when price > amount)
2. executeEntry: orphan position warning when leg1 close also fails after leg2
3. checkExit: keep position as close_failed on failure, retryClose on each Tick
4. persistTrade: sync instead of goroutine (prevent data loss on exit)
2026-05-03 23:13:44 +08:00
jackyu66git
cdcf0acea6
docs: update README for async entry, entering status, 50ms scan
...
- Architecture diagram: async goroutine entry path
- Trading Logic: async entry, entering status protection
- Config note: floor rounding on both exchanges
2026-05-03 23:00:18 +08:00