Signal Bot Strategy Guide: Design, Sizing & Execution
A signal bot is the simplest idea in trading automation with the highest hidden difficulty. The idea: your strategy fires a signal — a TradingView alert, a script, any tool that can call a webhook — and the bot turns it into a real trade on your exchange. No emotions, no missed entries at 3 a.m., no hesitation.
The hidden difficulty: unlike a DCA bot, a signal bot has no opinion of its own. It cannot average down a bad entry, wait for a better price, or bail you out of a weak strategy. Every entry and exit decision belongs to your signal source. If the signals are good, the bot amplifies them with speed and consistency. If the signals are noise, the bot executes that noise flawlessly — all the way to a drained account.
This guide is about the strategy layer: what makes an entry signal worth automating, how to size positions per signal, how to structure take-profit and stop-loss for signal-driven entries, when to choose Custom Signal versus Risk Ratio mode on Freya, and how to test all of it before real money is on the line. If you haven't built a signal bot yet, read How to Create a Signal Bot on Freya Finance first — this guide assumes you know the mechanics and focuses on making them profitable.
Key Takeaways
- A signal bot moves decision ownership outside the platform: your TradingView alert or webhook script decides when to trade, and the bot only executes. Signal quality — not bot configuration — determines your results.
- Good entry signals are specific, infrequent, and testable. A vague alert that fires 30 times a day on a 1-minute chart will lose to fees and noise no matter how well the bot executes it.
- Size positions by fixed risk, not fixed conviction: risking 0.5-2% of allocated capital per signal lets you survive the losing streaks every strategy eventually hits.
- Custom Signal mode means you set the trade amount and TP/SL in Freya and your webhooks say when to act; Risk Ratio mode reads TP/SL from the webhook itself and sizes the position automatically from your fixed risk amount.
- Signal bots have no averaging mechanism, so an exchange-side stop-loss is non-negotiable — it is the only exit that still works when your signal pipeline is delayed, down, or misconfigured.
The dollar amounts and percentages in this guide are worked examples, not recommendations. Crypto trading can lose money — size every bot with funds you can afford to lose, and read the full Risk Disclosure before going live.
What a Signal Bot Is — and Where the Decisions Live
Every automated strategy answers three questions: when to enter, how much to trade, and when to exit. The fundamental difference between bot types is who answers them.
With a DCA bot, all three answers live inside the platform. You configure entry conditions, averaging orders, and take-profit; the bot then runs a self-contained loop that even has a built-in response to being wrong — averaging orders that lower your entry cost when price drops.
A signal bot flips this. The when moves outside: to a TradingView alert, a custom script, or any external tool that can call a webhook URL. Freya's signal bot receives that call and executes within the rules you configured — pair, direction, sizing, and exits. The bot is a fast, disciplined pair of hands; the brain is wherever your signals come from.
| Question | DCA Bot | Signal Bot |
|---|---|---|
| Who decides the entry? | The bot (your configured conditions inside Freya) | Your external signal source (TradingView alert, webhook script) |
| What happens if price drops after entry? | Averaging orders buy more and lower the average entry price | Nothing — the position waits for an exit signal or stop-loss |
| Who decides the exit? | The bot (take profit from average entry, optional stop loss) | Your close signal, or the TP/SL attached to the position |
| Built-in recovery from a bad entry? | Yes — the averaging grid | No — a bad entry is yours to manage via stops |
| What determines profitability? | Configuration quality vs market conditions | Signal quality, sizing discipline, and exit structure |
| Best for | Systematic accumulation in volatile or ranging markets | Traders who already generate signals elsewhere and want automated execution |
This shift in decision ownership is why signal bot strategy is really strategy strategy. The rest of this guide treats the bot as what it is — an execution layer — and focuses on the four design decisions that actually drive results: entry quality, confirmation, sizing, and exit structure.
Signal Sources on Freya: TradingView Alerts and Custom Webhooks
Freya's signal bots accept signals from any source that can call a webhook URL. In practice that means two setups:
TradingView alerts are the most common. You build your condition on a TradingView chart — an indicator crossover, a price level, a Pine Script strategy — and attach your bot's webhook URL to the alert. When the condition fires, TradingView calls the webhook and your bot trades. Note that webhook delivery requires a paid TradingView plan, and on some plans alerts expire and need renewing — both are common causes of "my bot stopped trading" that have nothing to do with the bot.
Custom webhooks cover everything else: your own Python script watching order-flow data, a screener that emits signals, an internal tool. If it can send an HTTP request to a URL, it can drive a Freya signal bot. This is the power-user path — you get complete freedom over the logic, and complete responsibility for its reliability.
Two warnings apply to every source, and Freya's interface shows the first one prominently whenever a strategy uses an external signal source: delays, outages, or inaccurate signals from that source can affect your trades, and Freya cannot vouch for the accuracy of external signals. Your bot executes what arrives, when it arrives. The signal pipeline — alert engine, network, webhook delivery — sits between your strategy and the market, and it is not instant and not infallible. We'll cover the practical consequences in the failure-modes section.
Anyone who has your webhook URL can trigger that action on your bot — including opening or closing positions with real money. Never post them publicly, only paste them into tools you trust, and regenerate a URL immediately if you suspect exposure (regenerating invalidates the old one at once).
Entry Signal Quality: The Variable That Decides Everything
Automation is a multiplier. Multiply a good signal by fast, consistent execution and you get a better strategy than manual trading could achieve. Multiply noise and you get fast, consistent losses. Before automating any signal, put it through three filters.
Filter 1: Is it specific?
A signal worth automating has an exact, mechanical definition: "RSI(14) on the 4-hour chart crosses below 30 while price is above the 200-day EMA" is specific. "Buy the dip when momentum looks weak" is not — and if you can't define it mechanically, an alert can't fire on it consistently, which means you never really know what you're testing.
Specificity also includes the invalidation: at what point is the signal wrong? A signal without a defined invalidation produces positions without a rational stop-loss — you end up placing stops by feel, which defeats the purpose of automating.
Filter 2: Is it infrequent enough to matter?
Signal frequency is a cost. Every trade pays fees, crosses a spread, and risks slippage. A strategy that fires 25 times a day on a 1-minute chart needs each trade to overcome those costs — and on a $500 position paying roughly 0.1% taker fee per side, a round trip costs about $1. Twenty-five trades a day is ~$25/day, or roughly $750/month, in fees alone on a small account. Very few retail signal edges survive that arithmetic.
Higher-timeframe signals (1-hour, 4-hour, daily) fire less often, carry more information per signal, and give your webhook pipeline's few seconds of latency a proportionally smaller impact. As a rule of thumb: if your average expected profit per trade is under about 0.5%, latency and fees will eat a meaningful share of it, and you should question whether the signal belongs in an automated bot at all.
Filter 3: Is it evaluated on closed bars?
TradingView alerts can trigger the moment a condition is touched intra-bar or only once the bar closes. Intra-bar triggers are faster but fire on conditions that often un-happen by the close — RSI dips below 30 for two minutes, your alert fires, and by bar close RSI is back at 34. For most swing-style signal strategies, configuring alerts to fire once per bar close trades a little speed for a large reduction in false signals. Reserve intra-bar alerts for strategies explicitly designed around them, such as level breaks where the touch itself is the event.
Confirmation: One Good Filter Beats Three Mediocre Ones
Raw signals improve dramatically with a single, orthogonal confirmation — a second condition measuring something different from the first.
- Trend filter: only take long signals while price is above a long moving average (for example, the 200-period EMA on your signal timeframe). Mean-reversion entries against a strong downtrend are where oversold signals go to die.
- Volume confirmation: a breakout signal on rising volume carries different information than the same break on thin volume.
- Higher-timeframe agreement: a 1-hour entry signal filtered by 4-hour trend direction keeps you trading with the larger flow.
Build the confirmation into the alert itself (TradingView supports multi-condition alerts, and Pine Script strategies can encode anything), so the webhook only ever fires on confirmed signals — the bot should receive decisions, not raw material.
One warning: confirmation has diminishing — then negative — returns. Each added filter removes losing trades and winning trades, and past two or three conditions you're usually curve-fitting to history. If your backtest only performs with five stacked filters, the edge is probably an illusion.
Position Sizing per Signal: Fixed Risk, Not Fixed Conviction
Sizing is where most signal strategies actually fail — not at entries. The professional standard is fixed fractional risk: every signal risks the same small percentage of allocated capital, commonly 0.5-2%, where "risk" means the loss if the stop is hit, not the position's notional size.
Why so small? Because losing streaks are a statistical certainty, and drawdown math is brutally asymmetric:
| Risk per trade | 10-loss streak drawdown | Gain needed to recover | Survivable? |
|---|---|---|---|
| 1% of capital | ~9.6% | ~10.6% | Yes — routine |
| 2% of capital | ~18.3% | ~22.4% | Yes — uncomfortable |
| 5% of capital | ~40.1% | ~67.0% | Rarely |
| 10% of capital | ~65.1% | ~186.7% | No |
A 45%-win-rate strategy — perfectly viable if winners are twice the size of losers — will hit a 10-loss streak surprisingly often over a few hundred trades. At 1% risk that streak is a bad month; at 10% risk it's the end of the account.
On Freya, how you implement fixed risk depends on the mode. Risk Ratio mode implements it natively: you enter a Fixed Risk Amount in USDT, and the position size is computed automatically per signal from the stop distance. In Custom Signal mode you set a trade amount yourself, so you approximate fixed risk by working backwards: decide your risk budget, divide by your stop-loss percentage, and that's your trade amount. Risking $20 with a 2% stop means a $1,000 position; with a 4% stop, a $500 position.
TP/SL Structure for Signal-Driven Entries
Because a signal bot cannot average down, its exit structure carries all the defensive weight. Three principles:
Every position needs an exchange-side stop-loss. Your close signal depends on a pipeline — alert engine, network, webhook — that can fail exactly when markets move fastest. A stop-loss lives with the position and executes even if the pipeline is dead. Running a signal bot without one means your worst-case loss is undefined.
Think in R multiples. Define your risk per trade (1R = the entry-to-stop distance × position size), then express targets as multiples of it. A 2R target with a 40% win rate is profitable (0.40 × 2 − 0.60 × 1 = +0.2R per trade); a 1R target needs better than 50% wins just to break even before fees. Signals that produce entries near structure — support, breakout levels — naturally support 1.5R-3R targets because the logical stop is close and the logical target is far.
Match exits to how your signal thinks. If your strategy computes levels per setup — swing lows, ATR-based stops, measured moves — those levels belong in the webhook, which is what Risk Ratio mode is for. If your strategy has consistent percentage exits ("always 3% TP, 2% SL"), configuring them once in Freya via Custom Signal mode is simpler and leaves less to go wrong per alert.
One execution detail worth knowing: in Risk Ratio mode the take-profit is placed as a limit order at the price your webhook specified, so it fills without slippage — while the stop-loss triggers as a market order and, like any stop anywhere, can slip in a fast move. Budget for that: your realized loss on a stop-out can be modestly worse than the theoretical fixed risk.
Custom Signal vs Risk Ratio: Choosing Your Configuration Mode
Freya's signal bots run in one of two modes — they can't be combined, and the right choice follows directly from how your signals are built.
Custom Signal ("webhooks, manual TP/SL"): your bot gets an Open Webhook URL and a separate Close Webhook URL. Your alerts say when; you configure what in Freya — the trade amount and your own take-profit and stop-loss levels. This mode also gives your external strategy full exit control: it can send the Close webhook whenever its own exit logic fires, in addition to any TP/SL you set.
Risk Ratio ("fixed risk, auto position size"): your bot gets a single webhook URL. The alert message is a small JSON payload carrying the take-profit and stop-loss prices; entry is taken at market when the signal fires. Instead of a trade amount you set a Fixed Risk Amount, and the position size is calculated automatically from the entry-to-stop distance — the trade amount displays as dynamic because it's computed per signal. Exits are then handled by the TP/SL from the webhook, so there is no separate Close URL.
| Custom Signal | Risk Ratio | |
|---|---|---|
| Webhook URLs | Two (Open + Close) | One (entry signal with JSON payload) |
| Who sets TP/SL | You, in the bot's order settings | The webhook payload, per signal |
| Position size | Fixed trade amount you configure | Auto-calculated from Fixed Risk Amount and stop distance |
| Risk per trade | Varies with stop placement unless you adjust manually | Approximately constant by design |
| Exit signal from your strategy | Yes — via the Close URL | No — TP/SL close the position |
| Best for | Strategies with consistent percentage exits, or external exit logic | Strategies that compute per-setup levels (structure, ATR, swing points) |
A practical rule: if your Pine Script or signal logic already calculates where the stop belongs for this specific setup, use Risk Ratio and let sizing follow the stop. If your edge is in entry timing and your exits are a fixed recipe, use Custom Signal and keep the alert as simple as possible.
Position size in Risk Ratio mode is your fixed risk divided by the stop distance — so a very tight stop produces a very large position. A $20 risk with a 2% stop is a $1,000 position; the same $20 with a 0.25% stop is an $8,000 position. Make sure your strategy can't emit stops so tight that the computed size exceeds what your account, or your nerves, can actually carry — and remember that stop-loss slippage scales with position size.
Worked Example: A Risk Ratio Strategy With Real Numbers
Let's make this concrete with a complete setup. All numbers are illustrative.
The trader: has a TradingView strategy on the 4-hour ETH/USDT chart. It enters long on a moving-average crossover confirmed by price holding above a rising 200-EMA, places the stop under the most recent swing low, and targets 2R.
The allocation: $2,000 of trading capital assigned to this bot. Risk per trade: 1%, so the bot's Fixed Risk Amount is $20.
Signal 1. The alert fires with ETH at $2,500. The swing-low stop is $2,450 (2% below); the 2R target is $2,600.
- Risk per ETH = $2,500 − $2,450 = $50
- Position size = $20 ÷ $50 = 0.4 ETH (a $1,000 position — 50% of allocated capital, at 2% stop distance)
- If the stop hits: 0.4 × $50 = −$20 (plus fees, plus any stop slippage)
- If the target hits: 0.4 × $100 = +$40
Signal 2, a week later. ETH at $2,600, but this time the swing low is close: stop $2,574 (1% below), target $2,652.
- Risk per ETH = $26
- Position size = $20 ÷ $26 ≈ 0.77 ETH (a ~$2,000 position — the entire allocation)
- Same $20 at risk — but notice the notional doubled because the stop halved. This is the Risk Ratio trade-off in action, and why the tight-stop sanity check above matters.
Twenty trades later. Suppose the strategy's live stats land near its backtest: 45% win rate at 2R. Expectancy per trade = (0.45 × $40) − (0.55 × $20) = +$7, so twenty trades produce roughly +$140 before fees — about 7% on the $2,000 allocation — while no single loss ever exceeded ~1% of capital. Compare that with the same signals traded at a fixed $1,000 notional regardless of stop distance: the wide-stop trades would have risked $20 while the tight-stop trades risked only $10, cutting the profit contribution of your best setups roughly in half. Consistent risk is what makes a modest edge compound.
And a sobering flip side: the same twenty trades could plausibly arrive as 6 wins and 14 losses (streaks cluster). That's 6 × $40 − 14 × $20 = −$40, about −2% — annoying, survivable, and exactly why the risk was capped at 1% per signal.
The Backtest-Before-Live Workflow
You cannot directly backtest a webhook — the entry decisions live outside the platform, so no backtester can know when your alert would have fired. The honest workflow tests each layer where it lives:
-
Backtest the strategy at its source. If your signals come from a TradingView Pine Script strategy, run TradingView's strategy tester across several years and several market regimes — bull, bear, and sideways. Look at win rate, average R, worst losing streak, and maximum drawdown. If your source is a custom script, backtest its logic against historical data before it ever sends a live webhook.
-
Cross-check indicator logic in Freya's backtester. If your signal is built from standard indicators (RSI, EMA crossovers, MACD and similar), recreate the equivalent indicator-based bot in Freya and backtest it on your exact pair and timeframe. This validates the idea against the same data your live bot will trade — see How to Backtest Your Crypto Trading Strategy for the full methodology.
-
Stress the numbers with costs. Re-run your expectancy after subtracting realistic fees per round trip and a slippage allowance on stops. Strategies with sub-0.5% average profit per trade often flip from profitable to break-even at this step — better to learn that here.
-
Go live at minimum size. Run the actual bot with the smallest viable sizing for two to four weeks. You're not testing profitability yet — twenty trades prove nothing statistically — you're testing the pipeline: do alerts fire when they should, does the webhook arrive, do fills and exits match intent? Compare each live trade against what your backtest logic says should have happened, then scale only when the pipeline is boring.
A month of small live trades can't confirm your edge — sample sizes that small are dominated by luck. What it can confirm is that your alert conditions, webhook delivery, mode configuration, and TP/SL placement all behave exactly as designed. Separate the two questions: statistics validate the strategy; live testing validates the plumbing.
Common Failure Modes (and How to Avoid Them)
1. Over-trading on noisy alerts
The most common death: an alert on a low timeframe that fires constantly. Each signal looks reasonable; collectively they're noise plus fees. If your bot took more than a handful of trades today, ask whether each one carried real information. Fix: raise the timeframe, add one trend filter, use once-per-bar-close alerts, and re-run the fee arithmetic from the entry-quality section.
2. No stop-loss ("my close signal is my stop")
A close signal is software; a stop-loss is an order on the exchange. When your alert expires, your TradingView plan lapses, or your script hangs — precisely the moments that correlate with volatility — the close signal doesn't come. Fix: every position carries an exchange-side stop. In Risk Ratio mode this is structural; in Custom Signal mode, set it before launch.
3. Ignoring latency and outage reality
Between your condition being true and your order reaching the exchange sit several hops, each adding delay measured in seconds — and any of them can briefly fail. For a 4-hour strategy this is rounding error; for a scalp chasing 0.3% it's fatal. Freya's own UI warns that delays, outages, or inaccurate external signals can affect trades. Fix: trade timeframes where seconds don't matter, and accept that missed entries (flat, no loss) are tolerable while missed exits are what stops exist for.
4. Leaked or stale webhook URLs
A webhook URL in a public repo, shared chat, or screenshot is an open invitation for someone to trigger trades on your account. Equally common: regenerating a URL and forgetting to update the alert, so signals silently go nowhere. Fix: treat URLs like passwords, regenerate on any suspicion, and after every regeneration update your alerts and send a test signal.
5. Mode/alert mismatch
Custom Signal expects the Open URL on entry alerts and the Close URL on exit alerts; Risk Ratio expects one URL with a correctly formatted JSON message carrying TP/SL. Crossed wires — the Close URL on an entry alert, a Risk Ratio payload missing its levels — produce bots that do nothing or do the wrong thing. Fix: after any change, fire one deliberate test signal and confirm the bot's response before trusting it with size.
6. Scaling before the pipeline is proven
Two good weeks at small size feel like validation; statistically they're nearly meaningless, and increasing size 10x also scales slippage and your emotional response to drawdowns. Fix: scale in steps, only after both the plumbing is flawless and your live results across a real sample are consistent with your backtest.
Frequently Asked Questions
What is a crypto signal bot and how does it work?
A crypto signal bot is an automated executor that trades when it receives an external signal, rather than deciding for itself when to enter. The strategy logic lives outside the bot — in a TradingView alert, a custom script, or any tool that can call a webhook URL. When your condition fires, the source sends a small HTTP request to the bot's webhook, and the bot places the trade on your connected exchange within the rules you configured: pair, direction, sizing, take-profit, and stop-loss. This split matters because the bot's configuration no longer determines your results — your signal's quality does. The bot contributes speed, consistency, and around-the-clock execution, while the signal source contributes every entry decision. On Freya Finance, signal bots run on Binance, OKX, and Bybit, in spot and futures markets, in either Custom Signal mode or Risk Ratio mode.
Can I backtest a signal bot before going live?
Not directly, and it's important to understand why. A backtest replays historical data against rules the tester can evaluate — but a signal bot's entry logic lives outside the platform, in your TradingView alert or custom script, so a backtester has no way of knowing when your webhook would have fired. The honest workflow has three stages. First, backtest the strategy at its source: if your signal comes from a TradingView strategy, use TradingView's strategy tester across several years and market regimes. Second, if your logic is built from standard indicators, recreate it as an indicator-based bot in Freya and backtest that on your exact pair and timeframe as a cross-check. Third, run the live signal bot at minimum size for a few weeks — not to prove profitability, which small samples can't do, but to verify that alerts, webhook delivery, and TP/SL placement behave exactly as designed.
What's the difference between Custom Signal and Risk Ratio mode?
In Custom Signal mode, you configure the orders inside Freya — trade amount, take-profit, and stop-loss — and your webhooks say when to act: an Open URL for entries and a separate Close URL for exits. In Risk Ratio mode, the webhook payload itself carries the take-profit and stop-loss prices; entry is taken at market when the signal arrives, and instead of a trade amount you set a fixed risk amount per trade. Freya then calculates the position size from the distance between entry and stop-loss, so a stop-out costs roughly the amount you chose. Risk Ratio suits strategies that compute exit levels per setup — from market structure, ATR, or swing points — while Custom Signal suits strategies with consistent percentage-based exits or external exit logic. The two modes cannot be combined on one bot; pick the one that matches how your signals are built.
How much should I risk per signal?
Most disciplined traders risk a small, fixed percentage of allocated capital per trade — commonly 0.5% to 2% — so no single loss, and no realistic losing streak, can knock them out. At 1% risk per trade, ten consecutive losses draw the account down roughly 9.6%, which is unpleasant but recoverable; at 5% risk, the same streak costs about 40%, which few strategies ever climb back from. Risk Ratio mode implements this directly: you enter a fixed risk amount in USDT, and position size is calculated automatically from each signal's stop distance. In Custom Signal mode you approximate it by working backwards — divide your risk budget by your configured stop-loss percentage to get your trade amount. Before settling on a number, look at your strategy's historical losing streaks in backtests: your per-trade risk should let you survive the worst streak with room to spare.
Do signal bots need a stop-loss?
Yes — treat it as non-negotiable. A DCA bot has a built-in response to falling prices: averaging orders lower its entry cost as the market drops. A signal bot has no such mechanism; it holds whatever position the signal opened until an exit arrives. If your close signal never fires — because an alert expired, a TradingView subscription lapsed, or a script crashed — a stop-less position simply rides the market down with no defined worst case. A stop-loss is the only exit that lives on the exchange side rather than depending on your signal pipeline. In Risk Ratio mode the stop is structural: it arrives in every webhook and drives position sizing, so you cannot trade without one. In Custom Signal mode it's configured by you in the bot's order settings — set it before launch, and size it so the implied loss matches your per-trade risk budget.
What happens if TradingView or my webhook source goes down?
Your bot keeps running, but no new decisions arrive — and that's the real risk. Freya's interface warns about exactly this whenever a strategy uses an external signal source: delays, outages, or inaccurate signals from that source can affect your trades, and the platform cannot vouch for external signal accuracy. An outage produces two failure shapes. Missed entries are the mild one: the bot sits flat and you lose opportunity, not money. Missed exits are the dangerous one: an open position waiting for a Close webhook that never comes — which is why every position should carry an exchange-side stop-loss, so the exit executes even when the pipeline is dead. Also check the mundane causes before assuming an outage: webhook delivery requires a paid TradingView plan, alerts expire on some plans, and a regenerated webhook URL invalidates the old one until your alerts are updated.
Keep Learning
A signal bot is one tool in a larger kit, and it pays to know the whole bench. If you want entry logic that lives inside the platform — with averaging orders as a built-in defense — study the DCA Bot Strategy Guide. For the click-by-click build process behind everything discussed here, follow How to Create a Signal Bot on Freya Finance. Before any strategy touches real funds, work through How to Backtest Your Crypto Trading Strategy — and to understand how Freya connects to your exchange without ever holding your coins, read Is My Money Safe on Freya Finance?.
