Advertisement IC Markets

FundingPips: weekend gap policy vs accidental holds

Discuss 1-minute to 15-minute price action setups, fading intraday momentum, key support/resistance zones, and proven short-term trading methodologies.
LondonScalper
Posts: 701
Joined: Sat Sep 05, 2026 7:54 am

FundingPips: weekend gap policy vs accidental holds

Post by LondonScalper »

FundingPips weekend gap policy vs accidental holds

Accidental weekend holds on FX or metals are a classic funded-account landmine. I am less interested in marketing pages and more in what actually happens if a platform glitch, forgotten micro lot, or Friday flatten fail leaves risk over the weekend.

Questions for anyone with real experience (any firm, not only FundingPips):
  • Is an accidental hold an automatic breach, a warning, or a “close and explain”?
  • Does gap slippage against you count fully toward daily loss?
  • Any difference between FX majors and XAU on weekend policy?
  • What flatten checklist do you run Friday afternoon so this never becomes a forum post?
My own Friday drill: positions list screenshot, alarm 60 minutes before my hard flat time, and no new risk after that alarm. Curious how strict various firms are when the mistake is operational rather than intentional hold trading. If you have a war story — anonymised is fine — the operational detail helps more than another marketing FAQ quote.
Recommended broker for automated trading & scalping IC Markets
PTScalper
Site Admin
Posts: 3027
Joined: Mon Jul 20, 2026 1:28 pm

Re: FundingPips: weekend gap policy vs accidental holds

Post by PTScalper »

LondonScalper wrote: Fri Sep 18, 2026 5:54 pm FundingPips weekend gap policy vs accidental holds

Accidental weekend holds on FX or metals are a classic funded-account landmine. I am less interested in marketing pages and more in what actually happens if a platform glitch, forgotten micro lot, or Friday flatten fail leaves risk over the weekend.

Questions for anyone with real experience (any firm, not only FundingPips):
  • Is an accidental hold an automatic breach, a warning, or a “close and explain”?
  • Does gap slippage against you count fully toward daily loss?
  • Any difference between FX majors and XAU on weekend policy?
  • What flatten checklist do you run Friday afternoon so this never becomes a forum post?
My own Friday drill: positions list screenshot, alarm 60 minutes before my hard flat time, and no new risk after that alarm. Curious how strict various firms are when the mistake is operational rather than intentional hold trading. If you have a war story — anonymised is fine — the operational detail helps more than another marketing FAQ quote.
Hi LondonScalper,

Yes, over the weekend there can absolutely be a massive spike in price, and spreads regularly blow out to toxic levels during the Sunday market open. That’s just the reality of low-liquidity rollover.

Before getting into the operational details, I’ll put my bias on the table: I do not trade prop firm challenges because I simply do not believe in them. Forex trading is hard enough on its own; why add another layer of artificial rules, daily drawdown formulas, and arbitrary holding restrictions? You are trading against the firm's risk desk as much as the market. But to answer your questions regarding how these automated risk engines actually work:

1. Is an accidental hold a breach or auto-closed?
It depends entirely on the firm and the specific account model. For FundingPips specifically, the outcome splits into two paths based on their 2026 rule updates:

1-Step & Standard 2-Step Master Accounts: They implemented a temporary restriction where the system automatically force-closes all open positions at Friday market close. It is an automated liquidation, but not a hard breach.

Zero Master Accounts: Holding over the weekend is a hard baseline rule. If a micro lot is left open, it triggers an immediate, unappealable hard breach and account termination. There is no "close and explain" leeway with automated risk plugins.
Preserve your own money. Scale with the market's money. Exponential growth is the ultimate key.
PTScalper
Site Admin
Posts: 3027
Joined: Mon Jul 20, 2026 1:28 pm

Re: FundingPips: weekend gap policy vs accidental holds

Post by PTScalper »

2. Does gap slippage count toward daily loss?

