Stock Portfolio Organizer

The ultimate porfolio management solution.

Shares, Margin, CFD's, Futures and Forex
EOD and Realtime
Dividends and Trust Distributions
And Much More ....
For Portfolio Manager Click Here

WiseTrader Toolbox

#1 Selling Amibroker Plugin featuring:

Advanced Adaptive Indicators
Advanced Pattern Exploration
Neural Networks
And Much More ....
Find Out More Here

gapfil for Amibroker (AFL)

Copy & Paste Friendly
SetBarsRequired(sbrAll,sbrAll);
xx=BarIndex();x=xx;Lx=LastValue(x); 
lvb=Min(Lx,Status("lastvisiblebarindex"));
rightStrength=Param("Right Strength",5,1,50,1);
leftStrength=Param("Left Strength",5,1,50,1);
rightStrength_mini=Param("Right Strength (Mini Pivot)",1,1,50,1);
leftStrength_mini=Param("Left Strength (Mini Pivot)",1,1,50,1);
showUpGap=ParamToggle("Display Up Gap","No|Yes",1);
showDnGap=ParamToggle("Display Dn Gap","No|Yes",1);
minimumGapFactor=Param("Minimum Gap Factor",0.5,0,5,0.01);
tf=Param("Time Frame (Minutes)",5,1,1440,1);tfrm=in1Minute*tf;
cp=ParamToggle("Clean Mini Pivots","No|Yes",0);
chartArea=ParamToggle("Display Area","Visible Chart|Complete Chart",0);
if(chartArea==0)fvb=Status("firstvisiblebarindex");
if(chartArea==1)fvb=0;
GfxSetOverlayMode(1); 
GfxSetCoordsMode(1); 
GfxSetBkMode(1);
cc=Random();

cntDnGap=valDnGapHi=valDnGapLo=idxDnGapStart=idxDnGapEnd=0;
cntUpGap=valUpGapHi=valUpGapLo=idxUpGapStart=idxUpGapEnd=0;

function pkID(rightStrength,leftStrength)
{
	pk=H>Ref(HHV(H,leftStrength),-1) AND H>=Ref(HHV(H,rightStrength),rightStrength);
	return pk;
}
function trID(rightStrength,leftStrength)
{
	tr=L<Ref(LLV(L,leftStrength),-1) AND L<=Ref(LLV(L,rightStrength),rightStrength);
	return tr;
}

TimeFrameSet(tfrm); 
	pk=pkID(rightStrength,leftStrength);
	tr=trID(rightStrength,leftStrength);
	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;
}

pkm=pkID(rightStrength_mini,leftStrength_mini);
trm=trID(rightStrength_mini,leftStrength_mini);

function cleanMiniPivots()
{
	pkidx=tridx=0;
	for(i=0;i<BarCount;i++)
	{
		if(pkm[i])
		{
			if(pkidx!=0 AND H[i]>=H[pkidx])
			{
				pkm[pkidx]=0;
				pkidx=i;
			}
			else if(pkidx!=0 AND H[i]<H[pkidx])
			{
				pkm[i]=0;
			}			
			else
			{
				pkidx=i;
			}
			tridx=0;
		}
		else if(trm[i])
		{
			if(tridx!=0 AND L[i]<=L[tridx])
			{
				trm[tridx]=0;
				tridx=i;
			}
			else if(tridx!=0 AND L[i]>L[tridx])
			{
				trm[i]=0;
			}			
			else
			{
				tridx=i;
			}
			pkidx=0;
		}
	}
} 

if(cp) cleanMiniPivots();
pkHigh1=Ref(ValueWhen(pk,H,1),-(rightStrength+1));
trLow1=Ref(ValueWhen(Tr,L,1),-(rightStrength+1));
pkHigh0=ValueWhen(pkm,H,0);
trLow0=ValueWhen(trm,L,0);

minimumGap=minimumGapFactor*Ref(ATR(5),-1);
upGap=Cross(C,pkHigh1) AND pkHigh1<trLow0 AND (trLow0-pkHigh1)>minimumGap;
dnGap=Cross(trLow1,C) AND trLow1>pkHigh0 AND (trLow1-pkHigh0)>minimumGap;

