Market Profile MetaTrader indicator | FREE Forex Trading Indicator

Market Profile MetaTrader indicator is a traditional Market Profile implementation that can display price density over time, highlighting the most important price levels, value area, and control value of a given trading session. This indicator, which can be applied to timeframes ranging from M1 to D1, displays the Market Profile for daily, weekly, monthly, or even intraday sessions. Lower timeframes provide greater precision. Higher timeframes are advised for improved visibility. A free-draw rectangle session can also be used to create a custom market profile on any timeframe. To draw the profile’s blocks, you can choose from six different colour schemes. It is also possible to draw profiles as a simple colour histogram.

Alternatively, you can colour the profile based on whether the bars are bullish or bearish. This indicator is based solely on price action and makes no use of standard MetaTrader indicators. It is compatible with both the MetaTrader 4 and MetaTrader 5 platforms.

Input parameters


  • Session (default = Daily) — trading session for market profile: Daily, Weekly, Monthly, Intraday, and Rectangle. For a rectangle session to get calculated, a rectangle chart object with the name starting with MPR should be added to the chart. Pressing ‘r’ on the keyboard will add a properly named rectangle object automatically.
  • StartFromDate (default = __DATE__) — if StartFromCurrentSession is false, then the indicator will start drawing profiles from this date. It draws to the past. For example, if you set it 2018-01-20 and SessionsToCount is 2, then it will draw the profiles for 2018-01-20 and 2018-01-19.
  • StartFromCurrentSession (default = true) — if true, then the indicator starts drawing from today, else — from the date given in StartFromDate.
  • SessionsToCount (default = 2) — for how many trading sessions to draw the market profiles.
  • EnableDevelopingPOC (default = false) — if true, multiple horizontal lines will be drawn to depict how the Point of Control developed through the session.
  • ValueAreaPercentage (default = 70) — a percentage share of the session’s TPOs to include in the Value Area.

Looks and colors

  • ColorScheme (default = Blue to Red) — color scheme for profile’s blocks:
    • blue to red
    • red to green
    • green to blue
    • yellow to cyan
    • magenta to yellow
    • cyan to magenta
  • SingleColor (default = clrBlue) — if ColorScheme is set to Single Color, this color will be used to draw market profiles.
  • ColorBullBear (default = false) — if true, the color of the profile blocks depends not on the age of the origin bar but on its direction.
  • MedianColor (default = clrWhite) — the color of the control value (median).
  • ValueAreaSidesColor (default = clrWhite) — the color of the value area side borders.
  • ValueAreaHighLowColor (default = clrWhite) — the color of the value area top and bottom borders.
  • MedianStyle (default = STYLE_SOLID) — the Point of Control (median) line style.
  • MedianRayStyle (default = STYLE_DASH) — the Point of Control (median) ray line style.
  • ValueAreaSidesStyle (default = STYLE_SOLID) — the style of the value area side borders.
  • ValueAreaHighLowStyle (default = STYLE_SOLID) — the style of the value area top and bottom borders.
  • ValueAreaRayHighLowStyle (default = STYLE_DOT) — the style of the value area top and bottom rays.
  • MedianWidth (default = 1) — the Point of Control (median) line width.
  • MedianRayWidth (default = 1) — the Point of Control (median) ray line width.
  • ValueAreaSidesWidth (default = 1) — the width of the value area side borders.
  • ValueAreaHighLowWidth (default = 1) — the width of the value area top and bottom borders.
  • ValueAreaRayHighLowWidth (default = 1) — the width of the value area top and bottom rays.
  • ShowValueAreaRays (default = None) — can be set so that the value area’s High and Low price levels are projected to the right side of the chart. Can be set to previous session, current, previous and current, all previous, or all.
  • ShowMedianRays (default = None) — can be set so that the median is projected to the right side of the chart. Can be set to previous session, current, previous and current, all previous, or all.
  • RaysUntilIntersection (default = Stop_No_Rays) — defines the way median and value area rays will be cut off when they meet the next trading session’s price range:
    • Stop_No_Rays — no rays are stopped anywhere.
    • Stop_All_Rays — all rays are stopped at an intersection with the price of another session.
    • Stop_All_Rays_Except_Prev_Session — all rays except the previous session’s rays are stopped at an intersection with the price of another session.
    • Stop_Only_Previous_Session — only rays of the previous session are stopped at an intersection with the price of another session.
  • TimeShiftMinutes (default = 0) — time shift for the sessions, in minutes. Positive value will move the session start to the left; negative — to the right.
  • ShowKeyValues (default = true) — if true, Value Area High, Value Area Low, and Point of Control are displayed on the left of the market profile.
  • KeyValuesColor (default = clrWhite) — the color for Value Area High, Value Area Low, and Point of Control printout.
  • KeyValuesSize (default = 8) — the font size for Value Area High, Value Area Low, and Point of Control printout.
  • ShowSinglePrint (default = No) — can be set to Leftside or Rightside and will mark the single print profile — a part of the profile, which is only one TPO wide.
  • SinglePrintRays (default = false) — if true, single print edges are marked with rays.
  • SinglePrintColor (default = clrGold) — the color for single print marking if ShowSinglePrint isn’t set to No.
  • SinglePrintRayStyle (default = STYLE_SOLID) — the single print ray line style.
  • SinglePrintRayWidth (default = 1) — the single print ray line width.
  • ProminentMedianColor (default = clrYellow) — the color for the prominent median (PPOC) if ProminentMedianPercentage is set to 100 or less.
  • ProminentMedianStyle (default = STYLE_SOLID) — the style for the prominent median (PPOC) if ProminentMedianPercentage is set to 100 or less.
  • ProminentMedianWidth (default = 4) — the width for the prominent median (PPOC) if ProminentMedianPercentage is set to 100 or less.
  • RightToLeft (default = false) — if true, the current session’s market profile has its histogram drawn from right to left. In case Session is set to Rectangle, market profiles of all sessions are drawn right-to-left.


  • PointMultiplier (default = 0) — the higher it is, the wider are the profile’s price boxes and the fewer are the chart objects. You can use it to reduce the indicator’s load on CPU. When the value is zero, an adaptive multiplier is used — the indicator attempts to calculate the optimal value automatically.
  • ThrottleRedraw (default = 0) — a delay in seconds that will be applied before each redraw of the profiles. You can use it to reduce the indicator’s load on CPU.
  • DisableHistogram (default = false) — if true, no market profile histogram is drawn, but Value Area and Median are still marked. This makes indicator work extremely fast, but is less useful for thorough market analysis.

