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.
This commit is contained in:
jackyu66git
2026-05-04 18:05:53 +08:00
parent dd26152c2b
commit 5f6578c179
8 changed files with 45092 additions and 17 deletions
+6
View File
@@ -0,0 +1,6 @@
import sqlite3
conn = sqlite3.connect('data/trades.db')
rows = conn.execute('SELECT id, scale_count, amount_usd, fee_entry, fee_exit, net_pnl FROM trades').fetchall()
for r in rows:
print(f' #{r[0]}: scales={r[1]} amt=${r[2]} fee_entry={r[3]:.6f} fee_exit={r[4]:.6f} net={r[5]:.6f}')
conn.close()
File diff suppressed because it is too large Load Diff
+19 -17
View File
@@ -147,26 +147,28 @@ func (h *HyperLiquidTrade) GetBalance() (float64, error) {
func GetHLSize(coin string, amountUSD, price float64) string { func GetHLSize(coin string, amountUSD, price float64) string {
sz := amountUSD / price sz := amountUSD / price
switch coin { switch coin {
case "DOGE": // integer sizes (szDecimals=0)
case "DOGE", "ONDO", "WIF", "ALGO", "PYTH", "SAND", "ADA", "HBAR",
"IOTA", "MINA", "FET", "JUP", "MOVE":
sz = math.Floor(sz) sz = math.Floor(sz)
if sz < 1 { sz = 1 } if sz < 1 {
sz = 1
}
return fmt.Sprintf("%.0f", sz) return fmt.Sprintf("%.0f", sz)
case "ONDO": // 1 decimal (szDecimals=1)
sz = math.Floor(sz) case "OP", "ARB", "DYDX", "WLD", "SUI", "TIA", "NEAR", "FIL":
if sz < 1 { sz = 1 } sz = math.Floor(sz*10) / 10
return fmt.Sprintf("%.0f", sz) if sz < 0.1 {
case "OP": sz = 0.1
sz = math.Floor(sz*10)/10 }
if sz < 0.1 { sz = 0.1 }
return fmt.Sprintf("%.1f", sz)
case "WIF":
sz = math.Floor(sz)
if sz < 1 { sz = 1 }
return fmt.Sprintf("%.0f", sz)
case "ARB":
sz = math.Floor(sz*10)/10
if sz < 0.1 { sz = 0.1 }
return fmt.Sprintf("%.1f", sz) return fmt.Sprintf("%.1f", sz)
// 2 decimals (szDecimals=2)
case "APT":
sz = math.Floor(sz*100) / 100
if sz < 0.01 {
sz = 0.01
}
return fmt.Sprintf("%.2f", sz)
default: default:
return fmt.Sprintf("%.4f", sz) return fmt.Sprintf("%.4f", sz)
} }
Executable
BIN
View File
Binary file not shown.
+35
View File
@@ -0,0 +1,35 @@
#!/bin/bash
# Morning summary script — triggered by cron at 8 AM
PROJECT_DIR="/home/jack/Project/exchange-monitor-go"
STATS_FILE="$PROJECT_DIR/trade_stats.txt"
LOG_FILE="$PROJECT_DIR/morning_summary.txt"
# Find the PID of the exchange-monitor process
PID=$(pgrep -f "exchange-monitor" | head -1)
if [ -n "$PID" ]; then
# Send SIGUSR1 to dump stats
kill -USR1 "$PID" 2>/dev/null
sleep 2
# Read stats
if [ -f "$STATS_FILE" ]; then
cat "$STATS_FILE"
echo ""
echo "=== 程序状态 ==="
ps -p "$PID" -o pid,etime,cmd --no-headers 2>/dev/null || echo "进程已结束"
fi
# Kill the process
kill "$PID" 2>/dev/null
sleep 1
kill -0 "$PID" 2>/dev/null && kill -9 "$PID" 2>/dev/null
echo ""
echo "程序已停止 (PID: $PID)"
else
echo "未找到运行中的 exchange-monitor 进程"
fi
echo "=== 报告完成 ==="
Executable
+4
View File
@@ -0,0 +1,4 @@
#!/bin/bash
cd /home/jack/Project/exchange-monitor-go
# Redirect stderr to stdout so background mode captures everything
./exchange-monitor 2>&1
+18
View File
@@ -24,6 +24,24 @@ var TrackedCoins = []TrackedCoin{
{Name: "OP", BN: "OPUSDT", BG: "OPUSDT", HL: "OP"}, {Name: "OP", BN: "OPUSDT", BG: "OPUSDT", HL: "OP"},
{Name: "WIF", BN: "WIFUSDT", BG: "WIFUSDT", HL: "WIF"}, {Name: "WIF", BN: "WIFUSDT", BG: "WIFUSDT", HL: "WIF"},
{Name: "ARB", BN: "ARBUSDT", BG: "ARBUSDT", HL: "ARB"}, {Name: "ARB", BN: "ARBUSDT", BG: "ARBUSDT", HL: "ARB"},
// New pairs — common on BG↔HL
{Name: "ALGO", BG: "ALGOUSDT", HL: "ALGO"},
{Name: "PYTH", BG: "PYTHUSDT", HL: "PYTH"},
{Name: "SAND", BG: "SANDUSDT", HL: "SAND"},
{Name: "ADA", BG: "ADAUSDT", HL: "ADA"},
{Name: "HBAR", BG: "HBARUSDT", HL: "HBAR"},
{Name: "IOTA", BG: "IOTAUSDT", HL: "IOTA"},
{Name: "MINA", BG: "MINAUSDT", HL: "MINA"},
{Name: "FET", BG: "FETUSDT", HL: "FET"},
{Name: "WLD", BG: "WLDUSDT", HL: "WLD"},
{Name: "SUI", BG: "SUIUSDT", HL: "SUI"},
{Name: "APT", BG: "APTUSDT", HL: "APT"},
{Name: "NEAR", BG: "NEARUSDT", HL: "NEAR"},
{Name: "FIL", BG: "FILUSDT", HL: "FIL"},
{Name: "DYDX", BG: "DYDXUSDT", HL: "DYDX"},
{Name: "JUP", BG: "JUPUSDT", HL: "JUP"},
{Name: "TIA", BG: "TIAUSDT", HL: "TIA"},
{Name: "MOVE", BG: "MOVEUSDT", HL: "MOVE"},
} }
// netProfit calculates net profit % after fees for a complete round trip (entry + exit). // netProfit calculates net profit % after fees for a complete round trip (entry + exit).
+6
View File
@@ -0,0 +1,6 @@
=== 收敛统计 === 2026-05-02 20:01
总交易数: 310
价差收敛: 309
价差持平: 0
价差发散: 1
收敛率: 99.7%