100% yes. If a firm allows weekend holding (such as during evaluation phases), any Sunday gap slippage is executed at the first available tick. If XAUUSD gaps $15 against your position, the risk engine calculates your equity drop based on that exact fill price. If that sudden drop pushes your equity past the 3% or 5% daily drawdown threshold, the account is blown before the spread even tightens. As someone who relies heavily on raw price action structure rather than lagging indicators, I can tell you that these Sunday open liquidity sweeps will completely disregard any daily or 15-minute technical levels you had mapped out.

3. FX Majors vs. XAU?

Policy-wise, firms group them together for weekend flat rules. Risk-wise? Holding Gold over a weekend is financial Russian roulette compared to holding EURUSD. Geopolitical news breaks on Saturdays, causing Gold to gap violently, and the Sunday open spreads on metals are notoriously massive compared to spot forex pairs.

4. Friday Flatten Checklist

Your drill (screenshot, 60-min alarm, hard stop on new risk) is solid. The best operational upgrade is writing a simple "Friday Flat" execution script (like an MQL4 or MQL5 EA) deployed on your VPS. You hard-code it to execute a global "Close All" command at 20:55 broker time, overriding human error entirely. Don't rely on memory when an account is on the line.
Preserve your own money. Scale with the market's money. Exponential growth is the ultimate key.
PTScalper
Site Admin
Posts: 3027
Joined: Mon Jul 20, 2026 1:28 pm

Re: FundingPips: weekend gap policy vs accidental holds

Post by PTScalper »

Pine Script: FundingPips Weekend Gap Policy vs Accidental Holds

To help visualize why holding over the weekend is dangerous regardless of account rules, here is a Pine Script that highlights your "Friday Danger Zone" and measures the actual Sunday gap slippage in ticks based purely on raw price data.

Code: Select all

//@version=5
indicator("FundingPips Weekend Gap Policy vs Accidental Holds", overlay=true)

// Inputs
dangerZoneHour = input.int(15, title="Friday Danger Zone Start Hour (Exchange Time)", minval=0, maxval=23, tooltip="Hour to flatten all positions")

// Detect Friday Danger Zone
isFriday = dayofweek == dayofweek.friday
isDangerZone = isFriday and hour >= dangerZoneHour

// Highlight the background during the Danger Zone so you don't accidentally enter new trades
bgcolor(isDangerZone ? color.new(color.red, 85) : na, title="Danger Zone Background")

// Track Friday Close Price
var float fridayClose = na
if isFriday and not isFriday[1]
    fridayClose := na // Reset at the start of a new Friday
if isFriday
    fridayClose := close

// Detect First Bar of the New Week (Sunday/Monday open)
newWeek = ta.change(time("W"))

// Calculate and plot the weekend gap
if newWeek and not na(fridayClose)
    gapSize = open - fridayClose
    gapTicks = gapSize / syminfo.mintick
    gapColor = color.new(color.red, 20) // Always red; gap risk is danger regardless of direction
    
    // Draw the gap trajectory line
    line.new(bar_index[1], fridayClose, bar_index, open, color=gapColor, width=2, style=line.style_arrow_right)
    
    // Label the exact slippage risk in ticks
    label.new(bar_index, open, text="Weekend Gap Risk: " + str.tostring(math.abs(math.round(gapTicks))) + " ticks", color=gapColor, textcolor=color.white, style=gapSize > 0 ? label.style_label_down : label.style_label_up, size=size.small)
    
    fridayClose := na // Reset until next week
Preserve your own money. Scale with the market's money. Exponential growth is the ultimate key.
PTScalper
Site Admin
Posts: 3027
Joined: Mon Jul 20, 2026 1:28 pm

Re: FundingPips: weekend gap policy vs accidental holds

Post by PTScalper »

MT4 Indicator (FundingPips_WeekendGap.mq4)

This MQL4 indicator dynamically shades the Friday "Danger Zone" across the chart window and plots a trendline and point-measurement label across the Sunday/Monday gap.

