This is the full setup manual for PROP FIRM OS on MetaTrader 5. It covers installation, the three operating modes, every input group, the dashboard, the currency exposure ledger, and the problems people hit most often during first setup.
Keep it open beside your terminal the first time you configure the EA.
1. What the EA does
PROP FIRM OS is a multi-symbol scanner and trade manager for MetaTrader 5, built around the loss limits that evaluation and funded accounts run on.
It performs two separate functions.
Analysis. It scans a list of symbols on a timer, scores each opportunity out of 100 across several analysis layers, and produces a signal only when the score passes the threshold set by your chosen profile.
Account rule enforcement. It tracks your daily loss limit, maximum loss limit and profit target in real time, and refuses any trade that would take the account near those limits. It also enforces a per-currency exposure cap, a news blackout, a consecutive-loss lockout and a daily risk budget.
All calculations run locally inside your terminal. There is no subscription and no required API key.
2. Installation

- In MetaTrader 5, open File → Open Data Folder.
- Open the MQL5 folder, then Experts .
- Place the EA file there. If you installed from the Market this is already done.
- Return to MetaTrader, right-click Expert Advisors in the Navigator and select Refresh.
- For a .mq5 source file, right-click it, choose Modify, and press F7 to compile. Wait for zero errors.
The two switches that must be on
The AutoTrading button in the top toolbar must be green. If it is red, click it once.
In the EA's Common tab, Allow Algo Trading must be ticked.
If either is off, the EA loads and displays normally but will never place an order. This accounts for most first-day support questions.
Attaching it
Open one chart and drag the EA onto it. After clicking OK, check for a smiling face icon in the top-right of the chart.
Then open the Experts tab at the bottom of the terminal and read the startup lines. They report which rule preset loaded, which mode is active, and which protection modules are enabled.
3. One chart is enough
The EA is a scanner. A single instance on a single chart watches every symbol in its list.
Do not attach it to several charts on the same account. Each instance tracks risk independently and cannot see positions opened by another instance. Two instances can each calculate that they are inside the daily loss limit while their combined exposure is not.
Symbols must be visible in Market Watch for the EA to read their price data.
Chart timeframe
The chart timeframe has no effect. The EA never reads it.
| Purpose | Timeframe used |
|---|---|
| Entry analysis | M15 |
| Trend alignment | H1 and H4 |
| Currency strength | D1 |
An M15 chart and an H4 chart produce identical signals.
4. Operating modes

