perp-cli 0.4.0 → 0.4.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/dist/arb/sizing.d.ts +12 -1
- package/dist/arb/sizing.js +38 -5
- package/dist/arb/state.d.ts +6 -0
- package/dist/arb/utils.d.ts +2 -0
- package/dist/arb/utils.js +1 -1
- package/dist/cli-spec.d.ts +0 -4
- package/dist/cli-spec.js +8 -1
- package/dist/commands/agent.js +12 -9
- package/dist/commands/arb/index.js +18 -3
- package/dist/commands/arb-auto.js +885 -67
- package/dist/commands/dex.js +7 -1
- package/dist/commands/funding.d.ts +2 -1
- package/dist/commands/funding.js +211 -4
- package/dist/commands/manage.js +1 -1
- package/dist/commands/market.js +1 -1
- package/dist/commands/multileg.d.ts +16 -0
- package/dist/commands/multileg.js +174 -0
- package/dist/commands/pnl.d.ts +12 -0
- package/dist/commands/pnl.js +243 -0
- package/dist/commands/settings.d.ts +2 -1
- package/dist/commands/settings.js +133 -2
- package/dist/commands/stream.js +132 -55
- package/dist/commands/trade.js +118 -43
- package/dist/commands/wallet.js +1 -1
- package/dist/config.d.ts +5 -0
- package/dist/config.js +12 -0
- package/dist/constants.d.ts +14 -0
- package/dist/constants.js +40 -0
- package/dist/dashboard/ws-feeds.js +1 -1
- package/dist/equity-tracker.d.ts +57 -0
- package/dist/equity-tracker.js +209 -0
- package/dist/exchanges/hyperliquid-spot.d.ts +68 -0
- package/dist/exchanges/hyperliquid-spot.js +317 -0
- package/dist/exchanges/hyperliquid.d.ts +26 -5
- package/dist/exchanges/hyperliquid.js +181 -92
- package/dist/exchanges/interface.d.ts +1 -1
- package/dist/exchanges/lighter-spot.d.ts +55 -0
- package/dist/exchanges/lighter-spot.js +417 -0
- package/dist/exchanges/lighter.d.ts +10 -2
- package/dist/exchanges/lighter.js +132 -37
- package/dist/exchanges/pacifica.d.ts +11 -4
- package/dist/exchanges/pacifica.js +52 -37
- package/dist/exchanges/spot-interface.d.ts +45 -0
- package/dist/exchanges/spot-interface.js +22 -0
- package/dist/execution-log.d.ts +2 -2
- package/dist/funding/rates.d.ts +36 -0
- package/dist/funding/rates.js +146 -0
- package/dist/index.js +148 -99
- package/dist/liquidity.d.ts +12 -0
- package/dist/liquidity.js +43 -0
- package/dist/settings.d.ts +6 -0
- package/dist/settings.js +18 -2
- package/dist/signer/evm-local.d.ts +12 -0
- package/dist/signer/evm-local.js +19 -0
- package/dist/signer/index.d.ts +3 -0
- package/dist/signer/index.js +2 -0
- package/dist/signer/interface.d.ts +31 -0
- package/dist/signer/interface.js +7 -0
- package/dist/signer/solana-local.d.ts +13 -0
- package/dist/signer/solana-local.js +19 -0
- package/dist/smart-order.d.ts +44 -0
- package/dist/smart-order.js +145 -0
- package/dist/trade-validator.js +2 -1
- package/dist/utils.js +7 -1
- package/dist/ws/market-feed.d.ts +74 -0
- package/dist/ws/market-feed.js +227 -0
- package/package.json +1 -1
- package/skills/perp-cli/SKILL.md +102 -4
- package/skills/perp-cli/references/commands.md +16 -1
- package/skills/perp-cli/references/strategies.md +1 -1
- package/skills/perp-cli/scripts/arb-monitor.sh +74 -0
- package/skills/perp-cli/scripts/funding-analysis.sh +85 -0
- package/skills/perp-cli/scripts/preflight.sh +98 -0
- package/skills/perp-cli/scripts/spot-perp-scan.sh +83 -0
- package/skills/perp-cli/scripts/validate-arb.sh +112 -0
- package/skills/perp-cli/templates/arb-scan.sh +0 -15
- package/skills/perp-cli/templates/open-position.sh +0 -38
- package/skills/perp-cli/templates/wallet-setup.sh +0 -17
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Pre-flight validation for perp-cli operations
|
|
3
|
+
# Checks: install, wallet, connectivity, balances, risk
|
|
4
|
+
# Usage: ./preflight.sh [--json]
|
|
5
|
+
# Returns JSON with { ready: bool, checks: [...], issues: [...] }
|
|
6
|
+
|
|
7
|
+
set -euo pipefail
|
|
8
|
+
|
|
9
|
+
# Auto-detect perp command (supports npx fallback for agents without install permissions)
|
|
10
|
+
if command -v perp &>/dev/null; then
|
|
11
|
+
PERP="perp"
|
|
12
|
+
else
|
|
13
|
+
PERP="npx -y perp-cli@latest"
|
|
14
|
+
fi
|
|
15
|
+
|
|
16
|
+
JSON_MODE=false
|
|
17
|
+
[[ "${1:-}" == "--json" ]] && JSON_MODE=true
|
|
18
|
+
|
|
19
|
+
issues=()
|
|
20
|
+
checks=()
|
|
21
|
+
|
|
22
|
+
add_check() {
|
|
23
|
+
local name="$1" status="$2" detail="$3"
|
|
24
|
+
checks+=("{\"name\":\"$name\",\"status\":\"$status\",\"detail\":\"$detail\"}")
|
|
25
|
+
[[ "$status" == "fail" ]] && issues+=("$name: $detail")
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
# 1. perp-cli installed and version check
|
|
29
|
+
VERSION=$($PERP --version 2>/dev/null || echo "unknown")
|
|
30
|
+
if [[ "$VERSION" != "unknown" ]]; then
|
|
31
|
+
add_check "install" "pass" "perp-cli $VERSION ($(command -v perp &>/dev/null && echo 'global' || echo 'npx'))"
|
|
32
|
+
else
|
|
33
|
+
add_check "install" "fail" "perp-cli not found — run: npm i -g perp-cli@latest or use npx"
|
|
34
|
+
fi
|
|
35
|
+
|
|
36
|
+
# 2. Wallet configured
|
|
37
|
+
WALLET_OUT=$($PERP --json wallet show 2>/dev/null || echo '{"ok":false}')
|
|
38
|
+
if echo "$WALLET_OUT" | grep -q '"ok":true'; then
|
|
39
|
+
add_check "wallet" "pass" "Wallet configured"
|
|
40
|
+
else
|
|
41
|
+
add_check "wallet" "fail" "No wallet configured — run: perp wallet set <exchange> <key>"
|
|
42
|
+
fi
|
|
43
|
+
|
|
44
|
+
# 3. Exchange connectivity
|
|
45
|
+
HEALTH_OUT=$($PERP --json health 2>/dev/null || echo '{"ok":false}')
|
|
46
|
+
if echo "$HEALTH_OUT" | grep -q '"ok":true'; then
|
|
47
|
+
add_check "connectivity" "pass" "Exchanges reachable"
|
|
48
|
+
else
|
|
49
|
+
add_check "connectivity" "warn" "Some exchanges unreachable"
|
|
50
|
+
fi
|
|
51
|
+
|
|
52
|
+
# 4. Portfolio & balances
|
|
53
|
+
PORTFOLIO_OUT=$($PERP --json portfolio 2>/dev/null || echo '{"ok":false}')
|
|
54
|
+
if echo "$PORTFOLIO_OUT" | grep -q '"ok":true'; then
|
|
55
|
+
add_check "portfolio" "pass" "Portfolio accessible"
|
|
56
|
+
else
|
|
57
|
+
add_check "portfolio" "warn" "Could not fetch portfolio"
|
|
58
|
+
fi
|
|
59
|
+
|
|
60
|
+
# 5. Risk status
|
|
61
|
+
RISK_OUT=$($PERP --json risk status 2>/dev/null || echo '{"ok":false}')
|
|
62
|
+
if echo "$RISK_OUT" | grep -q '"canTrade":true'; then
|
|
63
|
+
add_check "risk" "pass" "Trading allowed (canTrade=true)"
|
|
64
|
+
elif echo "$RISK_OUT" | grep -q '"canTrade":false'; then
|
|
65
|
+
add_check "risk" "fail" "Trading blocked — check risk violations"
|
|
66
|
+
else
|
|
67
|
+
add_check "risk" "warn" "Could not check risk status"
|
|
68
|
+
fi
|
|
69
|
+
|
|
70
|
+
# Output
|
|
71
|
+
READY=true
|
|
72
|
+
[[ ${#issues[@]} -gt 0 ]] && READY=false
|
|
73
|
+
|
|
74
|
+
if $JSON_MODE; then
|
|
75
|
+
CHECKS_JSON=$(IFS=,; echo "${checks[*]}")
|
|
76
|
+
ISSUES_JSON=$(printf '%s\n' "${issues[@]}" | jq -R . | jq -s .)
|
|
77
|
+
echo "{\"ready\":$READY,\"checks\":[$CHECKS_JSON],\"issues\":$ISSUES_JSON}"
|
|
78
|
+
else
|
|
79
|
+
echo "=== perp-cli Pre-flight Check ==="
|
|
80
|
+
for c in "${checks[@]}"; do
|
|
81
|
+
name=$(echo "$c" | jq -r .name)
|
|
82
|
+
status=$(echo "$c" | jq -r .status)
|
|
83
|
+
detail=$(echo "$c" | jq -r .detail)
|
|
84
|
+
case "$status" in
|
|
85
|
+
pass) icon="✓" ;;
|
|
86
|
+
warn) icon="⚠" ;;
|
|
87
|
+
fail) icon="✗" ;;
|
|
88
|
+
esac
|
|
89
|
+
printf " %s %-15s %s\n" "$icon" "$name" "$detail"
|
|
90
|
+
done
|
|
91
|
+
echo ""
|
|
92
|
+
if $READY; then
|
|
93
|
+
echo "Ready to trade."
|
|
94
|
+
else
|
|
95
|
+
echo "Issues found:"
|
|
96
|
+
for i in "${issues[@]}"; do echo " - $i"; done
|
|
97
|
+
fi
|
|
98
|
+
fi
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Scan spot+perp funding rate arbitrage opportunities
|
|
3
|
+
# Usage: ./spot-perp-scan.sh [--json] [--mode all|spot-perp|perp-perp] [--min 10]
|
|
4
|
+
# Combines perp-perp and spot-perp scans with validation
|
|
5
|
+
|
|
6
|
+
set -euo pipefail
|
|
7
|
+
|
|
8
|
+
# Auto-detect perp command (supports npx fallback for agents without install permissions)
|
|
9
|
+
if command -v perp &>/dev/null; then
|
|
10
|
+
PERP="perp"
|
|
11
|
+
else
|
|
12
|
+
PERP="npx -y perp-cli@latest"
|
|
13
|
+
fi
|
|
14
|
+
|
|
15
|
+
JSON_MODE=false
|
|
16
|
+
MODE="all"
|
|
17
|
+
MIN_SPREAD=10
|
|
18
|
+
while [[ $# -gt 0 ]]; do
|
|
19
|
+
case "$1" in
|
|
20
|
+
--json) JSON_MODE=true; shift ;;
|
|
21
|
+
--mode) MODE="$2"; shift 2 ;;
|
|
22
|
+
--min) MIN_SPREAD="$2"; shift 2 ;;
|
|
23
|
+
*) shift ;;
|
|
24
|
+
esac
|
|
25
|
+
done
|
|
26
|
+
|
|
27
|
+
# 1. Portfolio check (ensure we have balances)
|
|
28
|
+
PORTFOLIO=$($PERP --json portfolio 2>/dev/null || echo '{"ok":false}')
|
|
29
|
+
if ! echo "$PORTFOLIO" | grep -q '"ok":true'; then
|
|
30
|
+
if $JSON_MODE; then
|
|
31
|
+
echo '{"ok":false,"error":"Cannot fetch portfolio — check wallet setup"}'
|
|
32
|
+
else
|
|
33
|
+
echo "ERROR: Cannot fetch portfolio. Check wallet setup first."
|
|
34
|
+
fi
|
|
35
|
+
exit 1
|
|
36
|
+
fi
|
|
37
|
+
|
|
38
|
+
# 2. Run appropriate scan
|
|
39
|
+
SCAN_RESULT=$($PERP --json arb scan --mode "$MODE" --min "$MIN_SPREAD" 2>/dev/null || echo '{"ok":false}')
|
|
40
|
+
|
|
41
|
+
# 3. Get exchange health for context
|
|
42
|
+
HEALTH=$($PERP --json health 2>/dev/null || echo '{"ok":false}')
|
|
43
|
+
|
|
44
|
+
if $JSON_MODE; then
|
|
45
|
+
cat <<EOF
|
|
46
|
+
{
|
|
47
|
+
"ok": true,
|
|
48
|
+
"timestamp": "$(date -u +%Y-%m-%dT%H:%M:%SZ)",
|
|
49
|
+
"mode": "$MODE",
|
|
50
|
+
"minSpread": $MIN_SPREAD,
|
|
51
|
+
"portfolio": $PORTFOLIO,
|
|
52
|
+
"scan": $SCAN_RESULT,
|
|
53
|
+
"health": $HEALTH
|
|
54
|
+
}
|
|
55
|
+
EOF
|
|
56
|
+
else
|
|
57
|
+
echo "=== Spot+Perp Arb Scanner ==="
|
|
58
|
+
echo "Mode: $MODE | Min spread: ${MIN_SPREAD} bps"
|
|
59
|
+
echo ""
|
|
60
|
+
|
|
61
|
+
# Show balances
|
|
62
|
+
echo "--- Balances ---"
|
|
63
|
+
echo "$PORTFOLIO" | jq -r '
|
|
64
|
+
.data.exchanges // [] | .[] |
|
|
65
|
+
" \(.exchange): $\(.balance // .equity // "N/A")"
|
|
66
|
+
' 2>/dev/null || echo " (unable to parse)"
|
|
67
|
+
echo ""
|
|
68
|
+
|
|
69
|
+
# Show opportunities
|
|
70
|
+
echo "--- Opportunities ---"
|
|
71
|
+
echo "$SCAN_RESULT" | jq -r '
|
|
72
|
+
.data // [] | .[] |
|
|
73
|
+
" \(.symbol) | \(.mode // "perp-perp") | spread: \(.netSpread // .spread)bps | \(.longExch // .longExchange)→\(.shortExch // .shortExchange)"
|
|
74
|
+
' 2>/dev/null || echo " (no opportunities or parse error)"
|
|
75
|
+
|
|
76
|
+
# Show exchange health
|
|
77
|
+
echo ""
|
|
78
|
+
echo "--- Exchange Health ---"
|
|
79
|
+
echo "$HEALTH" | jq -r '
|
|
80
|
+
.data // {} | to_entries[] |
|
|
81
|
+
" \(.key): \(.value.status // .value // "unknown")"
|
|
82
|
+
' 2>/dev/null || echo " (unable to check)"
|
|
83
|
+
fi
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Validate an arb opportunity before execution
|
|
3
|
+
# Usage: ./validate-arb.sh <SYMBOL> <LONG_EX> <SHORT_EX> <SIZE_USD> [--leverage N]
|
|
4
|
+
# Performs: price check, liquidity check, balance check, risk check, slippage estimate
|
|
5
|
+
# Returns JSON validation report
|
|
6
|
+
|
|
7
|
+
set -euo pipefail
|
|
8
|
+
|
|
9
|
+
# Auto-detect perp command (supports npx fallback for agents without install permissions)
|
|
10
|
+
if command -v perp &>/dev/null; then
|
|
11
|
+
PERP="perp"
|
|
12
|
+
else
|
|
13
|
+
PERP="npx -y perp-cli@latest"
|
|
14
|
+
fi
|
|
15
|
+
|
|
16
|
+
SYM="${1:?Usage: validate-arb.sh <SYMBOL> <LONG_EX> <SHORT_EX> <SIZE_USD> [--leverage N]}"
|
|
17
|
+
LONG_EX="${2:?Usage: validate-arb.sh <SYMBOL> <LONG_EX> <SHORT_EX> <SIZE_USD>}"
|
|
18
|
+
SHORT_EX="${3:?Usage: validate-arb.sh <SYMBOL> <LONG_EX> <SHORT_EX> <SIZE_USD>}"
|
|
19
|
+
SIZE="${4:?Usage: validate-arb.sh <SYMBOL> <LONG_EX> <SHORT_EX> <SIZE_USD>}"
|
|
20
|
+
LEVERAGE=""
|
|
21
|
+
|
|
22
|
+
shift 4
|
|
23
|
+
while [[ $# -gt 0 ]]; do
|
|
24
|
+
case "$1" in
|
|
25
|
+
--leverage) LEVERAGE="$2"; shift 2 ;;
|
|
26
|
+
*) shift ;;
|
|
27
|
+
esac
|
|
28
|
+
done
|
|
29
|
+
|
|
30
|
+
checks=()
|
|
31
|
+
pass=true
|
|
32
|
+
|
|
33
|
+
add_result() {
|
|
34
|
+
local name="$1" ok="$2" detail="$3"
|
|
35
|
+
checks+=("{\"check\":\"$name\",\"ok\":$ok,\"detail\":\"$detail\"}")
|
|
36
|
+
[[ "$ok" == "false" ]] && pass=false
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
# 1. Price comparison — both exchanges must report similar prices
|
|
40
|
+
LONG_PRICE=$($PERP --json -e "$LONG_EX" market mid "$SYM" 2>/dev/null | jq -r '.data.mid // "0"')
|
|
41
|
+
SHORT_PRICE=$($PERP --json -e "$SHORT_EX" market mid "$SYM" 2>/dev/null | jq -r '.data.mid // "0"')
|
|
42
|
+
|
|
43
|
+
if [[ "$LONG_PRICE" == "0" || "$SHORT_PRICE" == "0" ]]; then
|
|
44
|
+
add_result "price" "false" "Cannot fetch price: long=$LONG_PRICE short=$SHORT_PRICE"
|
|
45
|
+
else
|
|
46
|
+
# Check deviation
|
|
47
|
+
DEVIATION=$(echo "$LONG_PRICE $SHORT_PRICE" | awk '{d=($1-$2)/$2*100; print (d<0?-d:d)}')
|
|
48
|
+
if (( $(echo "$DEVIATION > 5" | bc -l) )); then
|
|
49
|
+
add_result "price" "false" "Price deviation ${DEVIATION}% > 5% — possible wrong token"
|
|
50
|
+
else
|
|
51
|
+
add_result "price" "true" "long=$LONG_PRICE short=$SHORT_PRICE dev=${DEVIATION}%"
|
|
52
|
+
fi
|
|
53
|
+
fi
|
|
54
|
+
|
|
55
|
+
# 2. Balance check on both exchanges
|
|
56
|
+
LONG_BAL=$($PERP --json -e "$LONG_EX" account info 2>/dev/null | jq -r '.data.available // .data.equity // "0"')
|
|
57
|
+
SHORT_BAL=$($PERP --json -e "$SHORT_EX" account info 2>/dev/null | jq -r '.data.available // .data.equity // "0"')
|
|
58
|
+
|
|
59
|
+
NEEDED=$(echo "$SIZE" | awk '{print $1}')
|
|
60
|
+
if (( $(echo "$LONG_BAL < $NEEDED" | bc -l 2>/dev/null || echo 1) )); then
|
|
61
|
+
add_result "balance_long" "false" "$LONG_EX balance $LONG_BAL < needed $NEEDED"
|
|
62
|
+
else
|
|
63
|
+
add_result "balance_long" "true" "$LONG_EX balance=$LONG_BAL"
|
|
64
|
+
fi
|
|
65
|
+
if (( $(echo "$SHORT_BAL < $NEEDED" | bc -l 2>/dev/null || echo 1) )); then
|
|
66
|
+
add_result "balance_short" "false" "$SHORT_EX balance $SHORT_BAL < needed $NEEDED"
|
|
67
|
+
else
|
|
68
|
+
add_result "balance_short" "true" "$SHORT_EX balance=$SHORT_BAL"
|
|
69
|
+
fi
|
|
70
|
+
|
|
71
|
+
# 3. Market info (symbol availability)
|
|
72
|
+
LONG_INFO=$($PERP --json -e "$LONG_EX" market info "$SYM" 2>/dev/null || echo '{"ok":false}')
|
|
73
|
+
SHORT_INFO=$($PERP --json -e "$SHORT_EX" market info "$SYM" 2>/dev/null || echo '{"ok":false}')
|
|
74
|
+
|
|
75
|
+
if echo "$LONG_INFO" | grep -q '"ok":true' && echo "$SHORT_INFO" | grep -q '"ok":true'; then
|
|
76
|
+
add_result "market_info" "true" "Both exchanges support $SYM"
|
|
77
|
+
else
|
|
78
|
+
add_result "market_info" "false" "Symbol $SYM not available on one or both exchanges"
|
|
79
|
+
fi
|
|
80
|
+
|
|
81
|
+
# 4. Risk pre-check
|
|
82
|
+
LEV_FLAG=""
|
|
83
|
+
[[ -n "$LEVERAGE" ]] && LEV_FLAG="--leverage $LEVERAGE"
|
|
84
|
+
RISK_CHECK=$($PERP --json risk check --notional "$SIZE" $LEV_FLAG 2>/dev/null || echo '{"ok":false}')
|
|
85
|
+
if echo "$RISK_CHECK" | grep -q '"ok":true'; then
|
|
86
|
+
add_result "risk" "true" "Within risk limits"
|
|
87
|
+
else
|
|
88
|
+
add_result "risk" "false" "Risk check failed — review risk limits"
|
|
89
|
+
fi
|
|
90
|
+
|
|
91
|
+
# 5. Dry-run
|
|
92
|
+
DRY_RUN=$($PERP --json --dry-run arb exec "$SYM" "$LONG_EX" "$SHORT_EX" "$SIZE" $LEV_FLAG 2>/dev/null || echo '{"ok":false}')
|
|
93
|
+
if echo "$DRY_RUN" | grep -q '"ok":true'; then
|
|
94
|
+
add_result "dry_run" "true" "Dry-run succeeded"
|
|
95
|
+
else
|
|
96
|
+
DRY_ERR=$(echo "$DRY_RUN" | jq -r '.error.message // .error // "unknown"' 2>/dev/null)
|
|
97
|
+
add_result "dry_run" "false" "Dry-run failed: $DRY_ERR"
|
|
98
|
+
fi
|
|
99
|
+
|
|
100
|
+
# Output
|
|
101
|
+
CHECKS_JSON=$(IFS=,; echo "${checks[*]}")
|
|
102
|
+
cat <<EOF
|
|
103
|
+
{
|
|
104
|
+
"ok": true,
|
|
105
|
+
"symbol": "$SYM",
|
|
106
|
+
"longExchange": "$LONG_EX",
|
|
107
|
+
"shortExchange": "$SHORT_EX",
|
|
108
|
+
"sizeUsd": $SIZE,
|
|
109
|
+
"allPassed": $pass,
|
|
110
|
+
"checks": [$CHECKS_JSON]
|
|
111
|
+
}
|
|
112
|
+
EOF
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# Scan funding rate arbitrage opportunities
|
|
3
|
-
# Usage: ./arb-scan.sh [min-spread-bps]
|
|
4
|
-
# Example: ./arb-scan.sh 20
|
|
5
|
-
|
|
6
|
-
set -e
|
|
7
|
-
|
|
8
|
-
MIN_SPREAD="${1:-10}"
|
|
9
|
-
|
|
10
|
-
echo "=== Funding Rate Arbitrage Scanner ==="
|
|
11
|
-
echo "Minimum spread: ${MIN_SPREAD} bps"
|
|
12
|
-
echo ""
|
|
13
|
-
|
|
14
|
-
echo "1. Opportunities (>= ${MIN_SPREAD} bps):"
|
|
15
|
-
perp --json arb scan --min "$MIN_SPREAD"
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# Open a perp position with pre-flight checks
|
|
3
|
-
# Usage: ./open-position.sh <exchange> <symbol> <side> <size>
|
|
4
|
-
# Example: ./open-position.sh hl BTC buy 0.01
|
|
5
|
-
|
|
6
|
-
set -e
|
|
7
|
-
|
|
8
|
-
EX="${1:?Usage: open-position.sh <exchange> <symbol> <side> <size>}"
|
|
9
|
-
SYM="${2:?Usage: open-position.sh <exchange> <symbol> <side> <size>}"
|
|
10
|
-
SIDE="${3:?Usage: open-position.sh <exchange> <symbol> <side> <size>}"
|
|
11
|
-
SIZE="${4:?Usage: open-position.sh <exchange> <symbol> <side> <size>}"
|
|
12
|
-
|
|
13
|
-
echo "=== Pre-flight checks ==="
|
|
14
|
-
echo "1. Account info:"
|
|
15
|
-
perp --json -e "$EX" account info
|
|
16
|
-
|
|
17
|
-
echo "2. Current price:"
|
|
18
|
-
perp --json -e "$EX" market mid "$SYM"
|
|
19
|
-
|
|
20
|
-
echo "3. Trade validation:"
|
|
21
|
-
perp --json -e "$EX" trade check "$SYM" "$SIDE" "$SIZE"
|
|
22
|
-
|
|
23
|
-
echo ""
|
|
24
|
-
echo "=== Ready to execute ==="
|
|
25
|
-
echo " Exchange: $EX"
|
|
26
|
-
echo " Symbol: $SYM"
|
|
27
|
-
echo " Side: $SIDE"
|
|
28
|
-
echo " Size: $SIZE"
|
|
29
|
-
echo ""
|
|
30
|
-
read -p "Confirm? (y/N): " CONFIRM
|
|
31
|
-
|
|
32
|
-
if [ "$CONFIRM" = "y" ] || [ "$CONFIRM" = "Y" ]; then
|
|
33
|
-
perp --json -e "$EX" trade market "$SYM" "$SIDE" "$SIZE"
|
|
34
|
-
echo "=== Position verification ==="
|
|
35
|
-
perp --json -e "$EX" account positions
|
|
36
|
-
else
|
|
37
|
-
echo "Cancelled."
|
|
38
|
-
fi
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# Wallet setup for perp-cli
|
|
3
|
-
# Usage: ./wallet-setup.sh <exchange> <private-key>
|
|
4
|
-
# Exchanges: hl (Hyperliquid), pac (Pacifica), lt (Lighter)
|
|
5
|
-
|
|
6
|
-
set -e
|
|
7
|
-
|
|
8
|
-
EXCHANGE="${1:?Usage: wallet-setup.sh <exchange> <private-key>}"
|
|
9
|
-
KEY="${2:?Usage: wallet-setup.sh <exchange> <private-key>}"
|
|
10
|
-
|
|
11
|
-
echo "Setting up wallet for $EXCHANGE..."
|
|
12
|
-
perp --json wallet set "$EXCHANGE" "$KEY"
|
|
13
|
-
|
|
14
|
-
echo "Verifying..."
|
|
15
|
-
perp --json wallet show
|
|
16
|
-
|
|
17
|
-
echo "Done. Wallet configured for $EXCHANGE."
|