Intraday sessions

  • EnableIntradaySessionN (default = true) — if true and Session is set to Intraday, then the indicator will attempt to drawn the intraday market profile #N on the chart.
  • IntradaySessionNStartTime (default = “HH:MM”) — start time in HH:MM format for the intraday session #N.
  • IntradaySessionNEndTime (default = “HH:MM”) — end time in HH:MM format for the intraday session #N.
  • IntradaySessionNColorScheme (default = Blue_to_Red) — color scheme for the intraday session #N.


  • SaturdaySunday (default = Normal sessions) — how to treat Saturday and Sunday sessions:
    • Normal sessions — Saturday and Sunday will be treated as normal sessions with their own daily and intraday sessions.
    • Ignore Saturday and Sunday — Saturday and Sunday candlesticks will be ignored.
    • Append Saturday and Sunday — Saturday candlesticks will be appended to the Friday session; Sunday candlesticks will be appended to the Monday session.
  • DisableAlertsOnWrongTimeframes (default = false) — if true, no pop-up alerts will appear on using Market Profile with wrong timeframe/session combination.
  • ProminentMedianPercentage (default = 101) — percentage of TPOs out of all possible that should occur inside a median for it to be considered prominent (PPOC). For example, if you set it to 50%, a median will be marked as prominent if it contains at least 24 TPOs in a daily session on M30 timeframe. If it is set to 101, no prominent median is possible.


Daily sessions

The chart screenshot shows market profiles calculated and displayed for two daily Forex trading sessions. The timeframe is M30 and the right-hand daily session is still in progress. The earliest prices are blue and the latest prices are red. The medians and the value areas are marked with the white lines and display the most important price areas. Traders tend to return to those areas if the volume of the breakout movement is not too high. High-volume breakout out of these areas signifies a real breakout. You can read more about Market Profile in this short e-book: Book on Market Profile.

Market Profile Indicator Example MetaTrader Chart

Bullish/bearish coloring

The example below demonstrates how the Market Profile can be colored according to the direction of each bar in the session rather than its age. This is done when ColorBullBear is set to true.Market Profile with bullish and bearish coloring of the time-price opportunities (TPO)

Rectangle sessions

This example demonstrates how the indicator can display a market profile based on the rectangle chart objects freely drawn by a trader. For this to work, a rectangle object’s name has to start with MPR and the Session input parameter has to be set to Rectangle. You can press ‘r’ on your keyboard to add such a rectangle to the chart automatically.Market Profile with two arbitrary rectangle sessions and yellow-to-cyan coloring

Right-to-left display