InpMode decides what the EA is permitted to do. It is the most important setting in the EA.
TM_OBSERVE — the default
Scans, scores, displays signals and sends alerts. Never places an order.
The EA ships in this mode. It will not trade until you change this setting. If you are wondering why nothing is happening, check here first.
TM_SEMI_AUTO
When a signal passes every filter, an order ticket opens on the dashboard, pre-filled with symbol, direction, lot size, stop loss and take profit. You click CONFIRM or CANCEL.
On confirm, the order is sent with the stop loss and take profit attached in the same request, so the position is protected immediately.
For this mode:
- InpDashboardOn must be true . The ticket is shown on the dashboard.
- InpSemiTicketExpirySec (default 180) cancels an unconfirmed ticket after that many seconds, so a stale signal cannot be confirmed later at a different price.
- InpSemiAlert raises a terminal alert when a ticket opens.
TM_FULL_AUTO
Signals are executed without confirmation. All rule checks still apply.
5. Selecting your account rules
InpFirm loads the rule set the EA will enforce. Presets are included for the common evaluation and funded account structures, among them:
- FTMO — Challenge, Verification and Funded
- FundedNext — Stellar Phase 1 and 2, Stellar Lite, One-Step, Funded
- The5ers — Bootcamp, High Stakes, Hyper Growth
- E8 — Standard, Elev8, Funded
- The Funded Trader — Standard, Rapid, Royal, Knight
- FundingPips, FXIFY, Alpha Capital, Goat Funded, Maven, SurgeTrader, Audacity, Smart Prop, Blue Guardian, Blueberry, Breakout Prop, Instant Funding, Funded Trading Plus, FundingMax, Apex, Topstep
Select the preset that matches the exact program you are trading, including the phase. Moving from an evaluation phase to a funded account is a settings change, not a reinstall — switch the preset and the targets and limits update.
If your program is not listed, choose the custom option and enter your own figures:
| Input | Purpose |
|---|---|
| InpCustomDailyDD | Your daily loss limit, as a percentage |
| InpCustomMaxDD | Your maximum loss limit, as a percentage |
| InpCustomTarget | Your profit target, as a percentage |
The same three inputs let you impose limits on a personal live account, where no provider is enforcing anything.
Supporting inputs
| Input | Default | Function |
|---|---|---|
| InpAutoDetectAccount | true | Detects raw-spread versus standard account type and adjusts commission and spread expectations |
| InpAutoDetectPhase | true | Detects the current phase from account state |
| InpInitialBalance | 0 | Leave at 0 to read the starting balance automatically |
| InpSafetyBuffer | 1.0 | Stops the EA this many percent short of the real limit |
InpSafetyBuffer is worth understanding. At the default of 1.0, a 5% daily loss limit is treated as 4%. That gap absorbs a widened spread or a price spike at exactly the moment the account is closest to its limit. Do not set it to zero.
6. Risk settings
| Input | Default | Function |
|---|---|---|
| InpBaseRiskPct | 0.25 | Risk per trade, as a percentage of balance |
| InpMaxRiskPerDay | 1.5 | Stops new trades once this much has been risked in a day |
| InpPanicCloseOn | true | Enables the emergency close |
| InpPanicCloseAtLossPct | 3.0 | Closes all positions at this daily loss percentage |
| InpMaxOpenPositions | 1 | Concurrent position limit |
| InpMinRR | 2.5 | Minimum reward-to-risk ratio for a signal |
| InpMaxTradesPerDay | 0 | 0 means unlimited; the daily risk budget governs instead |
Lot size is calculated from the risk percentage and the ATR-derived stop distance, so position sizes stay consistent between trades without you managing them.
The defaults are deliberately conservative relative to a typical 5% daily loss limit. At 0.25% per trade, a long run of consecutive losses would be needed to approach it, and InpMaxRiskPerDay halts trading well before that.
7. Signal selectivity
InpProfile sets how strict the engine is.
| Profile | Minimum score | Minimum grade | Minimum RR |
|---|---|---|---|
| Safe | 80 | A | 2.5 |
| Balanced | 72 | B | 2.0 |
| Learning | 60 | C | 1.8 |
| Custom | user set | user set | user set |
The default is Learning. This is the least selective setting. It exists so the EA generates enough activity on a demo account for you to evaluate it and for the learning engine to gather data.
Change it to Balanced or Safe before running on any account where the outcome matters. On Safe the EA can go several days without a signal, which is the setting working as designed rather than a fault.
8. Execution and scanning
| Input | Default | Function |
|---|---|---|
| InpMagic | 20260518 | Magic number. Change only if running other EAs on the account |
| InpMaxSpreadPts | 80 | Refuses entries when spread exceeds this |
| InpEntryType | Limit retrace | Places a limit order and waits for a pullback rather than entering at market |
| InpRetracePct | 0.30 | Retracement depth for the limit order |
| InpLimitTimeoutSec | 600 | Cancels an unfilled limit order after this time |
| InpScanIntervalSec | 15 | Scan frequency. Increasing it provides no benefit |
| InpFocusSymbols | majors + gold | Comma-separated symbol list |
| InpScanAllMarketWatch | true | Also scans everything in Market Watch |
| InpMaxScanSymbols | 30 | Upper limit on symbols scanned |
| InpBlockedSymbols | — | Symbols excluded regardless of the above |
If your account restricts certain instruments, set InpScanAllMarketWatch to false and list only permitted symbols in InpFocusSymbols .
9. How a signal is approved
Every signal passes through five stages, and any single veto ends it.
The scoring stage produces a number out of 100 from currency strength, multi-timeframe trend alignment, market structure, order flow, price action, volume profile, channel position and a Bayesian probability estimate.
The veto stage then removes signals that scored well but should not be traded right now — RSI at an extreme, price overextended from its average, spread too wide, volatility outside its normal range, symbol on cooldown, or a news window approaching.
The rule engine is the stage that matters for an evaluation or funded account. A signal can score 90 and still be refused because your daily risk budget is spent, your remaining loss allowance is thin, or your exposure to one currency is already at its cap.
10. Currency exposure ledger

