Jump to content

Welcome to the new Traders Laboratory! Please bear with us as we finish the migration over the next few days. If you find any issues, want to leave feedback, get in touch with us, or offer suggestions please post to the Support forum here.

  • Welcome Guests

    Welcome. You are currently viewing the forum as a guest which does not give you access to all the great features at Traders Laboratory such as interacting with members, access to all forums, downloading attachments, and eligibility to win free giveaways. Registration is fast, simple and absolutely free. Create a FREE Traders Laboratory account here.

Sign in to follow this  
lonew0lf

Market Profile Indicator

Recommended Posts

I found this market profile indicator on the multicharts message board. The indicator works fine on 10yr treasuries but kicks out a "Array bounds. Wrong index value: 1001." error for all other instruments (ES/GC), regardless of time grame. Increasing the arrays slows the computer down to a crawl.

 

It works well for bonds, if anyone else can resolve the issue.

 

[legacycolorvalue=true]; 
input: 
FontSize(7), 
VerticalSpacing(1), 
Length(30), 
Letter1(1), 
TXTcolor(Green), 
OpenColor(DarkGreen), 
CloseColor(DarkGreen), 
LastColor(DarkGreen), 
ValColor(LightGray),
ValSize(2), 
VAprcnt(.70), 
Stime(Sess1StartTime);

vars:
lett("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"),
t1(0),
vsize(0),
cpt(0),
dl(0),
lcount(1),
fp(0),
daynum(0),
d0(0),
mid(0),
dlo(0),
pc(0),
pc2(0),
skp(0),
labl(0),
vala(0),
vap(0),
cp(0),
t0(0),
nuflag(0),
hh(0),
ll(0),
x(0),et(0), 
clet(""),
curtxt(""),
th(0),
tl(0),
tpstr("00"),
tot(0),
va(0),
d2p(0),
oldclet(""),
barhi(0),
barlo(0),
mintick(0),
xpts(0),
price(0),
up(0),
dn(0),
oldup(0),
olddn(0),
flag(0),
flag2(0) ;

array:pri[1000](0),tpo[1000](0),pristr[1000]("");


nuflag=0;
if t0 <= Sess1EndTime and t > Sess1EndTime and Sess2StartTime <> 0 then nuflag=1;
if d <> d0 and Sess2StartTime = Sess2EndTime then nuflag=1;
if t0=sess1endtime then nuflag=1;
if  currentbar=1  or nuflag=1   then begin
if currentbar=1 then begin
	vap=VAprcnt;
	x=currentdate;

	vsize=mod(valsize+7,7);
	if vsize < 2  then value88=5 else value88=vsize;
	mintick = 1 point * minmove * VerticalSpacing; 
	xpts=500*mintick;
end;
lcount=letter1;
if currentbar > 1 then begin
	if valcolor <> 0 and flag2=0 then begin
		mid=0;value23=0;
		cpt=tl;cp=tl + (th-tl)/2; {center of dist.}
		for x = tl to th begin 
			if pristr[x] <> "" then begin
				pristr[x]=nutpstr(tpo[x],pristr[x],pri[x]);
				value23=value23 + tpo[x]; {total tpo count}
				if tpo[x]=mid and x <= cp then cpt=x;
				if tpo[x]=mid and x>cp and(x-cp) < AbsValue(cp-cpt) then cpt=x;
				if tpo[x] > mid then begin
					cpt=x;
					mid = tpo[x];
				end;
			end;
		end;
		va=value23 * vap;

		x=mid;up=cpt;dn=cpt;
		while x < va begin
			value19=tpo[up+1]+tpo[up+2];  value20=tpo[dn-1]+tpo[dn-2];
			if value19 >= value20 then begin
				if x+tpo[up+1] >= va then begin
					x=x+tpo[up+1]; up=up+1;
				end else begin
					x=x+value19;  up=up+2;
				end;
			end else begin
				if x+tpo[dn-1] >= va then begin
					x=x+tpo[dn-1]; dn=dn-1;
				end else begin
					x=x+value20;  dn=dn-2;
				end;				
			end;
		end;	
		if up > th then up=th; if dn < tl then dn=tl;	
		up= fp+((up-500)*mintick);
		dn=fp+((dn-500)*mintick);
		value62=fp+((cpt-500)*mintick);
		labl= text_new(d2p,t1,dl-mintick,"VA: "+ mp_str32(dn)+" | "+mp_str32(up));
		text_setsize(labl,fontsize);
		text_setfontname(labl,"Tahoma");
		TEXT_SETSTYLE(labl,0,2);	
		TEXT_SETCOLOR(labl,valcolor);
		vala=TL_New(d2p,t1,up,d2p,t1,dn);
		TL_SetColor(vala,valcolor);
		TL_SetSize(vala,vsize);

		value60=TL_New(d2p,t1,value62+mintick/15,d2p,t1,value62-mintick/15);				
		TL_SetColor(value60,valcolor);
		TL_SetSize(value60,value88);
	end;
	pc2=0;
	for value4=tl to th begin
		price=fp+((value4-500)*mintick) ;					
		if price <= pc  then pc2=value4;  
	end;
	if pc2=0 then pc2=barlo;
	curtxt=pristr[pc2];
	if RightStr(curtxt,1) <> "<" then begin
		text_setstring(pri[pc2],curtxt+" *");
		Text_SetColor(pri[pc2],closecolor);
		text_setsize(pri[pc2],fontsize);
		text_setfontname(pri[pc2],"Tahoma");
	end;