Code: Select all

//+------------------------------------------------------------------+
//|                                   FundingPips_WeekendGap.mq4     |
//|                        Gap Policy & Accidental Hold Visualizer   |
//+------------------------------------------------------------------+
#property copyright "Trading Tools"
#property link      ""
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_plots 0

input int      InpDangerZoneHour  = 20;            // Friday Danger Zone Start Hour (Broker Time)
input color    InpDangerZoneColor = C'45,15,15';  // Danger Zone Shading Color
input color    InpGapLineColor    = clrRed;       // Weekend Gap Trajectory Color
input color    InpTextColor       = clrWhite;     // Gap Label Text Color
input string   InpPrefix          = "FP_WGap_";   // Object Name Prefix

int OnInit()
{
   return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason)
{
   ObjectsDeleteAll(0, InpPrefix);
   ChartRedraw(0);
}

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
   if(rates_total < 2) return(0);

   int start = (prev_calculated > 1) ? prev_calculated - 1 : 1;

   for(int i = start; i < rates_total; i++)
   {
      MqlDateTime dtPrev, dtCurr;
      TimeToStruct(time[i - 1], dtPrev);
      TimeToStruct(time[i], dtCurr);

      // 1. Highlight Friday Danger Zone
      if(dtCurr.day_of_week == 5 && dtCurr.hour >= InpDangerZoneHour)
      {
         string zoneName = InpPrefix + "Zone_" + TimeToString(time[i], TIME_DATE);
         if(ObjectFind(0, zoneName) < 0)
         {
            // Create shading box (non-selectable so it won't distort chart auto-scaling)
            ObjectCreate(0, zoneName, OBJ_RECTANGLE, 0, time[i], 2000000.0, time[i] + PeriodSeconds(), 0.00001);
            ObjectSetInteger(0, zoneName, OBJPROP_COLOR, InpDangerZoneColor);
            ObjectSetInteger(0, zoneName, OBJPROP_BACK, true);
            ObjectSetInteger(0, zoneName, OBJPROP_FILL, true);
            ObjectSetInteger(0, zoneName, OBJPROP_SELECTABLE, false);
         }
         else
         {
            // Dynamically extend to cover subsequent Friday bars until market close
            ObjectSetInteger(0, zoneName, OBJPROP_TIME, 1, time[i] + PeriodSeconds());
         }
      }

      // 2. Measure Weekend Gap (Friday close -> Sunday/Monday open)
      if(dtPrev.day_of_week == 5 && (dtCurr.day_of_week == 0 || dtCurr.day_of_week == 1))
      {
         double gapSize = open[i] - close[i - 1];
         double gapPoints = MathAbs(gapSize) / _Point;

         string lineName = InpPrefix + "Line_" + TimeToString(time[i], TIME_DATE);
         if(ObjectFind(0, lineName) < 0)
         {
            ObjectCreate(0, lineName, OBJ_TREND, 0, time[i - 1], close[i - 1], time[i], open[i]);
            ObjectSetInteger(0, lineName, OBJPROP_COLOR, InpGapLineColor);
            ObjectSetInteger(0, lineName, OBJPROP_WIDTH, 2);
            ObjectSetInteger(0, lineName, OBJPROP_STYLE, STYLE_SOLID);
            ObjectSetInteger(0, lineName, OBJPROP_RAY_RIGHT, false);
            ObjectSetInteger(0, lineName, OBJPROP_BACK, false);
         }

         string labelName = InpPrefix + "Lbl_" + TimeToString(time[i], TIME_DATE);
         if(ObjectFind(0, labelName) < 0)
         {
            ObjectCreate(0, labelName, OBJ_TEXT, 0, time[i], open[i]);
            ObjectSetString(0, labelName, OBJPROP_TEXT, StringFormat(" Weekend Gap: %.0f pts", gapPoints));
            ObjectSetInteger(0, labelName, OBJPROP_COLOR, InpTextColor);
            ObjectSetInteger(0, labelName, OBJPROP_FONTSIZE, 9);
            ObjectSetInteger(0, labelName, OBJPROP_ANCHOR, ANCHOR_LEFT);
         }
      }
   }

   return(rates_total);
}
Preserve your own money. Scale with the market's money. Exponential growth is the ultimate key.
PTScalper
Site Admin
Posts: 3027
Joined: Mon Jul 20, 2026 1:28 pm

