Page 1 of 1

Raw pricing during Christmas week: what spreads actually do

Posted: Mon Sep 14, 2026 7:43 pm
by LondonScalper
Christmas / year-end week: raw account spreads from the log, not folklore.

Every year someone says spreads go wide. True enough -- but when and on which symbols matters if you insist on trading.

What I do instead of guessing
I keep a simple sheet for the thin week: hourly median spread on the pairs I am tempted to touch, plus a go/no-go line written before Monday. If XAU or a cross sits above my line, I do not negotiate because a candle looks clean.

Often the honest playbook is flat or tiny size on majors only. Raw pricing does not repeal holiday liquidity.

If you have logged a prior Christmas week, did the damage show up as spread, slippage, or you forcing trades into empty books?

I keep prior years' holiday sheets so I am not reinventing fear. Patterns rhyme: crosses worse than majors, gold lively but expensive, late NY especially hollow. The map lets me enjoy time off without pretending the market owes me a December grind. If you only trade holidays "because you are free," that is a lifestyle choice -- price it honestly.

Re: Raw pricing during Christmas week: what spreads actually do

Posted: Thu Sep 24, 2026 8:19 pm
by PTScalper
LondonScalper wrote: Mon Sep 14, 2026 7:43 pm Christmas / year-end week: raw account spreads from the log, not folklore.

Every year someone says spreads go wide. True enough -- but when and on which symbols matters if you insist on trading.

What I do instead of guessing
I keep a simple sheet for the thin week: hourly median spread on the pairs I am tempted to touch, plus a go/no-go line written before Monday. If XAU or a cross sits above my line, I do not negotiate because a candle looks clean.

Often the honest playbook is flat or tiny size on majors only. Raw pricing does not repeal holiday liquidity.

If you have logged a prior Christmas week, did the damage show up as spread, slippage, or you forcing trades into empty books?

I keep prior years' holiday sheets so I am not reinventing fear. Patterns rhyme: crosses worse than majors, gold lively but expensive, late NY especially hollow. The map lets me enjoy time off without pretending the market owes me a December grind. If you only trade holidays "because you are free," that is a lifestyle choice -- price it honestly.
Hi LondonScalper,

The damage during the year-end week almost always starts with the visible spread, but the terminal cost is paid through slippage and empty-book mechanics. Your approach of logging hourly medians and establishing a hard go/no-go threshold is the exact dividing line between professional risk management and retail entertainment.

When analyzing historical holiday logs, the damage typically manifests in a specific sequence:

The Visible Tax (Algorithmic Spread Widening): Top-tier interbank desks run skeleton crews from mid-December through the first week of January. To protect against adverse selection and toxic flow without human oversight, automated Liquidity Providers (LPs) dial back their risk parameters. They deliberately widen the spread to discourage participation. On crosses and metals (like XAU), this widening is non-linear—a 2-pip average spread can easily gap to 8 or 10 pips during Asian or late NY sessions.

The Hidden Tax (Empty Books & Slippage): This is where price action traders take the heaviest hits. Even if the immediate spread sits just under your go/no-go line, the depth of the order book at the Best Bid/Offer (BBO) is hollow. A standard position size that normally fills instantly at a single price level suddenly sweeps two or three levels to find liquidity. You suffer negative slippage on entry, and worse, stop-losses are executed at devastatingly poor prices during brief, low-volume liquidity vacuums.

The Structural Breakdown (Forcing the Trade): If you trade raw price action on 15-minute or daily charts, your edge relies on institutional order flow defending key levels or driving breakouts. During the holidays, that baseline volume vanishes. Technical structures become fragile, leading to false breakouts and erratic chop. Forcing trades into this environment because you have time off work is, as you noted, an expensive lifestyle choice.

Re: Raw pricing during Christmas week: what spreads actually do

Posted: Thu Sep 24, 2026 8:21 pm
by PTScalper
To automate your historical logging without relying on folklore, here is a continuous MQL4 utility script. Rather than building a full Expert Advisor, this is designed as an infinite-loop script you can drop onto any chart. It wakes up at your defined interval, logs the exact Bid, Ask, and Spread, flushes the data to the disk, and goes back to sleep.

MQL4 Raw Spread Logger

Save this as HolidaySpreadLogger.mq4 in your MQL4/Scripts folder.

Code: Select all

//+------------------------------------------------------------------+
//|                                        HolidaySpreadLogger.mq4   |
//|                    Continuous Spread Logger for Liquidity Profiling|
//+------------------------------------------------------------------+
#property copyright "Raw Spread Analytics"
#property strict
#property show_inputs

//--- input parameters
input int    LogIntervalSeconds = 60;              // Logging Interval (Seconds)
input string FileNamePrefix     = "SpreadLog_";    // File Name Prefix

