diff --git a/.env.example b/.env.example index a8238d3..eb9f490 100644 --- a/.env.example +++ b/.env.example @@ -1,14 +1,36 @@ +# UI language (zh | en) +LANG=zh + # Exchange selection -EXCHANGE=aster # Pick aster (default) or grvt/lighter/backpack/paradex +EXCHANGE=aster # Pick aster (default) or standx/grvt/lighter/backpack/paradex/nado # Aster API credentials ASTER_API_KEY= ASTER_API_SECRET= +# StandX authentication (set when EXCHANGE=standx) +STANDX_TOKEN= +STANDX_SYMBOL=BTC-USD +# STANDX_BASE_URL=https://perps.standx.com +# STANDX_WS_URL=wss://perps.standx.com/ws-stream/v1 +# STANDX_SESSION_ID= +# Optional: request signing key (ed25519 private key, supports hex or base58 format) +# STANDX_REQUEST_PRIVATE_KEY= +# Token expiry configuration (recommended method: creation date + validity days) +# Get these values when generating API token at https://standx.com/user/session +# STANDX_TOKEN_CREATE_DATE=2026-01-15 # Token creation date (YYYY-MM-DD format) +# STANDX_TOKEN_VALIDITY_DAYS=30 # Token validity period in days +# Legacy method: direct expiry timestamp (Unix seconds) +# STANDX_TOKEN_EXPIRY=1737092800 + # Core trading symbol and sizing TRADE_SYMBOL=BTCUSDT # Trading pair symbol TRADE_AMOUNT=0.001 # Base order quantity (base asset, e.g. BTC) +# Swing Trading +SWING_DIRECTION=short # short | long | both +SWING_STOP_LOSS_PCT=0.05 # 0.05 = 5% + # Risk management (USD amounts unless noted) LOSS_LIMIT=0.04 # Max loss per trade in USDT before forced close TRAILING_PROFIT=0.2 # Trailing stop activation profit (USDT) @@ -37,6 +59,26 @@ MAKER_REFRESH_INTERVAL_MS=500 # Maker refresh cadence (ms) MAKER_MAX_CLOSE_SLIPPAGE_PCT=0.05 # Maker close slippage guard (fallbacks to MAX_CLOSE_SLIPPAGE_PCT) MAKER_PRICE_TICK=0.1 # Maker price tick size (defaults to PRICE_TICK) +# Maker-points Binance depth imbalance monitor +MAKER_POINTS_BINANCE_DEPTH_WINDOW_BPS=3 # Binance depth monitor window around best bid/ask (bps) +MAKER_POINTS_BINANCE_DEPTH_IMBALANCE_RATIO=9 # Imbalance threshold ratio (e.g. 9 => one side >= 9x) + +# Grid strategy defaults +GRID_LOWER_PRICE=25000 # Grid lower bound price (quote currency) +GRID_UPPER_PRICE=35000 # Grid upper bound price +GRID_LEVELS=10 # Number of grid levels between bounds (>=2) +GRID_ORDER_SIZE=0.001 # Quantity per grid order (base asset units) +GRID_MAX_POSITION_SIZE=0.01 # Max inventory the grid may hold (base units) +GRID_REFRESH_INTERVAL_MS=1000 # Grid evaluation cadence (ms) +GRID_MAX_LOG_ENTRIES=200 # Grid trade log length (defaults to MAX_LOG_ENTRIES when unset) +GRID_DIRECTION=both # Order direction: both | long | short +GRID_STOP_LOSS_PCT=0.01 # Stop loss trigger percentage beyond bounds (0.01 => 1%) +GRID_RESTART_TRIGGER_PCT=0.01 # Restart buffer percentage inside bounds +GRID_AUTO_RESTART_ENABLED=true # Automatically resume grid when price re-enters range +GRID_MAX_CLOSE_SLIPPAGE_PCT=0.05 # Close-order slippage guard relative to mark price +# GRID_PRICE_TICK=0.1 # Optional override for grid price tick (falls back to PRICE_TICK) +# GRID_QTY_STEP=0.001 # Optional override for grid quantity step (falls back to QTY_STEP) + # GRVT authentication (set when EXCHANGE=grvt) GRVT_API_KEY= GRVT_API_SECRET= @@ -93,12 +135,10 @@ EDGEX_PRIVATE_KEY= # Provide the EVM private key & wallet address for onboarded accounts. # When EXCHANGE=paradex these values are used automatically. +PARADEX_SYMBOL=BTC-USD-PERP PARADEX_PRIVATE_KEY= PARADEX_WALLET_ADDRESS= -# Symbol defaults to TRADE_SYMBOL if omitted. Use ccxt unified format like BTC-USD-PERP. -# PARADEX_SYMBOL=BTC-USD-PERP - # Enable testnet endpoints by setting to "true"; defaults to false (mainnet). # PARADEX_SANDBOX=false @@ -110,3 +150,36 @@ PARADEX_WALLET_ADDRESS= # Enable verbose adapter logging: set to "1" or "true" # PARADEX_DEBUG=false + +# Nado exchange configuration (Ink mainnet) +# Requires a linked signer private key + your original subaccount owner EVM address. +# When EXCHANGE=nado these values are used automatically. + +NADO_ENV=inkMainnet # inkMainnet | inkTestnet +NADO_SYMBOL=BTC-PERP # Trading product symbol (e.g., BTC-PERP / ETH-PERP) +NADO_SIGNER_PRIVATE_KEY= # 32-byte 0x-prefixed private key (0x...) +NADO_SUBACCOUNT_OWNER= # EVM address of the subaccount owner (0x...) +NADO_SUBACCOUNT_NAME=default # Subaccount name (bytes12, default "default") + +# Optional: market-order slippage buffer (used for IOC limit-as-market, e.g. 0.01 => 1%) +NADO_MARKET_SLIPPAGE_PCT=0.01 + +# Optional: stop trigger source for STOP_MARKET orders (oracle | last | mid) +NADO_STOP_TRIGGER_SOURCE=oracle + +# Optional: how to handle orders smaller than Nado min_size (USDT0 notional) +# - adjust: round quantity up to the minimum allowed size (default) +# - reject: throw an error instead of auto-adjusting +NADO_MIN_SIZE_POLICY=adjust + +# Optional endpoint overrides +# NADO_GATEWAY_WS_URL=wss://gateway.prod.nado.xyz/v1/ws +# NADO_SUBSCRIPTIONS_WS_URL=wss://gateway.prod.nado.xyz/v1/subscribe +# NADO_ARCHIVE_URL=https://archive.prod.nado.xyz/v1 +# NADO_TRIGGER_URL=https://trigger.prod.nado.xyz/v1 +# NADO_DEBUG=false + +# Telegram notification configuration +# TELEGRAM_BOT_TOKEN= # Telegram bot token from @BotFather +# TELEGRAM_CHAT_ID= # Chat ID to receive notifications +# TELEGRAM_ACCOUNT_LABEL= # Account label to distinguish multiple bot instances (e.g., "Account-A") diff --git a/.gitignore b/.gitignore index 87ff300..3f3d336 100644 --- a/.gitignore +++ b/.gitignore @@ -33,3 +33,6 @@ report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json # Finder (MacOS) folder config .DS_Store + +.tmp +.tmp/* \ No newline at end of file diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..60653ae --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,12 @@ +# RitMEX Bot - Claude Instructions + +## Package Manager + +**必须使用 Bun** - 这个项目使用 Bun 作为包管理器和运行时。所有能用 bun 执行的命令都必须使用 bun: + +- 安装依赖: `bun install` +- 运行脚本: `bun run