Page 1 of 2

Comparing real average spread on USDJPY across several raw accounts

Posted: Wed Oct 21, 2026 9:34 am
by FXS London Scalper
Advertised spreads are averages over periods that may not match your trading hours. Comparing real spreads across accounts requires your own measurement.

Method:

1. Run a tick recorder on each account simultaneously (same VPS if possible).
2. Record for at least two weeks.
3. Filter for your trading hours only.
4. Calculate median, mean and 90th percentile spread for each.
5. Add commission per lot (converted to pips) for each account.

Also note:
- Spread at specific events (Tokyo open, London open, US data).
- How fast the spread recovers after spikes.
- Any times when one account widens and others don't.

What usually surprises people: the account with the lowest median is not always cheapest at the times that matter. Some have tight median spreads but wider spikes.

For USDJPY specifically, Asia session spreads vary more between brokers than London spreads.

Has anyone done a multi-broker spread comparison? What surprised you?

Re: Comparing real average spread on USDJPY across several raw accounts

Posted: Mon Oct 26, 2026 11:28 am
by PTScalper
FXS London Scalper wrote: Wed Oct 21, 2026 9:34 am Advertised spreads are averages over periods that may not match your trading hours. Comparing real spreads across accounts requires your own measurement.

Method:

1. Run a tick recorder on each account simultaneously (same VPS if possible).
2. Record for at least two weeks.
3. Filter for your trading hours only.
4. Calculate median, mean and 90th percentile spread for each.
5. Add commission per lot (converted to pips) for each account.

Also note:
- Spread at specific events (Tokyo open, London open, US data).
- How fast the spread recovers after spikes.
- Any times when one account widens and others don't.

What usually surprises people: the account with the lowest median is not always cheapest at the times that matter. Some have tight median spreads but wider spikes.

For USDJPY specifically, Asia session spreads vary more between brokers than London spreads.

Has anyone done a multi-broker spread comparison? What surprised you?
Hi FXS London Scalper,

Relying on a broker’s advertised average spread is a fast track to broken risk-reward models, especially for high-frequency scalping on M1 to M15 timeframes. When maintaining a strict 3:1 risk-to-reward ratio, a hidden 0.5 pip spread expansion during order execution mathematically destroys a strategy's edge over a typical 2 to 6-week trading series.

Tick Recording Architecture
Deploying a custom MQL4/MQL5 Expert Advisor or a C# cBot on a dedicated VPS is the only reliable collection method. The script must log real-time Bid/Ask arrays at every tick rather than relying on M1 OHLC data. Running these terminals concurrently on the same server eliminates network latency variables, exposing the true liquidity depth of the broker's order book.

Re: Comparing real average spread on USDJPY across several raw accounts

Posted: Mon Oct 26, 2026 11:28 am
by PTScalper
Total Transaction Costs

For commission-based raw accounts, median spreads are only half the equation. A true raw setup might frequently quote a 0.0 pip spread on major pairs, but adding a standard $7 round-turn commission establishes a hard 0.7 pip baseline cost for every executed lot.

Re: Comparing real average spread on USDJPY across several raw accounts

Posted: Mon Oct 26, 2026 11:29 am
by PTScalper
The Biggest Multi-Broker Surprises

The Median Trap: Brokers often boast ultra-tight median spreads, but analyzing the 90th percentile reveals aggressive micro-spikes. During the Frankfurt and London opens, some liquidity providers momentarily pull orders, causing fleeting spread blowouts that hunt tight stop-losses before instantly reverting.

Rollover Liquidity Vacuums: At the 5:00 PM New York close, USDJPY spreads can violently expand up to 15 pips depending on the broker's specific Asian liquidity providers. It is during these extreme widening events that trading with real capital on a broker offering strict negative balance protection becomes critical to survive weekend gaps.

Execution Slippage: A tight quoted spread is useless if the broker's matching engine delays execution. When executing trades manually via a mobile device, the physical network routing latency combined with a momentary spread spike often results in negative slippage that negates the tight median entirely.

Re: Comparing real average spread on USDJPY across several raw accounts

Posted: Mon Oct 26, 2026 11:33 am
by PTScalper
Paying a slightly higher, but rigidly stable, spread paired with instant execution is ultimately far more profitable than chasing phantom zero-spread marketing.

Plus you should have in mind, that spread, which you can see is not what you will get all the time. Because there could be slippage and one of the most important thing, when you will grow is that how much you can buy at that price, because for example you can see spread 0.1 pips + commisions, but on another hand there is only 0.2 lots for that.

I have traded forex spot market for more than 18 years and my favorita broker is IC markets, i have use them for more than 6 years.
(Plus another benefit is negative balance protection. For those who do not know why, you can check for example PEG 1.2000 on EURCHF protected by SNB and end of it.)