end; 
t1=t;
d2p=d;
labl=0;vala=0;
for value1=tl to th begin
	pristr[value1]="";
	tpo[value1]=0;
end;
clet=curletstr(stime,length,letter1);
oldclet=clet;
dlo=l;
fp=o; 
tpo[500]=1;
th=500;tl=500;
flag=0;                                   
pri[500]= text_new(d,t1,o,"   *"+clet);
pristr[500]="   *"+clet;
TEXT_SETSTYLE(pri[500],0,2);	
TEXT_SETCOLOR(pri[500],opencolor);
text_setsize(pri[500],fontsize);
text_setfontname(pri[500],"Tahoma");
hh=o;ll=o;mid=1;tot=1;value22=currentbar;
dl=l;
if d= JulianToDate(LastCalcJDate) then flag2=1;
end; 
clet=curletstr(stime,length,letter1) ;
t0=t;d0=d;pc=c;
barhi=intportion((xpts+h-fp+(mintick/10))/mintick);
barlo=ceiling((xpts+l-fp-(mintick/10))/mintick);
if barhi > th then th=barhi;
if barlo < tl then tl=barlo;
if l < dl then dl=l;
IF datacompression=0 and  currentbar  > value22 then begin
lcount=lcount+1;
if lcount=53 then lcount=1;
clet=midstr(lett,lcount,1) ;
hh=o;ll=o;flag=flag+1; 
end;
value22=currentbar;
IF datacompression = 1 and oldclet <> clet  then begin
hh=o;ll=o;flag=flag+1;
end;

for value4=barlo to barhi begin
price=fp+((value4-500)*mintick);
curtxt=pristr[value4]; 
if curtxt = ""   then begin
	tpo[value4]=1;
	pri[value4]= text_new(d2p,t1,price,"    "+clet);
	pristr[value4]="    "+clet;
	TEXT_SETSTYLE(pri[value4],0,2);	
	TEXT_SETCOLOR(pri[value4], TxtColor);
	//print(clet);
	text_setsize(pri[value4],fontsize);
	text_setfontname(pri[value4],"Tahoma");

end else begin
	if RightStr(curtxt,1) <> clet then begin
		text_setstring(pri[value4],curtxt+clet);
		print(curtxt);
		text_setsize(pri[value4],fontsize);
		text_setfontname(pri[value4],"Tahoma");
		pristr[value4]=curtxt+clet;
		tpo[value4]=tpo[value4]+1;
	end;
end;
end;
if h>hh then hh=h;
if l < ll then ll = l;
{------------------------------------------------------------------------------------------}
if valcolor <> 0  and  lastbaronchart  then begin
mid=0;value16=0;value23=0;
cpt=tl;cp=tl + (th-tl)/2; {center of dist.}
for x = tl to th begin 
if pristr[x] <> "" then begin
	pristr[x]=nutpstr(tpo[x],pristr[x],pri[x]); 
	value23=value23 + tpo[x]; {total tpo count}
	if tpo[x]=mid and x <= cp then cpt=x;
	if tpo[x]=mid and x>cp and(x-cp) < AbsValue(cp-cpt) then cpt=x;
	if tpo[x] > mid then begin
		cpt=x;
		mid = tpo[x];
	end;
end;
end;
va=value23 * vap;
if l < dlo  then begin
dlo=l;
price=fp+((tl-501)*mintick);
if labl <> 0 then Text_SetLocation(labl,d2p,t1,price);
end;
if labl =0 then begin
price=fp+((tl-501)*mintick);
labl= text_new(d2p,t1,price,"-");
TEXT_SETSTYLE(labl,0,2);	
TEXT_SETCOLOR(labl,valcolor);
text_setsize(labl,fontsize);
text_setfontname(labl,"Tahoma");
end;
if va <> 0 then begin
value61=value18; 
x=mid;up=cpt;dn=cpt;
while x < va begin
value19=tpo[up+1]+tpo[up+2];  value20=tpo[dn-1]+tpo[dn-2];
if value19 >= value20 then begin
	if x+tpo[up+1] >= va then begin
		x=x+tpo[up+1]; up=up+1;
	end else begin
		x=x+value19;  up=up+2;
	end;
