New Amibroker

KelvinHand

Well-Known Member
#1
Amibroker Version 5.80
===============


Modified the following to latest version:
http://www.wisestocktrader.com/indicators/3334-alternative-zig-type-
function


Abandon the following user defined functions:
GetVisibleBarCount()
GfxConvertPixelsToBarX()
GfxConvertPixelToValueY()

AND

to illustrate the new internal functions:
- GfxSetCoordsMode();
- PlotTextSetFont();


for better programming.


PHP:
Version(5.80);

// Amibroker AFL code by Edward Pottasch, Oct 2012
// alternative ZIG type function based on the ATR and VSTOP functions
// added multiple timeframes. Maximum timeframe set to 1440 minutes 

// ****** Modified by Kelvinhand ******

GfxSetOverlayMode( 1 ); 
GfxSetCoordsMode( 1 ); // bar/price mode (instead of pixel) 


tc=ParamList("Display Mode","ZIG|VSTOP|ZIG&VSTOP",0);
disp=ParamToggle("Display labels","Off|On",1);
tf=Param("Time Frame (min)",5,1,1440,1);tfrm=in1Minute*tf;
perBull=Param("perBull",20,1,150,1);
perBear=Param("perBear",20,1,150,1);
multBull=Param("multBull",2,0.05,4,0.05);
multBear=Param("multBear",2,0.05,4,0.05);

bi=BarIndex();


start = FirstVisibleValue( bi ); 
end   = LastVisibleValue( bi ); 



TimeFrameSet(tfrm);
function vstop_func(trBull,trBear)
{
	trailArray[0]=C[0];
	for(i=1;i<BarCount;i++)
	{
		prev=trailArray[i-1];
 
		if(C[i]>prev AND C[i-1]>prev)
			trailArray[i]=Max(prev,C[i]-trBull[i]);
		else if(C[i]<prev AND C[i-1]< prev)
			trailArray[i]=Min(prev,C[i]+trBear[i]);
		else if (C[i]>prev)
			trailArray[i]=C[i]-trBull[i];
		else
			trailArray[i]=C[i]+trBear[i];	
	}
	return trailArray;
}

trBull=multBull*ATR(perBull);
trBear=multBear*ATR(perBear);
trailArray = vstop_func(trBull,trBear);
ts=IIf(trailArray>C,trailArray,Null);
tl=IIf(trailArray<C,trailArray,Null);
TimeFrameRestore();

ts=TimeFrameExpand(ts,tfrm,expandLast);
tl=TimeFrameExpand(tl,tfrm,expandLast);
 
GraphXSpace=5;
SetChartOptions(0, chartShowDates);
SetBarFillColor(IIf(C>O,ParamColor("Candle Up Color", colorBrightGreen),IIf(C<=O,ParamColor("Candle Down Color", colorRed),colorLightGrey)));
Plot(C,"Price",IIf(C>O,ParamColor("Shadow Up Color", colorBrightGreen),IIf(C<=O,ParamColor("Shadow Color", colorRed),colorLightGrey)),64,0,0,0,0,1);

lll=LLV(L,BarsSince(!IsEmpty(tl)));lll=IIf(ts,lll,Null);llls=lll;
ttt1=IIf((!IsEmpty(ts) AND IsEmpty(Ref(ts,1))) OR BarIndex()==BarCount-1,1,Null);
ttt=ValueWhen(ttt1,lll,0);ttt=IIf(ts,ttt,Null);ttt=IIf(ttt1,Ref(ttt,-1),ttt);
tr=L==ttt;lll=Sum(tr,BarsSince(!IsEmpty(tl)));
qqq=ValueWhen(ttt1,lll,0);qqq=IIf(ts,qqq,Null);qqq=IIf(ttt1,Ref(qqq,-1),qqq);tr=tr AND lll==qqq;
tr=IIf((!IsEmpty(ts) AND IsEmpty(Ref(ts,1)) AND IsEmpty(Ref(ts,-1))),1,tr);//exception
hhh=HHV(H,BarsSince(!IsEmpty(ts)));hhh=IIf(tl,hhh,Null);hhhs=hhh;
ttt1=IIf((!IsEmpty(tl) AND IsEmpty(Ref(tl,1))) OR BarIndex()==BarCount-1,1,Null);
ttt=ValueWhen(ttt1,hhh,0);ttt=IIf(tl,ttt,Null);ttt=IIf(ttt1,Ref(ttt,-1),ttt);
pk=H==ttt;hhh=Sum(pk,BarsSince(!IsEmpty(ts)));
sss=ValueWhen(ttt1,hhh,0);sss=IIf(tl,sss,Null);sss=IIf(ttt1,Ref(sss,-1),sss);pk=pk AND hhh==sss;
pk=IIf((!IsEmpty(tl) AND IsEmpty(Ref(tl,1)) AND IsEmpty(Ref(tl,-1))),1,pk);//exception

px0=ValueWhen(pk,bi,0); tx0=ValueWhen(tr,bi,0);
px1=ValueWhen(pk,bi,1); tx1=ValueWhen(tr,bi,1);
px2=ValueWhen(pk,bi,2); tx2=ValueWhen(tr,bi,2);
ph0=ValueWhen(pk,H,0); tl0=ValueWhen(tr,L,0);
ph1=ValueWhen(pk,H,1); tl1=ValueWhen(tr,L,1);
ph2=ValueWhen(pk,H,2); tl2=ValueWhen(tr,L,2);

switch(tc)
{
	case("ZIG"):
		aa1=IIf(px0>tx1,(ph0-tl1)/(px0-tx1),0);aa1=IIf(pk,Ref(aa1,-1),aa1);ls1=aa1*(bi-tx1)+tl1;
		bb1=IIf(px0>tx1 AND px1<tx1,1,0);bb1=bb1+Ref(bb1,-1);bb1=IIf(bb1,1,0);ls1=IIf(bb1,ls1,Null);
		Plot(ls1,"",colorBlue,styleLine,0,0,0,2,3);
		aa1=IIf(tx0>px1,(tl0-ph1)/(tx0-px1),0);aa1=IIf(tr,Ref(aa1,-1),aa1);ls1=aa1*(bi-px1)+ph1;
		bb1=IIf(tx0>px1 AND tx1<px1,1,0);bb1=bb1+Ref(bb1,-1);bb1=IIf(bb1,1,0);ls1=IIf(bb1,ls1,Null);
		Plot(ls1,"",colorOrange,styleLine,0,0,0,2,3);
		break;
		
	case("VSTOP"):
		Plot(ts,"\ntrailShort",colorRed,styleLine,0,0,0,1,1);
		Plot(llls,"",colorRed,styleDashed,0,0,0,1,1);
		Plot(tl,"\ntrailLong",colorGreen,styleLine,0,0,0,1,1);
		Plot(hhhs,"",colorGreen,styleDashed,0,0,0,1,1);
		break;
		
	case("ZIG&VSTOP"):
		aa1=IIf(px0>tx1,(ph0-tl1)/(px0-tx1),0);aa1=IIf(pk,Ref(aa1,-1),aa1);ls1=aa1*(bi-tx1)+tl1;
		bb1=IIf(px0>tx1 AND px1<tx1,1,0);bb1=bb1+Ref(bb1,-1);bb1=IIf(bb1,1,0);ls1=IIf(bb1,ls1,Null);
		Plot(ls1,"",colorBlue,styleLine,0,0,0,2,3);
		aa1=IIf(tx0>px1,(tl0-ph1)/(tx0-px1),0);aa1=IIf(tr,Ref(aa1,-1),aa1);ls1=aa1*(bi-px1)+ph1;
		bb1=IIf(tx0>px1 AND tx1<px1,1,0);bb1=bb1+Ref(bb1,-1);bb1=IIf(bb1,1,0);ls1=IIf(bb1,ls1,Null);
		Plot(ls1,"",colorOrange,styleLine,0,0,0,2,3);
		Plot(ts,"\ntrailShort",colorRed,styleLine,0,0,0,1,1);
		Plot(llls,"",colorRed,styleDashed,0,0,0,1,1);
		Plot(tl,"\ntrailLong",colorGreen,styleLine,0,0,0,1,1);
		Plot(hhhs,"",colorGreen,styleDashed,0,0,0,1,1);
		break;
	}

	//PlotShapes(shapeSmallCircle*tr,colorGreen,0,L,-10);
	//PlotShapes(shapeSmallCircle*pk,colorRed,0,H,10);
	
	qq=Interval()/60;
	if(qq < 60){tf=" min";tt=qq;}
	else if(qq >= 60 AND qq < 1440){tf=" hrs";tt=qq/60;}
	else if(qq >= 1440){tf=" days";tt=(qq/60)/24;}
	qq=Max(tfrm/60,Interval()/60);
	if(qq < 60){tfa=" min";tta=qq;}
	else if(qq >= 60 AND qq < 1440){tfa=" hrs";tta=qq/60;}
	else if(qq >= 1440){tfa=" days";tta=(qq/60)/24;}

	Title = Name() + 
		"\nChart TF: " + tt + tf + 
		"\nZig TF: " + tta + tfa;


	if(disp)
	{
		ll=tr AND tl1<tl2;
		hl=tr AND tl1>tl2;
		hh=pk AND ph1>ph2;
		lh=pk AND ph1<ph2;
		dt=pk AND ph1==ph2;
		db=tr AND tl1==tl2;


	Yofs =10;	
	for ( i = start; i <= end; i++ ) 
	{
	   	 
		if(ll[i]) PlotText("LL",i+2,L[i],colorWhite,colordefault, -Yofs-5 );
		if(hl[i]) PlotText("HL",i+2,L[i],colorWhite,colordefault, Yofs );
		
		if(db[i]) PlotText("DB",i+2,L[i],colorWhite,colordefault, -Yofs-5 );
		if(hh[i]) PlotText("HH",i+2,H[i],colorWhite,colordefault, Yofs );
		
		if(lh[i]) PlotText("LH",i+2,H[i],colorWhite,colordefault, Yofs );
		if(dt[i]) PlotText("DT",i+2,H[i],colorWhite,colordefault, Yofs );

	}
	
	
	for ( i = start; i <= end; i++ ) 
	{
		if(tr[i])	PlotTextSetFont("q", "Wingdings 3", 11, i, L[i], colorLime, colorDefault, -Yofs-5);
	   	if(pk[i])	PlotText("p",i, H[i], colorRed, colorDefault, Yofs);
	}
	
	
}

Note: User not using Version 5.80 or Higher, this code will not work!!!
 
Last edited:

KelvinHand

Well-Known Member
#2
Plot Moving Averages using Arrow Code.
Refer the Arrow Code Table in Post #1562
http://www.traderji.com/amibroker/90119-simple-coding-help-no-promise-157.html

PHP:
//-- Created by KelvinHand
//-- http://paintbarfactory.com:  PBF_2MAs_Color ---- 