This module addresses a specific way accounts fail while the trader believes they are managing risk correctly.
Four separate positions, each risking 0.25%, look like careful trading. But if all four are long against the US dollar, they behave as one position of 1% risk on a single idea, and a single dollar headline moves all of them together.
PROP FIRM OS decomposes every open position into its two currency legs and calculates the actual money at risk from the stop distance. A long EURUSD is recorded as long EUR and short USD. Before a new signal is allowed through, the EA projects what that trade would do to each leg and refuses it if either currency would exceed the cap.
| Input | Default | Function |
|---|---|---|
| InpExposureOn | true | Enables the ledger |
| InpMaxRiskPerCurrency | 2.0 | Maximum net risk on one currency, as a percentage of balance |
| InpMaxPosPerCurrency | 3 | Maximum open positions touching one currency |
Instruments that do not decompose into two currencies, such as indices, are given their own exposure bucket rather than an incorrect currency split.
With InpMaxOpenPositions set to 1, this situation cannot arise at all, which is why 1 is the default for evaluation accounts.
11. Other protection modules
| Input | Default | Function |
|---|---|---|
| InpAdvancedMode | true | Master switch enabling the exposure cap, volatility regime filter and target stand-down together |
| InpVolRegimeOn | true | Raises the required score when ATR is far from its recent average, in either direction |
| InpStandDownOnTarget | true | Latches trading off once the profit target is reached, and does not re-arm on its own |
| InpEqCurveOn | false | Pauses new entries when the EA's own closed-trade curve falls below its moving average. Test before enabling |
| InpMaxConsecLosses | 2 | Consecutive losses before lockout |
| InpLockoutMin | 90 | Lockout duration in minutes |
| InpForceRestAfter2BadDays | true | Pauses for a day after two consecutive losing days |
During a lockout no new trades open. Existing positions continue to be managed normally.
The target stand-down is worth enabling deliberately. Once a profit target is reached the account has done its job, and trades taken after that point can only reduce the result.
News blackout
| Input | Default | Function |
|---|---|---|
| InpNewsBlackoutOn | true | Pauses trading around scheduled high-impact events |
| InpUseNativeCalendar | true | Reads the economic calendar built into MetaTrader 5 |
| InpPreNewsMin | 30 | Minutes before an event to stop |
| InpPostNewsMin | 30 | Minutes after an event to resume |
| InpCloseTradesBeforeNews | false | Optionally closes open positions ahead of an event |
No external data feed or subscription is used. The calendar already inside MetaTrader 5 supplies the events.
12. Trade management
| Input | Default | Function |
|---|---|---|
| InpBreakEvenOn | true | Moves the stop to entry at the configured R multiple |
| InpTrailingOn | true | Enables the trailing stop |
| InpTrailStartR | 2.0 | R multiple at which trailing begins |
| InpTrailDistR | 1.2 | Trailing distance in R |
| InpPartialCloseOn | — | Closes part of the position at a profit level |
| InpTimeExitOn | true | Closes positions that have not resolved |
| InpTimeExitBarsM15 | 24 | M15 bars before the time exit triggers |
| InpSymbolCooldownMin | 60 | Minimum minutes before re-entering the same symbol |
If your account calculates its maximum loss on a trailing basis rather than from a fixed starting figure, enable InpPartialCloseOn and lower InpTrailStartR . On that type of account, unrealised profit that is given back has permanently reduced your remaining allowance, so banking profit earlier is the correct adjustment.
13. The dashboard

InpDashboardOn must be true to display the panel. It is required in semi-automatic mode, since that is where the confirmation ticket appears.
InpUIFontScale controls size. 0 is automatic; try 0.8 for smaller or 1.2 for larger.
Signal grades
Signals are graded from F up to A+. C-grade signals are traded only on the Learning profile. D, E and F are never traded.
Risk modes

The EA sets its own risk mode from account state. This is not user-configurable — it is derived from the numbers.
14. Telegram notifications
Optional and free. Useful in semi-automatic mode, since the confirmation ticket otherwise requires you to be at the screen.
- In Telegram, message @BotFather and send /newbot . Follow the prompts to receive a bot token.
- Message @userinfobot to obtain your numeric chat ID.
- In MetaTrader, open Tools → Options → Expert Advisors. Tick Allow WebRequest for listed URL and add the Telegram API address shown in the InpTelegramURL input.
- Set InpTelegramOn to true and enter your token and chat ID.
Step 3 is required. Without the URL whitelisted, requests fail silently and no error appears on the chart.
15. Troubleshooting

No trades are being taken. Work down the list above in order. InpMode left at TM_OBSERVE is the answer most of the time.
No signals for several days. Expected on the Safe profile. Open the OPPS view to confirm scoring is running and see how close the current best score is to the threshold.
Telegram messages are not arriving. The URL has not been whitelisted. See section 14, step 3.
Semi-automatic mode is not showing tickets. Confirm InpDashboardOn is true.
Dashboard is too large or too small. Adjust InpUIFontScale .
Symbols are missing from the scanner. They must be visible in Market Watch. Also check InpMaxScanSymbols and InpBlockedSymbols .
Lot sizes look too small. Check InpBaseRiskPct and your account balance. On a small account the calculated risk can fall below the broker's minimum lot, in which case the EA cannot size the trade correctly.