end else begin
	if x+tpo[dn-1] >= va then begin
		x=x+tpo[dn-1]; dn=dn-1;
	end else begin
		x=x+value20;  dn=dn-2;
	end;				
end;
end;	
if up > th then up=th; if dn < tl then dn=tl;	
value18=cpt;
oldup=up;
olddn=dn;
up= fp+((up-500)*mintick);
dn=fp+((dn-500)*mintick);
if flag=1 then value63=t;
if up > dn and flag > 1  then begin
if vala = 0 then begin
	vala=TL_New(d2p,t1,up,d2p,t1,dn);
	TL_SetColor(vala,valcolor);
	TL_SetSize(vala,vsize);
	value62=fp+((value18-500)*mintick);
	value60=TL_New(d2p,t1,value62+mintick/15,d2p,t1,value62-mintick/15);
	TL_SetColor(value60,valcolor);
	TL_SetSize(value60,value88);
end else begin
	if oldup <> up then TL_SetBegin(vala,d2p,t1,up);
	if olddn <> dn then TL_SetEnd(vala,d2p,t1,dn);
end;
end;
if {value61 <> value18 and} flag > 1  then begin
value62=fp+((value18-500)*mintick);
TL_SetBegin(value60,d2p,t1,value62+mintick/15);
TL_SetEnd(value60,d2p,t1,value62-mintick/15);
end;
Text_SetString(labl,"VA: " + mp_str32(dn) + " | "+ mp_str32(up));
text_setsize(labl,fontsize);
text_setfontname(labl,"Tahoma");
end;  
end;

if lastcolor > 0   then begin
if value10 = 0 and currentbar=3 then begin
value10=tl_new(value50,value51,c,d,t,c);
tl_setcolor(value10,lastcolor);
tl_setsize(value10,0);
TL_SetExtLeft(value10,true);
end else if currentbar > 3 and LastBarOnChart   then begin
tl_setend(value10,d,t,c);
tl_setbegin(value10,value52,value53,c);
end;
value52=value50;value53=value51;
value50=d;value51=t;
end;