Version(5.80);


MA1Mode = ParamList("MA1.Mode", "SMA|EMA",1);
MA1Period = Param("MA1.Period", 49, 1, 500);
MA1Style = ParamStyle("MA1.Style", styleDots|styleNoLine|styleNoTitle,maskAll);
MA1CUp = ParamColor("MA1.ColorUp", colorLime);
MA1CDn = ParamColor("MA1.ColorDn", colorRed);


MA2Mode = ParamList("MA2.Mode", "SMA|EMA",1);
MA2Period = Param("MA2.Period", 89, 1, 500);
MA2Style = ParamStyle("MA2.Style", styleDots|styleNoLine|styleNoTitle,maskAll);

MA2CUp = ParamColor("MA2.ColorUp", colorGreen);
MA2CDn = ParamColor("MA2.ColorDn", colorDarkRed);

MAxCNt = ParamColor("MA.ColorNT", colorYellow);


FontName = ParamList("Font", "Wingdings|Wingdings 2|Wingdings 3|Webdings"); 
FontSize = Param("PointSize", 5, 1);
ArrCode  = ParamStr("Arrow Code", "l");

GfxSetOverlayMode( 1 ); 
GfxSetCoordsMode( 1 ); // bar/price mode (instead of pixel) 


bi=BarIndex();
start = FirstVisibleValue( bi ); 
end   = LastVisibleValue( bi ); 




switch (MA1Mode)
{
   case "SMA": MA1 = MA(C,MA1Period); break;
   default:    MA1 = EMA(C, MA1Period); break;
}


switch (MA2Mode)
{
   case "SMA": MA2 = MA(C,MA2Period); break;
   default: MA2 = EMA(C, MA2Period); break;
}



MA1Color = IIf( MA1>MA2, MA1CUp, IIf( MA1<MA2, MA1CDn, MAxCNt)); 
MA2Color = IIf( MA1>MA2, MA2CUp, IIf( MA1<MA2, MA2CDn, MAxCNt)); 

switch(StrLen(ArrCode))
{
  case 0:
       ch1=ch2="l";
       break;
       
  case 1:
       ch1 = StrLeft(ArrCode, 1);
       ch2= ch1;
       break;
    
  default:  
       ch1 = StrLeft(ArrCode, 1);
       ch2 = StrMid(ArrCode, 1, 1);
       break;
  
  default:
       break;
  
}

for ( i = start; i <= end; i++ ) 
{
		PlotTextSetFont(ch1, FontName, FontSize, i, MA1[i], MA1Color[i]);
		PlotText(ch2, i, MA2[i], MA2Color[i]);
}

Title = "MA1 = " + NumToStr(MA1, 1.4)+ ", MA2 = " + NumToStr(MA1, 1.4);
 
Last edited:

KelvinHand

Well-Known Member
#3
GFXPlot()

PHP:
Version(5.80);

// ***** Created by Kelvinhand *****
// --  MT4 Style

STYLE_SOLID=0;
STYLE_DASH=1;
STYLE_DOT=2;
STYLE_DASHDOT=3;
STYLE_DASHDOTDOT=4;

Title="";

switch (ParamList("Style", "SOLID|DASH|DOT|DASHDOT|DASHDOTDOT|NULL",1))
{
   case "DASH": 		iStyle = STYLE_DASH; 	break;
   case "DOT":  		iStyle = STYLE_DOT; 		break; 
   case "DASHDOT": 		iStyle = STYLE_DASHDOT; 	break;
   case "DASHDOTDOT": 	iStyle = STYLE_DASHDOTDOT; 	break;
   case "NULL": 		iStyle = STYLE_NULL; 		break;
   default:				iStyle = STYLE_SOLID; 		break;
}

iWidth = Param("Width", 1); 
cColor = ParamColor("Color", colorRed);
  
Plot( C, "Price", colorDefault, styleCandle); 
GfxSetOverlayMode( 1 ); 
GfxSetCoordsMode( 1 ); // bar/price mode (instead of pixel) 


procedure GfxPlot(array, sname, color, style, width)
{

	bi = BarIndex(); 
	start = FirstVisibleValue( bi ); 
	end = LastVisibleValue( bi ); 

    i=start;
    
	GfxSetBkMode(1); 
	GfxMoveTo(i,array[i]);
	i++;
	
	GfxSelectPen(Color,width,style); 
	for ( ; i <= end; i++ ) 
	{
		GfxLineTo(i,array[i]);
	}

    Title = Title +sname + " = " + NumToStr(array, 1.4);
}


//--Plot Moving Average 
GfxPlot(MA(C, 20), "SMA", cColor, iStyle, iWidth);
 

KelvinHand

Well-Known Member
#4
123 Pattern

http://www.wisestocktrader.com/indicatorpasties/398-123-pat

PHP:
Version(5.80);

// ****** Modified by Kelvinhand ******

GfxSetOverlayMode( 1 ); 
GfxSetCoordsMode( 1 ); // bar/price mode (instead of pixel) 

// AFL code by Edward Pottasch, Jan 2013
// 123 pattern (as part of uncompleted ABCD pattern)

//#include <Gfx_h.afl>

nbar=Param("N Pivot Bars",5,2,50,1); 
tf=Param("Time Frame (min)",5,1,1440,1);tfrm=in1Minute*tf;
CleanPivots=ParamToggle("Use Clean Pivots","Off|On",1);
PivotSymmetry=ParamToggle("Use Symmetric Pivots","Off|On",0);
dispbe123=ParamToggle("Display bearish 123","Off|On",1);
dispbu123=ParamToggle("Display bullish 123","Off|On",1);
dispLabels=ParamToggle("Display Labels","Off|On",1);
entryType=ParamToggle("Entry Type","Regular|Agressive",1);

SetChartBkColor(ColorRGB(0,0,0));SetChartOptions(0,chartShowDates);
SetBarFillColor(IIf(C>O,colorGreen,IIf(C<=O,colorRed,colorLightGrey)));
Plot(C,"Price",IIf(C>O,colorDarkGreen,IIf(C<=O,colorDarkRed,colorLightGrey)),64,0,0,0,0);


TimeFrameSet(tfrm); 
if(PivotSymmetry)
{
	fc=1;
	pk=H>Ref(HHV(H,nbar*fc),-1) AND Ref(HHV(H,nbar),nbar)<=H;
	tr=L<Ref(LLV(L,nbar*fc),-1) AND Ref(LLV(L,nbar),nbar)>=L;
}
else
{
	fc=2;
	pk=H>Ref(HHV(H,nbar*fc),-1) AND Ref(HHV(H,nbar),nbar)<=H;
	tr=L<Ref(LLV(L,nbar*fc),-1) AND Ref(LLV(L,nbar),nbar)>=L;
}


bi=BarIndex();

start = FirstVisibleValue( bi ); 
end   = LastVisibleValue( bi ); 

Lx=LastValue(bi);

px0=ValueWhen(pk,bi,0); tx0=ValueWhen(tr,bi,0);
px1=ValueWhen(pk,bi,1); tx1=ValueWhen(tr,bi,1);
px2=ValueWhen(pk,bi,2); tx2=ValueWhen(tr,bi,2);
px3=ValueWhen(pk,bi,3); tx3=ValueWhen(tr,bi,3);

ph0=ValueWhen(pk,H,0); tl0=ValueWhen(tr,L,0);
ph1=ValueWhen(pk,H,1); tl1=ValueWhen(tr,L,1);
ph2=ValueWhen(pk,H,2); tl2=ValueWhen(tr,L,2);
ph3=ValueWhen(pk,H,3); tl3=ValueWhen(tr,L,3);

if(CleanPivots)
{
	tr=IIf((tr==1 AND pk==1) AND px2<tx2,False,tr);
	pk=IIf((tr==1 AND pk==1) AND px2>tx2,False,pk);

	px0=ValueWhen(pk,bi,0); tx0=ValueWhen(tr,bi,0);
	px1=ValueWhen(pk,bi,1); tx1=ValueWhen(tr,bi,1);
	px2=ValueWhen(pk,bi,2); tx2=ValueWhen(tr,bi,2);
	px3=ValueWhen(pk,bi,3); tx3=ValueWhen(tr,bi,3);	
	ph0=ValueWhen(pk,H,0); tl0=ValueWhen(tr,L,0);
	ph1=ValueWhen(pk,H,1); tl1=ValueWhen(tr,L,1);
	ph2=ValueWhen(pk,H,2); tl2=ValueWhen(tr,L,2);
	ph3=ValueWhen(pk,H,3); tl3=ValueWhen(tr,L,3);	
	
	tr=IIf(tr AND ((tx0<px0 AND tl1>tl0) OR (tx2>px1 AND tl1>=tl2) OR (px0==px1 AND tl1>tl0)),False,tr);
	pk=IIf(pk AND ((px0<tx0 AND ph1<ph0) OR (px2>tx1 AND ph1<=ph2) OR (tx0==tx1 AND ph1<ph0)),False,pk);

	px0=ValueWhen(pk,bi,0); tx0=ValueWhen(tr,bi,0);
	px1=ValueWhen(pk,bi,1); tx1=ValueWhen(tr,bi,1);
	px2=ValueWhen(pk,bi,2); tx2=ValueWhen(tr,bi,2);
	px3=ValueWhen(pk,bi,3); tx3=ValueWhen(tr,bi,3);
	ph0=ValueWhen(pk,H,0); tl0=ValueWhen(tr,L,0);
	ph1=ValueWhen(pk,H,1); tl1=ValueWhen(tr,L,1);
	ph2=ValueWhen(pk,H,2); tl2=ValueWhen(tr,L,2);
	ph3=ValueWhen(pk,H,3); tl3=ValueWhen(tr,L,3);	

	tr=IIf(tr AND ((tx0<px0 AND tl1>tl0) OR (tx2>px1 AND tl1>=tl2) OR (px0==px1 AND tl1>tl0)),False,tr);
	pk=IIf(pk AND ((px0<tx0 AND ph1<ph0) OR (px2>tx1 AND ph1<=ph2) OR (tx0==tx1 AND ph1<ph0)),False,pk);

	px0=ValueWhen(pk,bi,0); tx0=ValueWhen(tr,bi,0);
	px1=ValueWhen(pk,bi,1); tx1=ValueWhen(tr,bi,1);
	px2=ValueWhen(pk,bi,2); tx2=ValueWhen(tr,bi,2);
	px3=ValueWhen(pk,bi,3); tx3=ValueWhen(tr,bi,3);
	ph0=ValueWhen(pk,H,0); tl0=ValueWhen(tr,L,0);
	ph1=ValueWhen(pk,H,1); tl1=ValueWhen(tr,L,1);
	ph2=ValueWhen(pk,H,2); tl2=ValueWhen(tr,L,2);
	ph3=ValueWhen(pk,H,3); tl3=ValueWhen(tr,L,3);	
}
pkh=IIf(pk,H,Null);
trl=IIf(tr,L,Null);
TimeFrameRestore();


