clodds 1.2.9 → 1.4.0
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/dist/skills/bundled/acp/SKILL.md +188 -0
- package/dist/skills/bundled/acp/index.d.ts +0 -3
- package/dist/skills/bundled/acp/index.js +1 -1
- package/dist/skills/bundled/acp/index.js.map +1 -1
- package/dist/skills/bundled/agentbets/SKILL.md +19 -0
- package/dist/skills/bundled/agentbets/index.js +1 -1
- package/dist/skills/bundled/agentbets/index.js.map +1 -1
- package/dist/skills/bundled/ai-strategy/SKILL.md +111 -0
- package/dist/skills/bundled/ai-strategy/index.js +1 -1
- package/dist/skills/bundled/ai-strategy/index.js.map +1 -1
- package/dist/skills/bundled/alerts/SKILL.md +87 -0
- package/dist/skills/bundled/analytics/SKILL.md +252 -0
- package/dist/skills/bundled/analytics/index.js +2 -2
- package/dist/skills/bundled/analytics/index.js.map +1 -1
- package/dist/skills/bundled/arbitrage/SKILL.md +287 -0
- package/dist/skills/bundled/arbitrage/index.js +6 -1
- package/dist/skills/bundled/arbitrage/index.js.map +1 -1
- package/dist/skills/bundled/auto-reply/SKILL.md +285 -0
- package/dist/skills/bundled/auto-reply/index.js +2 -2
- package/dist/skills/bundled/auto-reply/index.js.map +1 -1
- package/dist/skills/bundled/automation/SKILL.md +242 -0
- package/dist/skills/bundled/automation/index.js +2 -2
- package/dist/skills/bundled/automation/index.js.map +1 -1
- package/dist/skills/bundled/backtest/SKILL.md +225 -0
- package/dist/skills/bundled/bags/SKILL.md +131 -0
- package/dist/skills/bundled/bankr/SKILL.md +114 -0
- package/dist/skills/bundled/betfair/SKILL.md +113 -0
- package/dist/skills/bundled/binance-futures/SKILL.md +84 -0
- package/dist/skills/bundled/binance-futures/index.d.ts +0 -3
- package/dist/skills/bundled/binance-futures/index.js +1 -2
- package/dist/skills/bundled/binance-futures/index.js.map +1 -1
- package/dist/skills/bundled/botchan/SKILL.md +66 -0
- package/dist/skills/bundled/botchan/index.d.ts +0 -3
- package/dist/skills/bundled/botchan/index.js +0 -1
- package/dist/skills/bundled/botchan/index.js.map +1 -1
- package/dist/skills/bundled/bridge/SKILL.md +215 -0
- package/dist/skills/bundled/bridge/index.js +6 -0
- package/dist/skills/bundled/bridge/index.js.map +1 -1
- package/dist/skills/bundled/bybit-futures/SKILL.md +84 -0
- package/dist/skills/bundled/bybit-futures/index.d.ts +0 -3
- package/dist/skills/bundled/bybit-futures/index.js +0 -1
- package/dist/skills/bundled/bybit-futures/index.js.map +1 -1
- package/dist/skills/bundled/clanker/SKILL.md +125 -0
- package/dist/skills/bundled/clanker/index.d.ts +0 -3
- package/dist/skills/bundled/clanker/index.js +0 -1
- package/dist/skills/bundled/clanker/index.js.map +1 -1
- package/dist/skills/bundled/copy-trading/SKILL.md +285 -0
- package/dist/skills/bundled/copy-trading/index.js +15 -8
- package/dist/skills/bundled/copy-trading/index.js.map +1 -1
- package/dist/skills/bundled/copy-trading-solana/SKILL.md +66 -0
- package/dist/skills/bundled/credentials/SKILL.md +261 -0
- package/dist/skills/bundled/credentials/index.js +4 -0
- package/dist/skills/bundled/credentials/index.js.map +1 -1
- package/dist/skills/bundled/crypto-hft/SKILL.md +121 -0
- package/dist/skills/bundled/crypto-hft/index.js +18 -3
- package/dist/skills/bundled/crypto-hft/index.js.map +1 -1
- package/dist/skills/bundled/dca/SKILL.md +27 -0
- package/dist/skills/bundled/dex/SKILL.md +92 -0
- package/dist/skills/bundled/dex/index.js +77 -29
- package/dist/skills/bundled/dex/index.js.map +1 -1
- package/dist/skills/bundled/divergence/SKILL.md +83 -0
- package/dist/skills/bundled/doctor/SKILL.md +267 -0
- package/dist/skills/bundled/doctor/index.js +2 -8
- package/dist/skills/bundled/doctor/index.js.map +1 -1
- package/dist/skills/bundled/drift/SKILL.md +53 -0
- package/dist/skills/bundled/drift-sdk/SKILL.md +103 -0
- package/dist/skills/bundled/drift-sdk/index.d.ts +0 -3
- package/dist/skills/bundled/drift-sdk/index.js +0 -1
- package/dist/skills/bundled/drift-sdk/index.js.map +1 -1
- package/dist/skills/bundled/edge/SKILL.md +84 -0
- package/dist/skills/bundled/embeddings/SKILL.md +244 -0
- package/dist/skills/bundled/endaoment/SKILL.md +65 -0
- package/dist/skills/bundled/endaoment/index.d.ts +0 -3
- package/dist/skills/bundled/endaoment/index.js +0 -1
- package/dist/skills/bundled/endaoment/index.js.map +1 -1
- package/dist/skills/bundled/ens/SKILL.md +63 -0
- package/dist/skills/bundled/ens/index.d.ts +0 -3
- package/dist/skills/bundled/ens/index.js +0 -1
- package/dist/skills/bundled/ens/index.js.map +1 -1
- package/dist/skills/bundled/erc8004/SKILL.md +79 -0
- package/dist/skills/bundled/erc8004/index.d.ts +0 -3
- package/dist/skills/bundled/erc8004/index.js +0 -1
- package/dist/skills/bundled/erc8004/index.js.map +1 -1
- package/dist/skills/bundled/execution/SKILL.md +278 -0
- package/dist/skills/bundled/farcaster/SKILL.md +80 -0
- package/dist/skills/bundled/farcaster/index.js +12 -0
- package/dist/skills/bundled/farcaster/index.js.map +1 -1
- package/dist/skills/bundled/features/SKILL.md +20 -0
- package/dist/skills/bundled/feeds/SKILL.md +288 -0
- package/dist/skills/bundled/harden/SKILL.md +74 -0
- package/dist/skills/bundled/history/SKILL.md +257 -0
- package/dist/skills/bundled/hyperliquid/SKILL.md +200 -0
- package/dist/skills/bundled/hyperliquid/index.d.ts +0 -3
- package/dist/skills/bundled/hyperliquid/index.js +0 -1
- package/dist/skills/bundled/hyperliquid/index.js.map +1 -1
- package/dist/skills/bundled/identity/SKILL.md +228 -0
- package/dist/skills/bundled/identity/index.js +2 -2
- package/dist/skills/bundled/identity/index.js.map +1 -1
- package/dist/skills/bundled/integrations/SKILL.md +321 -0
- package/dist/skills/bundled/integrations/index.js +2 -2
- package/dist/skills/bundled/integrations/index.js.map +1 -1
- package/dist/skills/bundled/jupiter/SKILL.md +163 -0
- package/dist/skills/bundled/jupiter/index.js +2 -2
- package/dist/skills/bundled/kamino/SKILL.md +69 -0
- package/dist/skills/bundled/ledger/SKILL.md +20 -0
- package/dist/skills/bundled/lighter/SKILL.md +83 -0
- package/dist/skills/bundled/lighter/index.d.ts +0 -3
- package/dist/skills/bundled/lighter/index.js +0 -1
- package/dist/skills/bundled/lighter/index.js.map +1 -1
- package/dist/skills/bundled/marginfi/SKILL.md +62 -0
- package/dist/skills/bundled/market-index/SKILL.md +242 -0
- package/dist/skills/bundled/market-index/index.js +1 -3
- package/dist/skills/bundled/market-index/index.js.map +1 -1
- package/dist/skills/bundled/markets/SKILL.md +49 -0
- package/dist/skills/bundled/mcp/SKILL.md +235 -0
- package/dist/skills/bundled/mcp/index.js +1 -3
- package/dist/skills/bundled/mcp/index.js.map +1 -1
- package/dist/skills/bundled/memory/SKILL.md +209 -0
- package/dist/skills/bundled/metaculus/SKILL.md +62 -0
- package/dist/skills/bundled/metaculus/index.js +4 -1
- package/dist/skills/bundled/metaculus/index.js.map +1 -1
- package/dist/skills/bundled/meteora/SKILL.md +28 -0
- package/dist/skills/bundled/meteora-dbc/SKILL.md +25 -0
- package/dist/skills/bundled/metrics/SKILL.md +338 -0
- package/dist/skills/bundled/mev/SKILL.md +239 -0
- package/dist/skills/bundled/mev/index.js +2 -2
- package/dist/skills/bundled/mev/index.js.map +1 -1
- package/dist/skills/bundled/mexc-futures/SKILL.md +86 -0
- package/dist/skills/bundled/mexc-futures/index.d.ts +0 -3
- package/dist/skills/bundled/mexc-futures/index.js +0 -1
- package/dist/skills/bundled/mexc-futures/index.js.map +1 -1
- package/dist/skills/bundled/mm/SKILL.md +142 -0
- package/dist/skills/bundled/mm/index.js +28 -27
- package/dist/skills/bundled/mm/index.js.map +1 -1
- package/dist/skills/bundled/monitoring/SKILL.md +249 -0
- package/dist/skills/bundled/news/SKILL.md +95 -0
- package/dist/skills/bundled/news/index.js +1 -2
- package/dist/skills/bundled/news/index.js.map +1 -1
- package/dist/skills/bundled/onchainkit/SKILL.md +83 -0
- package/dist/skills/bundled/opinion/SKILL.md +87 -0
- package/dist/skills/bundled/opportunity/SKILL.md +308 -0
- package/dist/skills/bundled/orca/SKILL.md +28 -0
- package/dist/skills/bundled/orca/index.js +11 -7
- package/dist/skills/bundled/orca/index.js.map +1 -1
- package/dist/skills/bundled/pairing/SKILL.md +275 -0
- package/dist/skills/bundled/pancakeswap/SKILL.md +93 -0
- package/dist/skills/bundled/pancakeswap/index.d.ts +0 -3
- package/dist/skills/bundled/pancakeswap/index.js +0 -1
- package/dist/skills/bundled/pancakeswap/index.js.map +1 -1
- package/dist/skills/bundled/percolator/SKILL.md +22 -0
- package/dist/skills/bundled/permissions/SKILL.md +269 -0
- package/dist/skills/bundled/permissions/index.js +2 -2
- package/dist/skills/bundled/permissions/index.js.map +1 -1
- package/dist/skills/bundled/plugins/SKILL.md +263 -0
- package/dist/skills/bundled/plugins/index.js +2 -2
- package/dist/skills/bundled/plugins/index.js.map +1 -1
- package/dist/skills/bundled/portfolio/SKILL.md +161 -0
- package/dist/skills/bundled/portfolio/index.js +1 -1
- package/dist/skills/bundled/portfolio/index.js.map +1 -1
- package/dist/skills/bundled/portfolio-sync/SKILL.md +466 -0
- package/dist/skills/bundled/positions/SKILL.md +262 -0
- package/dist/skills/bundled/predictfun/SKILL.md +109 -0
- package/dist/skills/bundled/predictfun/index.js +1 -1
- package/dist/skills/bundled/predictfun/index.js.map +1 -1
- package/dist/skills/bundled/predictit/SKILL.md +66 -0
- package/dist/skills/bundled/predictit/index.js +4 -1
- package/dist/skills/bundled/predictit/index.js.map +1 -1
- package/dist/skills/bundled/presence/SKILL.md +217 -0
- package/dist/skills/bundled/presence/index.js +2 -2
- package/dist/skills/bundled/presence/index.js.map +1 -1
- package/dist/skills/bundled/processes/SKILL.md +254 -0
- package/dist/skills/bundled/pump-swarm/SKILL.md +309 -0
- package/dist/skills/bundled/pumpfun/SKILL.md +145 -0
- package/dist/skills/bundled/pumpfun/index.js +82 -8
- package/dist/skills/bundled/pumpfun/index.js.map +1 -1
- package/dist/skills/bundled/qmd/SKILL.md +129 -0
- package/dist/skills/bundled/qrcoin/SKILL.md +60 -0
- package/dist/skills/bundled/qrcoin/index.d.ts +0 -3
- package/dist/skills/bundled/qrcoin/index.js +0 -1
- package/dist/skills/bundled/qrcoin/index.js.map +1 -1
- package/dist/skills/bundled/raydium/SKILL.md +198 -0
- package/dist/skills/bundled/remote/SKILL.md +201 -0
- package/dist/skills/bundled/research/SKILL.md +83 -0
- package/dist/skills/bundled/research/index.js +2 -2
- package/dist/skills/bundled/research/index.js.map +1 -1
- package/dist/skills/bundled/risk/SKILL.md +323 -0
- package/dist/skills/bundled/router/SKILL.md +233 -0
- package/dist/skills/bundled/routing/SKILL.md +258 -0
- package/dist/skills/bundled/sandbox/SKILL.md +257 -0
- package/dist/skills/bundled/search-config/SKILL.md +257 -0
- package/dist/skills/bundled/search-config/index.js +2 -2
- package/dist/skills/bundled/search-config/index.js.map +1 -1
- package/dist/skills/bundled/sessions/SKILL.md +251 -0
- package/dist/skills/bundled/sessions/index.js +1 -1
- package/dist/skills/bundled/sessions/index.js.map +1 -1
- package/dist/skills/bundled/setup/SKILL.md +53 -0
- package/dist/skills/bundled/shield/SKILL.md +21 -0
- package/dist/skills/bundled/signals/SKILL.md +106 -0
- package/dist/skills/bundled/signals/index.d.ts +0 -3
- package/dist/skills/bundled/signals/index.js +3 -4
- package/dist/skills/bundled/signals/index.js.map +1 -1
- package/dist/skills/bundled/sizing/SKILL.md +238 -0
- package/dist/skills/bundled/slippage/SKILL.md +306 -0
- package/dist/skills/bundled/smarkets/SKILL.md +107 -0
- package/dist/skills/bundled/smarkets/index.js +3 -3
- package/dist/skills/bundled/smarkets/index.js.map +1 -1
- package/dist/skills/bundled/solend/SKILL.md +63 -0
- package/dist/skills/bundled/strategy/SKILL.md +266 -0
- package/dist/skills/bundled/streaming/SKILL.md +150 -0
- package/dist/skills/bundled/streaming/index.js +2 -2
- package/dist/skills/bundled/streaming/index.js.map +1 -1
- package/dist/skills/bundled/tailscale/SKILL.md +249 -0
- package/dist/skills/bundled/tailscale/index.js +2 -2
- package/dist/skills/bundled/tailscale/index.js.map +1 -1
- package/dist/skills/bundled/ticks/SKILL.md +61 -0
- package/dist/skills/bundled/token-security/SKILL.md +18 -0
- package/dist/skills/bundled/trading-evm/SKILL.md +329 -0
- package/dist/skills/bundled/trading-futures/SKILL.md +865 -0
- package/dist/skills/bundled/trading-kalshi/SKILL.md +629 -0
- package/dist/skills/bundled/trading-kalshi/index.js +2 -0
- package/dist/skills/bundled/trading-kalshi/index.js.map +1 -1
- package/dist/skills/bundled/trading-manifold/SKILL.md +387 -0
- package/dist/skills/bundled/trading-polymarket/SKILL.md +1080 -0
- package/dist/skills/bundled/trading-polymarket/index.js +28 -19
- package/dist/skills/bundled/trading-polymarket/index.js.map +1 -1
- package/dist/skills/bundled/trading-solana/SKILL.md +418 -0
- package/dist/skills/bundled/trading-solana/index.js +1 -1
- package/dist/skills/bundled/trading-solana/index.js.map +1 -1
- package/dist/skills/bundled/trading-system/SKILL.md +290 -0
- package/dist/skills/bundled/triggers/SKILL.md +433 -0
- package/dist/skills/bundled/tts/SKILL.md +220 -0
- package/dist/skills/bundled/tweet-ideas/SKILL.md +77 -0
- package/dist/skills/bundled/usage/SKILL.md +239 -0
- package/dist/skills/bundled/usage/index.js +2 -2
- package/dist/skills/bundled/usage/index.js.map +1 -1
- package/dist/skills/bundled/veil/SKILL.md +76 -0
- package/dist/skills/bundled/veil/index.d.ts +0 -3
- package/dist/skills/bundled/veil/index.js +0 -1
- package/dist/skills/bundled/veil/index.js.map +1 -1
- package/dist/skills/bundled/verify/SKILL.md +199 -0
- package/dist/skills/bundled/verify/index.d.ts +0 -3
- package/dist/skills/bundled/verify/index.js +0 -1
- package/dist/skills/bundled/verify/index.js.map +1 -1
- package/dist/skills/bundled/virtuals/SKILL.md +82 -0
- package/dist/skills/bundled/voice/SKILL.md +217 -0
- package/dist/skills/bundled/voice/index.js +2 -2
- package/dist/skills/bundled/voice/index.js.map +1 -1
- package/dist/skills/bundled/weather/SKILL.md +80 -0
- package/dist/skills/bundled/weather/index.js +3 -0
- package/dist/skills/bundled/weather/index.js.map +1 -1
- package/dist/skills/bundled/webhooks/SKILL.md +297 -0
- package/dist/skills/bundled/webhooks/index.js +2 -2
- package/dist/skills/bundled/webhooks/index.js.map +1 -1
- package/dist/skills/bundled/whale-tracking/SKILL.md +287 -0
- package/dist/skills/bundled/whale-tracking/index.js +2 -2
- package/dist/skills/bundled/whale-tracking/index.js.map +1 -1
- package/dist/skills/bundled/yoink/SKILL.md +54 -0
- package/dist/skills/bundled/yoink/index.d.ts +0 -3
- package/dist/skills/bundled/yoink/index.js +0 -1
- package/dist/skills/bundled/yoink/index.js.map +1 -1
- package/dist/skills/executor.js +5 -3
- package/dist/skills/executor.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,865 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: trading-futures
|
|
3
|
+
description: "Trade perpetual futures on Binance, Bybit, Hyperliquid, MEXC with up to 200x leverage"
|
|
4
|
+
emoji: "📈"
|
|
5
|
+
gates:
|
|
6
|
+
envs:
|
|
7
|
+
anyOf:
|
|
8
|
+
- BINANCE_API_KEY
|
|
9
|
+
- BYBIT_API_KEY
|
|
10
|
+
- HYPERLIQUID_PRIVATE_KEY
|
|
11
|
+
- MEXC_API_KEY
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Perpetual Futures Trading - Complete API Reference
|
|
15
|
+
|
|
16
|
+
Trade leveraged perpetual futures across 4 exchanges with database tracking, custom strategies, and A/B testing.
|
|
17
|
+
|
|
18
|
+
**200+ methods across 4 exchanges. This is the complete reference.**
|
|
19
|
+
|
|
20
|
+
## Supported Exchanges
|
|
21
|
+
|
|
22
|
+
| Exchange | Type | Max Leverage | KYC | API Methods |
|
|
23
|
+
|----------|------|--------------|-----|-------------|
|
|
24
|
+
| Binance Futures | CEX | 125x | Yes | 55+ |
|
|
25
|
+
| Bybit | CEX | 100x | Yes | 50+ |
|
|
26
|
+
| MEXC | CEX | 200x | No (small) | 35+ |
|
|
27
|
+
| Hyperliquid | DEX | 50x | No | 60+ |
|
|
28
|
+
|
|
29
|
+
## Required Environment Variables
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
# Binance Futures
|
|
33
|
+
BINANCE_API_KEY=your_api_key
|
|
34
|
+
BINANCE_API_SECRET=your_api_secret
|
|
35
|
+
|
|
36
|
+
# Bybit
|
|
37
|
+
BYBIT_API_KEY=your_api_key
|
|
38
|
+
BYBIT_API_SECRET=your_api_secret
|
|
39
|
+
|
|
40
|
+
# MEXC (No KYC for small amounts)
|
|
41
|
+
MEXC_API_KEY=your_api_key
|
|
42
|
+
MEXC_API_SECRET=your_api_secret
|
|
43
|
+
|
|
44
|
+
# Hyperliquid (Fully decentralized, No KYC)
|
|
45
|
+
HYPERLIQUID_PRIVATE_KEY=your_private_key
|
|
46
|
+
HYPERLIQUID_WALLET_ADDRESS=0x...
|
|
47
|
+
|
|
48
|
+
# Optional: Database for trade tracking
|
|
49
|
+
DATABASE_URL=postgres://user:pass@localhost:5432/clodds
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Chat Commands
|
|
55
|
+
|
|
56
|
+
### Account & Balance
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
/futures balance [exchange] # Check margin balance (all or specific)
|
|
60
|
+
/futures positions # View all open positions
|
|
61
|
+
/futures positions <exchange> # View positions on specific exchange
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Opening Positions
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
/futures long <symbol> <size> [leverage]x # Open long position
|
|
68
|
+
/futures short <symbol> <size> [leverage]x # Open short position
|
|
69
|
+
|
|
70
|
+
# Examples:
|
|
71
|
+
/futures long BTCUSDT 0.1 10x # Open 0.1 BTC long at 10x
|
|
72
|
+
/futures short ETHUSDT 1 20x # Open 1 ETH short at 20x
|
|
73
|
+
/futures long BTCUSDT 0.01 # Use default leverage
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Take-Profit & Stop-Loss
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
/futures tp <symbol> <price> # Set take-profit
|
|
80
|
+
/futures sl <symbol> <price> # Set stop-loss
|
|
81
|
+
/futures tpsl <symbol> <tp> <sl> # Set both at once
|
|
82
|
+
|
|
83
|
+
# Examples:
|
|
84
|
+
/futures tp BTCUSDT 105000 # Take profit at $105k
|
|
85
|
+
/futures sl BTCUSDT 95000 # Stop loss at $95k
|
|
86
|
+
/futures tpsl BTCUSDT 105000 95000 # Both
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Closing Positions
|
|
90
|
+
|
|
91
|
+
```
|
|
92
|
+
/futures close <symbol> # Close specific position
|
|
93
|
+
/futures close-all # Close ALL positions (all exchanges)
|
|
94
|
+
/futures close-all <exchange> # Close all on specific exchange
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Market Data
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
/futures markets [exchange] # List available markets
|
|
101
|
+
/futures price <symbol> # Get current price
|
|
102
|
+
/futures funding <symbol> # Check funding rate
|
|
103
|
+
/futures orderbook <symbol> # View orderbook depth
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Account Info
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
/futures stats # Trade statistics from database
|
|
110
|
+
/futures history [symbol] # Trade history
|
|
111
|
+
/futures pnl [period] # P&L summary (day/week/month)
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Leverage & Margin
|
|
115
|
+
|
|
116
|
+
```
|
|
117
|
+
/futures leverage <symbol> <value> # Set leverage
|
|
118
|
+
/futures margin <symbol> <mode> # Set margin mode (cross/isolated)
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## TypeScript API Reference
|
|
124
|
+
|
|
125
|
+
### Quick Setup
|
|
126
|
+
|
|
127
|
+
```typescript
|
|
128
|
+
import { setupFromEnv } from 'clodds/trading/futures';
|
|
129
|
+
|
|
130
|
+
// Auto-configure from environment variables
|
|
131
|
+
const { clients, database, strategyEngine } = await setupFromEnv();
|
|
132
|
+
|
|
133
|
+
// Access individual clients
|
|
134
|
+
const binance = clients.binance;
|
|
135
|
+
const bybit = clients.bybit;
|
|
136
|
+
const mexc = clients.mexc;
|
|
137
|
+
const hyperliquid = clients.hyperliquid;
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Manual Client Setup
|
|
141
|
+
|
|
142
|
+
```typescript
|
|
143
|
+
import {
|
|
144
|
+
BinanceFuturesClient,
|
|
145
|
+
BybitFuturesClient,
|
|
146
|
+
MexcFuturesClient,
|
|
147
|
+
HyperliquidClient,
|
|
148
|
+
FuturesDatabase,
|
|
149
|
+
StrategyEngine,
|
|
150
|
+
} from 'clodds/trading/futures';
|
|
151
|
+
|
|
152
|
+
// Binance
|
|
153
|
+
const binance = new BinanceFuturesClient({
|
|
154
|
+
apiKey: process.env.BINANCE_API_KEY!,
|
|
155
|
+
apiSecret: process.env.BINANCE_API_SECRET!,
|
|
156
|
+
testnet: false, // true for testnet
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
// Bybit
|
|
160
|
+
const bybit = new BybitFuturesClient({
|
|
161
|
+
apiKey: process.env.BYBIT_API_KEY!,
|
|
162
|
+
apiSecret: process.env.BYBIT_API_SECRET!,
|
|
163
|
+
testnet: false,
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
// MEXC (No KYC)
|
|
167
|
+
const mexc = new MexcFuturesClient({
|
|
168
|
+
apiKey: process.env.MEXC_API_KEY!,
|
|
169
|
+
apiSecret: process.env.MEXC_API_SECRET!,
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
// Hyperliquid (Decentralized, No KYC)
|
|
173
|
+
const hyperliquid = new HyperliquidClient({
|
|
174
|
+
privateKey: process.env.HYPERLIQUID_PRIVATE_KEY!,
|
|
175
|
+
walletAddress: process.env.HYPERLIQUID_WALLET_ADDRESS!,
|
|
176
|
+
testnet: false,
|
|
177
|
+
});
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## Binance Futures API (55+ Methods)
|
|
183
|
+
|
|
184
|
+
### Market Data
|
|
185
|
+
|
|
186
|
+
```typescript
|
|
187
|
+
// Prices & Tickers
|
|
188
|
+
await binance.getMarkPrice('BTCUSDT');
|
|
189
|
+
await binance.getTicker24h('BTCUSDT');
|
|
190
|
+
await binance.getAllTickers();
|
|
191
|
+
await binance.getBookTicker('BTCUSDT');
|
|
192
|
+
|
|
193
|
+
// Orderbook & Trades
|
|
194
|
+
await binance.getOrderBook('BTCUSDT', 100);
|
|
195
|
+
await binance.getRecentTrades('BTCUSDT', 500);
|
|
196
|
+
await binance.getHistoricalTrades('BTCUSDT', 500);
|
|
197
|
+
await binance.getAggTrades('BTCUSDT');
|
|
198
|
+
|
|
199
|
+
// Klines (Candlesticks)
|
|
200
|
+
await binance.getKlines('BTCUSDT', '1h', 100);
|
|
201
|
+
await binance.getContinuousKlines('BTCUSDT', '1h', 'PERPETUAL');
|
|
202
|
+
await binance.getIndexPriceKlines('BTCUSDT', '1h');
|
|
203
|
+
await binance.getMarkPriceKlines('BTCUSDT', '1h');
|
|
204
|
+
await binance.getPremiumIndexKlines('BTCUSDT', '1h');
|
|
205
|
+
|
|
206
|
+
// Funding Rates
|
|
207
|
+
await binance.getFundingRate('BTCUSDT');
|
|
208
|
+
await binance.getFundingRateHistory('BTCUSDT', 100);
|
|
209
|
+
|
|
210
|
+
// Market Info
|
|
211
|
+
await binance.getExchangeInfo();
|
|
212
|
+
await binance.getOpenInterest('BTCUSDT');
|
|
213
|
+
await binance.getOpenInterestHistory('BTCUSDT', '1h');
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### Trading
|
|
217
|
+
|
|
218
|
+
```typescript
|
|
219
|
+
// Place Orders
|
|
220
|
+
await binance.placeOrder({
|
|
221
|
+
symbol: 'BTCUSDT',
|
|
222
|
+
side: 'BUY',
|
|
223
|
+
type: 'MARKET',
|
|
224
|
+
quantity: 0.01,
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
await binance.placeOrder({
|
|
228
|
+
symbol: 'BTCUSDT',
|
|
229
|
+
side: 'BUY',
|
|
230
|
+
type: 'LIMIT',
|
|
231
|
+
quantity: 0.01,
|
|
232
|
+
price: 95000,
|
|
233
|
+
timeInForce: 'GTC',
|
|
234
|
+
});
|
|
235
|
+
|
|
236
|
+
// With TP/SL
|
|
237
|
+
await binance.placeOrder({
|
|
238
|
+
symbol: 'BTCUSDT',
|
|
239
|
+
side: 'BUY',
|
|
240
|
+
type: 'MARKET',
|
|
241
|
+
quantity: 0.01,
|
|
242
|
+
takeProfit: 105000,
|
|
243
|
+
stopLoss: 95000,
|
|
244
|
+
});
|
|
245
|
+
|
|
246
|
+
// Batch Orders
|
|
247
|
+
await binance.placeBatchOrders([
|
|
248
|
+
{ symbol: 'BTCUSDT', side: 'BUY', type: 'LIMIT', quantity: 0.01, price: 94000 },
|
|
249
|
+
{ symbol: 'BTCUSDT', side: 'BUY', type: 'LIMIT', quantity: 0.01, price: 93000 },
|
|
250
|
+
]);
|
|
251
|
+
|
|
252
|
+
// Modify & Cancel
|
|
253
|
+
await binance.modifyOrder('BTCUSDT', orderId, { quantity: 0.02 });
|
|
254
|
+
await binance.cancelOrder('BTCUSDT', orderId);
|
|
255
|
+
await binance.cancelAllOrders('BTCUSDT');
|
|
256
|
+
await binance.cancelBatchOrders('BTCUSDT', [orderId1, orderId2]);
|
|
257
|
+
|
|
258
|
+
// Auto-cancel
|
|
259
|
+
await binance.setAutoCancel(60000); // Cancel all after 60s
|
|
260
|
+
await binance.cancelAutoCancel();
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
### Account & Positions
|
|
264
|
+
|
|
265
|
+
```typescript
|
|
266
|
+
// Account Info
|
|
267
|
+
await binance.getAccountInfo();
|
|
268
|
+
await binance.getBalance();
|
|
269
|
+
await binance.getPositions();
|
|
270
|
+
await binance.getPositionRisk();
|
|
271
|
+
|
|
272
|
+
// Orders & History
|
|
273
|
+
await binance.getOpenOrders();
|
|
274
|
+
await binance.getOpenOrders('BTCUSDT');
|
|
275
|
+
await binance.getAllOrders('BTCUSDT');
|
|
276
|
+
await binance.getOrder('BTCUSDT', orderId);
|
|
277
|
+
await binance.getTradeHistory('BTCUSDT');
|
|
278
|
+
await binance.getIncomeHistory();
|
|
279
|
+
await binance.getIncomeHistory('BTCUSDT', 'REALIZED_PNL');
|
|
280
|
+
|
|
281
|
+
// Commission
|
|
282
|
+
await binance.getCommissionRate('BTCUSDT');
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
### Risk Management
|
|
286
|
+
|
|
287
|
+
```typescript
|
|
288
|
+
// Leverage
|
|
289
|
+
await binance.setLeverage('BTCUSDT', 10);
|
|
290
|
+
await binance.getLeverageBrackets();
|
|
291
|
+
await binance.getLeverageBrackets('BTCUSDT');
|
|
292
|
+
|
|
293
|
+
// Margin Mode
|
|
294
|
+
await binance.setMarginType('BTCUSDT', 'ISOLATED');
|
|
295
|
+
await binance.modifyIsolatedMargin('BTCUSDT', 100, 'ADD');
|
|
296
|
+
await binance.modifyIsolatedMargin('BTCUSDT', 50, 'REDUCE');
|
|
297
|
+
|
|
298
|
+
// Position Mode
|
|
299
|
+
await binance.getPositionMode();
|
|
300
|
+
await binance.setPositionMode(true); // Hedge mode
|
|
301
|
+
await binance.setPositionMode(false); // One-way mode
|
|
302
|
+
|
|
303
|
+
// Multi-Asset Mode
|
|
304
|
+
await binance.getMultiAssetMode();
|
|
305
|
+
await binance.setMultiAssetMode(true);
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
### Analytics
|
|
309
|
+
|
|
310
|
+
```typescript
|
|
311
|
+
// Market Analytics
|
|
312
|
+
await binance.getLongShortRatio('BTCUSDT', '1h');
|
|
313
|
+
await binance.getTopTraderLongShortRatio('BTCUSDT', '1h');
|
|
314
|
+
await binance.getTopTraderPositions('BTCUSDT', '1h');
|
|
315
|
+
await binance.getGlobalLongShortRatio('BTCUSDT', '1h');
|
|
316
|
+
await binance.getTakerBuySellVolume('BTCUSDT', '1h');
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
### Staking & Earn
|
|
320
|
+
|
|
321
|
+
```typescript
|
|
322
|
+
// Staking
|
|
323
|
+
await binance.getStakingProducts();
|
|
324
|
+
await binance.stake('BNB', 10);
|
|
325
|
+
await binance.unstake('BNB', 5);
|
|
326
|
+
await binance.getStakingHistory();
|
|
327
|
+
await binance.getStakingPositions();
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
### Convert
|
|
331
|
+
|
|
332
|
+
```typescript
|
|
333
|
+
// Convert between assets
|
|
334
|
+
await binance.getConvertPairs('USDT', 'BTC');
|
|
335
|
+
await binance.sendQuote('USDT', 'BTC', 100);
|
|
336
|
+
await binance.acceptQuote(quoteId);
|
|
337
|
+
await binance.getConvertHistory();
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
### Portfolio Margin
|
|
341
|
+
|
|
342
|
+
```typescript
|
|
343
|
+
await binance.getPortfolioMarginAccount();
|
|
344
|
+
await binance.getPortfolioMarginBankruptcyLoan();
|
|
345
|
+
await binance.repayPortfolioMarginLoan();
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
---
|
|
349
|
+
|
|
350
|
+
## Bybit API (50+ Methods)
|
|
351
|
+
|
|
352
|
+
### Market Data
|
|
353
|
+
|
|
354
|
+
```typescript
|
|
355
|
+
await bybit.getTickers('linear');
|
|
356
|
+
await bybit.getTickers('linear', 'BTCUSDT');
|
|
357
|
+
await bybit.getOrderbook('BTCUSDT', 'linear');
|
|
358
|
+
await bybit.getKline('BTCUSDT', '1h', 'linear');
|
|
359
|
+
await bybit.getMarkPriceKline('BTCUSDT', '1h', 'linear');
|
|
360
|
+
await bybit.getIndexPriceKline('BTCUSDT', '1h', 'linear');
|
|
361
|
+
await bybit.getPremiumIndexPriceKline('BTCUSDT', '1h', 'linear');
|
|
362
|
+
await bybit.getInstrumentsInfo('linear');
|
|
363
|
+
await bybit.getFundingHistory('BTCUSDT', 'linear');
|
|
364
|
+
await bybit.getPublicTradingHistory('BTCUSDT', 'linear');
|
|
365
|
+
await bybit.getOpenInterest('BTCUSDT', 'linear', '1h');
|
|
366
|
+
await bybit.getHistoricalVolatility();
|
|
367
|
+
await bybit.getInsurance();
|
|
368
|
+
await bybit.getRiskLimit('linear');
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
### Trading
|
|
372
|
+
|
|
373
|
+
```typescript
|
|
374
|
+
// Place Order
|
|
375
|
+
await bybit.placeOrder({
|
|
376
|
+
category: 'linear',
|
|
377
|
+
symbol: 'BTCUSDT',
|
|
378
|
+
side: 'Buy',
|
|
379
|
+
orderType: 'Market',
|
|
380
|
+
qty: '0.01',
|
|
381
|
+
});
|
|
382
|
+
|
|
383
|
+
await bybit.placeOrder({
|
|
384
|
+
category: 'linear',
|
|
385
|
+
symbol: 'BTCUSDT',
|
|
386
|
+
side: 'Buy',
|
|
387
|
+
orderType: 'Limit',
|
|
388
|
+
qty: '0.01',
|
|
389
|
+
price: '95000',
|
|
390
|
+
timeInForce: 'GTC',
|
|
391
|
+
});
|
|
392
|
+
|
|
393
|
+
// Batch Orders
|
|
394
|
+
await bybit.placeBatchOrders('linear', [
|
|
395
|
+
{ symbol: 'BTCUSDT', side: 'Buy', orderType: 'Limit', qty: '0.01', price: '94000' },
|
|
396
|
+
{ symbol: 'BTCUSDT', side: 'Buy', orderType: 'Limit', qty: '0.01', price: '93000' },
|
|
397
|
+
]);
|
|
398
|
+
|
|
399
|
+
// Modify & Cancel
|
|
400
|
+
await bybit.amendOrder({ category: 'linear', symbol: 'BTCUSDT', orderId, qty: '0.02' });
|
|
401
|
+
await bybit.cancelOrder({ category: 'linear', symbol: 'BTCUSDT', orderId });
|
|
402
|
+
await bybit.cancelAllOrders({ category: 'linear', symbol: 'BTCUSDT' });
|
|
403
|
+
await bybit.cancelBatchOrders('linear', [{ symbol: 'BTCUSDT', orderId }]);
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
### Account & Positions
|
|
407
|
+
|
|
408
|
+
```typescript
|
|
409
|
+
await bybit.getWalletBalance('UNIFIED');
|
|
410
|
+
await bybit.getPositionInfo('linear');
|
|
411
|
+
await bybit.getPositionInfo('linear', 'BTCUSDT');
|
|
412
|
+
await bybit.getOpenOrders('linear');
|
|
413
|
+
await bybit.getOrderHistory('linear');
|
|
414
|
+
await bybit.getExecutionList('linear');
|
|
415
|
+
await bybit.getClosedPnl('linear');
|
|
416
|
+
await bybit.getBorrowHistory();
|
|
417
|
+
await bybit.getCollateralInfo();
|
|
418
|
+
await bybit.getCoinGreeks();
|
|
419
|
+
await bybit.getFeeRate('linear', 'BTCUSDT');
|
|
420
|
+
await bybit.getAccountInfo();
|
|
421
|
+
await bybit.getTransactionLog();
|
|
422
|
+
await bybit.getMMPState('linear');
|
|
423
|
+
await bybit.setMMP({ baseCoin: 'BTC', window: '5000', frozenPeriod: '100', qtyLimit: '10', deltaLimit: '100' });
|
|
424
|
+
await bybit.resetMMP('BTC');
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
### Risk Management
|
|
428
|
+
|
|
429
|
+
```typescript
|
|
430
|
+
await bybit.setLeverage({ category: 'linear', symbol: 'BTCUSDT', buyLeverage: '10', sellLeverage: '10' });
|
|
431
|
+
await bybit.setMarginMode('ISOLATED_MARGIN');
|
|
432
|
+
await bybit.setPositionMode({ category: 'linear', mode: 0 }); // 0=one-way, 3=hedge
|
|
433
|
+
await bybit.setRiskLimit({ category: 'linear', symbol: 'BTCUSDT', riskId: 1 });
|
|
434
|
+
await bybit.setTradingStop({ category: 'linear', symbol: 'BTCUSDT', takeProfit: '105000', stopLoss: '95000' });
|
|
435
|
+
await bybit.setTpSlMode({ category: 'linear', symbol: 'BTCUSDT', tpSlMode: 'Full' });
|
|
436
|
+
await bybit.addOrReduceMargin({ category: 'linear', symbol: 'BTCUSDT', margin: '100' });
|
|
437
|
+
await bybit.switchCrossIsolatedMargin({ category: 'linear', symbol: 'BTCUSDT', tradeMode: 1, buyLeverage: '10', sellLeverage: '10' });
|
|
438
|
+
```
|
|
439
|
+
|
|
440
|
+
### Copy Trading
|
|
441
|
+
|
|
442
|
+
```typescript
|
|
443
|
+
await bybit.getCopyTradingLeaders();
|
|
444
|
+
await bybit.followLeader(leaderId);
|
|
445
|
+
await bybit.unfollowLeader(leaderId);
|
|
446
|
+
await bybit.getCopyPositions();
|
|
447
|
+
await bybit.closeCopyPosition(symbol);
|
|
448
|
+
```
|
|
449
|
+
|
|
450
|
+
### Lending & Earn
|
|
451
|
+
|
|
452
|
+
```typescript
|
|
453
|
+
await bybit.getLendingProducts();
|
|
454
|
+
await bybit.depositToLending(productId, amount);
|
|
455
|
+
await bybit.redeemFromLending(productId, amount);
|
|
456
|
+
await bybit.getLendingOrders();
|
|
457
|
+
await bybit.getEarnProducts();
|
|
458
|
+
await bybit.getEarnOrders();
|
|
459
|
+
```
|
|
460
|
+
|
|
461
|
+
---
|
|
462
|
+
|
|
463
|
+
## Hyperliquid API (60+ Methods)
|
|
464
|
+
|
|
465
|
+
### Market Data
|
|
466
|
+
|
|
467
|
+
```typescript
|
|
468
|
+
await hyperliquid.getMeta();
|
|
469
|
+
await hyperliquid.getMetaAndAssetCtxs();
|
|
470
|
+
await hyperliquid.getAssetCtxs();
|
|
471
|
+
await hyperliquid.getAllMids();
|
|
472
|
+
await hyperliquid.getCandleSnapshot('BTC', '1h', startTime, endTime);
|
|
473
|
+
await hyperliquid.getL2Snapshot('BTC');
|
|
474
|
+
await hyperliquid.getFundingHistory('BTC', startTime, endTime);
|
|
475
|
+
await hyperliquid.getRecentTrades('BTC');
|
|
476
|
+
await hyperliquid.getPredictedFunding();
|
|
477
|
+
```
|
|
478
|
+
|
|
479
|
+
### Trading
|
|
480
|
+
|
|
481
|
+
```typescript
|
|
482
|
+
// Place Order
|
|
483
|
+
await hyperliquid.placeOrder({
|
|
484
|
+
asset: 'BTC',
|
|
485
|
+
isBuy: true,
|
|
486
|
+
sz: 0.01,
|
|
487
|
+
limitPx: 95000,
|
|
488
|
+
orderType: { limit: { tif: 'Gtc' } },
|
|
489
|
+
reduceOnly: false,
|
|
490
|
+
});
|
|
491
|
+
|
|
492
|
+
// Market Order
|
|
493
|
+
await hyperliquid.placeOrder({
|
|
494
|
+
asset: 'BTC',
|
|
495
|
+
isBuy: true,
|
|
496
|
+
sz: 0.01,
|
|
497
|
+
limitPx: null,
|
|
498
|
+
orderType: { market: {} },
|
|
499
|
+
});
|
|
500
|
+
|
|
501
|
+
// TWAP Order
|
|
502
|
+
await hyperliquid.placeTwapOrder({
|
|
503
|
+
asset: 'BTC',
|
|
504
|
+
isBuy: true,
|
|
505
|
+
sz: 1.0,
|
|
506
|
+
duration: 3600, // 1 hour
|
|
507
|
+
randomize: true,
|
|
508
|
+
});
|
|
509
|
+
|
|
510
|
+
// Modify & Cancel
|
|
511
|
+
await hyperliquid.modifyOrder(orderId, { sz: 0.02 });
|
|
512
|
+
await hyperliquid.cancelOrder('BTC', orderId);
|
|
513
|
+
await hyperliquid.cancelAllOrders();
|
|
514
|
+
await hyperliquid.cancelOrdersByCloid(['cloid1', 'cloid2']);
|
|
515
|
+
|
|
516
|
+
// Batch Operations
|
|
517
|
+
await hyperliquid.batchModifyOrders([{ oid: orderId1, sz: 0.02 }, { oid: orderId2, sz: 0.03 }]);
|
|
518
|
+
```
|
|
519
|
+
|
|
520
|
+
### Account & Positions
|
|
521
|
+
|
|
522
|
+
```typescript
|
|
523
|
+
await hyperliquid.getUserState(walletAddress);
|
|
524
|
+
await hyperliquid.getClearinghouseState(walletAddress);
|
|
525
|
+
await hyperliquid.getOpenOrders(walletAddress);
|
|
526
|
+
await hyperliquid.getFrontendOpenOrders(walletAddress);
|
|
527
|
+
await hyperliquid.getUserFills(walletAddress);
|
|
528
|
+
await hyperliquid.getUserFillsByTime(walletAddress, startTime, endTime);
|
|
529
|
+
await hyperliquid.getUserFunding(walletAddress);
|
|
530
|
+
await hyperliquid.getUserFundingHistory(walletAddress, startTime, endTime);
|
|
531
|
+
await hyperliquid.getHistoricalOrders(walletAddress);
|
|
532
|
+
await hyperliquid.getOrderStatus(walletAddress, orderId);
|
|
533
|
+
await hyperliquid.getTwapHistory(walletAddress);
|
|
534
|
+
await hyperliquid.getSubaccounts(walletAddress);
|
|
535
|
+
```
|
|
536
|
+
|
|
537
|
+
### Leverage & Margin
|
|
538
|
+
|
|
539
|
+
```typescript
|
|
540
|
+
await hyperliquid.updateLeverage('BTC', 10, false); // false = cross
|
|
541
|
+
await hyperliquid.updateLeverage('BTC', 10, true); // true = isolated
|
|
542
|
+
await hyperliquid.updateIsolatedMargin('BTC', 100);
|
|
543
|
+
```
|
|
544
|
+
|
|
545
|
+
### Transfers
|
|
546
|
+
|
|
547
|
+
```typescript
|
|
548
|
+
await hyperliquid.usdTransfer(toAddress, amount);
|
|
549
|
+
await hyperliquid.spotTransfer(toAddress, token, amount);
|
|
550
|
+
await hyperliquid.withdraw(amount);
|
|
551
|
+
await hyperliquid.classTransfer(amount, toPerp);
|
|
552
|
+
```
|
|
553
|
+
|
|
554
|
+
### Spot Trading
|
|
555
|
+
|
|
556
|
+
```typescript
|
|
557
|
+
await hyperliquid.getSpotMeta();
|
|
558
|
+
await hyperliquid.getSpotMetaAndAssetCtxs();
|
|
559
|
+
await hyperliquid.getSpotClearinghouseState(walletAddress);
|
|
560
|
+
await hyperliquid.placeSpotOrder({
|
|
561
|
+
asset: 'HYPE',
|
|
562
|
+
isBuy: true,
|
|
563
|
+
sz: 10,
|
|
564
|
+
limitPx: 25,
|
|
565
|
+
});
|
|
566
|
+
```
|
|
567
|
+
|
|
568
|
+
### Vaults
|
|
569
|
+
|
|
570
|
+
```typescript
|
|
571
|
+
await hyperliquid.getVaultDetails(vaultAddress);
|
|
572
|
+
await hyperliquid.getUserVaultEquities(walletAddress);
|
|
573
|
+
await hyperliquid.depositToVault(vaultAddress, amount);
|
|
574
|
+
await hyperliquid.withdrawFromVault(vaultAddress, amount);
|
|
575
|
+
await hyperliquid.getAllVaults();
|
|
576
|
+
```
|
|
577
|
+
|
|
578
|
+
### Staking
|
|
579
|
+
|
|
580
|
+
```typescript
|
|
581
|
+
await hyperliquid.getValidatorSummaries();
|
|
582
|
+
await hyperliquid.getUserStakingSummary(walletAddress);
|
|
583
|
+
await hyperliquid.stakeHype(amount, validatorAddress);
|
|
584
|
+
await hyperliquid.unstakeHype(amount, validatorAddress);
|
|
585
|
+
await hyperliquid.claimStakingRewards();
|
|
586
|
+
```
|
|
587
|
+
|
|
588
|
+
### Delegations
|
|
589
|
+
|
|
590
|
+
```typescript
|
|
591
|
+
await hyperliquid.getDelegatorSummary(walletAddress);
|
|
592
|
+
await hyperliquid.getDelegatorHistory(walletAddress);
|
|
593
|
+
await hyperliquid.delegate(amount, agentAddress);
|
|
594
|
+
await hyperliquid.undelegate(amount, agentAddress);
|
|
595
|
+
```
|
|
596
|
+
|
|
597
|
+
### Referrals & Analytics
|
|
598
|
+
|
|
599
|
+
```typescript
|
|
600
|
+
await hyperliquid.getReferralState(walletAddress);
|
|
601
|
+
await hyperliquid.createReferralCode(code);
|
|
602
|
+
await hyperliquid.getReferredUsers(walletAddress);
|
|
603
|
+
await hyperliquid.getUserAnalytics(walletAddress);
|
|
604
|
+
await hyperliquid.getLeaderboard();
|
|
605
|
+
await hyperliquid.getMaxBuilderFee();
|
|
606
|
+
```
|
|
607
|
+
|
|
608
|
+
---
|
|
609
|
+
|
|
610
|
+
## MEXC API (35+ Methods)
|
|
611
|
+
|
|
612
|
+
### Market Data
|
|
613
|
+
|
|
614
|
+
```typescript
|
|
615
|
+
await mexc.getContractDetail('BTC_USDT');
|
|
616
|
+
await mexc.getAllContractDetails();
|
|
617
|
+
await mexc.getOrderbook('BTC_USDT');
|
|
618
|
+
await mexc.getKlines('BTC_USDT', '1h');
|
|
619
|
+
await mexc.getTicker('BTC_USDT');
|
|
620
|
+
await mexc.getAllTickers();
|
|
621
|
+
await mexc.getFundingRate('BTC_USDT');
|
|
622
|
+
await mexc.getFundingRateHistory('BTC_USDT');
|
|
623
|
+
await mexc.getOpenInterest('BTC_USDT');
|
|
624
|
+
await mexc.getRecentTrades('BTC_USDT');
|
|
625
|
+
await mexc.getIndexPrice('BTC_USDT');
|
|
626
|
+
await mexc.getFairPrice('BTC_USDT');
|
|
627
|
+
```
|
|
628
|
+
|
|
629
|
+
### Trading
|
|
630
|
+
|
|
631
|
+
```typescript
|
|
632
|
+
// Place Order
|
|
633
|
+
await mexc.placeOrder({
|
|
634
|
+
symbol: 'BTC_USDT',
|
|
635
|
+
side: 1, // 1=Open Long, 2=Close Short, 3=Open Short, 4=Close Long
|
|
636
|
+
type: 5, // 1=Limit, 2=Post Only, 3=IOC, 4=FOK, 5=Market
|
|
637
|
+
vol: 1, // Contracts
|
|
638
|
+
leverage: 10,
|
|
639
|
+
});
|
|
640
|
+
|
|
641
|
+
// With TP/SL
|
|
642
|
+
await mexc.placeOrder({
|
|
643
|
+
symbol: 'BTC_USDT',
|
|
644
|
+
side: 1,
|
|
645
|
+
type: 5,
|
|
646
|
+
vol: 1,
|
|
647
|
+
leverage: 10,
|
|
648
|
+
takeProfit: 105000,
|
|
649
|
+
stopLoss: 95000,
|
|
650
|
+
});
|
|
651
|
+
|
|
652
|
+
// Batch Orders
|
|
653
|
+
await mexc.placeBatchOrders([
|
|
654
|
+
{ symbol: 'BTC_USDT', side: 1, type: 1, vol: 1, price: 94000, leverage: 10 },
|
|
655
|
+
{ symbol: 'BTC_USDT', side: 1, type: 1, vol: 1, price: 93000, leverage: 10 },
|
|
656
|
+
]);
|
|
657
|
+
|
|
658
|
+
// Trigger Order
|
|
659
|
+
await mexc.placeTriggerOrder({
|
|
660
|
+
symbol: 'BTC_USDT',
|
|
661
|
+
side: 1,
|
|
662
|
+
type: 1,
|
|
663
|
+
vol: 1,
|
|
664
|
+
triggerPrice: 96000,
|
|
665
|
+
triggerType: 1, // 1=Last Price, 2=Fair Price, 3=Index Price
|
|
666
|
+
executionPrice: 96100,
|
|
667
|
+
leverage: 10,
|
|
668
|
+
});
|
|
669
|
+
|
|
670
|
+
// Cancel
|
|
671
|
+
await mexc.cancelOrder('BTC_USDT', orderId);
|
|
672
|
+
await mexc.cancelAllOrders('BTC_USDT');
|
|
673
|
+
await mexc.cancelBatchOrders([orderId1, orderId2]);
|
|
674
|
+
```
|
|
675
|
+
|
|
676
|
+
### Account & Positions
|
|
677
|
+
|
|
678
|
+
```typescript
|
|
679
|
+
await mexc.getAccountInfo();
|
|
680
|
+
await mexc.getPositions();
|
|
681
|
+
await mexc.getPositions('BTC_USDT');
|
|
682
|
+
await mexc.getOpenOrders();
|
|
683
|
+
await mexc.getOpenOrders('BTC_USDT');
|
|
684
|
+
await mexc.getOrderHistory('BTC_USDT');
|
|
685
|
+
await mexc.getTradeHistory('BTC_USDT');
|
|
686
|
+
await mexc.getTriggerOrders();
|
|
687
|
+
await mexc.getStopOrders();
|
|
688
|
+
await mexc.getRiskLimit('BTC_USDT');
|
|
689
|
+
await mexc.getAssets();
|
|
690
|
+
await mexc.getAssetRecords();
|
|
691
|
+
```
|
|
692
|
+
|
|
693
|
+
### Risk Management
|
|
694
|
+
|
|
695
|
+
```typescript
|
|
696
|
+
await mexc.setLeverage('BTC_USDT', 10);
|
|
697
|
+
await mexc.changeMarginMode('BTC_USDT', 1); // 1=Isolated, 2=Cross
|
|
698
|
+
await mexc.changePositionMode(1); // 1=Hedge, 2=One-way
|
|
699
|
+
await mexc.autoAddMargin('BTC_USDT', true);
|
|
700
|
+
```
|
|
701
|
+
|
|
702
|
+
---
|
|
703
|
+
|
|
704
|
+
## Database Tracking
|
|
705
|
+
|
|
706
|
+
### Initialize Database
|
|
707
|
+
|
|
708
|
+
```typescript
|
|
709
|
+
import { FuturesDatabase } from 'clodds/trading/futures';
|
|
710
|
+
|
|
711
|
+
const db = new FuturesDatabase(process.env.DATABASE_URL!);
|
|
712
|
+
await db.initialize(); // Creates tables if not exist
|
|
713
|
+
```
|
|
714
|
+
|
|
715
|
+
### Log Trades
|
|
716
|
+
|
|
717
|
+
```typescript
|
|
718
|
+
await db.logTrade({
|
|
719
|
+
exchange: 'binance',
|
|
720
|
+
symbol: 'BTCUSDT',
|
|
721
|
+
orderId: '12345',
|
|
722
|
+
side: 'BUY',
|
|
723
|
+
price: 95000,
|
|
724
|
+
quantity: 0.01,
|
|
725
|
+
realizedPnl: 50.25,
|
|
726
|
+
commission: 0.95,
|
|
727
|
+
commissionAsset: 'USDT',
|
|
728
|
+
timestamp: Date.now(),
|
|
729
|
+
isMaker: false,
|
|
730
|
+
strategy: 'momentum',
|
|
731
|
+
variant: 'aggressive',
|
|
732
|
+
});
|
|
733
|
+
```
|
|
734
|
+
|
|
735
|
+
### Query Trades
|
|
736
|
+
|
|
737
|
+
```typescript
|
|
738
|
+
// Get trades
|
|
739
|
+
const trades = await db.getTrades({ exchange: 'binance' });
|
|
740
|
+
const btcTrades = await db.getTrades({ exchange: 'binance', symbol: 'BTCUSDT' });
|
|
741
|
+
const recentTrades = await db.getTrades({ limit: 100 });
|
|
742
|
+
|
|
743
|
+
// Get statistics
|
|
744
|
+
const stats = await db.getTradeStats('binance');
|
|
745
|
+
// { totalTrades, winRate, totalPnl, avgPnl, bestTrade, worstTrade }
|
|
746
|
+
|
|
747
|
+
// Get variant performance
|
|
748
|
+
const results = await db.getVariantPerformance('momentum');
|
|
749
|
+
// { aggressive: { trades, pnl, winRate }, conservative: { ... } }
|
|
750
|
+
```
|
|
751
|
+
|
|
752
|
+
---
|
|
753
|
+
|
|
754
|
+
## Custom Strategies
|
|
755
|
+
|
|
756
|
+
### Strategy Interface
|
|
757
|
+
|
|
758
|
+
```typescript
|
|
759
|
+
import { FuturesStrategy, StrategySignal } from 'clodds/trading/futures';
|
|
760
|
+
|
|
761
|
+
interface FuturesStrategy {
|
|
762
|
+
name: string;
|
|
763
|
+
analyze(data: MarketData): Promise<StrategySignal | null>;
|
|
764
|
+
}
|
|
765
|
+
|
|
766
|
+
interface StrategySignal {
|
|
767
|
+
action: 'BUY' | 'SELL' | 'CLOSE';
|
|
768
|
+
symbol: string;
|
|
769
|
+
confidence: number; // 0-1
|
|
770
|
+
reason: string;
|
|
771
|
+
metadata?: Record<string, unknown>;
|
|
772
|
+
}
|
|
773
|
+
```
|
|
774
|
+
|
|
775
|
+
### Example Strategy
|
|
776
|
+
|
|
777
|
+
```typescript
|
|
778
|
+
class RSIStrategy implements FuturesStrategy {
|
|
779
|
+
name = 'rsi-strategy';
|
|
780
|
+
|
|
781
|
+
constructor(private config: { period: number; oversold: number; overbought: number }) {}
|
|
782
|
+
|
|
783
|
+
async analyze(data: MarketData): Promise<StrategySignal | null> {
|
|
784
|
+
const rsi = calculateRSI(data.closes, this.config.period);
|
|
785
|
+
|
|
786
|
+
if (rsi < this.config.oversold) {
|
|
787
|
+
return {
|
|
788
|
+
action: 'BUY',
|
|
789
|
+
symbol: data.symbol,
|
|
790
|
+
confidence: (this.config.oversold - rsi) / this.config.oversold,
|
|
791
|
+
reason: `RSI oversold at ${rsi.toFixed(1)}`,
|
|
792
|
+
metadata: { rsi },
|
|
793
|
+
};
|
|
794
|
+
}
|
|
795
|
+
|
|
796
|
+
if (rsi > this.config.overbought) {
|
|
797
|
+
return {
|
|
798
|
+
action: 'SELL',
|
|
799
|
+
symbol: data.symbol,
|
|
800
|
+
confidence: (rsi - this.config.overbought) / (100 - this.config.overbought),
|
|
801
|
+
reason: `RSI overbought at ${rsi.toFixed(1)}`,
|
|
802
|
+
metadata: { rsi },
|
|
803
|
+
};
|
|
804
|
+
}
|
|
805
|
+
|
|
806
|
+
return null;
|
|
807
|
+
}
|
|
808
|
+
}
|
|
809
|
+
```
|
|
810
|
+
|
|
811
|
+
### Register & Run
|
|
812
|
+
|
|
813
|
+
```typescript
|
|
814
|
+
const engine = new StrategyEngine(db);
|
|
815
|
+
engine.registerStrategy(new RSIStrategy({ period: 14, oversold: 30, overbought: 70 }));
|
|
816
|
+
|
|
817
|
+
// A/B Test Variants
|
|
818
|
+
engine.registerVariant('rsi-strategy', 'aggressive', { oversold: 25, overbought: 75 });
|
|
819
|
+
engine.registerVariant('rsi-strategy', 'conservative', { oversold: 35, overbought: 65 });
|
|
820
|
+
```
|
|
821
|
+
|
|
822
|
+
---
|
|
823
|
+
|
|
824
|
+
## Built-in Strategies
|
|
825
|
+
|
|
826
|
+
| Strategy | Logic | Config |
|
|
827
|
+
|----------|-------|--------|
|
|
828
|
+
| MomentumStrategy | Follow price trends | `lookbackPeriod`, `threshold` |
|
|
829
|
+
| MeanReversionStrategy | Buy dips, sell rallies | `maPeriod`, `deviationMultiplier` |
|
|
830
|
+
| GridStrategy | Place orders at intervals | `gridSize`, `levels`, `spacing` |
|
|
831
|
+
|
|
832
|
+
---
|
|
833
|
+
|
|
834
|
+
## Error Handling
|
|
835
|
+
|
|
836
|
+
All clients throw typed errors:
|
|
837
|
+
|
|
838
|
+
```typescript
|
|
839
|
+
import { FuturesError, InsufficientBalanceError, InvalidOrderError } from 'clodds/trading/futures';
|
|
840
|
+
|
|
841
|
+
try {
|
|
842
|
+
await binance.placeOrder({ ... });
|
|
843
|
+
} catch (error) {
|
|
844
|
+
if (error instanceof InsufficientBalanceError) {
|
|
845
|
+
console.log('Not enough margin');
|
|
846
|
+
} else if (error instanceof InvalidOrderError) {
|
|
847
|
+
console.log('Invalid order params:', error.message);
|
|
848
|
+
} else if (error instanceof FuturesError) {
|
|
849
|
+
console.log('Exchange error:', error.code, error.message);
|
|
850
|
+
}
|
|
851
|
+
}
|
|
852
|
+
```
|
|
853
|
+
|
|
854
|
+
---
|
|
855
|
+
|
|
856
|
+
## Rate Limits
|
|
857
|
+
|
|
858
|
+
| Exchange | Limit | Notes |
|
|
859
|
+
|----------|-------|-------|
|
|
860
|
+
| Binance | 2400/min | Per IP, weight-based |
|
|
861
|
+
| Bybit | 120/min | Per endpoint |
|
|
862
|
+
| Hyperliquid | 1200/min | Per wallet |
|
|
863
|
+
| MEXC | 20/sec | Per IP |
|
|
864
|
+
|
|
865
|
+
All clients automatically handle rate limiting with exponential backoff.
|