Rajandran R Creator of OpenAlgo - OpenSource Algo Trading framework for Indian Traders. Telecom Engineer turned Full-time Derivative Trader. Mostly Trading Nifty, Banknifty, High Liquid Stock Derivatives. Trading the Markets Since 2006 onwards. Using Market Profile and Orderflow for more than a decade. Designed and published 100+ open source trading systems on various trading tools. Strongly believe that market understanding and robust trading frameworks are the key to the trading success. Building Algo Platforms, Writing about Markets, Trading System Design, Market Sentiment, Trading Softwares & Trading Nuances since 2007 onwards. Author of Marketcalls.in

How to Get Market Profile and Footprint Profile Charts?

8 min read

Market Profile has quickly become a trending topic among Indian traders on social media, spotlighting the diverse range of tools available for accessing market profile and footprint charts. This article highlights the spectrum of options, from budget-friendly to premium solutions, tailored to meet the varying needs of traders. Whether you prefer to analyze your trades using popular trading software like Amibroker, Ninjatrader, Tradingview, Metastock, Esignal, GoCharting, Multicharts, Windotrader, InvestorRT, or SierraCharts, there’s a solution that aligns with your trading style and budget, ensuring you have the resources to leverage market profile and footprint charts effectively.

Accessing Market Profile Charts using Amibroker

For those seeking an affordable way to explore Market Profile in real-time markets, installing Amibroker alongside a third-party realtime data feed is highly recommended. Here’s a curated list of top data indian vendors to consider for this setup.

Amibroker Market Profile Charts

Market Profile Charts are accessible for free through Amibroker Trial Editon. The licensed version of Amibroker is available for a one-time fee of 369 USD (Professional Edition). To leverage these charts effectively, users simply require a reliable data feed from trusted data vendors. Credit for the original creation of these charts goes to Milind/Kaka. The charts, which display market profiles using letters, can be seen below. Additionally, the modified code by John has been updated to support smaller tick sizes.

Market Profile – Amibroker AFL Code

//  Formula Name:    Market Profile 
// Use with 5/15min chart
// Originial - From AFL library
// Edited by - Milind / KAKA
// AFL Modified by Rajandran R ( www.marketcalls.in) code works good in 5min, 15min, 30min timeframe
// Code is Compatible with Amibroker 5.8 and above
// Letter A now repeats for first 30 min, Letter B next 30 min so on
// Multiple Repeating Alphabets Horizontally to be fixed in 5min and 15min

//Market Profile 9/12/2009

_N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g", Ref(O,-1), Ref(H,-1), Ref(L,-1), Ref(C,-1) ));

EnMP2= ParamList("MarketProfile","Letters|Solid|Lines");
styleLines = ParamStyle("Style", styleLine, maskAll);

Type=ParamList("Type","Price Profile|Volume Profile");
Period= ParamList("Base","Hourly|Daily|Weekly|Monthly",1);

Den = Param("Density", 3, 0.25, 100, 0.25); // Resolution in terms of $
percent=Param("Value Area", 70, 1, 100, 1);
ViewTPOCount= ParamToggle("Show TPO Count", "No|Yes",1);
ViewPOC = ParamToggle("Show POC", "No|Yes",1);
ViewVALVAH = ParamToggle("Show VAL VAH Line", "No|Yes",1);
Viewfill = ParamToggle("Show VA Fill", "No|Yes",1);
Colorpoc=ParamColor("Color POC", colorYellow);
Colorfill=ParamColor("Color Fill", ColorRGB(20,40,60));

EnIB = ParamToggle("Show Initial Balance", "Yes|No");
IBBars = Param("Initial Balance Bars", 2, 0, 10, 1);

BarsInDay = BarsSince(Day() != Ref(Day(), -1));
Bot = TimeFrameGetPrice("L", inDaily, 0);
Top = TimeFrameGetPrice("H", inDaily, 0);
Vol = TimeFrameGetPrice("V", inDaily, 0);

BarsInDay = BarsSince(Minute() != Ref(Minute(), -1));
Bot = TimeFrameGetPrice("L", in5Minute, 0);
Top = TimeFrameGetPrice("H", in5Minute, 0);
Vol = TimeFrameGetPrice("V", in5Minute, 0);