plot1(l - mintick);

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Topics

  • Posts

    • 1. A person who disguises insults as jokes.   2. A person who will never take accountability but has no problem always blaming you.   3. A person who says they want the best for you, but then works against you.   4. A person's whose words and actions don't match.   5. You can't trust a person who puts seeds of doubt in you, disguised as something else, like concern for you.   6. You can't trust a person who always tries to sabotage you, or make things harder for you. But always has an excuse for everything. Source: https://mentalhealthpsychology2.quora.com/6-TYPES-OF-PEOPLE-YOU-SHOULD-NOT-TRUST   
    • Date: 15th May 2024. Market News – Treasuries rallied, NASDAQ at new high, DXY lower after PPI pop.   Trading Leveraged Products is risky Economic Indicators & Central Banks: *JGB yields slipped, as markets paused amid a recent bond sell-off, awaiting a crucial US inflation report expected to influence the Fed’s short-term interest rate decisions. Remember, that typically yields move inversely to bond prices. *US: Stronger than expected prints on PPI did not have the textbook effects on the markets. Interestingly, Treasuries and Wall Street rallied, while the US Dollar slipped. The guts of the report were not as worrisome as the headlines suggested, and the CPI is viewed as more important. *Global equities are set for a fresh record after a big tech-led rally in US gauges. Financial Markets Performance: *The USDIndex slumped to 104.7, EURUSD rose to 1.0830 and USDJPY drifted at the EU open below 156. *Gold rose almost 1% to $2358.12 per ounce, while USOIL advanced to $78.18 after shrank US stockpiles, and as traders looked ahead to a report from the International Energy Agency that’ll shed light on market balances into the second half. *Copper spiked to a fresh record high at $5.12 a pound after a squeeze partly due to traders playing the arbitrage between futures on Comex and the Shanghai Futures Exchange.   Market Trends: *Big tech climbed, however, boosting the NASDAQ 0.75% to a new all-time high of 16,511. The S&P500 rose 0.48% to 5246. The Dow advanced 0.3%. *Sony shares jumped by 12% after strong earnings, a stock split and a share buyback of ¥250bn ($1.6bn). *Tesla gained 3.3%. Tencent Holdings surged after the company’s revenue beat estimates , while Alibaba Group Holding Ltd.’s slid on a profit plunge, highlighting the growing divergence between China’s twin Internet powerhouses. Always trade with strict risk management. Your capital is the single most important aspect of your trading business. Please note that times displayed based on local time zone and are from time of writing this report. Click HERE to access the full HFM Economic calendar. Want to learn to trade and analyse the markets? Join our webinars and get analysis and trading ideas combined with better understanding on how markets work. Click HERE to register for FREE! Click HERE to READ more Market news. Andria Pichidi Market Analyst HFMarkets Disclaimer: This material is provided as a general marketing communication for information purposes only and does not constitute an independent investment research. Nothing in this communication contains, or should be considered as containing, an investment advice or an investment recommendation or a solicitation for the purpose of buying or selling of any financial instrument. All information provided is gathered from reputable sources and any information containing an indication of past performance is not a guarantee or reliable indicator of future performance. Users acknowledge that any investment in FX and CFDs products is characterized by a certain degree of uncertainty and that any investment of this nature involves a high level of risk for which the users are solely responsible and liable. We assume no liability for any loss arising from any investment made based on the information provided in this communication. This communication must not be reproduced or further distributed without our prior written permission.
    • Recessions are weird.   The more you think about them, the weirder they become.   Yes, the economy is cyclical. Downturns aren’t just inevitable, they’re healthy.   BUT   Economic cycles, including recessions, are not just determined by clean and predictable financial indicators but also by psychological and sociological factors.   Collective mood, media reporting, and public sentiment play a substantial role in shaping economic realities.   And they can be manipulated.   A.] The Fear Factory   Every time the media starts shouting "recession," what happens?   Panic. Fear.   It's like Halloween but for adults.   And this fear isn't just innocent fun – it moves markets, influences decisions, and causes real harm.   Give me an example of when the media saw a chance to scare the crap out of you and didn’t take it?   I’ll wait.   B.] Recessions are Relative   Consider this – what's called a recession in one country is a day in paradise in another.   Economic conditions are relative.   If the standards are so skewed, can we really trust this whole concept?   C.] The Recession Whisperers   Imagine a secretive group, not in some government bunker, but in a quiet office in Cambridge, Massachusetts. That's the National Bureau of Economic Research (NBER), the recession referee.   But here's the twist: By the time the NBER declares a recession, it's like announcing rain when you're already soaked.   Their method involves a retroactive look, meaning they wait for six months of data, plus a one-month lag.   So, when they finally declare a recession, it's old news, a story you've been living in, not just reading about. In the world of economic predictions, the official-unofficial referees are not the early birds; they're the historians.   Also…   D.]The GDP Puppet Show   GDP.   It’s supposed to be a “health check” for the economy.   BUT   It's like going to a doctor who only measures your height and ignores your blood pressure, cholesterol, and heart rate.   It counts every dollar spent, regardless of what it's spent on.   That means disasters, wars, and environmental destruction all pump up the GDP. If a hurricane hits and we spend billions on reconstruction, guess what? GDP goes up.   Celebrating a GDP increase is like throwing a party because your house burned down and you had to rebuild it.   It’s also the main indicator the NBER uses to measure a recession.   The real problem with this is…   GDP is a broad measure and can be influenced by short-term fluctuations that don't necessarily reflect long-term economic trends.   It’s a useful indicator, but far from comprehensive.   E.] The Self-Fulfilling Prophecy   Here's the kicker – by declaring a recession, we make them more likely.   It's a classic self-fulfilling prophecy.   Businesses pull back on investment, consumers close their wallets, and just like that, the economy slows down.   But what if we didn't buy into the narrative? I have no idea.   F.] Rage Against Determinism   Economies aren’t deterministic. They’re dynamic.   Economies don’t follow a predetermined path.   Human agency and perception play a significant role in shaping economic realities.   Predictions are usually wrong for this reason.   Also, there’s this…   G.] The Hidden Agenda   Tin foil hat time.   Think about who benefits from recession talk.   The media gets a juicy story.   Politicians get a scapegoat.   Certain investors get to buy low.   It’s a game, and the average person isn't the one winning. You’re always being sold a narrative that serves others, not you.   And Yet, a Recession is HERE   Of course, recessions exist. Because prolonged downturns exist.   But all of this calls into question what we think we know about the word “recession” and how we talk about it.   It’s not as clear a concept as we think.   Nevertheless, it’s probably here already.” – Chris Campbell (AltucherConfidential)  
    • QCOM Qualcomm stock great breakout follow through, https://stockconsultant.com/?QCOM
    • JPM JPMorgan Chase stock breakout, https://stockconsultant.com/?JPM
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.