gapBaseUp=ValueWhen(upGap,pkHigh1);
gapBaseDn=ValueWhen(dnGap,trLow1);
gapExtrUp=ValueWhen(upGap,trLow0);
gapExtrDn=ValueWhen(dnGap,pkHigh0);

function drawRectangle(x1,y1,x2,y2,clr)
{ 
	GfxSelectPen(clr); 
	GfxSelectSolidBrush(clr); 
	GfxPolygon(x1,y1,x2,y1,x2,y2,x1,y2); 
}
function locateUpGapArea()
{
	for(i=fvb;i<lvb;i++) 
	{
		if(upGap[i])
		{
			valUpGapHi[cntUpGap]=gapExtrUp[i];
			valUpGapLo[cntUpGap]=gapBaseUp[i];
			idxUpGapStart[cntUpgap]=i;
			for(j=i+1;j<BarCount;j++)//find end of Up gap area
			{
				if(L[j]<valUpGapLo[cntUpGap] AND L[j-1]>=valUpGapLo[cntUpGap])
				{
					idxUpGapEnd[cntUpgap]=j;
					break;
				}
				else if(j==(BarCount-1))
				{
					idxUpGapEnd[cntUpgap]=j;
					break;				
				}
			}
			cntUpGap=cntUpGap+1;
		}
	}
}
function locateDnGapArea()
{
	for(i=fvb;i<lvb;i++) 
	{
		if(dnGap[i])
		{
			valDnGapHi[cntDnGap]=gapBaseDn[i];
			valDnGapLo[cntDnGap]=gapExtrDn[i];
			idxDnGapStart[cntDngap]=i;
			for(j=i+1;j<BarCount;j++)//find end of Down gap area
			{
				if(H[j]>valDnGapHi[cntDnGap] AND H[j-1]<=valDnGapHi[cntDnGap])
				{
					idxDnGapEnd[cntDngap]=j;
					break;
				}
				else if(j==(BarCount-1))
				{
					idxDnGapEnd[cntDngap]=j;
					break;				
				}		
			}
			cntDnGap=cntDnGap+1;
		}
	}
}
function drawUpGapZones()
{
	for(i=0;i<cntUpGap;i++) 
	{
		x1=idxUpGapStart[i];
		y1=valUpGapHi[i];
		x2=idxUpGapEnd[i];
		y2=valUpGapLo[i];
		drawRectangle(x1,y1,x2,y2,ColorRGB(0,cc[1]*100+155,0));		
	}
}
function drawDnGapZones()
{
	for(i=0;i<cntDnGap;i++) 
	{
		x1=idxDnGapStart[i];
		y1=valDnGapHi[i];
		x2=idxDnGapEnd[i];
		y2=valDnGapLo[i];
		drawRectangle(x1,y1,x2,y2,ColorRGB(cc[1]*100+155,153,0));
	}
}

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,null,null,0,0,1);
PlotShapes(shapeCircle*tr,IIf(Lx-ValueWhen(tr,x)>rightStrength,ColorRGB(0,255,0),colorWhite),0,L,-10);
PlotShapes(shapeCircle*pk,IIf(Lx-ValueWhen(pk,x)>rightStrength,ColorRGB(255,0,0),colorWhite),0,H,10);
PlotShapes(shapeSmallCircle*trm,IIf(Lx-ValueWhen(tr,x)>rightStrength_mini,ColorRGB(0,70,0),colorWhite),0,L,-10);
PlotShapes(shapeSmallCircle*pkm,IIf(Lx-ValueWhen(pk,x)>rightStrength_mini,ColorRGB(70,0,0),colorWhite),0,H,10);

Plot(pkHigh1,"",colorBlue,1,Null,Null,0,2,1);
Plot(trLow1,"",colorRed,1,Null,Null,0,2,1);

if(showDnGap)
{
	locateDnGapArea();
	drawDnGapZones();
}
if(showUpGap)
{
	locateUpGapArea();
	drawUpGapZones();
}
Back