fact=Nz(Max(tfrm/60,Interval()/60)/(Interval()/60));
if(fact==0)fact=1;
Lkbk=Nz(tfrm/Interval());
if(Lkbk>1)
{
	pk=TimeFrameExpand(pk,tfrm,expandFirst);
	pkh=TimeFrameExpand(pkh,tfrm,expandFirst);
	pkhs=IIf(!IsEmpty(pkh),1,0);pkhs=pkhs-Ref(pkhs,-1);
	pk=pk AND H==pkh;
	cond1=Sum(pk,BarsSince(pkhs==1)+1)==1 AND pk;
	pk=pk AND cond1;
	
	tr=TimeFrameExpand(tr,tfrm,expandFirst);	
	trl=TimeFrameExpand(trl,tfrm,expandFirst);
	trls=IIf(!IsEmpty(trl),1,0);trls=trls-Ref(trls,-1);
	tr=tr AND L==trl;
	cond1=Sum(tr,BarsSince(trls==1)+1)==1 AND tr;
	tr=tr AND cond1;
	
	px0=ValueWhen(pk,bi,0); tx0=ValueWhen(tr,bi,0);
	px1=ValueWhen(pk,bi,1); tx1=ValueWhen(tr,bi,1);
	px2=ValueWhen(pk,bi,2); tx2=ValueWhen(tr,bi,2);
	px3=ValueWhen(pk,bi,3); tx3=ValueWhen(tr,bi,3);
	ph0=ValueWhen(pk,H,0); tl0=ValueWhen(tr,L,0);
	ph1=ValueWhen(pk,H,1); tl1=ValueWhen(tr,L,1);
	ph2=ValueWhen(pk,H,2); tl2=ValueWhen(tr,L,2);
	ph3=ValueWhen(pk,H,3); tl3=ValueWhen(tr,L,3);
}
ll=tr AND tl1<tl2;
hl=tr AND tl1>tl2;
hh=pk AND ph1>ph2;
lh=pk AND ph1<ph2;
dt=pk AND ph1==ph2;
db=tr AND tl1==tl2;

ll_h=IIf(ll,1,0);
hl_h=IIf(hl,2,0);
hh_h=IIf(hh,3,0);
lh_h=IIf(lh,4,0);
dt_h=IIf(dt,5,0);
db_h=IIf(db,6,0);

combi=ll_h+hl_h+lh_h+hh_h+dt_h+db_h;

t0=ValueWhen(combi,combi,0);
t1=ValueWhen(combi,combi,1);
t2=ValueWhen(combi,combi,2);
t3=ValueWhen(combi,combi,3);
t4=ValueWhen(combi,combi,4);
t5=ValueWhen(combi,combi,5);

// bearisch 123 pattern
be123=pk AND t1==4 AND t2==2;
beAx=ValueWhen(be123,tx2);beAy=ValueWhen(be123,tl2);
beBx=ValueWhen(be123,px2);beBy=ValueWhen(be123,ph2);
beCx=ValueWhen(be123,tx1);beCy=ValueWhen(be123,tl1);
beDx=ValueWhen(be123,px1);beDy=ValueWhen(be123,ph1);
be123=be123 AND (beBy-beCy)/(beBy-beAy)>0.382 AND (beBy-beCy)/(beBy-beAy)<0.88;
rr=BarsSince(be123)>=0;idx=IIf(rr,bi-ValueWhen(be123,beCx),Null);
if(entryType) aa=(beCy-beAy)/(beCx-beAx);else aa=0;bb=beCy;
aa=ValueWhen(be123,aa);bb=ValueWhen(be123,bb);
beEx=ValueWhen(be123,px1);ii=px1-beCx;beEy=aa*ii+bb;
beTrendline=IIf(idx,aa*idx+bb,Null);beValidSignalArea=Flip(be123,tr);
beTrendline=IIf(beValidSignalArea,beTrendline,Null);
Short=Cross(beTrendline,C) AND !IsEmpty(beTrendline);Short=Ref(Short,-1);ShortPrice=O;
Short=ExRem(Short,be123);Sell=0;

// bullish 123 pattern
bu123=tr AND t1==2 AND t2==4;
buAx=ValueWhen(bu123,px2);buAy=ValueWhen(bu123,ph2);
buBx=ValueWhen(bu123,tx2);buBy=ValueWhen(bu123,tl2);
buCx=ValueWhen(bu123,px1);buCy=ValueWhen(bu123,ph1);
buDx=ValueWhen(bu123,tx1);buDy=ValueWhen(bu123,tl1);
bu123=bu123 AND (buCy-buBy)/(buAy-buBy)>0.382 AND (buCy-buBy)/(buAy-buBy)<0.88;
rr=BarsSince(bu123)>=0;idx=IIf(rr,bi-ValueWhen(bu123,buCx),Null);
if(entryType) aa=(buCy-buAy)/(buCx-buAx);else aa=0;bb=buCy;
aa=ValueWhen(bu123,aa);bb=ValueWhen(bu123,bb);
buEx=ValueWhen(bu123,tx1);ii=tx1-buCx;buEy=aa*ii+bb;
buTrendline=IIf(idx,aa*idx+bb,Null);buValidSignalArea=Flip(bu123,pk);
buTrendline=IIf(buValidSignalArea,buTrendline,Null);
Buy=Cross(C,buTrendline) AND !IsEmpty(buTrendline);Buy=Ref(Buy,-1);BuyPrice=O;
Buy=ExRem(Buy,bu123);Cover=0;

Plot(pkh,"",colorRed,styleThick,0,0,0,-1);
Plot(trl,"",colorBrightGreen,styleThick,0,0,0,-1);
PlotShapes(shapeSmallCircle*tr,IIf(Lx-ValueWhen(tr,bi)>nbar*fact,ColorRGB(0,100,0),colorWhite),0,L,-10);
PlotShapes(shapeSmallCircle*pk,IIf(Lx-ValueWhen(pk,bi)>nbar*fact,ColorRGB(255,0,0),colorWhite),0,H,10);

qq=Interval()/60;
if(qq < 60){tf=" min";tt=qq;}
else if(qq >= 60 AND qq < 1440){tf=" hrs";tt=qq/60;}
else if(qq >= 1440){tf=" days";tt=(qq/60)/24;}
qq=Max(tfrm/60,Interval()/60);
if(qq < 60){tfa=" min";tta=qq;}
else if(qq >= 60 AND qq < 1440){tfa=" hrs";tta=qq/60;}
else if(qq >= 1440){tfa=" days";tta=(qq/60)/24;}

Title = Name() + 
"\nNbar: " + nbar + 
"\nChart TF: " + tt + tf + 
"\nTrend TF: " + tta + tfa;


 
Yofs =20;  
FracHi = Yofs;
FracLo = -Yofs-8;

for ( i = start; i <= end; i++ ) 
{
    if (dispLabels)
    {
		
		if(ll[i])	PlotTextSetFont("LL", "Tahoma", 8,i,L[i], colorYellow,colordefault, FracLo );
		if(hl[i])	PlotTextSetFont("HL", "Tahoma", 8,i,L[i], colorYellow,colordefault, FracLo );
		if(db[i])	PlotTextSetFont("DB", "Tahoma", 8,i,L[i], colorYellow,colordefault, FracLo ); 
		if(hh[i])	PlotTextSetFont("HH", "Tahoma", 8,i,H[i], colorYellow,colordefault, FracHi ); 
		if(lh[i])	PlotTextSetFont("LH", "Tahoma", 8,i,H[i], colorYellow,colordefault, FracHi ); 
		if(dt[i])	PlotTextSetFont("DT", "Tahoma", 8,i,H[i], colorYellow,colordefault, FracHi); 
	}
	
	if(dispbe123)	
	{
	    
		if(be123[i])
		{
			//GfxSetOverlayMode(1); 
			GfxSelectPen(ColorRGB(100,0,0),2); 
			GfxSelectSolidBrush(ColorRGB(30,0,0)); 	
			GfxPolygon(	i-(beDx[i]-beAx[i]),beAy[i], i-(beDx[i]-beBx[i]),beBy[i], i-(beDx[i]-beCx[i]),beCy[i]);
		
			GfxSetBkMode(1);
			GfxSetOverlayMode(1);
			GfxSelectPen(ColorRGB(100,0,0),1,1); 
			GfxMoveTo(i-(beDx[i]-beCx[i]),beCy[i]);
			GfxLineTo(i,beDy[i]); 
			GfxMoveTo(i-(beDx[i]-beBx[i]),beBy[i]);
			GfxLineTo(i,beDy[i]);
			
			PlotTextSetFont("u", "WingDings 2", 12, i-(beDx[i]-beBx[i])-0.9, beBy[i], ColorRed,colordefault, FracHi+18 );
			PlotText("v", i-(beDx[i]-beCx[i])-0.9,beCy[i], ColorRed,colordefault, FracLo-18);
			PlotText("w", i-(beDx[i]-beDx[i])-0.9,beDy[i], ColorRed,colordefault, FracHi+18 );
			
			Plot(LineArray(beCx[i],beCy[i],beEx[i],beEy[i],0,True ),"",ColorRGB(100,0,0),styleDashed);
			Plot(beTrendline,"",ColorRGB(100,0,0),styleDots|styleNoLine,0,0,0,0,1);
			
			PlotShapes(IIf(Short,shapeSmallDownTriangle,shapeNone),colorRed,0,H,IIf(Short AND Sell,-30,-15));	
			PlotShapes(IIf(Short,shapeSmallCircle,shapeNone),colorWhite,0,ShortPrice,0);		
		
		}
		if(bu123[i])
		{
			GfxSetOverlayMode(1); 
			GfxSelectPen(ColorRGB(0,100,0),2); 
			GfxSelectSolidBrush(ColorRGB(0,30,0)); 	
		
			GfxPolygon(i-(buDx[i]-buAx[i]),buAy[i],	i-(buDx[i]-buBx[i]),buBy[i],i-(buDx[i]-buCx[i]),buCy[i]);	

			GfxSetBkMode(1);
			GfxSetOverlayMode(1);
			GfxSelectPen(ColorRGB(0,100,0),1,1); 
			GfxMoveTo(i-(buDx[i]-buCx[i]),buCy[i]);
			GfxLineTo(i,buDy[i]); 
			GfxMoveTo(i-(buDx[i]-buBx[i]),buBy[i]);
			GfxLineTo(i,buDy[i]);		
	
	
	        PlotTextSetFont("u", "WingDings 2", 12, i-(buDx[i]-buBx[i])+0.9, buBy[i], colorBrightGreen,colordefault, FracLo-18 );
			PlotText("v", i-(buDx[i]-buCx[i])+0.9,buCy[i], colorBrightGreen,colordefault, FracHi+18 );
			PlotText("w", i-(buDx[i]-buDx[i])+0.9,buDy[i], colorBrightGreen,colordefault, FracLo-18  );
			
			
			Plot(LineArray(buCx[i],buCy[i],buEx[i],buEy[i],0,True ),"",ColorRGB(0,100,0),styleDashed);
			Plot(buTrendline,"",ColorRGB(0,100,0),styleDots|styleNoLine,0,0,0,0,1);	
			PlotShapes(IIf(Buy,shapeUpArrow,shapeNone),colorDarkGreen,0,L,-15);
			PlotShapes(IIf(Buy,shapeSmallCircle,shapeNone),colorWhite,0,BuyPrice,0);			
		}
	}	
}
 