Re: Comparing real average spread on USDJPY across several raw accounts

Posted: Mon Oct 26, 2026 11:33 am
by PTScalper
A reliable tick recorder must capture exact millisecond timestamps and bypass terminal sandboxes to consolidate data. When running multiple instances on a single VPS to eliminate network latency, both MetaTrader and cTrader must write to a shared directory.

Re: Comparing real average spread on USDJPY across several raw accounts

Posted: Mon Oct 26, 2026 11:34 am
by PTScalper
MQL5 Implementation (MetaTrader 5)

MQL5 restricts file I/O to a specific terminal sandbox. Using the FILE_COMMON flag is strictly required to route the output to the shared Terminal\Common\Files directory, allowing you to aggregate IC Markets data alongside other brokers without file path conflicts.

Code: Select all

//+------------------------------------------------------------------+
//| MQL5 Tick Recorder                                               |
//+------------------------------------------------------------------+
#property strict

int fileHandle;
string fileName;

int OnInit() {
    // Construct unique filename per symbol and account
    fileName = "TickData_" + _Symbol + "_" + IntegerToString(AccountInfoInteger(ACCOUNT_LOGIN)) + ".csv";
    
    // FILE_COMMON ensures data is written to the shared terminal folder
    fileHandle = FileOpen(fileName, FILE_WRITE|FILE_CSV|FILE_ANSI|FILE_COMMON, ",");
    
    if(fileHandle != INVALID_HANDLE) {
        FileWrite(fileHandle, "TimeMsc,Bid,Ask");
    } else {
        Print("Failed to open file: ", GetLastError());
        return(INIT_FAILED);
    }
    return(INIT_SUCCEEDED);
}

void OnTick() {
    MqlTick lastTick;
    if(SymbolInfoTick(_Symbol, lastTick)) {
        // Record exact millisecond timestamp to track micro-spikes
        string timeStr = TimeToString(lastTick.time_msc / 1000, TIME_DATE|TIME_SECONDS) + "." + IntegerToString(lastTick.time_msc % 1000);
        FileWrite(fileHandle, timeStr, DoubleToString(lastTick.bid, _Digits), DoubleToString(lastTick.ask, _Digits));
    }
}

void OnDeinit(const int reason) {
    if(fileHandle != INVALID_HANDLE) {
        FileClose(fileHandle);
    }
}

Re: Comparing real average spread on USDJPY across several raw accounts

Posted: Mon Oct 26, 2026 11:34 am
by PTScalper
C# Implementation (cTrader cBot)

For a C# cBot, disk I/O operations block the execution thread. During volatile periods like the New York open or US data releases, a synchronous write at every tick can cause the cBot to queue and miss data. Use a StreamWriter with buffering, or flush on exit.

Code: Select all

using System;
using System.IO;
using cAlgo.API;

[Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.FileSystem)]
public class TickRecorder : Robot
{
    private StreamWriter _writer;
    private string _filePath;

    protected override void OnStart()
    {
        // Route directly to a shared VPS directory to match MQL5 common files
        string sharedDir = @"C:\Users\Administrator\AppData\Roaming\MetaQuotes\Terminal\Common\Files";
        _filePath = Path.Combine(sharedDir, $"TickData_{SymbolName}_{Account.Number}.csv");
        
        _writer = new StreamWriter(_filePath, true) { AutoFlush = false };
        _writer.WriteLine("TimeMsc,Bid,Ask");
    }

    protected override void OnTick()
    {
        // cTrader provides UTC time natively
        var time = Server.TimeInUtc.ToString("yyyy-MM-dd HH:mm:ss.fff");
        _writer.WriteLine($"{time},{Symbol.Bid},{Symbol.Ask}");
    }

    protected override void OnStop()
    {
        if (_writer != null)
        {
            _writer.Flush();
            _writer.Close();
        }
    }
}

Re: Comparing real average spread on USDJPY across several raw accounts

Posted: Mon Oct 26, 2026 11:34 am
by PTScalper
Optimization Note

For long-term tracking of M15 scalping pairs, CSV files will grow massive. If the VPS has sufficient memory, appending tick arrays to a concurrent memory buffer and flushing to the disk asynchronously via a background thread prevents terminal freezing during high-frequency tick bursts.

Re: Comparing real average spread on USDJPY across several raw accounts

Posted: Sat Oct 31, 2026 8:35 am
by FXS Prop Desk
Looking at the 90th percentile rather than the median is the right way to compare brokers for scalping. The median says what the spread usually is. The tail says what it costs on the trades that matter, because those wide moments line up with opens and news, when most scalpers are active. It would also be interesting to see the timing of the spikes. If two brokers show similar percentiles but one widens for five seconds and the other for thirty, they behave very differently for anyone using tight stops at the open.