void OnStart()
{
    string fileName = FileNamePrefix + Symbol() + ".csv";
    
    // Open file for shared reading and writing
    int fileHandle = FileOpen(fileName, FILE_CSV|FILE_READ|FILE_WRITE|FILE_ANSI, ",");
    
    if(fileHandle == INVALID_HANDLE)
    {
        Print("Critical Error: Failed to open file. Error code: ", GetLastError());
        return;
    }

    // Move file pointer to the end to append data
    FileSeek(fileHandle, 0, SEEK_END);
    
    // If it's a new file, write the CSV header
    if(FileSize(fileHandle) == 0)
    {
        FileWrite(fileHandle, "Timestamp", "Symbol", "Bid", "Ask", "Spread_Points");
    }

    Print("Spread logger initiated on ", Symbol(), ". Interval: ", LogIntervalSeconds, "s. Remove script from chart to terminate.");

    // Infinite loop to act as a continuous logger without requiring EA permissions
    while(!IsStopped())
    {
        double bid = MarketInfo(Symbol(), MODE_BID);
        double ask = MarketInfo(Symbol(), MODE_ASK);
        int spread = (int)MarketInfo(Symbol(), MODE_SPREAD);
        
        // Format: YYYY.MM.DD HH:MI:SS
        string timeStr = TimeToString(TimeCurrent(), TIME_DATE|TIME_MINUTES|TIME_SECONDS);

        // Write current market data
        FileWrite(fileHandle, timeStr, Symbol(), DoubleToStr(bid, Digits), DoubleToStr(ask, Digits), spread);
        
        // Flush forces the terminal to write from RAM to the physical disk immediately.
        // This ensures no data is lost if the MT4 terminal crashes or shuts down abruptly.
        FileFlush(fileHandle);

        // Sleep releases the thread. Multiply by 1000 for milliseconds.
        Sleep(LogIntervalSeconds * 1000);
    }

    // Clean up on script removal
    FileClose(fileHandle);
    Print("Spread logger terminated gracefully.");
}

Re: Raw pricing during Christmas week: what spreads actually do

Posted: Thu Sep 24, 2026 8:21 pm
by PTScalper
Deployment Notes

File Location: The output CSVs are saved in File -> Open Data Folder -> MQL4 -> Files.

Data Integrity: The FileFlush() command is critical. It guarantees that every single row is written to the physical SSD immediately, so you won't lose your overnight logs if a VPS restarts or MT4 closes.

Analysis: Import the CSVs into Excel or Google Sheets. Group by the Timestamp hour and calculate the median of the Spread_Points column.

When you compare your December sheets year over year, the math proves your thesis: avoiding the late-NY hollowness and refusing to pay a 4x premium on XAU or cross-pair spreads yields a mathematically higher Expected Value than trying to grind out a few pips in a dead market.

Re: Raw pricing during Christmas week: what spreads actually do

Posted: Thu Sep 24, 2026 8:23 pm
by PTScalper
To elevate this to a quantitative, institutional standard, we need to strip away retail terminology and look directly at market microstructure and system architecture.

If you are treating trading as a professional enterprise, tracking a static spread via a polling script (the Sleep() loop) is insufficient. It suffers from the same flaw as lagging indicators: you are blind to the micro-events between the polls.

Here is the professional breakdown of holiday market mechanics, followed by an event-driven MT4 architecture designed to capture the true cost of illiquidity.

Re: Raw pricing during Christmas week: what spreads actually do

Posted: Thu Sep 24, 2026 8:24 pm
by PTScalper
The Microstructure of Holiday Illiquidity

When you analyze a prior Christmas week, the damage doesn't stem from a uniformly wider spread. It is a cascading failure of market depth that manifests in three distinct ways:

Top-of-Book Depletion (The Liquidity Mirage): LPs (Liquidity Providers) widen the Best Bid/Offer (BBO) spread algorithmically to deter toxic flow when their desks are unstaffed. However, the real danger is that the volume available at the BBO drops to near zero. You might see a 1.5 pip spread on EURUSD, but the book only holds 0.5 lots at that price.

Execution Slippage (Sweeping the Book): Because the top-of-book is hollow, standard market orders (or triggered stop-losses) instantly sweep 3 to 5 levels deep into the order book to fill. A raw spread of 1.5 pips practically executes as a 4-pip spread.

Micro-Gapping (The Stop Hunt Mechanism): Low tick density means price discovery is highly inefficient. A single moderate institutional order will cause the spread to gap from 2 pips to 15 pips for a fraction of a second. If your time-based script is sleeping during that millisecond, you miss the exact anomaly that just triggered your stop-loss.

If you trade raw price action and liquidity sweeps, December will bait you with "synthetic" sweeps. These aren't actual institutional stop hunts; they are simply prices falling through order book vacuums and snapping back once they hit a resting limit order.