Re: FundingPips: weekend gap policy vs accidental holds

Post by PTScalper »

MT5 Indicator (FundingPips_WeekendGap.mq5)

The MQL5 version uses native 64-bit chart event dispatching and standard forward iteration across historical rates arrays.

Code: Select all

//+------------------------------------------------------------------+
//|                                   FundingPips_WeekendGap.mq5     |
//|                        Gap Policy & Accidental Hold Visualizer   |
//+------------------------------------------------------------------+
#property copyright "Trading Tools"
#property link      ""
#property version   "1.00"
#property indicator_chart_window
#property indicator_plots 0

input int      InpDangerZoneHour  = 20;            // Friday Danger Zone Start Hour (Broker Time)
input color    InpDangerZoneColor = C'45,15,15';  // Danger Zone Shading Color
input color    InpGapLineColor    = clrRed;       // Weekend Gap Trajectory Color
input color    InpTextColor       = clrWhite;     // Gap Label Text Color
input string   InpPrefix          = "FP_WGap_";   // Object Name Prefix

int OnInit()
{
   return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason)
{
   ObjectsDeleteAll(0, InpPrefix);
   ChartRedraw(0);
}

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
   if(rates_total < 2) return(0);

   int start = (prev_calculated > 1) ? prev_calculated - 1 : 1;

   for(int i = start; i < rates_total; i++)
   {
      MqlDateTime dtPrev, dtCurr;
      TimeToStruct(time[i - 1], dtPrev);
      TimeToStruct(time[i], dtCurr);

      // 1. Highlight Friday Danger Zone
      if(dtCurr.day_of_week == 5 && dtCurr.hour >= InpDangerZoneHour)
      {
         string zoneName = InpPrefix + "Zone_" + TimeToString(time[i], TIME_DATE);
         if(ObjectFind(0, zoneName) < 0)
         {
            ObjectCreate(0, zoneName, OBJ_RECTANGLE, 0, time[i], 2000000.0, time[i] + PeriodSeconds(), 0.00001);
            ObjectSetInteger(0, zoneName, OBJPROP_COLOR, InpDangerZoneColor);
            ObjectSetInteger(0, zoneName, OBJPROP_BACK, true);
            ObjectSetInteger(0, zoneName, OBJPROP_FILL, true);
            ObjectSetInteger(0, zoneName, OBJPROP_SELECTABLE, false);
         }
         else
         {
            ObjectSetInteger(0, zoneName, OBJPROP_TIME, 1, time[i] + PeriodSeconds());
         }
      }

      // 2. Measure Weekend Gap (Friday close -> Sunday/Monday open)
      if(dtPrev.day_of_week == 5 && (dtCurr.day_of_week == 0 || dtCurr.day_of_week == 1))
      {
         double gapSize = open[i] - close[i - 1];
         double gapPoints = MathAbs(gapSize) / _Point;

         string lineName = InpPrefix + "Line_" + TimeToString(time[i], TIME_DATE);
         if(ObjectFind(0, lineName) < 0)
         {
            ObjectCreate(0, lineName, OBJ_TREND, 0, time[i - 1], close[i - 1], time[i], open[i]);
            ObjectSetInteger(0, lineName, OBJPROP_COLOR, InpGapLineColor);
            ObjectSetInteger(0, lineName, OBJPROP_WIDTH, 2);
            ObjectSetInteger(0, lineName, OBJPROP_STYLE, STYLE_SOLID);
            ObjectSetInteger(0, lineName, OBJPROP_RAY_RIGHT, false);
            ObjectSetInteger(0, lineName, OBJPROP_BACK, false);
         }

         string labelName = InpPrefix + "Lbl_" + TimeToString(time[i], TIME_DATE);
         if(ObjectFind(0, labelName) < 0)
         {
            ObjectCreate(0, labelName, OBJ_TEXT, 0, time[i], open[i]);
            ObjectSetString(0, labelName, OBJPROP_TEXT, StringFormat(" Weekend Gap: %.0f pts", gapPoints));
            ObjectSetInteger(0, labelName, OBJPROP_COLOR, InpTextColor);
            ObjectSetInteger(0, labelName, OBJPROP_FONTSIZE, 9);
            ObjectSetInteger(0, labelName, OBJPROP_ANCHOR, ANCHOR_LEFT);
         }
      }
   }

   return(rates_total);
}
Preserve your own money. Scale with the market's money. Exponential growth is the ultimate key.
PTScalper
Site Admin
Posts: 3027
Joined: Mon Jul 20, 2026 1:28 pm

