DOM / depth on a retail raw account -- useful for M1 or theatre?
I occasionally watch depth on cTrader when it is available. For FX retail, what you see is not a full exchange book. Treating it like one invents confidence.
Where it still helps me
1. Sensing when the quote is updating in lumps vs smoothly
2. Avoiding market orders when the visible stack looks absurdly thin around a level
3. Confirming "this is a bad moment to be clever," not predicting the next ten pips
Where it hurts: staring at flickering size until I chase. For most of my tickets, pre-marked levels + spread filter + time stop beat DOM storytelling.
Curious how others use depth on majors or gold without over-fitting to retail noise. Do you size off it, or only as a veto?
If your DOM is full of spoofy flicker, zoom out emotionally: use it as a weather check, then go back to the level you marked when calm. The traders who swear by retail depth usually have strict veto rules and tiny hold times. Without those, depth becomes another screen to obsess over while the spread quietly taxes you.
Depth of market on IC Markets: usable for M1 scalps or not?
-
LondonScalper
- Posts: 701
- Joined: Sat Sep 05, 2026 7:54 am
Re: Depth of market on IC Markets: usable for M1 scalps or not?
Hi LondonScalper,LondonScalper wrote: Mon Sep 14, 2026 7:52 pm DOM / depth on a retail raw account -- useful for M1 or theatre?
I occasionally watch depth on cTrader when it is available. For FX retail, what you see is not a full exchange book. Treating it like one invents confidence.
Where it still helps me
1. Sensing when the quote is updating in lumps vs smoothly
2. Avoiding market orders when the visible stack looks absurdly thin around a level
3. Confirming "this is a bad moment to be clever," not predicting the next ten pips
Where it hurts: staring at flickering size until I chase. For most of my tickets, pre-marked levels + spread filter + time stop beat DOM storytelling.
Curious how others use depth on majors or gold without over-fitting to retail noise. Do you size off it, or only as a veto?
If your DOM is full of spoofy flicker, zoom out emotionally: use it as a weather check, then go back to the level you marked when calm. The traders who swear by retail depth usually have strict veto rules and tiny hold times. Without those, depth becomes another screen to obsess over while the spread quietly taxes you.
I don't use it for execution or timing entries. Treating an aggregated retail spot FX feed like a centralized exchange book is usually just an exercise in theatre.Where ECN Level 2 actually holds value is understanding exactly how deep the market is at a given moment, and how large of a position you can trade effectively with a lower spread. It operates best as a pure liquidity gauge. On platforms like cTrader, looking at the VWAP DOM shows you what your realistic average fill price will be if you are moving heavier volume. It tells you immediately if the liquidity providers can absorb your clip size at that price, or if the book is dangerously thin and you are going to slip. Beyond sizing and capacity, trying to scalp off the tape is counterproductive. M1 is full of noise, and the DOM just magnifies that noise into a strobe light of spoofy flickers. Staring at it makes you reactive and tempts you to abandon your plan to chase ghosts.Relying on raw price action and candlestick structure on the 15-minute and Daily charts is vastly superior. Once you have a clean read on the broader market structure and actual liquidity sweeps, the micro-movements on the M1 DOM become entirely irrelevant. Mark your levels, respect the higher timeframe structure, and leave the DOM in the background.
Preserve your own money. Scale with the market's money. Exponential growth is the ultimate key.
Re: Depth of market on IC Markets: usable for M1 scalps or not?
Here is a custom cTrader indicator built in C# that acts exactly as that "weather check" or veto tool.
Instead of forcing you to watch the flickering Level 2 order book, it sits quietly in the corner of your 15-minute or Daily chart. It continuously scans the raw ECN depth, calculates the exact Volume Weighted Average Price (VWAP) for your specific position size, and warns you if the book is too thin to absorb your order without unacceptable slippage.
Instead of forcing you to watch the flickering Level 2 order book, it sits quietly in the corner of your 15-minute or Daily chart. It continuously scans the raw ECN depth, calculates the exact Volume Weighted Average Price (VWAP) for your specific position size, and warns you if the book is too thin to absorb your order without unacceptable slippage.
Preserve your own money. Scale with the market's money. Exponential growth is the ultimate key.
Re: Depth of market on IC Markets: usable for M1 scalps or not?
Liquidity Veto Monitor (cAlgo C#)
Code: Select all
using System;
using cAlgo.API;
using cAlgo.API.Internals;
namespace cAlgo
{
[Indicator(IsOverlay = true, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
public class DOMLiquidityVeto : Indicator
{
[Parameter("Target Volume (Units)", DefaultValue = 100000, MinValue = 1000)]
public double TargetVolume { get; set; }
[Parameter("Max Acceptable Slippage (Pips)", DefaultValue = 0.5)]
public double MaxSlippagePips { get; set; }
private MarketDepth _marketDepth;
protected override void Initialize()
{
// Subscribe to the Level 2 ECN order book for the current symbol
_marketDepth = MarketData.GetMarketDepth(Symbol.Name);
_marketDepth.Updated += OnMarketDepthUpdated;
UpdateLiquidityDisplay();
}
public override void Calculate(int index)
{
// Calculate() is driven by price ticks, but we want updates
// every time the DOM shifts, so we rely on the Updated event.
}
private void OnMarketDepthUpdated()
{
UpdateLiquidityDisplay();
}
private void UpdateLiquidityDisplay()
{
double expectedBuySlippage = CalculateExpectedSlippage(true);
double expectedSellSlippage = CalculateExpectedSlippage(false);
bool isBuyThin = expectedBuySlippage > MaxSlippagePips;
bool isSellThin = expectedSellSlippage > MaxSlippagePips;
string status = "BOOK HEALTHY - CLEAR";
Color textColor = Color.MediumSeaGreen;
if (isBuyThin || isSellThin)
{
status = "THIN BOOK - VETO";
textColor = Color.Crimson;
}
string displayText = $"DOM Liquidity Monitor | Size: {TargetVolume / 100000:F2} Lots\n" +
$"Est. Buy Slippage: {expectedBuySlippage:F1} pips\n" +
$"Est. Sell Slippage: {expectedSellSlippage:F1} pips\n" +
$"Status: {status}";
Chart.DrawStaticText("LiquidityVeto", displayText, VerticalAlignment.Top, HorizontalAlignment.Right, textColor);
}
private double CalculateExpectedSlippage(bool isBuy)
{
// Access the Ask stack for buying, Bid stack for selling
var entries = isBuy ? _marketDepth.AskEntries : _marketDepth.BidEntries;
// If the book is empty, return a massive slippage penalty
if (entries == null || entries.Count == 0) return 999.9;
double accumulatedVolume = 0;
double volumeWeightedPriceSum = 0;
double topOfBookPrice = entries[0].Price;
for (int i = 0; i < entries.Count; i++)
{
double volumeNeeded = TargetVolume - accumulatedVolume;
double volumeToTake = Math.Min(entries[i].Volume, volumeNeeded);
volumeWeightedPriceSum += volumeToTake * entries[i].Price;
accumulatedVolume += volumeToTake;
if (accumulatedVolume >= TargetVolume)
break;
}
if (accumulatedVolume < TargetVolume)
{
// The entire depth of the book cannot fill this position size
return 999.9;
}
double vwap = volumeWeightedPriceSum / TargetVolume;
double slippage = isBuy ? (vwap - topOfBookPrice) : (topOfBookPrice - vwap);
return slippage / Symbol.PipSize;
}
}
}Preserve your own money. Scale with the market's money. Exponential growth is the ultimate key.
Re: Depth of market on IC Markets: usable for M1 scalps or not?
How it solves the M1 noise problem
Mathematical rather than Visual: It strips away the emotional reaction of watching orders flicker. It loops through the MarketDepth arrays in real-time, matching your desired volume against the available liquidity blocks.
True Sizing: If you try to push 5 lots but the top of the book only has 1 lot available, the script calculates the exact blended price (VWAP) across the next several liquidity tiers and outputs your expected slippage in pips.
The Strict Veto: If that calculated slippage exceeds your Max Acceptable Slippage parameter, the indicator turns red and screams VETO.
You can leave this running on your higher timeframes (M15 or D1). When price reaches your pre-marked structural levels, you just glance at the top right of the chart to ensure the ECN book can actually handle your clip size before executing the trade.
Mathematical rather than Visual: It strips away the emotional reaction of watching orders flicker. It loops through the MarketDepth arrays in real-time, matching your desired volume against the available liquidity blocks.
True Sizing: If you try to push 5 lots but the top of the book only has 1 lot available, the script calculates the exact blended price (VWAP) across the next several liquidity tiers and outputs your expected slippage in pips.
The Strict Veto: If that calculated slippage exceeds your Max Acceptable Slippage parameter, the indicator turns red and screams VETO.
You can leave this running on your higher timeframes (M15 or D1). When price reaches your pre-marked structural levels, you just glance at the top right of the chart to ensure the ECN book can actually handle your clip size before executing the trade.
Preserve your own money. Scale with the market's money. Exponential growth is the ultimate key.
Re: Depth of market on IC Markets: usable for M1 scalps or not?
Here is the updated script. Since the DOM updates multiple times per second, writing to a file on every tick while the book is thin would immediately lock the thread and create a massive, unreadable CSV.
To solve this, I added a Log Cooldown parameter (acting as a debounce) and elevated the indicator's permissions to access the local file system.
To solve this, I added a Log Cooldown parameter (acting as a debounce) and elevated the indicator's permissions to access the local file system.
Preserve your own money. Scale with the market's money. Exponential growth is the ultimate key.
Re: Depth of market on IC Markets: usable for M1 scalps or not?
Liquidity Veto Logger (cAlgo C#)
Code: Select all
using System;
using System.IO;
using cAlgo.API;
using cAlgo.API.Internals;
namespace cAlgo
{
// AccessRights.FileSystem is required to write the CSV
[Indicator(IsOverlay = true, TimeZone = TimeZones.UTC, AccessRights = AccessRights.FileSystem)]
public class DOMLiquidityVetoLogger : Indicator
{
[Parameter("Target Volume (Units)", DefaultValue = 100000, MinValue = 1000)]
public double TargetVolume { get; set; }
[Parameter("Max Acceptable Slippage (Pips)", DefaultValue = 0.5)]
public double MaxSlippagePips { get; set; }
[Parameter("Log Cooldown (Seconds)", DefaultValue = 60, MinValue = 1)]
public int LogCooldownSeconds { get; set; }
private MarketDepth _marketDepth;
private string _csvFilePath;
private DateTime _lastLogTime;
protected override void Initialize()
{
// Set up the CSV file path in the Documents folder
string folderPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "cAlgo", "LiquidityLogs");
Directory.CreateDirectory(folderPath);
_csvFilePath = Path.Combine(folderPath, $"{Symbol.Name}_ThinBook_Vetoes.csv");
// Write the CSV header if the file doesn't exist yet
if (!File.Exists(_csvFilePath))
{
File.AppendAllText(_csvFilePath, "Time(UTC),Symbol,Target Volume,Buy Slippage (Pips),Sell Slippage (Pips)\n");
}
// Initialize last log time to a past date to allow immediate logging
_lastLogTime = DateTime.MinValue;
// Subscribe to the Level 2 ECN order book
_marketDepth = MarketData.GetMarketDepth(Symbol.Name);
_marketDepth.Updated += OnMarketDepthUpdated;
UpdateLiquidityDisplay();
}
public override void Calculate(int index)
{
// Driven by MarketDepth.Updated event, not price ticks.
}
private void OnMarketDepthUpdated()
{
UpdateLiquidityDisplay();
}
private void UpdateLiquidityDisplay()
{
double expectedBuySlippage = CalculateExpectedSlippage(true);
double expectedSellSlippage = CalculateExpectedSlippage(false);
bool isBuyThin = expectedBuySlippage > MaxSlippagePips;
bool isSellThin = expectedSellSlippage > MaxSlippagePips;
string status = "BOOK HEALTHY - CLEAR";
Color textColor = Color.MediumSeaGreen;
if (isBuyThin || isSellThin)
{
status = "THIN BOOK - VETO";
textColor = Color.Crimson;
LogVetoEvent(expectedBuySlippage, expectedSellSlippage);
}
string displayText = $"DOM Liquidity Monitor | Size: {TargetVolume / 100000:F2} Lots\n" +
$"Est. Buy Slippage: {expectedBuySlippage:F1} pips\n" +
$"Est. Sell Slippage: {expectedSellSlippage:F1} pips\n" +
$"Status: {status}";
Chart.DrawStaticText("LiquidityVeto", displayText, VerticalAlignment.Top, HorizontalAlignment.Right, textColor);
}
private void LogVetoEvent(double buySlippage, double sellSlippage)
{
// Prevent spamming the CSV on every DOM micro-update
if ((Server.Time - _lastLogTime).TotalSeconds < LogCooldownSeconds)
return;
try
{
string logLine = $"{Server.Time:yyyy-MM-dd HH:mm:ss},{Symbol.Name},{TargetVolume},{buySlippage:F1},{sellSlippage:F1}\n";
File.AppendAllText(_csvFilePath, logLine);
_lastLogTime = Server.Time;
}
catch (Exception ex)
{
Print($"Failed to write to CSV: {ex.Message}");
}
}
private double CalculateExpectedSlippage(bool isBuy)
{
var entries = isBuy ? _marketDepth.AskEntries : _marketDepth.BidEntries;
if (entries == null || entries.Count == 0) return 999.9;
double accumulatedVolume = 0;
double volumeWeightedPriceSum = 0;
double topOfBookPrice = entries[0].Price;
for (int i = 0; i < entries.Count; i++)
{
double volumeNeeded = TargetVolume - accumulatedVolume;
double volumeToTake = Math.Min(entries[i].Volume, volumeNeeded);
volumeWeightedPriceSum += volumeToTake * entries[i].Price;
accumulatedVolume += volumeToTake;
if (accumulatedVolume >= TargetVolume)
break;
}
if (accumulatedVolume < TargetVolume) return 999.9;
double vwap = volumeWeightedPriceSum / TargetVolume;
double slippage = isBuy ? (vwap - topOfBookPrice) : (topOfBookPrice - vwap);
return slippage / Symbol.PipSize;
}
}
}Preserve your own money. Scale with the market's money. Exponential growth is the ultimate key.
Re: Depth of market on IC Markets: usable for M1 scalps or not?
Key Changes
AccessRights = AccessRights.FileSystem: When you build this, cTrader will prompt you to authorize file system access. This is required for System.IO operations.
The Debounce Logic: The LogCooldownSeconds parameter defaults to 60. If the book is thin at 14:00:00, it logs the event. If the book stays thin, it ignores all further DOM updates until 14:01:00, preventing a massive I/O bottleneck on your CPU.
CSV Location: Logs are automatically saved to Documents\cAlgo\LiquidityLogs\[Symbol]_ThinBook_Vetoes.csv. You can pull this straight into Excel or a Python script to map out exactly which hours and sessions consistently lack the depth to absorb your standard position sizes.
AccessRights = AccessRights.FileSystem: When you build this, cTrader will prompt you to authorize file system access. This is required for System.IO operations.
The Debounce Logic: The LogCooldownSeconds parameter defaults to 60. If the book is thin at 14:00:00, it logs the event. If the book stays thin, it ignores all further DOM updates until 14:01:00, preventing a massive I/O bottleneck on your CPU.
CSV Location: Logs are automatically saved to Documents\cAlgo\LiquidityLogs\[Symbol]_ThinBook_Vetoes.csv. You can pull this straight into Excel or a Python script to map out exactly which hours and sessions consistently lack the depth to absorb your standard position sizes.
Preserve your own money. Scale with the market's money. Exponential growth is the ultimate key.