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:
@@ -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
@@ -147,26 +147,28 @@ func (h *HyperLiquidTrade) GetBalance() (float64, error) {
|
||||
func GetHLSize(coin string, amountUSD, price float64) string {
|
||||
sz := amountUSD / price
|
||||
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)
|
||||
if sz < 1 { sz = 1 }
|
||||
if sz < 1 {
|
||||
sz = 1
|
||||
}
|
||||
return fmt.Sprintf("%.0f", sz)
|
||||
case "ONDO":
|
||||
sz = math.Floor(sz)
|
||||
if sz < 1 { sz = 1 }
|
||||
return fmt.Sprintf("%.0f", sz)
|
||||
case "OP":
|
||||
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 }
|
||||
// 1 decimal (szDecimals=1)
|
||||
case "OP", "ARB", "DYDX", "WLD", "SUI", "TIA", "NEAR", "FIL":
|
||||
sz = math.Floor(sz*10) / 10
|
||||
if sz < 0.1 {
|
||||
sz = 0.1
|
||||
}
|
||||
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:
|
||||
return fmt.Sprintf("%.4f", sz)
|
||||
}
|
||||
|
||||
@@ -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
@@ -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
@@ -24,6 +24,24 @@ var TrackedCoins = []TrackedCoin{
|
||||
{Name: "OP", BN: "OPUSDT", BG: "OPUSDT", HL: "OP"},
|
||||
{Name: "WIF", BN: "WIFUSDT", BG: "WIFUSDT", HL: "WIF"},
|
||||
{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).
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
=== 收敛统计 === 2026-05-02 20:01
|
||||
总交易数: 310
|
||||
价差收敛: 309
|
||||
价差持平: 0
|
||||
价差发散: 1
|
||||
收敛率: 99.7%
|
||||
Reference in New Issue
Block a user