Market Profile indicator can also draw histogram from right to left. Unlike the traditional left-to-right display, it can be helpful to focus on the current trading session, without obscuring its chart. You can see how this works on the chart screenshot below.Market Profile with the current trading session's profile drawn from right to left without obscuring the actual chart

Downloads (ver. 1.17, 2021-07-17)

MarketProfile indicator is being developed via a dedicated GitHub repository. You are encouraged to actively participate in the improvement of this indicator by submitting your own features via pull-requests and reviewing existing suggestions, changes, fixes, and so on.

Market Profile for MetaTrader 4 in .zip

Market Profile for MetaTrader 4 in .mq4

Market Profile for MetaTrader 5 in .zip

Market Profile for MetaTrader 5 in .mq5

How Does a Market Profile Help in Forex Trading?

A CBOT trader created the Market Profile indicator, which is a powerful tool. Its original goal was to graphically organise price and time information obtained during a trading session in a way that traders could understand. Today’s Forex market is very different from commodity futures trading, which was introduced to the public in 1985 by Peter Steidlmayer with his charting instrument. Can Market Profile be of assistance to Forex traders?

Problems with Forex

The primary distinction between today’s currency market and the futures market of the 1980s is the absence of daily trading sessions.
Fortunately, it does not cause any significant issues. One of the following methods can be used to compensate for the lack of strict daily close and daily open:

  • A rolling 24-hour window for Market Profile calculation. Each new bar, the Market Profile calculation window is shifted right by one bar as well. This way, a trader is always looking for the graphical profile of the recent 24 hours of trading. Unfortunately, this would require a complete recalculation of the whole curve with every new bar arriving. Still, this can be accomplished by using the Rectangle session type in our Market Profile indicator.
  • Smaller geographically-bound time windows. The Forex market operates through several widely recognized trading sessions. The most prominent of them are: London, New York, and Tokyo. A trader operating mainly inside the New York trading session could use a 10-hour window based on the NY open and close to calculate and display Market Profile. A trader operating within a mix of New York and Asian sessions could use the span of both. The good thing is that with this method, the calculation process is much simpler than with a rolling window. The bad thing is that it ignores all the market data that is left outside of the target trading sessions.
  • Weekly trading sessions. Unlike days, the weeks in Forex are clearly defined. The minor difference of Sunday/Monday open and Friday/Saturday close between different brokers and liquidity providers is small enough to ignore (one or two hours of thin-volume trading). Weekly Market Profile is easy to calculate and offers a lot of data to traders. However, it is rarely suitable to short-term intraday traders, less so to scalpers.

Market Profile appears to be applicable to today’s foreign exchange market. The third approach, which is based on weekly sessions, appears to be the most consistent.

Another important issue to consider when using this indicator in analysis is whether to apply it to the current session — which may suffer from a lack of data in the early hours — or to the previous session, which may be based on stale data. In reality, this isn’t a problem at all. The most important profile, as outlined in the CBOT’s A Six-Part Guide to Market Profile, is based on the current session, but the profile built during the previous one is also relevant and should be analysed by a trader.

Furthermore, it is possible (and useful) to examine several previous profiles at the same time, analysing how the trend developed across multiple value areas. The multi-session Market Profile analysis is also important for identifying long-term areas of balance and states of imbalance. Long-term traders should examine Market Profiles from multiple sessions to determine possible entry and exit points.

The following example shows the Market Profile calculated for the EUR/USD currency pair over six weekly sessions:

Market Profile - Weekly Sessions on EUR/USD


The Market Profile, as stated by the indicator’s author, should not be used as a buy/sell signal generator. It is a tool for analysing the market and obtaining information that a bare chart cannot provide. The following is an example of how the Market Profile’s main components can be used in Forex trading:

Value area — the area of market acceptance. The price spent a hefty amount of time at those levels — the market likes it. The edges of the value area form strong support and resistance levels.

Median — the middle of the value area offers a strong pivot point. It serves both as the attractor for the price and as the bounce level. The median is also called a fair price. If market is below the level, it is considered undervalued. If it is above the median, it is overvalued.

Areas of low volume — the long tails below and above the value area show the price areas rejected by the market. The bottom tail is telling us of long-term buyers outperforming long-term sellers at those price levels. The top tail is telling us about the long-term sellers doing better than buyers at the respective price levels.

Even if you are not a regular user of the Market Profile indicator and your primary trading strategy is based on a different concept, or if your strategies are either automated with expert advisors or use fundamental indicators, you can still consult the long-term market profiles when in doubt about where to place an entry order, take-profit, or stop-loss.

You May Also Like ❤ :

Leave a Reply

Your email address will not be published.