Last edited:

dell

Well-Known Member
#5
kelvin sir , this error is coming in 123 pattern afl , plz look at image , it is saying variable 'x' is used without been initialized .i am using 5.802 ami version .
 

trash

Well-Known Member
#7
Re: 123 Pattern

http://www.wisestocktrader.com/indicatorpasties/398-123-pat

PHP:
Version(5.80);

// ****** Modified by Kelvinhand ******

GfxSetOverlayMode( 1 ); 
GfxSetCoordsMode( 1 ); // bar/price mode (instead of pixel) 

// AFL code by Edward Pottasch, Jan 2013
// 123 pattern (as part of uncompleted ABCD pattern)

//#include <Gfx_h.afl>

nbar=Param("N Pivot Bars",5,2,50,1); 
tf=Param("Time Frame (min)",5,1,1440,1);tfrm=in1Minute*tf;
CleanPivots=ParamToggle("Use Clean Pivots","Off|On",1);
PivotSymmetry=ParamToggle("Use Symmetric Pivots","Off|On",0);
dispbe123=ParamToggle("Display bearish 123","Off|On",1);
dispbu123=ParamToggle("Display bullish 123","Off|On",1);
dispLabels=ParamToggle("Display Labels","Off|On",1);
entryType=ParamToggle("Entry Type","Regular|Agressive",1);

SetChartBkColor(ColorRGB(0,0,0));SetChartOptions(0,chartShowDates);
SetBarFillColor(IIf(C>O,colorGreen,IIf(C<=O,colorRed,colorLightGrey)));
Plot(C,"Price",IIf(C>O,colorDarkGreen,IIf(C<=O,colorDarkRed,colorLightGrey)),64,0,0,0,0);


TimeFrameSet(tfrm); 
if(PivotSymmetry)
{
	fc=1;
	pk=H>Ref(HHV(H,nbar*fc),-1) AND Ref(HHV(H,nbar),nbar)<=H;
	tr=L<Ref(LLV(L,nbar*fc),-1) AND Ref(LLV(L,nbar),nbar)>=L;
}
else
{
	fc=2;
	pk=H>Ref(HHV(H,nbar*fc),-1) AND Ref(HHV(H,nbar),nbar)<=H;
	tr=L<Ref(LLV(L,nbar*fc),-1) AND Ref(LLV(L,nbar),nbar)>=L;
}


bi=BarIndex();

start = FirstVisibleValue( bi ); 
end   = LastVisibleValue( bi ); 

Lx=LastValue(bi);

px0=ValueWhen(pk,bi,0); tx0=ValueWhen(tr,bi,0);
px1=ValueWhen(pk,bi,1); tx1=ValueWhen(tr,bi,1);
px2=ValueWhen(pk,bi,2); tx2=ValueWhen(tr,bi,2);
px3=ValueWhen(pk,bi,3); tx3=ValueWhen(tr,bi,3);

ph0=ValueWhen(pk,H,0); tl0=ValueWhen(tr,L,0);
ph1=ValueWhen(pk,H,1); tl1=ValueWhen(tr,L,1);
ph2=ValueWhen(pk,H,2); tl2=ValueWhen(tr,L,2);
ph3=ValueWhen(pk,H,3); tl3=ValueWhen(tr,L,3);

if(CleanPivots)
{
	tr=IIf((tr==1 AND pk==1) AND px2<tx2,False,tr);
	pk=IIf((tr==1 AND pk==1) AND px2>tx2,False,pk);

	px0=ValueWhen(pk,bi,0); tx0=ValueWhen(tr,bi,0);
	px1=ValueWhen(pk,bi,1); tx1=ValueWhen(tr,bi,1);
	px2=ValueWhen(pk,bi,2); tx2=ValueWhen(tr,bi,2);
	px3=ValueWhen(pk,bi,3); tx3=ValueWhen(tr,bi,3);	
	ph0=ValueWhen(pk,H,0); tl0=ValueWhen(tr,L,0);
	ph1=ValueWhen(pk,H,1); tl1=ValueWhen(tr,L,1);
	ph2=ValueWhen(pk,H,2); tl2=ValueWhen(tr,L,2);
	ph3=ValueWhen(pk,H,3); tl3=ValueWhen(tr,L,3);	
	
	tr=IIf(tr AND ((tx0<px0 AND tl1>tl0) OR (tx2>px1 AND tl1>=tl2) OR (px0==px1 AND tl1>tl0)),False,tr);
	pk=IIf(pk AND ((px0<tx0 AND ph1<ph0) OR (px2>tx1 AND ph1<=ph2) OR (tx0==tx1 AND ph1<ph0)),False,pk);

	px0=ValueWhen(pk,bi,0); tx0=ValueWhen(tr,bi,0);
	px1=ValueWhen(pk,bi,1); tx1=ValueWhen(tr,bi,1);
	px2=ValueWhen(pk,bi,2); tx2=ValueWhen(tr,bi,2);
	px3=ValueWhen(pk,bi,3); tx3=ValueWhen(tr,bi,3);
	ph0=ValueWhen(pk,H,0); tl0=ValueWhen(tr,L,0);
	ph1=ValueWhen(pk,H,1); tl1=ValueWhen(tr,L,1);
	ph2=ValueWhen(pk,H,2); tl2=ValueWhen(tr,L,2);
	ph3=ValueWhen(pk,H,3); tl3=ValueWhen(tr,L,3);	

	tr=IIf(tr AND ((tx0<px0 AND tl1>tl0) OR (tx2>px1 AND tl1>=tl2) OR (px0==px1 AND tl1>tl0)),False,tr);
	pk=IIf(pk AND ((px0<tx0 AND ph1<ph0) OR (px2>tx1 AND ph1<=ph2) OR (tx0==tx1 AND ph1<ph0)),False,pk);

	px0=ValueWhen(pk,bi,0); tx0=ValueWhen(tr,bi,0);
	px1=ValueWhen(pk,bi,1); tx1=ValueWhen(tr,bi,1);
	px2=ValueWhen(pk,bi,2); tx2=ValueWhen(tr,bi,2);
	px3=ValueWhen(pk,bi,3); tx3=ValueWhen(tr,bi,3);
	ph0=ValueWhen(pk,H,0); tl0=ValueWhen(tr,L,0);
	ph1=ValueWhen(pk,H,1); tl1=ValueWhen(tr,L,1);
	ph2=ValueWhen(pk,H,2); tl2=ValueWhen(tr,L,2);
	ph3=ValueWhen(pk,H,3); tl3=ValueWhen(tr,L,3);	
}
pkh=IIf(pk,H,Null);
trl=IIf(tr,L,Null);
TimeFrameRestore();


fact=Nz(Max(tfrm/60,Interval()/60)/(Interval()/60));
if(fact==0)fact=1;
Lkbk=Nz(tfrm/Interval());
if(Lkbk>1)
{
	pk=TimeFrameExpand(pk,tfrm,expandFirst);
	pkh=TimeFrameExpand(pkh,tfrm,expandFirst);
	pkhs=IIf(!IsEmpty(pkh),1,0);pkhs=pkhs-Ref(pkhs,-1);
	pk=pk AND H==pkh;
	cond1=Sum(pk,BarsSince(pkhs==1)+1)==1 AND pk;
	pk=pk AND cond1;
	
	tr=TimeFrameExpand(tr,tfrm,expandFirst);	
	trl=TimeFrameExpand(trl,tfrm,expandFirst);
	trls=IIf(!IsEmpty(trl),1,0);trls=trls-Ref(trls,-1);
	tr=tr AND L==trl;
	cond1=Sum(tr,BarsSince(trls==1)+1)==1 AND tr;
	tr=tr AND cond1;
	
	px0=ValueWhen(pk,bi,0); tx0=ValueWhen(tr,bi,0);
	px1=ValueWhen(pk,bi,1); tx1=ValueWhen(tr,bi,1);
	px2=ValueWhen(pk,bi,2); tx2=ValueWhen(tr,bi,2);
	px3=ValueWhen(pk,bi,3); tx3=ValueWhen(tr,bi,3);
	ph0=ValueWhen(pk,H,0); tl0=ValueWhen(tr,L,0);
	ph1=ValueWhen(pk,H,1); tl1=ValueWhen(tr,L,1);
	ph2=ValueWhen(pk,H,2); tl2=ValueWhen(tr,L,2);
	ph3=ValueWhen(pk,H,3); tl3=ValueWhen(tr,L,3);
}
ll=tr AND tl1<tl2;
hl=tr tl1>tl2;
hh=pk AND ph1>ph2;
lh=pk AND ph1<ph2;
dt=pk AND ph1==ph2;
db=tr AND tl1==tl2;

ll_h=IIf(ll,1,0);
hl_h=IIf(hl,2,0);
hh_h=IIf(hh,3,0);
lh_h=IIf(lh,4,0);
dt_h=IIf(dt,5,0);
db_h=IIf(db,6,0);

combi=ll_h+hl_h+lh_h+hh_h+dt_h+db_h;

t0=ValueWhen(combi,combi,0);
t1=ValueWhen(combi,combi,1);
t2=ValueWhen(combi,combi,2);
t3=ValueWhen(combi,combi,3);
t4=ValueWhen(combi,combi,4);
t5=ValueWhen(combi,combi,5);

// bearisch 123 pattern
be123=pk AND t1==4 AND t2==2;
beAx=ValueWhen(be123,tx2);beAy=ValueWhen(be123,tl2);
beBx=ValueWhen(be123,px2);beBy=ValueWhen(be123,ph2);
beCx=ValueWhen(be123,tx1);beCy=ValueWhen(be123,tl1);
beDx=ValueWhen(be123,px1);beDy=ValueWhen(be123,ph1);
be123=be123 AND (beBy-beCy)/(beBy-beAy)>0.382 AND (beBy-beCy)/(beBy-beAy)<0.88;
rr=BarsSince(be123)>=0;idx=IIf(rr,bi-ValueWhen(be123,beCx),Null);
if(entryType) aa=(beCy-beAy)/(beCx-beAx);else aa=0;bb=beCy;
aa=ValueWhen(be123,aa);bb=ValueWhen(be123,bb);
beEx=ValueWhen(be123,px1);ii=px1-beCx;beEy=aa*ii+bb;
beTrendline=IIf(idx,aa*idx+bb,Null);beValidSignalArea=Flip(be123,tr);
beTrendline=IIf(beValidSignalArea,beTrendline,Null);
Short=Cross(beTrendline,C) AND !IsEmpty(beTrendline);Short=Ref(Short,-1);ShortPrice=O;
Short=ExRem(Short,be123);Sell=0;

