Skip to content
Join the waitlistWaitlist

Freqtrade

Put Guard in front of Freqtrade's Hyperliquid exchange through ccxt_config. The exact config keys.

Freqtrade trades Hyperliquid through ccxt. Its exchange.ccxt_config is passed to both of Freqtrade’s ccxt instances (sync and async), so the ccxt override goes there.

"exchange": {
"name": "hyperliquid",
"walletAddress": "0xYourAccountAddress",
"privateKey": "0x…API wallet key…",
"privateKey": "0x…client key from Guard…",
"ccxt_config": {
"urls": {"api": {"public": "http://127.0.0.1:8547", "private": "http://127.0.0.1:8547"},
"test": {"public": "http://127.0.0.1:8547", "private": "http://127.0.0.1:8547"}},
"options": {"builderFee": false, "refSet": true}
}
}
"exchange": {
"name": "hyperliquid",
"walletAddress": "0xYourAccountAddress",
"privateKey": "0x...",
"ccxt_config": {
"urls": {
"api": {"public": "http://127.0.0.1:8547", "private": "http://127.0.0.1:8547"},
"test": {"public": "http://127.0.0.1:8547", "private": "http://127.0.0.1:8547"}
},
"options": {"builderFee": false, "refSet": true}
}
}
KeyValueSource
exchange.namehyperliquidFreqtrade exchange notes
exchange.walletAddressyour main account address, 0x + 40 hex digits, not the API wallet’sFreqtrade exchange notes
exchange.privateKeythe Guard client key, 0x + 64 hex digits. Freqtrade’s notes say to use an API wallet key here; behind Guard, the client key takes its placeFreqtrade exchange notes
exchange.ccxt_config.urlsGuard’s URL, for api and testFreqtrade configuration reference; ccxt sign(), set_sandbox_mode()
exchange.ccxt_config.optionsbuilderFee: false, refSet: trueccxt initialize_client(); why: ccxt guide

Freqtrade’s notes also show ccxt_config.options.vaultAddress and subAccountAddress for vaults and sub-accounts. Guard’s support for those is not built.

Guard needs the stop with the entry. Freqtrade sends the entry first and, with stoploss_on_exchange, places its stop after the entry has filled. Under Guard’s default rules such an entry is refused (no_protective_stop).

Freqtrade has its own protections (stoploss, max open trades, StoplossGuard and others). Keep them. Guard is the layer that still holds when Freqtrade’s own logic fails or its config is wrong.

Example. A config change sets stake_amount ten times too high. Freqtrade sends an order worth 30,000 on an account of 2,000. Guard cuts it to the room your limits leave (at most 4,000 in one coin under the default 200% position cap, less if other positions use the 5x leverage room), and the trade opens at that size. Freqtrade’s next status shows the smaller filled amount.

In dry_run mode Freqtrade simulates its own orders and sends none, so Guard sees nothing to judge. To see Guard’s decisions without risk, run Freqtrade live against a Guard in paper mode.

This page as plain Markdown, for people and LLMs: /docs/integrations/freqtrade.md