Expresso Offset Levels Indicator for cTrader
Shows High + offset and Low – offset for the current bar and prints the last two digits as a quick reference. This is useful for situational analysis style breakout trades (Tom Hougaard style), where you often bracket a signal bar, go long above, short below, and apply a small offset to avoid noise and spread.
What this indicator does
It draws two live levels for the current bar:
- High + offset (for long stop placement)
- Low – offset (for short stop placement)
It also prints the last two digits of those levels, because most of the time you only need a quick sanity check.
The levels update while the bar is forming and settle when the bar closes. This is a utility for clean execution, not a prediction tool.
How it fits a breakout approach
If you trade breakouts in a structured way, you frequently need to bracket a bar: long above, short below, with a small offset. This tool keeps the math out of your head and on the chart.
- Small offsets: 2-3 points (avoid noise/spread)
- Larger offsets: instrument and volatility dependent
- Works on any timeframe and any symbol where you bracket bars
If you want to build a repeatable morning routine, refine your entry logic, or fix your execution under pressure, you can book a session via my mentorship page.
Go to mentorship and bookingHow to install it in cTrader
- Open cTrader and go to the Automate tab.
- Create a new Indicator.
- Delete the template code and paste the code from the section below.
- Click Build to compile.
- Go back to the Trade tab and add the indicator to your chart.
- Set your offset value (example: 17 for DAX Expresso, smaller offsets like 2-3 for other bar bracketing setups).
Not a signal service. Not a trading system. Not a promise of anything. It only visualizes levels you already intend to use for execution.
Show full cTrader indicator code (copy & paste into Automate)
using System;
using cAlgo.API;
namespace cAlgo
{
[Indicator(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None, IsOverlay = true, AutoRescale = false)]
public class ExpressoOffsetLevels : Indicator
{
[Parameter("Offset (price units)", DefaultValue = 17.0)]
public double Offset { get; set; }
protected override void Initialize()
{
// Nothing to init
}
public override void Calculate(int index)
{
// Only work on the current (last) bar
if (index != Bars.Count - 1)
return;
var high = Bars.HighPrices[index];
var low = Bars.LowPrices[index];
var highLevel = high + Offset;
var lowLevel = low - Offset;
// Draw lines
ChartObjects.DrawHorizontalLine("ExpressoHighLine", highLevel, Colors.Lime);
ChartObjects.DrawHorizontalLine("ExpressoLowLine", lowLevel, Colors.Red);
// Last 2 digits helper
string highLast2 = GetLastTwoDigits(highLevel);
string lowLast2 = GetLastTwoDigits(lowLevel);
// Place labels near the bar (default font size)
ChartObjects.DrawText(
"ExpressoHighLabel",
highLast2,
index,
highLevel,
VerticalAlignment.Bottom,
HorizontalAlignment.Center,
Colors.Lime
);
ChartObjects.DrawText(
"ExpressoLowLabel",
lowLast2,
index,
lowLevel,
VerticalAlignment.Top,
HorizontalAlignment.Center,
Colors.Red
);
}
private string GetLastTwoDigits(double price)
{
// Round to symbol digits, then take last two of integer part
var rounded = Math.Round(price, Symbol.Digits);
var intPart = (long)Math.Round(rounded, 0);
var last2 = intPart % 100;
return last2.ToString("D2");
}
}
}
This indicator provides no trading signals, no financial advice, and no guarantee of accuracy or suitability. You are fully responsible for your own trading decisions, execution, and risk.