// bullish 123 pattern
bu123=tr AND t1==2 AND t2==4;
buAx=ValueWhen(bu123,px2);buAy=ValueWhen(bu123,ph2);
buBx=ValueWhen(bu123,tx2);buBy=ValueWhen(bu123,tl2);
buCx=ValueWhen(bu123,px1);buCy=ValueWhen(bu123,ph1);
buDx=ValueWhen(bu123,tx1);buDy=ValueWhen(bu123,tl1);
bu123=bu123 AND (buCy-buBy)/(buAy-buBy)>0.382 AND (buCy-buBy)/(buAy-buBy)<0.88;
rr=BarsSince(bu123)>=0;idx=IIf(rr,bi-ValueWhen(bu123,buCx),Null);
if(entryType) aa=(buCy-buAy)/(buCx-buAx);else aa=0;bb=buCy;
aa=ValueWhen(bu123,aa);bb=ValueWhen(bu123,bb);
buEx=ValueWhen(bu123,tx1);ii=tx1-buCx;buEy=aa*ii+bb;
buTrendline=IIf(idx,aa*idx+bb,Null);buValidSignalArea=Flip(bu123,pk);
buTrendline=IIf(buValidSignalArea,buTrendline,Null);
Buy=Cross(C,buTrendline) AND !IsEmpty(buTrendline);Buy=Ref(Buy,-1);BuyPrice=O;
Buy=ExRem(Buy,bu123);Cover=0;

Plot(pkh,"",colorRed,styleThick,0,0,0,-1);
Plot(trl,"",colorBrightGreen,styleThick,0,0,0,-1);
PlotShapes(shapeSmallCircle*tr,IIf(Lx-ValueWhen(tr,bi)>nbar*fact,ColorRGB(0,100,0),colorWhite),0,L,-10);
PlotShapes(shapeSmallCircle*pk,IIf(Lx-ValueWhen(pk,bi)>nbar*fact,ColorRGB(255,0,0),colorWhite),0,H,10);

qq=Interval()/60;
if(qq < 60){tf=" min";tt=qq;}
else if(qq >= 60 AND qq < 1440){tf=" hrs";tt=qq/60;}
else if(qq >= 1440){tf=" days";tt=(qq/60)/24;}
qq=Max(tfrm/60,Interval()/60);
if(qq < 60){tfa=" min";tta=qq;}
else if(qq >= 60 AND qq < 1440){tfa=" hrs";tta=qq/60;}
else if(qq >= 1440){tfa=" days";tta=(qq/60)/24;}

Title = Name() + 
"\nNbar: " + nbar + 
"\nChart TF: " + tt + tf + 
"\nTrend TF: " + tta + tfa;


 
Yofs =20;  
FracHi = Yofs;
FracLo = -Yofs-8;

for ( i = start; i <= end; i++ ) 
{
    if (dispLabels)
    {
		
		if(ll[i])	PlotTextSetFont("LL", "Tahoma", 8,i,L[i], colorYellow,colordefault, FracLo );
		if(hl[i])	PlotTextSetFont("HL", "Tahoma", 8,i,L[i], colorYellow,colordefault, FracLo );
		if(db[i])	PlotTextSetFont("DB", "Tahoma", 8,i,L[i], colorYellow,colordefault, FracLo ); 
		if(hh[i])	PlotTextSetFont("HH", "Tahoma", 8,i,H[i], colorYellow,colordefault, FracHi ); 
		if(lh[i])	PlotTextSetFont("LH", "Tahoma", 8,i,H[i], colorYellow,colordefault, FracHi ); 
		if(dt[i])	PlotTextSetFont("DT", "Tahoma", 8,i,H[i], colorYellow,colordefault, FracHi); 
	}
	
	if(dispbe123)	
	{
	    
		if(be123[i])
		{
			//GfxSetOverlayMode(1); 
			GfxSelectPen(ColorRGB(100,0,0),2); 
			GfxSelectSolidBrush(ColorRGB(30,0,0)); 	
			GfxPolygon(	i-(beDx[i]-beAx[i]),beAy[i], i-(beDx[i]-beBx[i]),beBy[i], i-(beDx[i]-beCx[i]),beCy[i]);
		
			GfxSetBkMode(1);
			GfxSetOverlayMode(1);
			GfxSelectPen(ColorRGB(100,0,0),1,1); 
			GfxMoveTo(i-(beDx[i]-beCx[i]),beCy[i]);
			GfxLineTo(i,beDy[i]); 
			GfxMoveTo(i-(beDx[i]-beBx[i]),beBy[i]);
			GfxLineTo(i,beDy[i]);
			
			PlotTextSetFont("u", "WingDings 2", 12, i-(beDx[i]-beBx[i])-0.9, beBy[i], ColorRed,colordefault, FracHi+18 );
			PlotText("v", i-(beDx[i]-beCx[i])-0.9,beCy[i], ColorRed,colordefault, FracLo-18);
			PlotText("w", i-(beDx[i]-beDx[i])-0.9,beDy[i], ColorRed,colordefault, FracHi+18 );
			
			Plot(LineArray(beCx[i],beCy[i],beEx[i],beEy[i],0,True ),"",ColorRGB(100,0,0),styleDashed);
			Plot(beTrendline,"",ColorRGB(100,0,0),styleDots|styleNoLine,0,0,0,0,1);
			
			PlotShapes(IIf(Short,shapeSmallDownTriangle,shapeNone),colorRed,0,H,IIf(Short AND Sell,-30,-15));	
			PlotShapes(IIf(Short,shapeSmallCircle,shapeNone),colorWhite,0,ShortPrice,0);		
		
		}
		if(bu123[i])
		{
			GfxSetOverlayMode(1); 
			GfxSelectPen(ColorRGB(0,100,0),2); 
			GfxSelectSolidBrush(ColorRGB(0,30,0)); 	
		
			GfxPolygon(i-(buDx[i]-buAx[i]),buAy[i],	i-(buDx[i]-buBx[i]),buBy[i],i-(buDx[i]-buCx[i]),buCy[i]);	

			GfxSetBkMode(1);
			GfxSetOverlayMode(1);
			GfxSelectPen(ColorRGB(0,100,0),1,1); 
			GfxMoveTo(i-(buDx[i]-buCx[i]),buCy[i]);
			GfxLineTo(i,buDy[i]); 
			GfxMoveTo(i-(buDx[i]-buBx[i]),buBy[i]);
			GfxLineTo(i,buDy[i]);		
	
	
	        PlotTextSetFont("u", "WingDings 2", 12, i-(buDx[i]-buBx[i])+0.9, buBy[i], colorBrightGreen,colordefault, FracLo-18 );
			PlotText("v", i-(buDx[i]-buCx[i])+0.9,buCy[i], colorBrightGreen,colordefault, FracHi+18 );
			PlotText("w", i-(buDx[i]-buDx[i])+0.9,buDy[i], colorBrightGreen,colordefault, FracLo-18  );
			
			
			Plot(LineArray(buCx[i],buCy[i],buEx[i],buEy[i],0,True ),"",ColorRGB(0,100,0),styleDashed);
			Plot(buTrendline,"",ColorRGB(0,100,0),styleDots|styleNoLine,0,0,0,0,1);	
			PlotShapes(IIf(Buy,shapeUpArrow,shapeNone),colorDarkGreen,0,L,-15);
			PlotShapes(IIf(Buy,shapeSmallCircle,shapeNone),colorWhite,0,BuyPrice,0);			
		}
	}	
}

So much repetitive code can be replaced by dynamic variables.

Code:
 Version(5.80);

// ****** Modified by Kelvinhand ******
// ****** Modified by trash -> replacing repetitive code with dynamic variables ******

GfxSetOverlayMode( 1 ); 
GfxSetCoordsMode( 1 ); // bar/price mode (instead of pixel) 

// AFL code by Edward Pottasch, Jan 2013
// 123 pattern (as part of uncompleted ABCD pattern)

//#include <Gfx_h.afl>

nbar = Param( "N Pivot Bars", 5, 2, 50, 1 );
tf = Param( "Time Frame (min)", 5, 1, 1440, 1 );
tfrm = in1Minute * tf;
CleanPivots = ParamToggle( "Use Clean Pivots", "Off|On", 1 );
PivotSymmetry = ParamToggle( "Use Symmetric Pivots", "Off|On", 0 );
dispbe123 = ParamToggle( "Display bearish 123", "Off|On", 1 );
dispbu123 = ParamToggle( "Display bullish 123", "Off|On", 1 );
dispLabels = ParamToggle( "Display Labels", "Off|On", 1 );
entryType = ParamToggle( "Entry Type", "Regular|Agressive", 1 );

SetChartBkColor( ColorRGB( 0, 0, 0 ) );
SetChartOptions( 0, chartShowDates );
SetBarFillColor( IIf( C > O, colorGreen, IIf( C <= O, colorRed, colorLightGrey ) ) );
Plot( C, "Price", IIf( C > O, colorDarkGreen, IIf( C <= O, colorDarkRed, colorLightGrey ) ), 64, 0, 0, 0, 0 );


TimeFrameSet(tfrm); 
if ( PivotSymmetry )
{
    fc = 1;
    pk = H > Ref( HHV( H, nbar * fc ), -1 ) AND Ref( HHV( H, nbar ), nbar ) <= H;
    tr = L < Ref( LLV( L, nbar * fc ), -1 ) AND Ref( LLV( L, nbar ), nbar ) >= L;
}
else
{
    fc = 2;
    pk = H > Ref( HHV( H, nbar * fc ), -1 ) AND Ref( HHV( H, nbar ), nbar ) <= H;
    tr = L < Ref( LLV( L, nbar * fc ), -1 ) AND Ref( LLV( L, nbar ), nbar ) >= L;
}


bi = BarIndex();

start = FirstVisibleValue( bi );
end   = LastVisibleValue( bi );

Lx = LastValue( bi );

for ( i = 0; i < 4; i++ )
{
    VarSet( "px" + i, ValueWhen( pk, bi, i ) );
    VarSet( "tx" + i, ValueWhen( tr, bi, i ) );
    VarSet( "ph" + i, ValueWhen( pk, H, i ) );
    VarSet( "tl" + i, ValueWhen( tr, L, i ) );
}

