Hooks
Hooks in TradeHub allow you to execute custom logic at specific points during a bot’s lifecycle.
They are useful for modifying behavior, injecting custom checks, or extending strategies/plugins without modifying core logic.
Hooks are registered using:
trader.addHook(type, callback, (once = false));type→ The hook type (see list below).callback→ A function to run when the hook is triggered.once→ (Optional) Iftrue, the hook runs only once, then is removed.
🔑 Available Hook Types
Section titled “🔑 Available Hook Types”1. setup
Section titled “1. setup”Runs once after the bot initializes, before the first update cycle.
trader.addHook("setup", () => { log("Bot setup hook triggered.");});2. beforeUpdate
Section titled “2. beforeUpdate”Runs before each update() execution.
Useful for pre-update checks or logging.
trader.addHook("beforeUpdate", () => { log("Before update: Candle close =", candle.close);});3. afterUpdate
Section titled “3. afterUpdate”Runs after each update() execution.
trader.addHook("afterUpdate", () => { log("After update: Update completed.");});4. beforeOrder
Section titled “4. beforeOrder”Runs before placing any order (manual or automated).
- Receives the order object (similar to CCXT order format) as its first parameter.
- If the hook returns
false, the order will be canceled.
trader.addHook("beforeOrder", (order) => { log("Before Order:", order);
// Example: Prevent buy orders above a certain price if (order.side === "buy" && order.price > 50000) { log("Canceled order: Price too high."); return false; // Cancels the order }});5. afterOrder
Section titled “5. afterOrder”Runs after any order is placed or updated. Receives the order object as its first parameter.
trader.addHook("afterOrder", (order) => { log("Order placed/updated:", order);});6. tick
Section titled “6. tick”Runs on every market tick (price update), regardless of updateTrigger.
Useful for high-frequency tasks or external monitoring.
trader.addHook("tick", () => { log("Tick hook: Price =", candle.close);});7. end
Section titled “7. end”Runs once when the bot session ends (manual stop or completion of backtest).
trader.addHook("end", () => { log("Bot session ended.");});📌 Hook Execution Order
Section titled “📌 Hook Execution Order”The hooks run in the following sequence for each cycle:
setup → beforeUpdate → update() → afterUpdate → (orders placed) → beforeOrder → afterOrder → tickgraph TD
A["Bot Starts"] --> B["setup hook"]
B --> C["beforeUpdate hook"]
C --> D["update()"]
D --> E["afterUpdate hook"]
E --> F["End of Cycle"]
F --> C
F -->|Bot Stopped| G["end hook"]
H["Price Tick Event"] --> I["tick hook"]
J["Order Placed (anytime)"] --> K["beforeOrder hook"]
K --> L{"Canceled?"}
L -->|Yes| M["Skip Order"]
L -->|No| N["Execute Order"]
N --> O["afterOrder hook"]
🧾 Order Hooks
Section titled “🧾 Order Hooks”Order hooks (beforeOrder and afterOrder) use an order object similar to CCXT order format, for example:
{ "id": "12345", "timestamp": 1698765432000, "datetime": "2024-07-01T12:30:32Z", "status": "open", "symbol": "BTC/USDT", "type": "limit", "side": "buy", "price": 35000, "amount": 0.1, "filled": 0.0, "remaining": 0.1}✅ Example: Combined Hooks
Section titled “✅ Example: Combined Hooks”trader.addHook("setup", () => log("Bot initialized."));
trader.addHook("beforeUpdate", () => log("Checking market before update."));
trader.addHook("beforeOrder", (order) => { if (order.side === "sell" && order.price < 30000) { log("Sell order too low! Canceling..."); return false; }});
trader.addHook("afterOrder", (order) => log("Order confirmed:", order));Hooks are a powerful way to customize bot behavior, enforce trading rules, and extend functionality without modifying core scripts.