okx-auto-position: 新增脚本 (whitelist.json 驱动白名单/manual_order/代理测试/执行验证)
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
#!/bin/bash
|
||||
# okx_proxy_test.sh - 完整测试 OKX 在国内 VPS 的可达性
|
||||
# 区分: 直连 vs 走代理 vs 不带 proxies 字段的 ccxt
|
||||
# 2026-08-31 实测: 国内 VPS 直连 OKX 不通 (No route to host) -> GFW 屏蔽 (DNS 劫持到 169.254.0.2)
|
||||
# OKX 没有"国内节点", 必须依赖代理 (mihomo/clash 127.0.0.1:7890)
|
||||
|
||||
set -e
|
||||
PYTHON="/home/openclaw/.hermes/hermes-agent/venv/bin/python"
|
||||
|
||||
echo "=== OKX 国内 VPS 可达性测试 ==="
|
||||
echo ""
|
||||
|
||||
echo "--- 1. 直连 (无 proxy env, 无 curl -x) ---"
|
||||
unset HTTPS_PROXY HTTP_PROXY https_proxy http_proxy
|
||||
RESP=$(curl -sS --max-time 10 -o /tmp/okx_resp.txt -w "%{http_code}" "https://www.okx.com/api/v5/public/time" 2>&1 || echo "FAIL")
|
||||
echo "HTTP: $RESP"
|
||||
echo "body: $(cat /tmp/okx_resp.txt 2>/dev/null | head -1)"
|
||||
echo ""
|
||||
|
||||
echo "--- 2. 走 127.0.0.1:7890 代理 ---"
|
||||
RESP=$(curl -sS --max-time 10 -x http://127.0.0.1:7890 -o /tmp/okx_resp.txt -w "%{http_code}" "https://www.okx.com/api/v5/public/time" 2>&1 || echo "FAIL")
|
||||
echo "HTTP: $RESP"
|
||||
echo "body: $(cat /tmp/okx_resp.txt 2>/dev/null | head -1)"
|
||||
echo ""
|
||||
|
||||
echo "--- 3. ccxt 不带 proxies (Python 默认不捡 shell env, trust_env=False) ---"
|
||||
$PYTHON << 'PYEOF'
|
||||
import ccxt, os
|
||||
bashrc = open('/home/openclaw/.bashrc').read()
|
||||
key = bashrc.split('OKX_API_KEY=')[1].split('\n')[0].strip()
|
||||
sec = bashrc.split('OKX_SECRET=')[1].split('\n')[0].strip()
|
||||
pwd = bashrc.split('OKX_PASSPHRASE=')[1].split('\n')[0].strip()
|
||||
ex = ccxt.okx({'apiKey':key,'secret':sec,'password':pwd, 'options':{'defaultType':'swap'}})
|
||||
try:
|
||||
bal = ex.fetch_balance()
|
||||
print(f'✅ Free: ${bal["USDT"]["free"]:.2f}')
|
||||
except Exception as e:
|
||||
print(f'❌ {type(e).__name__}')
|
||||
PYEOF
|
||||
echo ""
|
||||
|
||||
echo "--- 4. ccxt 带 proxies 127.0.0.1:7890 (推荐方式) ---"
|
||||
proxychains4 -f /home/openclaw/.proxychains/proxychains.conf $PYTHON << 'PYEOF'
|
||||
import ccxt
|
||||
bashrc = open('/home/openclaw/.bashrc').read()
|
||||
key = bashrc.split('OKX_API_KEY=')[1].split('\n')[0].strip()
|
||||
sec = bashrc.split('OKX_SECRET=')[1].split('\n')[0].strip()
|
||||
pwd = bashrc.split('OKX_PASSPHRASE=')[1].split('\n')[0].strip()
|
||||
ex = ccxt.okx({'apiKey':key,'secret':sec,'password':pwd,
|
||||
'proxies':{'http':'http://127.0.0.1:7890','https':'http://127.0.0.1:7890'},
|
||||
'options':{'defaultType':'swap'}})
|
||||
try:
|
||||
bal = ex.fetch_balance()
|
||||
print(f'✅ Free: ${bal["USDT"]["free"]:.2f}')
|
||||
except Exception as e:
|
||||
print(f'❌ {type(e).__name__}')
|
||||
PYEOF
|
||||
echo ""
|
||||
|
||||
echo "--- 5. DNS 验证 (理解为什么直连失败) ---"
|
||||
echo "国内 DNS (114):"
|
||||
dig @114.114.114.114 www.okx.com +short 2>&1 | head -3
|
||||
echo "Google DNS (8.8.8.8):"
|
||||
dig @8.8.8.8 www.okx.com +short 2>&1 | head -3
|
||||
echo ""
|
||||
echo "都解析到 169.254.0.2 (APIPA, 不可路由) = GFW 屏蔽"
|
||||
echo ""
|
||||
|
||||
echo "=== 结论 ==="
|
||||
echo "1. 国内 VPS 必须走 127.0.0.1:7890 代理"
|
||||
echo "2. 不是 OKX 限制, 是 GFW 屏蔽 (DNS 劫持 169.254.0.2)"
|
||||
echo "3. ccxt 必须显式写 proxies 字段 (不自动捡 shell env)"
|
||||
echo "4. okx_position_advisor.py 的 proxies 字段必须保留"
|
||||
echo "5. VPS 搬海外 (东京/新加坡/香港) 才能砍掉代理"
|
||||
Reference in New Issue
Block a user