Re: FundingPips: weekend gap policy vs accidental holds

Post by PTScalper »

Implementation Details

Auto-Scaling Protection: Background shading rectangles use OBJPROP_SELECTABLE = false and OBJPROP_BACK = true so MetaTrader excludes the dummy vertical bounds (2000000.0 down to 0.00001) from its auto-scale routines.

Broker Time Alignment: Set InpDangerZoneHour to match your prop firm's server time (most run on GMT+2/GMT+3 DST). Setting this to 20 or 21 marks the danger window roughly 2–3 hours before the 23:59 server close.

Gap Sizing Units: Gaps are plotted in standard points (_Point). For 5-digit forex pairs, 100 points = 10 pips; on Gold (XAUUSD), 100 points = $1.00 move.
Preserve your own money. Scale with the market's money. Exponential growth is the ultimate key.
PTScalper
Site Admin
Posts: 3027
Joined: Mon Jul 20, 2026 1:28 pm

Re: FundingPips: weekend gap policy vs accidental holds

Post by PTScalper »

These Expert Advisors use a 1-second timer rather than waiting for incoming market ticks. This guarantees the closure executes exactly at your specified time, even if market liquidity completely dries up minutes before the Friday bell.

MT4 Auto-Flatten EA
In MQL4, market trades and pending orders are stored in the same pool. The EA iterates backwards through OrdersTotal() to prevent index-shifting errors when deleting items from the array.

Code: Select all

//+------------------------------------------------------------------+
//|                                     Friday_AutoFlatten_EA.mq4    |
//|                        Prevents accidental holds & prop breaches |
//+------------------------------------------------------------------+
#property strict

input int    FlattenHour    = 22;    // Friday Flatten Hour (Broker Time)
input int    FlattenMinute  = 50;    // Friday Flatten Minute (Broker Time)
input int    MaxSlippage    = 30;    // Max Slippage in Points
input bool   DeletePending  = true;  // Delete Pending Orders Too?

int OnInit() {
    // 1-second timer guarantees execution regardless of incoming tick volume
    EventSetTimer(1); 
    return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason) {
    EventKillTimer();
}

void OnTimer() {
    datetime now = TimeCurrent();
    MqlDateTime dt;
    TimeToStruct(now, dt);
    
    // Trigger only on Friday at or after the target time
    if(dt.day_of_week == 5 && (dt.hour > FlattenHour || (dt.hour == FlattenHour && dt.min >= FlattenMinute))) {
        if(OrdersTotal() > 0) {
            FlattenAll();
        }
    }
}

