Rajandran R Telecom Engineer turned Full-time Derivative Trader. Mostly Trading Nifty, Banknifty, USDINR and 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. 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 is the recent buzzword in social media especially when comes to Indian traders. And this article throws light on the variety of options available for traders to access market profile and footprint charts(ranging from low cost to high cost depending upon the trader’s need and to access in your favorite trading analysis software like Amibroker, Metastock, Esignal, Market Delta, Multicharts, Windotrader, InvestorRT & SierraCharts.


If one is looking for low cost option to learn market profile during live market then one should try installing Amibroker + 1min Realtime datafeed (Globaldatafeeds or any other)

Amibroker Market Profile Charts

Market Profile Charts : One can get Market Profile Charts using Amibroker at free of cost. Licensed Amibroker version cost 339 USD (one time license fee) All they need is a quality datafeed from authentic datavendors. The credit goes to the orginal creator Milind/Kaka. Market Profile Charts with Letters are shown below. The below modified code by john even supports lower tick size.

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 : Supports Indian data vendors and International datavendors providing 1min realtime feeds or tick level feeds.

Compatibility : AFL Code is compatible only with 5.8 and above.


Ninjatrader is a free trading analysis software. But to access Market Profile charts one need to get the paid subscription from Final 269USD (onetime license fee) or Market-Profit-Pack 230USD (onetime license fee). Both provides 7 days of free trial.

Datafeed : Supports Indian datavendors providing feeds for ninjatrader or International datavendors like esignal/CQG/Barchart etc.,

Advantage : Values are more accurate, greater control over the charts, scrolling back to the historical charts, Zooming in/Zooming out will not cause issues. Vertical Scrolling possible. More Reliable if used with authentic data vendors. Suits for professional traders.

Disadvantage : Computation time gets slower if used with lower tpo size less than 100. Lesser the price per tick values more the computational power and time required.

Ninjatrader NIFTY15 (30 Min)  22_06_15


Footprint charts : Both Final and Market Profile Pack supports order flow aka footprint charts. But the data is not compatible with Indian vendors. One need historical tick level datafeeds. For Indian Markets one have to rely on Esignal (min 140USD per month) as of now not much options available.

Final offers Order flow charts at 59 USD per month(via paypal) or 250 USD x 3 Monthly Installments (750 USD). And Market Profit Pack offer at 512USD (one time license fee).


If you are a Esignal Subscriber then you have to subscribe to the Market Profile premium addon for Esignal users. Currently charging 55 USD per month and for the first time market profile users will get at 10 USD for the first month (promotional). Your total costing will be coming less than 220 USD per month in this case.

Esignal Market Profile

Advantages : Accurate VAL, VAH, POC levels with multi day dashboard tracker. Suits for professinal traders

Disadvantages : Only Daily profile can be accessed. No facility to choose hourly profile.

Footprint Charts : Esignal Provides in the premium addon name – volume delta charts and charges 50 USD per month. Requires Esignal Premier subscription or higher.

Bid Ask Footprint charts

Disadvantages : Not Interactive as Market Delta does. Cant create your own custom templates as Market Delta software does. Suits for beginners in orderflow reading.

Linnsoft – InvestorRT

Linnsoft offers Market Profile charts in Standard License 65USD per month and Professional License at 85USD per month (Comes with addon Volume breakdown Indicator


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

Advantage : : Interactive as Market Delta TPO Profile Charts. Suits for professional traders

Footprint Charts : Currently footprint charts are not available in InvestorRT (Linnsoft)


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 Telecom Engineer turned Full-time Derivative Trader. Mostly Trading Nifty, Banknifty, USDINR and 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. 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