PSAR Fibonacci Scalp Spot Trading Strategy
PSAR Fibonacci Scalp is a two-stage spot strategy. It first waits for fast and slow Parabolic SAR to confirm an upward break, then calculates a Fibonacci plan and waits for price to retrace to the configured entry level.

It does not buy the breakout candle directly. The setup must remain valid long enough for a pullback, which helps avoid chasing but can also leave many signals unfilled.
warning
The default candle period is one minute and the default setup lasts 15 minutes. Small differences in spread, candle timing, and price precision can materially change whether a retracement entry is reached.
Trading behavior
1. Detecting a PSAR break
The strategy calculates a fast and slow Parabolic SAR. A long setup requires both to be in an uptrend.
With PSF_REQUIRE_CLOSE_BREAK enabled, the fast PSAR must freshly flip bullish or price must close from below the fast SAR to above it. When disabled, an intrabar high above fast SAR can qualify.
Slow PSAR acts as the broader direction filter. If it turns bearish while an unfilled setup is waiting, that setup is canceled.
2. Building the Fibonacci plan
After a qualifying break, the strategy finds the lowest low in PSF_SWING_LOOKBACK completed candles and uses the current breakout high as the top of the move.
The planned prices are:
entry = swing low + (breakout range × PSF_FIB_ENTRY_LEVEL)
target = swing low + (breakout range × PSF_FIB_TARGET_LEVEL)
With defaults, entry is the 50% level and the Fibonacci target is the 161.8% extension.
The setup expires after PSF_SETUP_MAX_AGE_MS. It also expires if slow PSAR loses its bullish direction.
3. Waiting for the retracement
The strategy enters when ask reaches or falls below the planned entry while bid remains above the planned stop. Spread, session, news, balance, minimum order, and cooldown rules must still pass at that moment.
This means both setup creation and actual entry need an open session. A setup that remains valid but retraces outside the window waits until the session reopens or the setup expires.
The strategy buys once and does not DCA.
tip
A higher Fibonacci entry level sits closer to the breakout high and is easier to reach. A lower value demands a deeper pullback toward the swing low.
Target modes
PSF_TARGET_MODE supports:
fib: use the Fibonacci extension target and a stop below the swing low.pips: use the fixed pip or percentage target and stop around the planned entry.
In fib mode, PSF_FIB_TARGET_LEVEL controls the target and PSF_SWING_STOP_BUFFER_PIPS places the stop below the swing low.
In pips mode:
- With
PSF_USE_PIPSenabled, target and stop use pip distances. - With it disabled, target and stop use
PSF_TARGET_PCTandPSF_STOP_PCT.
All profit targets remain above estimated fee-adjusted break-even plus PSF_MIN_NET_GAIN_PCT.
PSAR exits
Two optional signal exits are available:
PSF_EXIT_ON_FAST_SHORT_BREAK: exit after a bearish fast-PSAR break when slow PSAR is also bearish.PSF_EXIT_ON_SLOW_PSAR_FLIP: exit whenever slow PSAR is bearish.
Both signal exits only sell at or above the minimum profitable price. They do not cut a loss.
Protection
PSF_USE_PROTECTION allows the stored setup stop to close below break-even. In Fibonacci mode this is below the swing low; in fixed mode it uses the pip or percentage distance.
Session, news, and cooldown
The default session is 04:00-06:00 in New York time, including daylight-saving changes.
The manual news block pauses new setup creation and entry, but does not stop management of an open position.
The 15-minute action cooldown is modeled in backtests when PSF_ENFORCE_COOLDOWN_IN_BACKTEST is enabled.
Good market conditions
PSAR Fibonacci Scalp is best suited to:
- A clear bullish impulse confirmed by both PSAR speeds.
- An orderly retracement that holds above the prior swing low.
- Enough follow-through for price to revisit or extend beyond the breakout.
- Liquid sessions with consistently small spread.
It is weaker in:
- Choppy markets with repeated PSAR flips.
- Breakouts that never retrace.
- Deep reversals that invalidate the swing.
- Thin one-minute markets where wick data creates false breaks.
The strategy deliberately trades a pullback after momentum. It is not designed for persistent range reversion or immediate breakout buying.
How to create the strategy
- Create a new spot strategy in the advanced strategy editor.
- Select
psarfibscalpas both buy and sell method. - Start with a liquid pair on the default one-minute period.
- Align both trading-limit settings.
- Check the absolute spread value for the pair.
- Choose
fiborpipstarget mode explicitly. - Confirm the New York-time entry window.
- Backtest with cooldown enforcement enabled.
- Test protection through failed-breakout periods.
A practical tuning workflow
Tune PSAR sensitivity first. Larger step and maximum values make SAR react faster and flip more often. Keep slow PSAR meaningfully slower than fast PSAR.
Then tune the setup geometry:
- Increase swing lookback to anchor the plan to a broader low.
- Lower Fibonacci entry level for a deeper pullback.
- Increase target level for a farther extension.
- Increase setup age to allow more time for retracement.
Do not evaluate target settings without checking fill rate. A beautiful target is irrelevant if the configured retracement almost never enters.
Finally, test the session and spread gates. The default absolute spread of 0.00015 is pair-specific and may be inappropriate for high-priced crypto pairs.
Core settings
| Label | Config parameter | Default | Description |
|---|---|---|---|
| Buy enabled | BUY_ENABLED | true | Allows planned Fibonacci entries. |
| Sell enabled | SELL_ENABLED | true | Allows target, PSAR-signal, and protective exits. |
| Period | PERIOD | 1 | Candle period in minutes. |
| Trading limit | TRADING_LIMIT | 100 | Compatibility fallback only. It is ignored while the strategy-specific trading limit is positive; the two values do not need to match. For USDT-BTC, this value is in USDT. |
| Funds reserve | FUNDS_RESERVE | 0 | For USDT-BTC, the amount of USDT the bot must leave unused. |
| Amount retained from sells | KEEP_QUOTE | 0 | For USDT-BTC, the amount of BTC the strategy must not sell. |
| Min volume to buy | MIN_VOLUME_TO_BUY | 10 | General minimum buy value. Keep it aligned with PSF_MIN_ORDER_VALUE. For USDT-BTC, this value is in USDT. |
| Min volume to sell | MIN_VOLUME_TO_SELL | 10 | General minimum sell value. Keep it aligned with PSF_MIN_SELL_VALUE. For USDT-BTC, this value is in USDT. |
| Gain | GAIN | 0.35 | General target value. Keep fixed-mode intent explicit in PSF_TARGET_PCT. |
Execution and session settings
| Label | Config parameter | Default | Description |
|---|---|---|---|
| PSF trading limit | PSF_TRADING_LIMIT | 100 | For USDT-BTC, the amount of USDT used for the single buy. |
| PSF min order value | PSF_MIN_ORDER_VALUE | 10 | Minimum value required for a buy. For USDT-BTC, this value is in USDT. |
| PSF min sell value | PSF_MIN_SELL_VALUE | 10 | Minimum position value required for a sell. For USDT-BTC, this value is in USDT. |
| PSF cooldown ms | PSF_COOLDOWN_MS | 900000 | Minimum milliseconds between actions. 900000 is 15 minutes. |
| Enforce cooldown in backtest | PSF_ENFORCE_COOLDOWN_IN_BACKTEST | true | Models the cooldown during historical testing. |
| PSF max spread % | PSF_MAX_SPREAD_PCT | 0.06 | Maximum spread as a percentage of midpoint. |
| PSF max spread absolute | PSF_MAX_SPREAD_ABSOLUTE | 0.00015 | Maximum spread in pair price units. Set 0 to disable it. For USDT-BTC, this value is in USDT. |
| Use session filter | PSF_USE_SESSION_FILTER | true | Restricts setup creation and entry to configured New York-time windows. |
| Entry windows EST | PSF_ENTRY_WINDOWS_EST | 04:00-06:00 | Comma-separated entry windows in New York time. |
PSAR and setup settings
| Label | Config parameter | Default | Description |
|---|---|---|---|
| Fast PSAR step | PSF_FAST_PSAR_STEP | 0.02 | Acceleration increment for responsive PSAR. |
| Fast PSAR max | PSF_FAST_PSAR_MAX | 0.2 | Maximum fast-PSAR acceleration. |
| Slow PSAR step | PSF_SLOW_PSAR_STEP | 0.005 | Acceleration increment for broader trend PSAR. |
| Slow PSAR max | PSF_SLOW_PSAR_MAX | 0.05 | Maximum slow-PSAR acceleration. |
| Swing lookback | PSF_SWING_LOOKBACK | 30 | Completed candles searched for the setup swing low. |
| Require close break | PSF_REQUIRE_CLOSE_BREAK | true | Requires close-based confirmation instead of allowing a high/low wick break. |
| Setup max age ms | PSF_SETUP_MAX_AGE_MS | 900000 | Maximum time an unfilled retracement plan remains valid. |
| Fib entry level | PSF_FIB_ENTRY_LEVEL | 0.5 | Fraction of breakout range above swing low used for entry. |
| Fib target level | PSF_FIB_TARGET_LEVEL | 1.618 | Extension of breakout range used as the Fibonacci target. |
Target, stop, and exit settings
| Label | Config parameter | Default | Description |
|---|---|---|---|
| Target mode | PSF_TARGET_MODE | fib | fib uses swing geometry; pips uses fixed pip or percentage distances. |
| Use pips | PSF_USE_PIPS | false | In fixed mode, selects pip rather than percentage distances. |
| Pip size | PSF_PIP_SIZE | 0.0001 | Pair-price value of one pip. For USDT-BTC, this value is in USDT. |
| Target pips | PSF_TARGET_PIPS | 9 | Fixed profit distance in pip mode. |
| Stop pips | PSF_STOP_PIPS | 8 | Fixed stop distance in pip mode. |
| Swing stop buffer pips | PSF_SWING_STOP_BUFFER_PIPS | 2 | Distance below swing low used for the Fibonacci-mode stop. |
| Target % | PSF_TARGET_PCT | 0.5 | Fixed profit distance in percentage mode. |
| Minimum net gain % | PSF_MIN_NET_GAIN_PCT | 0.3 | Minimum gain above estimated fee-adjusted break-even. |
| Stop % | PSF_STOP_PCT | 0.35 | Fixed stop distance in percentage mode. |
| Use protection | PSF_USE_PROTECTION | false | Allows the stored stop to close below break-even. |
| Exit on fast short break | PSF_EXIT_ON_FAST_SHORT_BREAK | true | Allows a confirmed bearish fast-PSAR break to sell profitably. |
| Exit on slow PSAR flip | PSF_EXIT_ON_SLOW_PSAR_FLIP | true | Allows bearish slow PSAR to sell profitably. |
News and backtesting
| Label | Config parameter | Default | Description |
|---|---|---|---|
| News block | PSF_NEWS_BLOCK | false | Manually pauses setup creation and entry. |
| News block until | PSF_NEWS_BLOCK_UNTIL | 0 | Timestamp until which entries remain blocked. |
| Backtest since | BF_SINCE | 0 | Optional backtest start boundary. |
| Backtest until | BF_UNTIL | 0 | Optional backtest end boundary. |
| Deep testing | DEEP_TESTING | false | Enables deeper backtesting without changing live signals. |
Important limitations
- The strategy waits for a retracement and may not enter many breakouts.
- It opens one position and does not DCA.
- PSAR signal exits do not realize a loss.
- Only enabled protection activates the stored stop.
- Setup age and session window can prevent an otherwise valid entry.
- The absolute spread setting is pair-specific.
- The news block is manual.
Judge the complete sequence—break, setup, retracement, entry, and exit. Looking only at PSAR flips overstates how often this strategy actually trades.