Re: Raw pricing during Christmas week: what spreads actually do

Posted: Thu Sep 24, 2026 8:24 pm
by PTScalper
The Architectural Upgrade: Event-Driven Profiling

To build a professional "go/no-go" threshold, you need tick-level aggregation. Writing every tick to a CSV creates severe disk I/O bottlenecks and bloated files.

As a software engineer, you'll recognize the better pattern: we use an Expert Advisor (EA) to capture data event-driven via OnTick(). We process the Max, Min, and Average spread in RAM, and flush the aggregated metrics to the disk once per minute.

This captures the exact micro-gaps that destroy accounts, while keeping the data perfectly formatted for a spreadsheet.

Code: Select all

//+------------------------------------------------------------------+
//|                                     ProLiquidityProfiler_EA.mq4  |
//|               Tick-Level Aggregation for Liquidity Analysis      |
//+------------------------------------------------------------------+
#property copyright "Quantitative Market Analytics"
#property strict

int    fileHandle;
string fileName;
int    currentMinute;

// In-memory aggregation variables
int    tickCount;
long   cumulativeSpread;
int    maxSpread;
int    minSpread;

int OnInit()
{
    fileName = "LiquidityProfile_" + Symbol() + ".csv";
    
    // FILE_SHARE_READ allows you to open the CSV in Excel while MT4 is running
    fileHandle = FileOpen(fileName, FILE_CSV|FILE_READ|FILE_WRITE|FILE_ANSI|FILE_SHARE_READ, ",");
    
    if(fileHandle == INVALID_HANDLE)
    {
        Print("CRITICAL I/O ERROR: Cannot open file. Error: ", GetLastError());
        return(INIT_FAILED);
    }

    FileSeek(fileHandle, 0, SEEK_END);
    
    // Initialize headers if file is newly created
    if(FileSize(fileHandle) == 0)
    {
        FileWrite(fileHandle, "Timestamp", "TickVolume", "MinSpread", "AvgSpread", "MaxSpread");
    }

    currentMinute = TimeMinute(TimeCurrent());
    ResetAggregators();
    
    Print("Pro Liquidity Profiler initialized on ", Symbol());
    return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason)
{
    if(fileHandle != INVALID_HANDLE)
    {
        FileClose(fileHandle);
    }
    Print("Liquidity Profiler terminated.");
}

void OnTick()
{
    int spread = (int)MarketInfo(Symbol(), MODE_SPREAD);
    int minuteNow = TimeMinute(TimeCurrent());
    
    // Boundary condition: Minute has changed, flush aggregation to disk
    if(minuteNow != currentMinute)
    {
        if(tickCount > 0)
        {
            double avgSpread = (double)cumulativeSpread / tickCount;
            // Log the time for the minute that just completed
            string timeStr = TimeToString(TimeCurrent() - 60, TIME_DATE|TIME_MINUTES);
            
            FileWrite(fileHandle, timeStr, tickCount, minSpread, DoubleToStr(avgSpread, 2), maxSpread);
            FileFlush(fileHandle); // Force write from buffer to SSD
        }
        
        currentMinute = minuteNow;
        ResetAggregators();
    }
    
    // Tick-level evaluation in memory
    tickCount++;
    cumulativeSpread += spread;
    if(spread > maxSpread) maxSpread = spread;
    if(spread < minSpread) minSpread = spread;
}

//+------------------------------------------------------------------+
//| Reset in-memory statistics for the new minute                    |
//+------------------------------------------------------------------+
void ResetAggregators()
{
    tickCount = 0;
    cumulativeSpread = 0;
    maxSpread = 0;
    minSpread = 999999;
}

Re: Raw pricing during Christmas week: what spreads actually do

Posted: Thu Sep 24, 2026 8:24 pm
by PTScalper
How to Deploy the Data

When you review this log ahead of Monday morning, do not just look at the AvgSpread. Look at the MaxSpread against the TickVolume.

The Go/No-Go Trigger: Your hard line should be based on the variance between AvgSpread and MaxSpread. If EURUSD averages a 1.2 pip spread, but the Max Spread consistently spikes to 6 pips on low tick volume, the order book is hollow. You are guaranteed to suffer heavy slippage. That is a strict "No-Go."

Correlating Crosses and Metals: You will mathematically prove that while major pairs (EURUSD, USDJPY) simply slow down, pairs like GBPNZD or XAUUSD become structurally untradable. Their tick volume will halve, but their MaxSpread will quadruple.

Trading holiday price action without order-book depth is like executing code without memory allocation limits—it might run fine 90% of the time, but the resulting crash will be catastrophic and completely avoidable. Establish your statistical threshold, log the ticks, and when the math says the book is empty, close the terminal and enjoy the holidays.