BarsInDay = BarsSince(DayOfWeek() < Ref( DayOfWeek(), -1 ));
Bot = TimeFrameGetPrice("L", inWeekly, 0);
Top = TimeFrameGetPrice("H", inWeekly, 0);
Vol = TimeFrameGetPrice("V", inWeekly, 0);

if(Period=="Monthly" ){
BarsInDay = BarsSince(Month() != Ref(Month(), -1));
Bot = TimeFrameGetPrice("L", inMonthly, 0);
Top = TimeFrameGetPrice("H", inMonthly, 0);
Vol = TimeFrameGetPrice("V", inMonthly, 0);

CurTop = HHV(H,BarsInDay+1);
Curbot = LLV(L,BarsInDay+1);
Range = Highest(Top-Bot);
TodayRange = Top - Bot;

AveRange = Sum(Top-Bot,30)/30;
LAveRange = AveRange[BarCount-1];

// Initialization
baseX = 0;
baseY = floor(Bot[0]/Den)*Den;
relTodayRange = 0;
firstVisBar = Status("firstvisiblebar");
lastVisBar = Status("lastvisiblebar");


for (j=0; j <= 100; j++) {
  x[j] = 0;

i0 = 0;
i1 = 0;
for (i=0; i<BarCount; i++) {
  if (BarsInDay[i] == 0 AND i < firstVisBar) {
    i0 = i;
  if (BarsInDay[i] == 0 AND i >= lastVisBar) {
    i1 = i;

i1 = BarCount-1;
for (i=i0; i<=i1; i++) {
  if (BarsInDay[i] == 0) {
    baseX = i;
    baseY = floor(Bot[i]/Den)*Den;
    maxY = floor(Top[i]/Den)*Den;
    relTodayRange = (maxY-baseY)/Den;

    for (j=0; j <= relTodayRange; j++) {
      x[j] = 0;
	spread = Param("X Space", 112, 1, 200, 1);
	tpl = Param("Time Per Letter (mins)", 30, 1, 360, 1);
	flt =Param("First Letter (Bars)", 1, 1, 60, 1);
	teb=ParamToggle("To Each Bar","No|Yes");
	Color=Param("Color Threshold",20,1,50,1);

  if (EnMP2 == "Letters") {
    for (j=0; j<= relTodayRange; j++) {
      if (L[i] <= baseY+j*Den AND H[i] >= baseY+j*Den) {
        PlotTextSetFont("", "Arial", 6, BarCount-1, Close[ BarCount - 3 ], colorGreen, colorDefault, -20 ); 
        PlotTextSetFont("C", "Arial", 40, 100, 100, colorGreen, colorDefault, -20 ); 
		PlotText(StrExtract(" A , B , C , D , E , F , G , H ,  I  , J , K , L , M , N , O , P , Q , R , S , T , U , V , W , X , Y , Z, a , b , c , d , e , f , g , h , i , j , k , L , m , n ,o , p , q , r , s , t , u , v , w , x , y , z ",
		IIf(BarsInDay[i]<flt,0,floor(BarsInDay[i]/(tpl/Intervalmin))-0)), baseX+IIf(teb==1,BarsInDay[i],x[j]*(range_x/spread)), baseY+j*Den, 
	PlotTextSetFont("", "Arial", 10, BarCount-1, Close[ BarCount - 3 ], colorGreen, colorDefault, -20 ); 
  else if (EnMP2 == "Lines" OR EnMP2 == "Solid") {
    for (j=0; j<= relTodayRange; j++) {
     if (L[i] <= baseY+j*Den AND H[i] >= baseY+j*Den) {
		if(Type=="Price Profile"){x[j]=x[j]+1;}
		else if(Type=="Volume Profile"){x[j]=x[j]+round(V[i]/Voloumeunit);}

  // Draw Initial Balance after 11am bar is complete
  if (BarsInDay[i] == IBBars AND EnIB == 0) {
    Line1 = LineArray(i-2, curtop[i-1],i+7, curtop[i-1],0,True);
    Line1 = LineArray(i-2, curbot[i-1],i+7, curbot[i-1],0,True);

  // Examine x[j]
  if ((i < BarCount - 1 AND BarsInDay[i+1] == 0) OR i == BarCount-1) {
    maxXj = 0;
	maxj = 0;
    for (j=0; j<= relTodayRange; j++) {
      if (maxXj < x[j]) {maxXj = x[j]; maxj = j; StaticVarSet("Maxj",j); new=j;
	for ( n = 1; n <= relTodayRange; n++ ) {

	for ( a = 1; a <= relTodayRange; a++ )
		if(Maxj-a>0 AND Maxj+a<relTodayRange)
			if(MaxXj+total[Maxj+a]-total[Maxj]+total[Maxj-1]-total[Maxj-(a+1)]>=Value_area) {shiftup=a; shiftdn=a; break;}
		else if(Maxj-a<1 ) 
			if(MaxXj+total[Maxj+a]-total[Maxj]+total[Maxj-1]>=Value_area){shiftup=a; shiftdn=maxj-1; break;}		
		else if(Maxj+a>relTodayRange ) 
			if(MaxXj+total[relTodayRange]-total[Maxj]+total[Maxj-1]-total[Maxj-(a+1)] >=Value_area){shiftup=relTodayRange-maxj; shiftdn=a; break;}		

	Vah = LineArray(baseX, baseY+(maxj+shiftup)*Den, i, baseY+(maxj+shiftup)*Den,0,True);
	Val = LineArray(baseX, baseY+(maxj-shiftdn)*Den, i, baseY+(maxj-shiftdn)*Den,0,True);
	poc = LineArray(baseX, baseY+maxj*Den, i, baseY+maxj*Den,0,True);
	if(ViewVALVAH==1){Plot(Vah,"",ParamColor("Color_VA",  colorLightBlue),styleLine|styleNoRescale);
	Plot(Val,"",ParamColor("Color_VA",  colorLightBlue),styleLine|styleNoRescale);}
	if(ViewTPOCount==1){PlotText(""+total[maxj],basex,bot[i]-(Top[i]-bot[i])*0.05,ParamColor("Color_VAL", colorLavender));
	PlotText(""+(total[relTodayRange]-total[maxj]),basex,Top[i]+(Top[i]*0.0005),ParamColor("Color_VAH", colorLavender));}

	if (i < BarCount - 1 AND BarsInDay[i+1] == 0 OR i == BarCount-1) {
	  for  (p = 1; p < relTodayRange+1; p++){
	  line = LineArray(baseX, baseY+p*Den, baseX+x[p], baseY+p*Den);
	  line2 = LineArray(baseX, baseY+(p-1)*Den, baseX+x[p-1], baseY+(p-1)*Den);

      if (EnMP2 == "Solid")
	  PlotOHLC( Line,  Line,  Line2, Line2, "",IIf(p>(maxj+shiftup),ParamColor("Color_VAH",  colorLavender),IIf(p<=(maxj+shiftup)AND p>(maxj-shiftdn),ParamColor("Color_VA", colorLightBlue),ParamColor("Color_VAL", colorLavender))) ,styleCloud|styleNoRescale|styleNoLabel);
	  if (EnMP2 == "Lines") 
     Plot(line,"",IIf(p>(maxj+shiftup),ParamColor("Color_VAH", colorLavender),IIf(p<=(maxj+shiftup)AND p>(maxj-shiftdn),ParamColor("Color_VA", colorLightBlue),ParamColor("Color_VAL",  colorLavender))) , styleLines|styleNoLabel);



_SECTION_BEGIN("Gradient Backfill");
SetChartBkGradientFill( ParamColor("BgTop", ColorRGB( 0,0,0 )),

ParamColor("BgBottom", ColorRGB( 0,0,0 )),ParamColor("titleblock",ColorRGB( 192,192,192 ))); 

Datafeed: Accommodates both Indian and International data vendors, offering 1-minute real-time feeds or tick-by-tick data feeds.

Compatibility: The AFL Code is designed to work exclusively with versions 5.8 and higher.

Accessing Market Profile and Orderflow Using Ninjatrader

NinjaTrader provides a robust platform for free trading analysis, catering to traders seeking advanced tools like Market Profile and Order Flow charts. To leverage these sophisticated charting capabilities, users are encouraged to explore subscriptions with NinjaTrader Ecosystem partners such as Bell TPO and Gomicators. These partners offer comprehensive solutions that encompass both Market Profile and Order Flow analysis tools, enhancing trading strategies with deeper market insights.

Data feed support is extensive, accommodating both Indian data vendors(Globaldatafeed, Accelpix, Truedata) specifically for NinjaTrader and international providers like Kinetic, eSignal, CQG, and Barchart. This wide range of compatibility ensures traders have access to reliable and timely market data.

The primary advantages of integrating these tools into your NinjaTrader setup include increased accuracy of market profile and orderflow computational methods, enhanced control over charting features, and the ability to easily navigate historical data without performance issues. Features such as zooming, vertical scrolling, and detailed analysis are optimized for a seamless user experience, making it a preferred choice for professional traders.

Orderflow Charts in Ninajtrader 8 Platform

At present, both BellTPO and Gomicators provide traders with access to footprint charts, also known as order flow charts. Similarly, NinjaTrader 8 features its own version of footprint and order flow charts, although these are exclusively accessible to those holding a paid subscription.

Esignal Market Profile Charts

If you’re subscribed to Esignal, enhancing your experience with the Market Profile feature requires an additional premium add-on specifically designed for Esignal users. This service is available at a monthly rate of 55 USD. However, there’s a promotional offer for new Market Profile users, allowing them to access this add-on at just 10 USD for the first month. With this arrangement, your overall expenses will amount to less than 220 USD per month, making it an economical option for those looking to integrate Market Profile analysis into their trading toolkit.

Esignal Market Profile

Advantages include precise identification of VAL, VAH, and POC levels, complemented by a multi-day dashboard tracker, making it ideal for professional traders.

However, a limitation is that only daily profiles are accessible, with no option to select custom profile charts.

Regarding Footprint Charts, Esignal offers them within a premium add-on called “volume delta charts,” available at a monthly fee of 50 USD. This service requires an Esignal Premier subscription or above.

Bid Ask Footprint charts

Linnsoft – InvestorRT – Market Profile and Orderflow Charts

The Investor/RT Core Platform, available at $50 per month, is particularly esteemed by traders for its specialized tools in Market Profile and Orderflow analysis. With the inclusion of the Profile Package at an additional $20 per month, traders gain access to TPO Profile Charting and a suite of indicators designed to elevate market analysis. This package enriches trading strategies by providing detailed insights into market structure and volume distribution, pivotal for those leveraging Market Profile methodologies.


Moreover, the platform’s dedication to Orderflow analysis is exemplified through the VolumeScope® Package, priced at $25 monthly. This sophisticated tool dissects each bar in the chart, offering a microscopic view of market order flow and volume at price data. VolumeScope, alongside the Price Volume Pattern (PVP) feature, enables traders to pinpoint volume-based patterns within the market, providing a competitive edge in identifying buying and selling opportunities. These features are designed to cater to the nuanced needs of traders focused on Market Profile and Orderflow, offering them a comprehensive toolkit for in-depth market analysis.

Datafeed: Compatible with Esignal only for Indian Markets. As of now no Indian datavendors supporting InvestRT Software.

Accessing Market Profile and Orderflow using Multicharts

Market Profile charts are available at free of cost for both Multicharts and Multicharts.Net editions. Can be downloaded here

Datafeed : Globaldatafeeds supports Multicharts can be used in case of TPO Profile Charts. However footprint charts requires Esignal Data Subscription (tick level feeds) for Indian Markets.

Multicharts supports inbuilt volume delta charts(order flow charts). But cant do much customization with volume delta charts. However Russian vendor Orderflowtrading provides Footprint Profile charts setup and the subscription pricing starts at 74 USD per month. It is interactive as Market Delta and provides custom template facilities as Market Delta does.

Market Delta Charts

Benchmark tool and mother of all the market profile charts and footprint charts. Suits for professional trader. Pricing starts at 154 USD per month (Order Flow + TPO Profile Charts)

Datafeed : Supports Esignal only for Indian Markets (TSTQ Features in Esignal needs to be enabled to work with Market Delta). Requires Esignal data subscription.

Market Delta

Sierra Charts

Sierra charts provides in-built TPO Profile Charts and Volume by Price Study and license fee starting at 35 USD per month

Datafeeds : Supports Globaldatafeeds. Google Finance in case of learning with Market Profile Charts.

Sierra Charts

Advantages : Extensive Customization, Interactive, Great User Experience, Cheaper to learn compared to other traditional market profile software. Suits both learners and professional profile traders.

Window Trader

Should say market profile charts are better than Market Delta in terms of Inter-activeness and user experience and can zoom out to watch any level of back historical data. Font size of letters automatically reduces when you try to put more historical data on the screen. Subscription starts at 150 USD per month. Interactive Volume Profile is the best feature and the USP in windowtrader

Window Trader

Datafeed : Requires Esignal data subscription for Indian Markets. No Indian vendors as of now supporting.

Advantages : Suits professional market profile traders who is looking for greater profile accuracy at tick level.

Web Based

Last but not least you can access live market profile charts from our website. Currently access is allowed only for limited scripts. Soon could extend to multiple scripts. Suits for beginners in Market Profile. It also has a social media dashboard below the charts which tracks the twitter market profile experts and provides opportunity to learn from them while watching the live charts.

Hope you got lot more insights on Market Profile and Foot Print (order flow) Softwares available for Indian Traders. Let me know if we missed out any.

Rajandran R Creator of OpenAlgo - OpenSource Algo Trading framework for Indian Traders. Telecom Engineer turned Full-time Derivative Trader. Mostly Trading Nifty, Banknifty, High Liquid Stock Derivatives. Trading the Markets Since 2006 onwards. Using Market Profile and Orderflow for more than a decade. Designed and published 100+ open source trading systems on various trading tools. Strongly believe that market understanding and robust trading frameworks are the key to the trading success. Building Algo Platforms, Writing about Markets, Trading System Design, Market Sentiment, Trading Softwares & Trading Nuances since 2007 onwards. Author of Marketcalls.in

Best Programming Languages for Traders & Investors to Learn…

Here is a list of programming languages that traders/investors may want to consider learning in the year 2023 to build their own trading indicators,...
Rajandran R
4 min read

Tijori Finance – Better Fundamental Data Analysis using Alternative…

Tijori Finance a sleek design portal to access in-depth data such as market share, revenue break-up, location exposure, operational metrics shareholding & financial on...
Rajandran R
1 min read

Tick Data Vendors and Quality of Tick Datafeeds

Last coupe of weeks we spend our energy in understanding the quality of the datafeeds(Indian & International vendors) for NSE Futures. Since data is...
Rajandran R
1 min read

44 Replies to “How to Get Market Profile and Footprint Profile Charts?”

  1. Thanks a lot for all the information.
    Is it possible to subscribe for normal E-signal tick data & use it for volume footprint , orderflow analysis in a C# ,C++ program..


    1. Heard Esignal Shutdown Market Data API Services for Individual traders! But possible with Interactive Brokers as they provide Tick level access using IB API

    2. Dear Rajandran, can you please prove me market profile with letters for amibroker 5.7 please.


      1. What are the settings you are talking about? From where to access them. I am not getting the profile displayed properly. Can you guide me?

  2. Just like your site gives Market Profile Charts. Is it possible to provide FootPrint charts just for Nifty Futures? Thanks for this wonderful post!

  3. Thanks for the info rajandran….
    GOM ladder from Bigmiketrading is one more option which I came across,,,,,
    order flow trading is the only software I have tried for 2 months which is really nice,,,but not indian scripts ( for gold , silver ) using NT 7

  4. Dear Rajandran,

    I am getting the below error.

    IIf(BarsInDay[i]<flt,0,floor(BarsInDay[i]/(tpl/Intervalmin))-0)), baseX+IIf(teb==1,BarsInDay[i],x[j]*(range_x/spread)), baseY+j*Den,

    File: 'Formulas/Drag-Drop/Market Profile.afl', Ln: 143, Col: 17

    Error 32.

    Syntax Error, unexpected '('. Is there semicolon missing at the end of the previous line?


    1. You are not using 5.8 version and above. The above code is compatible with 5.8 and above coz PlotTextSetFont() is not supportive in lower versions.

      1. HI rajandran,

        I have version 5.7. DO you think this is the right time to upgrade Amibroker ?


  5. Sir Am having E Signal Advance Get

    How can i get this study in to my system.

    Please guide…..


    Sunil Bedekar

  6. Excellent post Rajandran ! All the available options explained in lucind manner with images to support them. Thank you for that.
    So, looks like if someone wants a quality Footprint charts then one needs to shell out at least $300/mo (MarketDelta+eSignal datafeed). Any other alternative only for Footprint (orderflow) charts?
    Many thanks!

  7. I am a Intraday Trader. Trying to work on best strategy which is having more accuracy. 80 to 90 percent.

    I need to know esignal with advanced get strategy is best or metastock strategy with lci and MacD for only Intraday.

    Pleas suggest me any other indicator.

    1. From Market Profile Point of View Ninjatrader + Fin-Alg is better and cheaper. I haven’t explored with NOFT. But in terms of order flow Market Delta provides lots of comfort. And comfort comes at a greater price 🙂

  8. Just wanted to add some info here. You can now get datafeed for Ninjatrader/Market Profile from TrueData from India..no need for expensive E-signal datafeed.

    1. For Accessing Market Profile data Esignal is not mandatory you can connect with any local vendors like Globaldatafeeds, Trudata or neotrade. However to access Foot Print Charts we require TSTQ feature (Historical BidxAsk data which currently ESignal is providing the feature.)

  9. I inquired about Sierra Charts from Global data feeds. GDF says they now no more support Sierra Charts. Is there any alternative. Any help appreciated.

  10. Hello Sir plz guide me

    i am not able to get tick by tick live data for orderflowtrading.net software …plz help as i need to load footprint charts on ATAS software for NSE and MCX ….

  11. Hi rajendran, few info required on orderflow datafeed. Currently using NT8+truedata data feed for orderflow charts. Drawback is no historical traded BIDxASK data backfill provided. is there any service provider who provides historical backfill of BIDXASK data. I saw ur previous posts mentioning that ,Esignal provides. but not tried it.
    1. which datafeed provider provides ?
    2. if they provide, how many days of backfill?
    3. any reviews on esignal data which is providing historical data of bidxask price?
    4. cost structure as of now if u r using?, one year back i enquired.

  12. Hi Rajandran
    Can you pls help me rectify “Warning 505 division by zero.” in your market profile afl.
    I’m using Amibroker version 6.2 .

  13. Hi Rajendran,

    Neenga tamila? Naanum tamil thaan. I am based in USA and very much into trading just like yourself. Unga phone number ennanga?

  14. dear mr rajendran
    i am unable to see MF charts on ur web iam using opera/crome
    i tried after deleting catche

  15. Hi Rajandran,

    Many thanks for a very informative post.

    Can you let us know how Bell TPO is for Indian data? Does it include features like Imbalance chart (available in Market Delta)?

    Does the one time fee of 50K include data as well?


    1. BellTPO doesn’t provide data. They are 3rd party Market Profile and Orderflow providers for Ninjatrader software. Imbalance is covered in NT8 platform (orderflow)

  16. Hi Rajendran,

    Any inputs on where i can source historic tick data with ask/bid spread for indian markets [Something similar to current tick data provided by zerodha kite api]


  17. First of all thanks,sir IAM interested in level 2 screen like us market.but this type of data not available in india.but I want volume at Price in each candle or certain selected area .is it any one way method available??. please help me

  18. Hi Admin i am getting warning 505, Error 10. Array subscript out of range.
    you must not access array elements outside 0..(BarCount-1) range. You attempted to access non-existing 3rd element of array. please help in correcting it.

  19. Dear Rajendran ji,

    Your work is really very helpful. Can you please edit the code so as to make a Weekly Composite Profile and a Monthly Composite Profile.

    That would be really helpful.

Leave a Reply

Get Notifications, Alerts on Market Updates, Trading Tools, Automation & More