Forex Profit System

Forex Profit System is a trend-following strategy based on three exponential moving averages and Parabolic SAR. It looks for a bullish EMA structure or fresh multi-EMA cross while the Parabolic SAR value is below price.
Once in a position, it can use a fixed fee-aware target, break-even-aware EMA and bearish-signal exits, and an optional loss-taking stop below the slow EMA.
The default 10/25/50 EMA structure and 30-minute period are aimed at established directional moves rather than very short noise. The strategy can also suit one-hour charts after separate testing.
warning
The EMA50 stop is disabled by default. It follows the current slow EMA and is not a one-way ratchet; if the slow EMA moves lower, the stop can move lower too.
Entry setup
A long entry requires:
- Parabolic SAR below the current close;
- the fast EMA above both the middle and slow EMA;
- additional EMA ordering or cross behavior selected by
FPS_REQUIRE_CROSS.
Fresh cross mode
With FPS_REQUIRE_CROSS enabled, the previous fast EMA must have been at or below both the middle and slow EMA, then move above both on the current candle.
This is a strict double cross. If the fast EMA crossed one slower line on an earlier candle and the other later, the later candle does not qualify unless the fast EMA was still below both on the preceding candle.
Trend-state mode
When FPS_REQUIRE_CROSS is disabled, the strategy accepts an ongoing bullish order:
fast EMA > middle EMA >= slow EMA
This allows continuation entries after the initial cross, but can enter later in a mature trend or re-enter while the same bullish structure persists.
The strategy opens one position at a time and does not average down.
EMA and PSAR settings
FPS_EMA_FAST, FPS_EMA_MID, and FPS_EMA_SLOW define the three trend horizons. Keep them ordered from shortest to longest.
Shortening the EMAs makes the setup respond faster and cross more often. Lengthening them filters more noise but delays entries and exits.
FPS_PSAR_STEP controls Parabolic SAR acceleration and FPS_PSAR_MAX caps it. Faster settings react sooner but can flip repeatedly in ranges. Keep the maximum at or above the step.
Exit behavior
Fixed target
Enable FPS_USE_TARGET to exit at FPS_TARGET_PCT above average buy price.
The target is raised when necessary to cover estimated round-trip fees and FPS_MIN_NET_GAIN_PCT. When the target is disabled, the strategy relies on technical exits and any enabled EMA stop.
EMA-break exit
With FPS_EXIT_ON_EMA_BREAK enabled, the position can close when bid falls below all three EMAs.
This exit requires price at break-even or better. It does not deliberately realize a loss.
Bearish EMA/PSAR signal
The strategy always recognizes a mirrored bearish sell signal:
- Parabolic SAR above price;
- fast EMA below both slower EMAs;
- either a strict bearish double cross or complete bearish EMA order, depending on
FPS_REQUIRE_CROSS.
This signal can also close only at break-even or better. There is no separate exposed switch for it.
EMA-following protective stop
The loss-taking stop is:
current slow EMA × (1 - FPS_STOP_BUFFER_PCT / 100)
It operates only when both of these are enabled:
FPS_USE_PROTECTION;FPS_USE_TRAILING_EMA50_STOP.
Despite the setting name, the reference is the configurable FPS_EMA_SLOW, not necessarily EMA 50.
The stop is recalculated from the current slow EMA. It can rise in an uptrend, but it can also fall when that EMA declines. It therefore follows the EMA rather than locking only upward like a conventional trailing stop.
If FPS_USE_TRAILING_EMA50_STOP is disabled, enabling protection alone does not create another stop.
Good market conditions
Forex Profit System generally works best when:
- the market is liquid and spread is small;
- the three EMAs separate into a stable bullish order;
- PSAR remains below price for sustained periods;
- pullbacks respect the middle or slow EMA;
- the target is realistic for the chart period and volatility.
Fresh-cross mode suits emerging trends with a decisive reordering of all three EMAs. Trend-state mode can join established moves but needs care after long extensions.
Avoid flat markets where the EMAs repeatedly overlap and PSAR alternates sides. Also be cautious when the slow EMA is falling: the EMA-following stop can continue moving down and may provide less protection than expected.
Creating the strategy
Create a spot strategy and choose Forex Profit System as the buy and sell method. Start with backtesting or paper trading.
A practical setup sequence is:
- Select a liquid pair and begin with the default 30-minute period.
- Keep the 10/25/50 EMA structure initially.
- Compare strict fresh crosses with ongoing trend-state entries.
- Tune PSAR only after reviewing EMA behavior.
- Decide whether you want a fixed target or technical trend exits.
- Inspect the EMA-following stop across declining as well as rising samples.
- Set spread limits and order sizes for the pair.
- Test ranges, false crosses, and sustained trends.
Strategy settings
Trading and execution
| Setting | Description |
|---|---|
BUY_ENABLED | Enables new buy orders. |
SELL_ENABLED | Enables target, technical, and protective sell orders. |
PERIOD | Candle period used for EMA and PSAR calculations; the default is 30 minutes. |
TRADING_LIMIT | Compatibility fallback only. It is ignored while the strategy-specific trading limit contains a positive value. Configure the strategy-specific setting for normal use. For USDT-BTC, this value is in USDT. |
FPS_TRADING_LIMIT | For USDT-BTC, the amount of USDT used for an entry. |
FUNDS_RESERVE | For USDT-BTC, the amount of USDT the bot must leave unused. |
KEEP_QUOTE | For USDT-BTC, the amount of BTC the strategy must not sell. |
MIN_VOLUME_TO_BUY | General minimum buy value. For USDT-BTC, this value is in USDT. |
MIN_VOLUME_TO_SELL | General minimum sell value. For USDT-BTC, this value is in USDT. |
FPS_MIN_ORDER_VALUE | Strategy-specific minimum entry value. For USDT-BTC, this value is in USDT. |
FPS_MIN_SELL_VALUE | Strategy-specific minimum exit value. For USDT-BTC, this value is in USDT. |
GAIN | General gain fallback retained in the configuration. |
FPS_COOLDOWN_MS | Minimum live-trading delay in milliseconds between actions. It is not applied in backtests. |
FPS_MAX_SPREAD_PCT | Maximum permitted bid/ask spread as a percentage. |
FPS_MAX_SPREAD_ABSOLUTE | Optional maximum spread in USDT for a pair such as USDT-BTC. 0 disables it. |
FPS_NEWS_BLOCK | Manually blocks new entries while existing positions remain manageable. |
FPS_NEWS_BLOCK_UNTIL | Blocks new entries until the configured time. |
Trend signal
| Setting | Description |
|---|---|
FPS_EMA_FAST | Fast EMA length. |
FPS_EMA_MID | Middle EMA length; keep it above the fast length. |
FPS_EMA_SLOW | Slow EMA length; keep it above the middle length. It also supplies the stop reference. |
FPS_PSAR_STEP | Parabolic SAR acceleration step. |
FPS_PSAR_MAX | Maximum Parabolic SAR acceleration. |
FPS_REQUIRE_CROSS | Requires a fresh fast-EMA cross of both slower EMAs. When disabled, complete EMA ordering is sufficient. |
Target and exits
| Setting | Description |
|---|---|
FPS_USE_TARGET | Enables the fixed fee-aware target. |
FPS_TARGET_PCT | Percentage target above average buy price. |
FPS_MIN_NET_GAIN_PCT | Minimum intended gain beyond estimated round-trip fee break-even. |
FPS_EXIT_ON_EMA_BREAK | Enables a break-even-or-better exit when price is below all three EMAs. |
Protection
| Setting | Description |
|---|---|
FPS_USE_TRAILING_EMA50_STOP | Enables use of the slow-EMA stop when protection is also active. |
FPS_STOP_BUFFER_PCT | Distance below the current slow EMA for the protective stop. |
FPS_USE_PROTECTION | Activates the loss-taking EMA stop; it has no independent stop when the trailing-EMA switch is off. |
Backtesting range
| Setting | Description |
|---|---|
BF_SINCE | Start of the selected backtesting period. |
BF_UNTIL | End of the selected backtesting period. |
DEEP_TESTING | Enables deeper backtesting mode in the editor. |
Practical tuning directions
Use cross mode when you want one opportunity at the transition into a bullish EMA structure. Use trend-state mode when continuation entries are desirable.
For smoother trends, lengthen all three EMAs while preserving their order. For earlier signals, shorten them, but expect more overlap and false crosses.
If the target is disabled, confirm that the technical exits match your holding expectations. They remain unavailable below break-even unless the EMA-following protective stop is enabled.
Choose the stop buffer after inspecting how far the slow EMA normally sits below price. A small buffer can stop ordinary EMA tests; a large one increases loss distance.
Important limitations
- A strict double cross can miss staggered EMA transitions.
- Trend-state mode can enter late or re-enter the same mature trend.
- EMA and PSAR signals lag price.
- Technical exits do not deliberately realize a loss.
- Protection alone does nothing when the trailing-EMA stop switch is off.
- The EMA-following stop can move downward and is not a ratcheting trail.
- The “EMA50” stop follows the configurable slow EMA length.
- Backtests cannot perfectly reproduce live spread, slippage, latency, or liquidity.
Forex Profit System works best when all three EMAs and PSAR describe one durable bullish phase. The choice between fresh cross and ongoing trend state determines whether the strategy trades the transition or the continuation.