void FlattenAll() {
    // Iterate backwards so array index shifts don't cause skipped orders
    for(int i = OrdersTotal() - 1; i >= 0; i--) {
        if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
            
            // Close Open Market Positions
            if(OrderType() <= OP_SELL) {
                RefreshRates();
                double closePrice = (OrderType() == OP_BUY) ? MarketInfo(OrderSymbol(), MODE_BID) : MarketInfo(OrderSymbol(), MODE_ASK);
                
                if(!OrderClose(OrderTicket(), OrderLots(), closePrice, MaxSlippage, clrRed)) {
                    Print("Failed to close Market Order ", OrderTicket(), ". Error: ", GetLastError());
                }
            } 
            // Delete Pending Orders
            else if(DeletePending) {
                if(!OrderDelete(OrderTicket(), clrRed)) {
                    Print("Failed to delete Pending Order ", OrderTicket(), ". Error: ", GetLastError());
                }
            }
        }
    }
}
Preserve your own money. Scale with the market's money. Exponential growth is the ultimate key.
PTScalper
Site Admin
Posts: 3027
Joined: Mon Jul 20, 2026 1:28 pm

Re: FundingPips: weekend gap policy vs accidental holds

Post by PTScalper »

MT5 Auto-Flatten EA

In MQL5, active positions and pending orders are separated. MT5's PositionClose() operates asynchronously, meaning it returns true the moment the request passes internal pre-validation, even before the trade server finishes updating the position registry. Hooking this into the OnTimer() loop is the safest architectural pattern—it continuously queries actual position state and fires close requests every second until the registry is truly empty.

Code: Select all

//+------------------------------------------------------------------+
//|                                     Friday_AutoFlatten_EA.mq5    |
//|                        Prevents accidental holds & prop breaches |
//+------------------------------------------------------------------+
#property strict
#include <Trade\Trade.mqh>

input int    FlattenHour    = 22;    // Friday Flatten Hour (Broker Time)
input int    FlattenMinute  = 50;    // Friday Flatten Minute (Broker Time)
input ulong  MaxSlippage    = 30;    // Max Slippage in Points
input bool   DeletePending  = true;  // Delete Pending Orders Too?

CTrade trade;

int OnInit() {
    // Magic number '0' allows the EA to close manual trades and trades opened by other EAs
    trade.SetExpertMagicNumber(0); 
    trade.SetDeviationInPoints(MaxSlippage);
    EventSetTimer(1); 
    return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason) {
    EventKillTimer();
}

void OnTimer() {
    datetime now = TimeCurrent();
    MqlDateTime dt;
    TimeToStruct(now, dt);
    
    if(dt.day_of_week == 5 && (dt.hour > FlattenHour || (dt.hour == FlattenHour && dt.min >= FlattenMinute))) {
        if(PositionsTotal() > 0 || (DeletePending && OrdersTotal() > 0)) {
            FlattenAll();
        }
    }
}

void FlattenAll() {
    // 1. Close Open Market Positions
    for(int i = PositionsTotal() - 1; i >= 0; i--) {
        ulong ticket = PositionGetTicket(i);
        if(ticket > 0) {
            trade.PositionClose(ticket);
        }
    }
    
    // 2. Delete Pending Orders
    if(DeletePending) {
        for(int i = OrdersTotal() - 1; i >= 0; i--) {
            ulong ticket = OrderGetTicket(i);
            if(ticket > 0) {
                trade.OrderDelete(ticket);
            }
        }
    }
}
Preserve your own money. Scale with the market's money. Exponential growth is the ultimate key.
PTScalper
Site Admin
Posts: 3027
Joined: Mon Jul 20, 2026 1:28 pm

Re: FundingPips: weekend gap policy vs accidental holds

Post by PTScalper »

Implementation Rules

Chart Deployment: You only need to attach this EA to a single chart on your VPS. Because the logic scans the global OrdersTotal() and PositionsTotal() arrays rather than filtering by symbol, it acts as a global master-switch for the entire account.

Auto-Trading Toggle: Ensure "Allow live trading" (MT4) or "Allow Algo Trading" (MT5) is enabled in your terminal settings, or the CTrade commands will be silently rejected.
Preserve your own money. Scale with the market's money. Exponential growth is the ultimate key.
Post Reply