if ( CleanPivots )
{
    tr = IIf( ( tr == 1 AND pk == 1 ) AND px2 < tx2, False, tr );
    pk = IIf( ( tr == 1 AND pk == 1 ) AND px2 > tx2, False, pk );

    for ( i = 0; i < 4; i++ )
    {
        VarSet( "px" + i, ValueWhen( pk, bi, i ) );
        VarSet( "tx" + i, ValueWhen( tr, bi, i ) );
        VarSet( "ph" + i, ValueWhen( pk, H, i ) );
        VarSet( "tl" + i, ValueWhen( tr, L, i ) );
    }

    tr = IIf( tr AND ( ( tx0<px0 AND tl1>tl0 ) OR ( tx2 > px1 AND tl1 >= tl2 ) OR ( px0 == px1 AND tl1 > tl0 ) ), False, tr );
    pk = IIf( pk AND ( ( px0 < tx0 AND ph1 < ph0 ) OR ( px2 > tx1 AND ph1 <= ph2 ) OR ( tx0 == tx1 AND ph1 < ph0 ) ), False, pk );

    for ( i = 0; i < 4; i++ )
    {
        VarSet( "px" + i, ValueWhen( pk, bi, i ) );
        VarSet( "tx" + i, ValueWhen( tr, bi, i ) );
        VarSet( "ph" + i, ValueWhen( pk, H, i ) );
        VarSet( "tl" + i, ValueWhen( tr, L, i ) );
    }

    tr = IIf( tr AND ( ( tx0<px0 AND tl1>tl0 ) OR ( tx2 > px1 AND tl1 >= tl2 ) OR ( px0 == px1 AND tl1 > tl0 ) ), False, tr );
    pk = IIf( pk AND ( ( px0 < tx0 AND ph1 < ph0 ) OR ( px2 > tx1 AND ph1 <= ph2 ) OR ( tx0 == tx1 AND ph1 < ph0 ) ), False, pk );

    for ( i = 0; i < 4; i++ )
    {
        VarSet( "px" + i, ValueWhen( pk, bi, i ) );
        VarSet( "tx" + i, ValueWhen( tr, bi, i ) );
        VarSet( "ph" + i, ValueWhen( pk, H, i ) );
        VarSet( "tl" + i, ValueWhen( tr, L, i ) );
    }
}

pkh = IIf( pk, H, Null );
trl = IIf( tr, L, Null );
TimeFrameRestore();


fact = Nz( Max( tfrm / 60, Interval() / 60 ) / ( Interval() / 60 ) );

if ( fact == 0 ) fact = 1;
Lkbk = Nz( tfrm / Interval() );

if ( Lkbk > 1 )
{
    pk = TimeFrameExpand( pk, tfrm, expandFirst );
    pkh = TimeFrameExpand( pkh, tfrm, expandFirst );
    pkhs = IIf( !IsEmpty( pkh ), 1, 0 );
    pkhs = pkhs - Ref( pkhs, -1 );
    pk = pk AND H == pkh;
    cond1 = Sum( pk, BarsSince( pkhs == 1 ) + 1 ) == 1 AND pk;
    pk = pk AND cond1;

    tr = TimeFrameExpand( tr, tfrm, expandFirst );
    trl = TimeFrameExpand( trl, tfrm, expandFirst );
    trls = IIf( !IsEmpty( trl ), 1, 0 );
    trls = trls - Ref( trls, -1 );
    tr = tr AND L == trl;
    cond1 = Sum( tr, BarsSince( trls == 1 ) + 1 ) == 1 AND tr;
    tr = tr AND cond1;

    for ( i = 0; i < 4; i++ )
    {
        VarSet( "px" + i, ValueWhen( pk, bi, i ) );
        VarSet( "tx" + i, ValueWhen( tr, bi, i ) );
        VarSet( "ph" + i, ValueWhen( pk, H, i ) );
        VarSet( "tl" + i, ValueWhen( tr, L, i ) );
    }
}
ll = tr AND tl1 < tl2;
hl = tr AND tl1 > tl2;
hh = pk AND ph1 > ph2;
lh = pk AND ph1 < ph2;
dt = pk AND ph1 == ph2;
db = tr AND tl1 == tl2;

ll_h = IIf( ll, 1, 0 );
hl_h = IIf( hl, 2, 0 );
hh_h = IIf( hh, 3, 0 );
lh_h = IIf( lh, 4, 0 );
dt_h = IIf( dt, 5, 0 );
db_h = IIf( db, 6, 0 );

combi = ll_h + hl_h + lh_h + hh_h + dt_h + db_h;

for ( i = 0; i < 6; i++ )
{
    VarSet( "t" + i, ValueWhen( combi, combi, i ) );
}

// bearisch 123 pattern
be123=pk AND t1==4 AND t2==2;
beAx=ValueWhen(be123,tx2);beAy=ValueWhen(be123,tl2);
beBx=ValueWhen(be123,px2);beBy=ValueWhen(be123,ph2);
beCx=ValueWhen(be123,tx1);beCy=ValueWhen(be123,tl1);
beDx=ValueWhen(be123,px1);beDy=ValueWhen(be123,ph1);
be123=be123 AND (beBy-beCy)/(beBy-beAy)>0.382 AND (beBy-beCy)/(beBy-beAy)<0.88;
rr=BarsSince(be123)>=0;idx=IIf(rr,bi-ValueWhen(be123,beCx),Null);
if(entryType) aa=(beCy-beAy)/(beCx-beAx);else aa=0;bb=beCy;
aa=ValueWhen(be123,aa);bb=ValueWhen(be123,bb);
beEx=ValueWhen(be123,px1);ii=px1-beCx;beEy=aa*ii+bb;
beTrendline=IIf(idx,aa*idx+bb,Null);beValidSignalArea=Flip(be123,tr);
beTrendline=IIf(beValidSignalArea,beTrendline,Null);
Short = Cross( beTrendline, C ) AND !IsEmpty( beTrendline );
Short = Ref( Short, -1 );
ShortPrice = O;
Short = ExRem( Short, be123 );
Sell = 0;

// bullish 123 pattern
bu123=tr AND t1==2 AND t2==4;
buAx=ValueWhen(bu123,px2);buAy=ValueWhen(bu123,ph2);
buBx=ValueWhen(bu123,tx2);buBy=ValueWhen(bu123,tl2);
buCx=ValueWhen(bu123,px1);buCy=ValueWhen(bu123,ph1);
buDx=ValueWhen(bu123,tx1);buDy=ValueWhen(bu123,tl1);
bu123=bu123 AND (buCy-buBy)/(buAy-buBy)>0.382 AND (buCy-buBy)/(buAy-buBy)<0.88;
rr=BarsSince(bu123)>=0;idx=IIf(rr,bi-ValueWhen(bu123,buCx),Null);
if(entryType) aa=(buCy-buAy)/(buCx-buAx);else aa=0;bb=buCy;
aa=ValueWhen(bu123,aa);bb=ValueWhen(bu123,bb);
buEx=ValueWhen(bu123,tx1);ii=tx1-buCx;buEy=aa*ii+bb;
buTrendline=IIf(idx,aa*idx+bb,Null);buValidSignalArea=Flip(bu123,pk);
buTrendline=IIf(buValidSignalArea,buTrendline,Null);
Buy = Cross( C, buTrendline ) AND !IsEmpty( buTrendline );
Buy = Ref( Buy, -1 );
BuyPrice = O;
Buy = ExRem( Buy, bu123 );
Cover = 0;

Plot( pkh, "", colorRed, styleThick, 0, 0, 0, -1 );
Plot( trl, "", colorBrightGreen, styleThick, 0, 0, 0, -1 );
PlotShapes( shapeSmallCircle*tr, IIf( Lx - ValueWhen( tr, bi ) > nbar*fact, ColorRGB( 0, 100, 0 ), colorWhite ), 0, L, -10 );
PlotShapes( shapeSmallCircle*pk, IIf( Lx - ValueWhen( pk, bi ) > nbar*fact, ColorRGB( 255, 0, 0 ), colorWhite ), 0, H, 10 );

qq=Interval()/60;
if(qq < 60){tf=" min";tt=qq;}
else if(qq >= 60 AND qq < 1440){tf=" hrs";tt=qq/60;}
else if(qq >= 1440){tf=" days";tt=(qq/60)/24;}
qq=Max(tfrm/60,Interval()/60);
if(qq < 60){tfa=" min";tta=qq;}
else if(qq >= 60 AND qq < 1440){tfa=" hrs";tta=qq/60;}
else if(qq >= 1440){tfa=" days";tta=(qq/60)/24;}

Title = Name() + 
"\nNbar: " + nbar + 
"\nChart TF: " + tt + tf + 
"\nTrend TF: " + tta + tfa;


Yofs =20;  
FracHi = Yofs;
FracLo = -Yofs-8;

