Frequently Asked Questions
Quick answers to common questions about Wealth trading bot
General Questions
What is funding rate arbitrage?
Funding rate arbitrage exploits the difference in funding rates between perpetual futures exchanges. When one exchange has a high positive funding rate and another has a lower (or negative) rate for the same asset, you can:
- Go long on the exchange with the lower/negative rate (receive funding or pay less)
- Go short on the exchange with the higher rate (receive funding)
Since positions are hedged (equal and opposite), you're delta-neutral — price movements don't affect you, but you collect the funding rate difference.
📖 Learn more: Trading Strategy
Is this risk-free?
No. While delta-neutral positions eliminate directional price risk, other risks remain:
| Risk | Description | Mitigation |
|---|---|---|
| Liquidation | Extreme price moves can liquidate one leg | Use conservative leverage (5-10x) |
| Exchange risk | Exchange hack, downtime, or insolvency | Diversify across exchanges |
| Execution risk | Partial fills leaving unhedged exposure | Atomic execution with rollback |
| Funding reversal | Funding rates can flip direction | Exit strategy with narrow_spread_exit_periods |
| Slippage | Entry/exit costs eating into profits | Min spread thresholds, slippage limits |
📖 Learn more: Strategy Formulas
How much capital do I need?
Minimum recommended: $5,000–$10,000 per exchange
With smaller amounts:
- Position sizes are too small for meaningful returns
- Fixed costs (fees) eat a larger percentage of profits
- Diversification across multiple pairs is limited
Optimal: $20,000+ total across exchanges for better position sizing and diversification.
Which exchanges are supported?
| Exchange | Type | Funding Interval |
|---|---|---|
| Binance Futures | Centralized | 8 hours |
| Bybit | Centralized | 4-8 hours* |
| HyperLiquid | Decentralized | 1 hour |
| Aster | Decentralized | 4-8 hours* |
*Bybit and Aster funding intervals vary per symbol (fetched automatically by the bot)
📖 Setup: Getting Started
Paper trading vs Live trading — what's the difference?
| Mode | Orders | Fills | Use Case |
|---|---|---|---|
| Paper | Simulated | Instant at mark price | Testing, learning |
| Live | Real exchange orders | Actual market execution | Production |
| Dryrun | Logged only | None | Strategy validation |
Start with paper mode to understand the bot's behavior before risking real funds.
# Paper trading (default)
wealth run
# Live trading
export WEALTH__EXECUTION__MODE=live
wealth run
Configuration Questions
What's a good min_funding_spread setting?
| Setting | Risk/Reward | Best For |
|---|---|---|
0.02 (2 bps) | Low profit, high frequency | High-volume, low-fee accounts |
0.04 (4 bps) | Balanced | Most users (default) |
0.06 (6 bps) | Higher profit, fewer trades | Conservative, higher fees |
0.10 (10 bps) | Very selective | VIP fee tiers only |
Remember: This is the minimum spread before accounting for fees. The bot also calculates expected value (EV) factoring in all costs.
Should I use Kelly Criterion for position sizing?
Yes for most users. Kelly Criterion dynamically sizes positions based on:
- Win probability (historical funding capture rate)
- Expected return vs. risk
Use fixed sizing (use_kelly_criterion = false) if you prefer:
- Predictable, consistent position sizes
- Simpler mental accounting
- New to the strategy
[trading]
use_kelly_criterion = true
kelly_fraction = 0.25 # Quarter-Kelly (conservative)
How do I set leverage?
Conservative: 5-10x (recommended for beginners) Moderate: 10-15x (experienced traders) Aggressive: 15-20x (requires active monitoring)
[leverage]
default = 10
[leverage.overrides]
BTCUSDT = 5 # Lower for BTC (less volatile)
SOLUSDT = 8 # Medium for SOL
⚠️ Never use maximum leverage unless you fully understand liquidation risks and have stop-losses.
What does max_exchange_utilization do?
Limits total capital deployed per exchange as a percentage of balance:
[trading]
max_exchange_utilization = 0.50 # Use max 50% of exchange balance
Why limit?
- Reserve capital for margin maintenance during volatility
- Allow opening new positions when opportunities arise
- Prevent over-concentration on one exchange
Operations Questions
How do I check if the bot is running correctly?
# Check health endpoint
curl http://localhost:9090/health | jq
# View current positions
wealth positions
# Check balances
wealth balance
# Validate configuration
wealth verify
📖 More: Monitoring Guide
Why isn't the bot opening positions?
Common reasons:
-
Spread too low — Current funding spreads don't meet
min_funding_spreadwealth funding # Check current rates -
Insufficient balance — Not enough margin on exchanges
wealth balance -
Max positions reached — Already at
max_concurrent_positionslimitwealth positions -
Paper mode — Running in simulation (positions won't show on exchange)
wealth config show | grep execution.mode -
Pair not configured — Symbol not in
[[instruments]]config
📖 Debug: Troubleshooting
How do I close all positions?
# Close all positions across all exchanges (requires confirmation)
wealth close --all --confirm
# Close positions for a specific symbol
wealth close --symbol BTCUSDT --confirm
# Close positions on a specific exchange
wealth close --exchange binance --all --confirm
Can I run multiple bot instances?
Not recommended with the same API keys. Issues:
- Race conditions on position sizing
- Conflicting order management
- Rate limit exhaustion
If needed:
- Use separate API keys per instance
- Configure different symbols per instance
- Use different
service_namefor observability
How do I update the bot?
# Download latest release
curl -L https://github.com/thiras/wealth/releases/latest/download/wealth-linux-x86_64 -o wealth
# Make executable
chmod +x wealth
# Verify version
./wealth --version
# Restart
./wealth run
⚠️ Check Changelog for breaking changes before updating.
Troubleshooting Questions
"Timestamp out of sync" error?
Your system clock is drifting. Exchanges reject requests with timestamps >1 second off.
# Sync clock
sudo ntpdate -s time.nist.gov
# Or install chrony (recommended)
sudo apt install chrony
sudo systemctl enable chrony
"Margin insufficient" error?
Not enough balance for the requested position size.
# Check balances
wealth balance
# Reduce position size in config
[trading]
max_position_usd = 5000 # Lower this
Or transfer more funds to your futures wallet on the exchange.
WebSocket keeps disconnecting?
-
Check internet stability
ping fapi.binance.com -
Verify firewall allows WebSocket (port 443)
-
Check exchange status pages for maintenance
The bot auto-reconnects, but persistent issues indicate network problems.
How do I read the logs?
# Run with verbose logging
wealth run --verbose
# Or set log level via environment
RUST_LOG=debug wealth run
# Save to file
wealth run 2>&1 | tee bot.log
Key log patterns:
Opportunity detected— Found potential tradePosition opened— Trade executedFunding collected— Received funding paymentPosition closed— Exited trade
📖 More: Logging Guide
Performance Questions
What returns can I expect?
Typical ranges (highly variable based on market conditions):
| Market Condition | Annualized Return |
|---|---|
| High volatility (bull/bear) | 20-50% APY |
| Normal conditions | 10-25% APY |
| Low volatility (sideways) | 5-15% APY |
Factors affecting returns:
- Funding rate spreads (market-dependent)
- Exchange fee tier (VIP levels reduce costs)
- Position sizing efficiency
- Number of active pairs
⚠️ Past performance doesn't guarantee future results. Funding rates are highly variable.
How can I reduce fees?
- Upgrade exchange tier — VIP levels significantly reduce fees
- Use maker orders — Lower fees than taker orders
- Choose HyperLiquid — 0% maker fees
- Increase minimum spread — Only take higher-margin opportunities
[risk.fees.binance]
maker = 0.0001 # Update to your actual VIP tier
taker = 0.0003
See Also
- Getting Started - Initial setup guide
- Configuration Guide - All settings explained
- Troubleshooting - Problem resolution
- Trading Strategy - Strategy deep dive