Delta Farmer
π€ Delta-neutral trading automation for perp DEX airdrops. Farm points while you sleep.
Install / Use
npx skills add vladkens/delta-farmerInstalls into whichever agent you are using.
README
delta-farmer
<p align="center"> English Β· <a href="readme.ru.md">Π ΡΡΡΠΊΠΈΠΉ</a> Β· <a href="readme.uk.md">Π£ΠΊΡΠ°ΡΠ½ΡΡΠΊΠ°</a> </p> <p align="center"><img src=".github/logo.svg" width="200" /></p> <div align="center"><img src="https://badges.ws/badge/-/%40uid127/000?icon=x&label" alt="x" /> <img src="https://badges.ws/badge/-/Telegram%20Channel/2CA5E0?icon=telegram&label" alt="tg channel" /> <img src="https://badges.ws/badge/-/Telegram%20Chat/2CA5E0?icon=telegram&label" alt="tg chat" />
</div>Automated delta-neutral trading for crypto points farming. Run classic two-sided hedges or balanced multi-symbol baskets across perpetual DEXs to maximize volume and points with limited directional risk.
- π― Delta-neutral by design β matched long/short positions minimize directional exposure
- π§© Multi-symbol basket mode β trade 2β4 symbols in one cycle, each leg staying neutral
- π Multi-account management β one config file drives all your accounts simultaneously
- π₯ Grouped trading β split accounts into independent strategy groups
- π Real-time safety checks β emergency close if ROI limits are breached
- π Encrypted key storage β private keys never sit in plaintext
- π¨ Telegram notifications β get alerts on trade start, stop, errors, and periodic reports
- π² Configurable sizing and timing β randomized sizes and durations to vary on-chain patterns
What is delta-farmer?
Delta-farmer is a trading bot that automatically opens matched long and short positions on perpetual DEXs. The idea is simple: by holding equal opposite-side trades, your net market exposure stays near zero β you're farming trading volume and protocol points rather than betting on price direction.
Each trading cycle, the bot:
- Opens a long position on one account and a short on another (or splits across multiple assets)
- Holds them for a configurable duration while monitoring risk
- Closes everything cleanly and waits before the next cycle
- Sends you a Telegram summary if configured
You control the size, timing, leverage, and which exchange to run on. The bot handles the rest.
Supported Exchanges
| Name | Network | Link | Referral | | -------- | ------- | --------------------------------------------- | ------------------------------------------------------------------ | | Ethereal | EVM | ethereal.trade | Sign up | | HyENA | EVM | hyena.trade | Sign up | | Nado | EVM | nado.xyz | Sign up | | Omni | EVM | variational.io | Sign up | | Onyx | EVM | onyx.live | Sign up | | Pacifica | Solana | pacifica.fi | Sign up | | RiseX | EVM | rise.trade | Sign up | | 01.xyz | EVM | 01.xyz | Sign up |
Installation
Step 1 β Install prerequisites
macOS
Open Terminal (Cmd + Space β type "Terminal" β Enter) and run:
xcode-select --install
A dialog will pop up β click "Install". Once done, install uv (official guide):
curl -LsSf https://astral.sh/uv/install.sh | sh
Close and reopen Terminal so the uv command becomes available.
Windows
Open PowerShell (Win + S β type "PowerShell" β Enter) and run:
winget install --id Git.Git -e --source winget
Then install uv (official guide):
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
Close and reopen PowerShell so both git and uv become available.
Step 2 β Download and run
git clone https://github.com/vladkens/delta-farmer.git
cd delta-farmer
That's it. Dependencies are installed automatically on the first run.
Quick Start
Replace <app> with your exchange name throughout: pacifica, omni, ethereal, nado, hyena, onyx, rise, or zero1.
Step 1 β Create a config file
uv run apps/<app>.py config new
This creates configs/<app>.toml pre-filled with sensible defaults. Open the file in any text editor.
Step 2 β Add your private keys
Find the [[accounts]] sections and paste your private keys:
[[accounts]]
name = "acc1"
privkey = "your-private-key-here"
[[accounts]]
name = "acc2"
privkey = "your-private-key-here"
You need at least 2 accounts β one goes long, the other goes short.
Step 3 β Encrypt your keys
uv run apps/<app>.py config encrypt
You'll be prompted for a password. After this step, the raw keys are replaced with encrypted values in the file. You'll enter this password each time you start the bot (or set it in .env β see Private Key Encryption & Passwords).
Step 4 β Start trading
uv run apps/<app>.py trade
Commands
All exchanges share the same command structure. Replace <app> with your exchange name.
# Trading
uv run apps/<app>.py trade # Start automated trading
uv run apps/<app>.py close # Close all open positions
uv run apps/<app>.py info # View account balances & points
uv run apps/<app>.py positions # View current open positions
uv run apps/<app>.py proxy # Check configured proxies
# Statistics
uv run apps/<app>.py stats # All cached periods (cached 1h)
uv run apps/<app>.py stats this # Current period only
uv run apps/<app>.py stats last # Previous period only
uv run apps/<app>.py stats W05 # Specific week/period prefix
uv run apps/<app>.py stats --force # Force-refresh cached stats
uv run apps/<app>.py clean # Delete all cached data
# Config management
uv run apps/<app>.py config new # Create a new config file
uv run apps/<app>.py config new -c my.toml # Create at a custom path
uv run apps/<app>.py config encrypt # Encrypt private keys in config
uv run apps/<app>.py config decrypt # Decrypt to view raw keys
# Help
uv run apps/<app>.py --help
Logs
By default, logs are printed only to the terminal. For trading runs, set
DF_LOG_FILE=1 to also write logs to logs/<timestamp>-<app>.log:
DF_LOG_FILE=1 uv run apps/<app>.py trade
Weekly summary
scripts/weekly.py reads cached stats from .cache. Refresh exchange data first with
uv run apps/<app>.py stats --force when you need fresh numbers.
uv run scripts/weekly.py # All-time summary by exchange
uv run scripts/weekly.py 0 # Latest cached ISO week
uv run scripts/weekly.py -1 # Previous ISO week
uv run scripts/weekly.py W14 # Specific week in the current year
uv run scripts/weekly.py 2026-W14 # Specific ISO week with year
uv run scripts/weekly.py --from W14 --to W22 # Summary for a week range
uv run scripts/weekly.py -P --from W14 --to W22 # Weekly detail inside the range
uv run scripts/weekly.py Hyena # One exchange, all available periods
uv run scripts/weekly.py Hyena 0 # One exchange, latest cached ISO week
uv run scripts/weekly.py -e Hyena # Legacy alias for one exchange
uv run scripts/weekly.py --burn # Burn pivot by ISO week and exchange
uv run scripts/weekly.py --help # Full weekly report help
Exchange-specific commands
uv run apps/omni.py competition # Show Omni competition status
uv run apps/omni.py competition --join # Opt in all configured Omni accounts
uv run apps/hyena.py reward claim # Claim Hyena rewards
uv run apps/hyena.py migrate # Migrate Hyena HyperLiquid accounts to unified mode
uv run apps/onyx.py migrate # Migrate Onyx HyperLiquid accounts to unified mode
Omni competition commands check the active tournament window, join status, eligibility volume, and leaderboard places. Hyena and Onyx migration commands switch HyperLiquid-backed accounts to Unified Account mode when the exchange reports a legacy account mode.
Omni Cloudflare challenges
Omni handles Cloudflare challenges automatically. By default it uses the shared solver gateway,
so no extra configuration is required. To use your own Astrum solver account instead, register
with Astrum, add funds, create an API key, and add it to
configs/omni.toml:
captcha_key = "your-astrum-key"
captcha_key takes priority over the CAPTCHA_KEY value in .env. Leave it unset to use the
shared gateway. Run uv run apps/omni.py config encrypt after adding the key.
Configuration Reference
All settings live in your configs/<app>.toml file. Here is every available parameter:
Core settings
| Parameter | Default | Description | | ------------------- | -------- | ----------------------------------------------------------------
Related Skills
node-connect
385.5kDiagnose OpenClaw Android, iOS, or macOS node pairing, QR/setup code, route, auth, and connection failures.
blender-python-addon
40.5kBlender Python add-on rules for operators, panels, properties, registration, testing, and API-safe scripting
flutter-development-guidelines-cursorrules-prompt-file
40.5kCursor rules for Flutter development with MVVM architecture, Riverpod state management, Material widgets, and Dart style guidelines.
commit-push-pr
140.6kCommit, push, and open a PR