for ( i = start; i <= end; i++ ) 
{
    if (dispLabels)
    {        
        if(ll[i])    PlotTextSetFont("LL", "Tahoma", 8,i,L[i], colorYellow,colordefault, FracLo );
        if(hl[i])    PlotTextSetFont("HL", "Tahoma", 8,i,L[i], colorYellow,colordefault, FracLo );
        if(db[i])    PlotTextSetFont("DB", "Tahoma", 8,i,L[i], colorYellow,colordefault, FracLo ); 
        if(hh[i])    PlotTextSetFont("HH", "Tahoma", 8,i,H[i], colorYellow,colordefault, FracHi ); 
        if(lh[i])    PlotTextSetFont("LH", "Tahoma", 8,i,H[i], colorYellow,colordefault, FracHi ); 
        if(dt[i])    PlotTextSetFont("DT", "Tahoma", 8,i,H[i], colorYellow,colordefault, FracHi); 
    }
    
    if(dispbe123)    
    {
        
        if(be123[i])
        {
            //GfxSetOverlayMode(1); 
            GfxSelectPen(ColorRGB(100,0,0),2); 
            GfxSelectSolidBrush(ColorRGB(30,0,0));     
            GfxPolygon( i-(beDx[i]-beAx[i]),beAy[i], i-(beDx[i]-beBx[i]),beBy[i], i-(beDx[i]-beCx[i]),beCy[i]);
        
            GfxSetBkMode(1);
            GfxSetOverlayMode(1);
            GfxSelectPen(ColorRGB(100,0,0),1,1); 
            GfxMoveTo(i-(beDx[i]-beCx[i]),beCy[i]);
            GfxLineTo(i,beDy[i]); 
            GfxMoveTo(i-(beDx[i]-beBx[i]),beBy[i]);
            GfxLineTo(i,beDy[i]);
            
            PlotTextSetFont("u", "WingDings 2", 12, i-(beDx[i]-beBx[i])-0.9, beBy[i], ColorRed,colordefault, FracHi+18 );
            PlotText("v", i-(beDx[i]-beCx[i])-0.9,beCy[i], ColorRed,colordefault, FracLo-18);
            PlotText("w", i-(beDx[i]-beDx[i])-0.9,beDy[i], ColorRed,colordefault, FracHi+18 );
            
            Plot(LineArray(beCx[i],beCy[i],beEx[i],beEy[i],0,True ),"",ColorRGB(100,0,0),styleDashed);
            Plot(beTrendline,"",ColorRGB(100,0,0),styleDots|styleNoLine,0,0,0,0,1);
            
            PlotShapes(IIf(Short,shapeSmallDownTriangle,shapeNone),colorRed,0,H,IIf(Short AND Sell,-30,-15));    
            PlotShapes(IIf(Short,shapeSmallCircle,shapeNone),colorWhite,0,ShortPrice,0);        
        
        }
        if(bu123[i])
        {
            GfxSetOverlayMode(1); 
            GfxSelectPen(ColorRGB(0,100,0),2); 
            GfxSelectSolidBrush(ColorRGB(0,30,0));     
        
            GfxPolygon(i-(buDx[i]-buAx[i]),buAy[i],    i-(buDx[i]-buBx[i]),buBy[i],i-(buDx[i]-buCx[i]),buCy[i]);    

            GfxSetBkMode(1);
            GfxSetOverlayMode(1);
            GfxSelectPen(ColorRGB(0,100,0),1,1); 
            GfxMoveTo(i-(buDx[i]-buCx[i]),buCy[i]);
            GfxLineTo(i,buDy[i]); 
            GfxMoveTo(i-(buDx[i]-buBx[i]),buBy[i]);
            GfxLineTo(i,buDy[i]);        
    
    
            PlotTextSetFont("u", "WingDings 2", 12, i-(buDx[i]-buBx[i])+0.9, buBy[i], colorBrightGreen,colordefault, FracLo-18 );
            PlotText("v", i-(buDx[i]-buCx[i])+0.9,buCy[i], colorBrightGreen,colordefault, FracHi+18 );
            PlotText("w", i-(buDx[i]-buDx[i])+0.9,buDy[i], colorBrightGreen,colordefault, FracLo-18  );
            
            
            Plot(LineArray(buCx[i],buCy[i],buEx[i],buEy[i],0,True ),"",ColorRGB(0,100,0),styleDashed);
            Plot(buTrendline,"",ColorRGB(0,100,0),styleDots|styleNoLine,0,0,0,0,1);    
            PlotShapes(IIf(Buy,shapeUpArrow,shapeNone),colorDarkGreen,0,L,-15);
            PlotShapes(IIf(Buy,shapeSmallCircle,shapeNone),colorWhite,0,BuyPrice,0);            
        }
    }    
}
 

KelvinHand

Well-Known Member
#8
Market Profile Lite

Someone solved the over 500 plot()/plotohlc() in another forum using Graphic API, further simplify & improved for 5.80++.
So far so good.

PHP:
_SECTION_BEGIN( "MPLite" );
// - there was a plot limit call introduced after 5.41.0 beta
//   i.e. "•Warning 502: Calling Plot()/PlotOHLC over 500 times is displayed in indicator in runtime to prevent abuse"
// - uses GFX for major calls of plot only if AB version newer than 5.40 - this only delays reaching the plot limit
// http://www.***********.com/amibroker/2961-market-profile-amibroker-new-13.html

Version (5.80);
PS_SOLID=0;
PS_DASH=1;
PS_DOT=2;
PS_DASHDOT=3;
PS_DASHDOTDOT=4;
PS_NULL=5;
PS_INSIDEFRAME=6;

function Lastthursday()
{
 Daysinmonth=
	IIf(Month()==2, IIf(Year()%4==0 AND Year()%100!=0,29,28), 
	IIf(Month()==4 OR Month()==6 OR Month()==9 OR Month()==11,30,31));
 
 return IIf(Daysinmonth-Day()<7 AND DayOfWeek()==4,1,
        IIf(Daysinmonth-Day()<8 AND DayOfWeek()==3 AND Ref(DayOfWeek(),1)!=4 AND Day()!=Daysinmonth,1,0));
 
}


procedure GfxPlotLine( ix0, iy0, ix1, iy1, iColor, iWidth, iStyle)
{
    GfxSetBkMode(1);
    GfxSelectPen( iColor, iWidth, iStyle );
    GfxMoveTo( ix0, iy0 );
    GfxLineTo( ix1, iy1 );
}


PlotOHLC( O, H, L, C, "Price", IIf( C > O, colorGreen, colorRed ), styleCandle );

FirstVisibleBar = Status( "FirstVisibleBar" );
Lastvisiblebar = Status( "LastVisibleBar" );

totalVisible = Lastvisiblebar - FirstVisibleBar;


//Den = Param("Density", 1, 0.1, 10, 0.1);
percent = Param( "Value Area", 70, 1, 100, 1 );
Type = ParamList( "Type", "Price Profile|Volume Profile" );
Period = ParamList( "Base", "Hourly|Daily|Weekly|Monthly|Lastthursday|Yearly", 1 );
x_scale = Param( "Horizontal_scale", 2, 0, 10, 0.1 );
EnMP2 = ParamStyle( "Style", styleLine | styleNoLabel, maskAll );

EnIB = ParamToggle( "Show Initial Balance",  "No|Yes", 0 );
IBBars = Param( "Initial Balance Bars", 2, 1, 10, 1 );
ViewYvalues = ParamToggle( "Show Yesterdays Values", "No|Yes", 1 );
ViewVlines = ParamToggle( "Show Vertical Base Lines", "No|Yes", 1 );
Viewvalues = ParamToggle( "Show Values", "No|Yes", 0 );
ViewVpoc = ParamToggle( "Show Virgin POC", "No|Yes", 1 );
ViewTPO = ParamToggle( "Show TPO Count", "No|Yes", 0 );

Color_Above_VA = ParamColor( "Color_Above_VA",  colorGrey40 );
Color_VA = ParamColor( "Color_VA", colorBlueGrey );
Color_Below_VA = ParamColor( "Color_Below_VA", colorGrey40 );
Color_POC_line = ParamColor( "Color_POC_Line", colorYellow );

color_YVAH = ParamColor( "YVAH", colorWhite );
color_YVAL = ParamColor( "YVAL", colorWhite );
color_YPOC = ParamColor( "YPOC", colorYellow );

IBColor = ParamColor( "IB Color", colorWhite );
IBstyle = ParamStyle( "IB style", styleLine, maskAll );
Color_Virgin_POC = ParamColor( "Virgin Poc Color", colorYellow );
Color_Base_Line = ParamColor( "Base Line Color", colorDarkGrey );

switch (Period)
  {

	case "Yearly":	
		BarsInDay = BarsSince(Year() != Ref(Year(), -1));
		tf = inMonthly;
		break;

	case "Monthly":	
		BarsInDay = BarsSince(Month() != Ref(Month(), -1));
		tf = inMonthly;
		break;
	
	
	case "Weekly":
		BarsInDay = BarsSince(DayOfWeek() < Ref( DayOfWeek(), -1 ));
		tf = inWeekly;
		break;
	
	case "Hourly":
		BarsInDay = BarsSince(Hour() != Ref(Hour(), -1));
		tf = inHourly;
		break;
	
	case "Daily":
		BarsInDay = BarsSince(Day() != Ref(Day(), -1));
		tf = inDaily;
		break;
	
  }
  

  if(Period=="Lastthursday"  )
  {
    BarsInDay = BarsSince(Lastthursday()==0 AND Ref(Lastthursday(), -1)==1);
    bot1=ValueWhen(BarsInDay==0,L);
    Bot2 = ValueWhen(Ref(BarsInDay)==1 OR BarIndex()>BarCount-2 ,LLV(L,BarsInDay),0);
    bot=Min(bot1,bot2);
    top1=ValueWhen(BarsInDay==0,H);
    Top2 =ValueWhen(Ref(BarsInDay,1)==1 OR BarIndex()>BarCount-2,HHV(H,BarsInDay),0);
    top=Max(top1,top2);
    Vol = ValueWhen(Ref(BarsInDay,1)==1 OR BarIndex()>BarCount-2 ,Sum(V,BarsInDay),0);
  }
  else
  {
	Bot = TimeFrameGetPrice("L", tf, 0);
	Top = TimeFrameGetPrice("H", tf, 0);
	Vol = TimeFrameGetPrice("V", tf, 0);  
  } 

CurTop = HHV( H, BarsInDay + 1 );
Curbot = LLV( L, BarsInDay + 1 );

Range =  Top - Bot;
coverage = LastValue( Ref( ATR( 10 ), -1 ) );

den = ( coverage / 10 );
//den=1;

multiplier = IIf( round( totalVisible ) / 300 < 1, 1, round( totalVisible ) / 300 );

if ( ViewVlines)
    Plot( BarsInDay == 0, "", Color_Base_Line, styleHistogram | styleOwnScale | styleLine | styleNoLabel );


relTodayRange = 0;

x = 0;
basey = 0;
basex = 0;
newday = 0;
total = 0;
shiftup = 0;
shiftdn = 0;
//Line = Null;
Voloumeunit = 0;


 GfxSetOverlayMode( 1 ); 
 GfxSetCoordsMode( 1 ); // bar/price mode (instead of pixel) 

