Solana Arbitrage Bot settings
Every setting the Solana Arbitrage Bot's Expert settings can change, with the same names and help the Strategy page shows. The path is the setting's name in the bot's config file, which is what Raw config and harkctl config show. "Starts at" is a new bot's value (the Balanced starter).
The Solana Arbitrage Bot guide explains what it does, its safety checks and what practice can't show: practice results are not indicative of live results. Live trading is switched on with Go live, never here.
It has no Style, Speed, take profit or stop loss. Instead you start from one of three starters (Balanced is the bot's own defaults), then change anything below:
| Starter | What it does |
|---|---|
| Cautious | A 0.0001 SOL minimum profit, a 0.2 SOL per-trade cap and daily caps on fees. Stops after 100 failed trades in a row. |
| Balanced | The bot's own defaults: 0.000001 SOL minimum profit, a 0.5 SOL per-trade cap, no daily fee caps and no failure stop. |
| Aggressive | The same minimum profit, a 1 SOL per-trade cap and more trades a minute. More trades, more fees. |
Your limits always stay inside the ceilings your deployment allows (the bounds under "Set for you"). A change past a ceiling is refused with the reason. A ceiling of 0 means none. The daily fee caps and the failure stop start off (0); set a number to turn one on.
Watchlist
| Setting | What it does | Values | Starts at |
|---|---|---|---|
Watchlistwatch.tokens | The tokens to arbitrage, by contract address. Each round trip buys one of them on one pool and sells it on another, starting and ending in SOL. | list of token addresses | 0 tokens |
Profit and size
| Setting | What it does | Values | Starts at |
|---|---|---|---|
Minimum profit per tradearb.min_profit_sol | What a trade must make after every cost: venue fees, network and priority fees, and the tip when one is paid. It is also the floor written into each transaction, so a trade that would make less fails instead. A trade pays the relay or fast-sender tip only when it makes more than the tip plus this; a smaller one goes without a tip through the relay's tip-free path, or is skipped without a relay key. | number0 to 10 SOL | 0.000001 SOL |
Smallest tradearb.min_trade_solAdvanced only | The least SOL a round trip puts in. | number0.001 to 100 SOL | 0.01 SOL |
Per-trade caparb.max_trade_sol | The most SOL one round trip puts in. It comes back in the same transaction, or the transaction fails. | number0.001 to 100 SOL | 0.5 SOL |
Pool state at most this oldarb.max_state_age_slotsAdvanced only | A pool whose state is older than this many slots isn't traded on. | whole number1 to 150 slots | 4 slots |
Read the pools when the feed showsarb.screen_pct_of_min_profitAdvanced only | The feed's prices must show at least this share of your minimum profit before the bot reads the pools to check. | number0 to 100 % | 50 % |
Close the token account in the same tradearb.close_token_accountAdvanced only | No token is held between trades: the account a trade opens is closed in the same transaction and its rent comes back. | on / off | On |
Wait before the same pools againarb.pair_cooldown_msAdvanced only | One pair of pools isn't tried again sooner than this. | whole number0 to 600000 ms | 400 ms |
Pool reads per second at mostarb.max_reads_per_secondAdvanced only | One read for each round trip the bot looks at. | number0.1 to 100 | 5 |
Limits
| Setting | What it does | Values | Starts at |
|---|---|---|---|
Your time zone (hours from UTC)global.utc_offset_hoursAdvanced only | Where midnight is for the daily caps. | whole number-12 to 14 | 0 |
Fees and tips per day at mostlimits.max_fee_tip_sol_per_day | Stop trading for the day once fees and tips paid today reach this. 0 turns it off (the default). | number0 to 1000 SOL | 0 SOL |
Failed trades' fees per day at mostlimits.max_failed_cost_sol_per_day | Stop trading for the day once the fees of today's failed trades reach this. 0 turns it off (the default): many trades fail, and what counts is that your returns beat every fee. | number0 to 1000 SOL | 0 SOL |
Trades per minute at mostlimits.max_trades_per_minute | The most round trips it sends in any minute. | whole number1 to 10000 | 10 |
Stop after this many failed trades in a rowlimits.max_consecutive_failures | Trading stops after this many failed trades in a row, until you start the bot again. 0 turns it off (the default). | whole number0 to 1000 | 0 |
Racing
| Setting | What it does | Values | Starts at |
|---|---|---|---|
Racingrace.enabled | On: react to the newest (processed) pool state. Off: wait for confirmed state. Either way it never trades ahead of anyone's pending trade. | on / off | On |
Lookup tables
| Setting | What it does | Values | Starts at |
|---|---|---|---|
Reuse lookup tables other transactions usealt.reuse_external | Reuse the address lookup tables other transactions on these pools use, each checked on chain first. | on / off | On |
Discovery
| Setting | What it does | Values | Starts at |
|---|---|---|---|
Find pools from the transaction streamdiscovery.grpcAdvanced only | Learn the watched tokens' pools from their transactions as they happen. | on / off | On |
Tokens per stream filterdiscovery.grpc_keys_per_filterAdvanced only | How many watched tokens share one filter on the transaction stream. | whole number1 to 1000 | 10 |
Find pools from recent transactionsdiscovery.backfillAdvanced only | Also look at each token's recent transactions (read-only RPC). | on / off | On |
Recent transactions per tokendiscovery.backfill_signaturesAdvanced only | How many of each token's recent transactions are looked at. | whole number1 to 1000 | 40 |
Look again everydiscovery.rescan_minutesAdvanced only | How often each token's recent transactions are looked at again. | whole number1 to 10080 min | 60 min |
RPC requests per second at mostdiscovery.rpc_per_secondAdvanced only | For finding pools and reading pools the feed doesn't carry. | number0.1 to 100 | 2 |
Read DAMM v1 pools everydiscovery.rpc_poll_msAdvanced only | Meteora DAMM v1 pools aren't on the feed, so they are read this often. | whole number250 to 60000 ms | 2000 ms |
Fees
| Setting | What it does | Values | Starts at |
|---|---|---|---|
Priority feeglobal.cu_price_micro_lamportsAdvanced only | What you pay validators per compute unit. Paid whether the trade lands or fails. | whole number0 to 50000000 µlamports/CU | 50,000 µlamports/CU |
Compute limitglobal.cu_limitAdvanced only | The most compute units a round trip may use. | whole number50000 to 1400000 | 400,000 |
Send every trade through the AllenHark relay (adds a small tip per trade)relay.tip_all | On: every buy, sell and clean-up goes through the relay, for a 0.001 SOL tip each (counted in your fees). Off: only buys and urgent exits go through the relay; the rest are sent without a tip. | on / off | On |
Relay tiprelay.tip_solAdvanced only | The tip per trade through the AllenHark relay, paid only when a trade lands and only on trades that make more than the tip plus your minimum profit. At least 0.001 SOL. Leave it empty for the bot's own default. Optional. | number0.001 to 0.1 SOL | 0.001 SOL |
Turn off the AllenHark relayrelay.relay_opt_outAdvanced only | Your choice: on means the bot stops sending through the AllenHark relay and uses only the fast senders you added. Leave it off unless you know you want that. | on / off | Off |
Fast senderssendersAdvanced only | Your own accounts with other fast senders (Nozomi, 0slot, Jito, Helius Sender, an RPC). The bot sends each trade through all of them and the relay; with two or more on it pays only one tip per trade. API keys stay on your server. | list of [[senders]] entries | none |
Execution
| Setting | What it does | Values | Starts at |
|---|---|---|---|
Pools it trades onglobal.venuesAdvanced only | PumpSwap, Raydium CPMM, Raydium AMM v4, Meteora DAMM v2 and Meteora DAMM v1 (pumpswap, raydium_cpmm, raydium_amm_v4, meteora_damm_v2, meteora_damm_v1). Empty means all five. | list | none |
Transaction formatglobal.tx_formatAdvanced only | Legacy (sent with lookup tables when it is too big), or the newer v1 format. | “Legacy” (legacy), “v1” (v1) | Legacy |
Re-send as legacy if v1 is refusedglobal.v1_fallbackAdvanced only | Only matters with the v1 format. | on / off | On |
Practice
| Setting | What it does | Values | Starts at |
|---|---|---|---|
Practice balanceglobal.practice_starting_solAdvanced only | The virtual SOL practice starts with. | number0.1 to 10000 SOL | 10 SOL |
Set for you
These are part of the config but are set by AllenHark or elsewhere in the app, so they are read-only in Expert settings.
| Setting | Why you can't change it here |
|---|---|
Live tradingglobal.live | Switched with Go live. |
Wallet fileglobal.payer_keypair_path | Follows your active wallet. |
Watchlist limitwatch.max_tokens | Set by AllenHark for your deployment. Ask support if you need more. |
Per-trade cap allowedbounds.max_trade_sol | Set by AllenHark for your deployment. |
Fees and tips per day allowedbounds.max_fee_tip_sol_per_day | Set by AllenHark for your deployment. |
Failed trades' fees per day allowedbounds.max_failed_cost_sol_per_day | Set by AllenHark for your deployment. |
Trades per minute allowedbounds.max_trades_per_minute | Set by AllenHark for your deployment. |
RPC endpointnode.rpc_uri | Managed by AllenHark. |
gRPC endpointnode.grpc_uri | Managed by AllenHark. |
gRPC tokennode.grpc_x_token | Managed by AllenHark. |
Relay endpointnode.relay | Managed by AllenHark. |
Relay QUIC endpointsnode.relay_quic | Managed by AllenHark. |
Relay API keynode.relay_api_key | Managed by AllenHark. |
Relay QUIC fan-outnode.relay_quic_fanout | Managed by AllenHark. |
Relay tip walletnode.tip_wallet | Managed by AllenHark. |
Relay Dedicatednode.relay_dedicated | Managed by AllenHark. |
Relay Dedicated walletsnode.relay_dedicated_wallets | Managed by AllenHark. |
Relay tip (default)node.tip_lamports | Managed by AllenHark: set to what the relay needs. |
Market feedfeed | Written by your server's agent. |
Bot addressserver.bind | Managed by AllenHark. |
Bot portserver.port | Managed by AllenHark. |