for (  i = IIf( FirstVisibleBar - 100 > 1, FirstVisibleBar - 100, FirstVisibleBar ); i < Lastvisiblebar AND i < BarCount - 1 ; i++  )
{
    if ( BarsInDay[i] == 0 )
    {
        t = BarsInDay[i-1];


        if ( EnIB )
        {
            IBH = HHV( H, IBBars );
            IBL = LLV( L, IBBars );
            /*
            Line1 = LineArray( basex, IBH[basex+IBBars-1], i, IBH[basex+IBBars-1] );
            Plot( Line1, "", IBColor, IBstyle );
            Line2 = LineArray( basex, IBL[basex+IBBars-1], i, IBL[basex+IBBars-1] );
            Plot( Line2, "", IBcolor, IBstyle );
            */
            GfxPlotLine(basex, hY=IBH[basex+IBBars-1], i, hY,
						IBColor, 1, PS_SOLID);	
			GfxPlotLine(basex, hY=IBL[basex+IBBars-1], i, hY,
						IBColor, 1, PS_SOLID);				
            
        }

        //////////////////////////////////
        poc = 0;
        pocj = 0;
        midrange = int( relTodayRange / 2 ) + 1;

        for ( j = 1; j <= relTodayRange + 1 ; j++ )
        {
            if ( poc < x[j] )
            {
                poc = x[j];
                pocj = j;
            }
            else
                if ( poc == x[j] )
                {
                    if ( abs( midrange - j ) < abs( midrange - pocj ) )
                    {
                        poc = x[j];
                        pocj = j;
                    }
                }

        }

        for ( n = 1; n <= relTodayRange; n++ )
            total[n] = x[n] + total[n-1];

        Value_area = ( total[relTodayRange] * percent ) / 100;

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


		//Vah = LineArray( baseX[i], baseY + ( pocj + shiftup ) * den, i, baseY + ( pocj + shiftup ) * den );
        //Val = LineArray( baseX[i], baseY + ( pocj - shiftdn ) * den, i, baseY + ( pocj - shiftdn ) * den );
        //pocline = LineArray( basex, basey + pocj * den, basex[i] + poc, basey + pocj * den );
        
        
        
        if ( ViewVpoc)
        {
            Virginpoc = basey + pocj * den;
            newi = Null;

            for ( j = i; j <= ( BarCount - 1 ) ; j++ )
                if ( L[j] < Virginpoc AND H[j] > Virginpoc )
                {
                    newi = j;
                    break;
                }
                else
                    newi = BarCount;

            Plot( LineArray( basex[i], hY=basey + pocj*den, newi, hY), "", Color_Virgin_POC, styleNoRescale );
            
            
        }

        

        if ( ViewYvalues)
        {
           //Vahn = LineArray( i, baseY + ( pocj + shiftup ) * den, i + t, baseY + ( pocj + shiftup ) * den );
           //pocn = LineArray( i, baseY + ( pocj ) * den, i + t, baseY + ( pocj ) * den );
           //Valn = LineArray( i, baseY + ( pocj - shiftdn ) * den, i + t, baseY + ( pocj - shiftdn ) * den );

            GfxPlotLine( i, baseY + ( pocj + shiftup ) * den, i + t, baseY + ( pocj + shiftup ) * den, 
			     color_YVAH, 0, PS_DOT);
			     
			GfxPlotLine( i, baseY + ( pocj ) * den, i + t, baseY + ( pocj ) * den, 
			     color_YPOC, 0, PS_DOT);     
			     
			GfxPlotLine(i, baseY + ( pocj - shiftdn ) * den, i + t, baseY + ( pocj - shiftdn ) * den, 
			     color_YVAL, 0, PS_DOT);
			         
            //Plot( Vahn, "", color_YVAH, styleDashed | styleNoRescale );
            //Plot( Valn, "", color_YVAL, styleDashed | styleNoRescale );
            //Plot( pocn, "", color_YPOC, styleDashed | styleNoRescale );
            
            
        }


        if ( ViewTPO )
        {
            nnn = HHV( H, BarsInDay );
            PlotText( "" + ( total[relTodayRange] - total[pocj] ), basex[i], nnn[i], colorLightGrey );
            PlotText( "" + ( total[pocj-1] ), basex[i], basey - den, colorLightGrey );
        }

        if ( Viewvalues)
        {
            PlotText( "" + ( ( basey + pocj*den ) ), baseX[i], basey + pocj*den, colorWhite, colorDarkGrey );
            PlotText( "" + ( ( baseY + ( pocj + shiftup )*den ) ), baseX[i], baseY + ( pocj + shiftup )*den, colorWhite, colorDarkGrey );
            PlotText( "" + ( ( baseY + ( pocj - shiftdn )*den ) ), baseX[i], baseY + ( pocj - shiftdn )*den, colorWhite, colorDarkGrey );
        }

		//-- Plot Market Profile
        for ( p = 0; p <= relTodayRange + 1; p = p + multiplier )
        {
		    GfxPlotLine( baseX, hY=baseY + p * Den, baseX + x[p], hY, 
							IIf( p >  ( pocj + shiftup ), Color_Above_VA, 
							IIf( p <= ( pocj + shiftup ) AND p >= ( pocj - shiftdn ), Color_VA, 
							  Color_Below_VA )), 1, PS_SOLID);
							  
        }
        
		//-- Plot PoC
		GfxPlotLine( baseX, hY = basey + pocj * den, basex[i] + poc, hY, 
        			 Color_POC_Line, 1, PS_SOLID);				  
        
        				  
        
        			 
///////////////////
        basex = 0;
        x = 0;
        Basex = i;
        baseY = Bot[i];
        relTodayRange = Range[i] / Den;
        Voloumeunit = Vol[i] / LastValue( BarsInDay );

    }

    for ( j = 0; j <= relTodayRange ; j++ )
    {
        if ( L[i] <= Bot[i] + j*Den AND H[i] >= Bot[i] + j*Den  )
        {

            if ( Type == "Price Profile" )
            {
                x[j] += x_scale;
            }
            else
                if ( Type == "Volume Profile" )
                {
                    x[j] += round( V[i] / Voloumeunit ) + 1;
                }

        }
    }
}


if ( EnIB )
{
    IBH = HHV( H, IBBars );
    IBL = LLV( L, IBBars );
    Line1 = LineArray( basex, IBH[basex+IBBars-1], i, IBH[basex+IBBars-1] );
    Plot( Line1, "", IBColor, IBstyle );
    Line2 = LineArray( basex, IBL[basex+IBBars-1], i, IBL[basex+IBBars-1] );
    Plot( Line2, "", IBColor, IBstyle );
}

//////////////////////////////////
poc = 0;
pocj = 0;
midrange = int( relTodayRange / 2 ) + 1;

for ( j = 1; j <= relTodayRange + 1 ; j++ )
{
    if ( poc < x[j] )
    {
        poc = x[j];
        pocj = j;
    }
    else
        if ( poc == x[j] )
        {
            if ( abs( midrange - j ) < abs( midrange - pocj ) )
            {
                poc = x[j];
                pocj = j;
            }
        }

}

for ( n = 1; n <= relTodayRange; n++ )
    total[n] = x[n] + total[n-1];

Value_area = ( total[relTodayRange] * percent ) / 100;


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

Vah = LineArray( baseX[i], baseY + ( pocj + shiftup ) * den, i, baseY + ( pocj + shiftup ) * den );
Val = LineArray( baseX[i], baseY + ( pocj - shiftdn ) * den, i, baseY + ( pocj - shiftdn ) * den );
pocline = LineArray( basex, basey + pocj * den, basex[i] + poc, basey + pocj * den );

if ( ViewTPO)
{
    PlotText( "" + ( total[relTodayRange] - total[pocj] ), basex[i], top[i], colorLightGrey );
    PlotText( "" + ( total[pocj-1] + x_scale ), basex[i], basey - den, colorLightGrey );
}

if ( Viewvalues )
{
    PlotText( "" + ( ( basey + pocj*den ) ), baseX[i], basey + pocj*den, colorWhite, colorDarkGrey );
    PlotText( "" + ( ( baseY + ( pocj + shiftup )*den ) ), baseX[i], baseY + ( pocj + shiftup )*den, colorWhite, colorDarkGrey );
    PlotText( "" + ( ( baseY + ( pocj - shiftdn )*den ) ), baseX[i], baseY + ( pocj - shiftdn )*den, colorWhite, colorDarkGrey );
}



for ( p = 0; p <= relTodayRange + 1; p = p + multiplier )
{
		GfxPlotLine( baseX,        hY=baseY + p * Den, 
				     baseX + x[p], hY, 
				     IIf( p > ( pocj + shiftup ), Color_Above_VA, 
				     IIf( p <= ( pocj + shiftup ) AND p >= ( pocj - shiftdn ), Color_VA, Color_Below_VA )), 1, PS_SOLID);
}



Plot( pocline, "", Color_POC_Line, styleNoRescale | styleNoLabel );

_SECTION_END();
 
Last edited:

KelvinHand

Well-Known Member
#9
Price Line

Simulate MT4 Price Line


* with moving horizontal line
PHP:
Version(5.80);
Plot( C, "Price", colorDefault, styleCandle); 

GfxSetOverlayMode( 1 ); 
GfxSetCoordsMode( 1 ); // bar/price mode (instead of pixel) 

// ***** Created by Kelvinhand *****
// --  MT4 Style

STYLE_SOLID=0;
STYLE_DASH=1;
STYLE_DOT=2;
STYLE_DASHDOT=3;
STYLE_DASHDOTDOT=4;

switch (ParamList("Style", "SOLID|DASH|DOT|DASHDOT|DASHDOTDOT|NULL",2))
{
   case "DASH":         iStyle = STYLE_DASH;     break;
   case "DOT":          iStyle = STYLE_DOT;         break; 
   case "DASHDOT":         iStyle = STYLE_DASHDOT;     break;
   case "DASHDOTDOT":     iStyle = STYLE_DASHDOTDOT;     break;
   case "NULL":         iStyle = STYLE_NULL;         break;
   default:                iStyle = STYLE_SOLID;         break;
}

iWidth = Param("Width", 1); 
cColor = ParamColor("Color", colorYellow);

procedure GfxHLine(Y, x0, x1, color, style, width)
{
    GfxSetBkMode(1); 
    GfxMoveTo(X0,Y);
    
    GfxSelectPen(Color,width,style); 
    GfxLineTo(x1,y);
}


x1=BarCount-1;
x2=BarCount+100;
Y= LastValue(C);
GfxHLine(Y, x1, x2, cColor, iStyle, iWidth);

* with moving text
PHP:
Version(5.80);
Plot( C, "Price", colorDefault, styleCandle); 


GfxSetOverlayMode( 1 ); 
GfxSetCoordsMode( 1 ); // bar/price mode (instead of pixel) 

// ***** Created by Kelvinhand *****
// --  MT4 Style

STYLE_SOLID=0;
STYLE_DASH=1;
STYLE_DOT=2;
STYLE_DASHDOT=3;
STYLE_DASHDOTDOT=4;

DT_TOP=0;

switch (ParamList("Style", "SOLID|DASH|DOT|DASHDOT|DASHDOTDOT|NULL",2))
{
   case "DASH":         iStyle = STYLE_DASH;     break;
   case "DOT":          iStyle = STYLE_DOT;         break; 
   case "DASHDOT":         iStyle = STYLE_DASHDOT;     break;
   case "DASHDOTDOT":     iStyle = STYLE_DASHDOTDOT;     break;
   case "NULL":         iStyle = STYLE_NULL;         break;
   default:                iStyle = STYLE_SOLID;         break;
}

iWidth = Param("Width", 1); 
cColor = ParamColor("Color", colorYellow);

procedure GfxHLine(Y, x0, x1, color, style, width)
{
    GfxSetBkMode(1); 
    GfxMoveTo(X0,Y);
    
    GfxSelectPen(Color,width,style); 
    GfxLineTo(x1,y);
}


x1=BarCount-1;
x2=BarCount+1;
Y= LastValue(C);
GfxHLine(Y, x1, x2, cColor, iStyle, iWidth);

PlotText(NumToStr(Y), x2,y, colorWhite, colorDefault, -2);
 
Last edited:

Similar threads