// Downloaded From https://www.WiseStockTrader.com
_SECTION_BEGIN("Ord Volume");

ZigPercent = 		Param( 		"Percent of Change for Zig", 4.6, 0, 50, 0.1 );
ZigUpColor = 		ParamColor( 	"Up Color", colorDarkBlue );
ZigDownColor = 	ParamColor( 	"Down Color", colorViolet );
ZerRedVol = 		Param( 		"Zeros to Reduce from Volume", 3, 0, 8, 1 );
SwingXoffset = 		Param( 		"Swing X Position", 3, -10, 30, 1 );
SwingYoffset = 		Param( 		"Swing Y Position", 1, 0, 30, 0.2 );
Color_LVT = 		ParamColor( 	"Leg Volume Text Color", colorWhite );
Color_LPTS =		ParamColor( 	"Leg % Text Color Simple", colorGrey50 );
Color_LPTH =		ParamColor( 	"Leg % Text Color Highlighted", colorBlack );
Color_LPBH = 		ParamColor( 	"Leg % Background Highlighted", colorYellow );
LegYoffset = 		Param( 		"Leg Y Position", 1.5, 0, 10, 0.1 );

RedVol =				IIf( ZerRedVol == 0, 1, 
						IIf( ZerRedVol == 1, 10,
						IIf( ZerRedVol == 2, 100,
						IIf( ZerRedVol == 3, 1000,
						IIf( ZerRedVol == 4, 10000,
						IIf( ZerRedVol == 5, 100000,
						IIf( ZerRedVol == 6, 1000000,
						IIf( ZerRedVol == 7, 10000000,
						IIf( ZerRedVol == 8, 100000000,
						Null )))))))));

SimpleZigzag = 			Zig( C, ZigPercent );
HoL = 					IIf( SimpleZigzag > Ref(SimpleZigzag,-1), H, L );
bc = 					BarCount - 1 ;

MyZig = 				Zig( HoL, ZigPercent );
MyZig_Up = 			MyZig > Ref( MyZig, -1);
MyZig_Down = 			MyZig < Ref( MyZig, -1);
LastLegMid_Y_Point = 	IIf( MyZig_Down, 	Peak( HoL, ZigPercent ) - ( (Peak( HoL, ZigPercent ) - L) / 2 ) ,
											H - ( (H - Trough( HoL, ZigPercent )) / 2 ) );

PeakDef = 			( MyZig > Ref(MyZig,-1) ) AND ( MyZig > Ref(MyZig,1) );
Peak1Vol = 			ValueWhen( PeakDef, V,1 );	
Peak2Vol = 			ValueWhen( PeakDef, V,2 );
PeaksVolPerc = 		( 100 * ( Peak1Vol - Peak2Vol ) / Peak2Vol );

TrouDef = 			( MyZig < Ref(MyZig,-1) ) AND ( MyZig < Ref(MyZig,1) );
Trou1Vol = 			ValueWhen( TrouDef, V, 1 );
Trou2Vol = 			ValueWhen( TrouDef, V, 2 );
TrousVolPerc = 		( 100 * ( Trou1Vol - Trou2Vol ) / Trou2Vol ); 

LastBarVolPerc = 	IIf(		MyZig_Up,
							( 100 * ( V - Peak1Vol ) / Peak1Vol ),
							( 100 * ( V - Trou1Vol ) / Trou1Vol ) );

P1 		=		PeakBars		(HoL, ZigPercent, 	1)			;
T1		=		TroughBars	(HoL, ZigPercent, 	1)			;
P2		=		PeakBars		(HoL, ZigPercent,	2)			;
T2		=		TroughBars	(HoL, ZigPercent, 	2)			;
P1m1	=		PeakBars		(HoL, ZigPercent, 	1)	+1		;
T1m1	=		TroughBars	(HoL, ZigPercent, 	1)	+1		;
P2m1	=		PeakBars		(HoL, ZigPercent, 	2)	+1		;
T2m1	=		TroughBars	(HoL, ZigPercent, 	2)	+1		;

	/* Last Leg */
LastLegBars = 			IIf( MyZig_Down,		P1m1 , 									T1m1 );
LastLegVolAccum = 		IIf( MyZig_Down, 		Sum( V, P1m1 ) ,						Sum( V, T1m1) );
LastLegVolAVE = 		LastLegVolAccum / LastLegBars 									;

	/* Previous Leg */
PrevLegBars = 			IIf( MyZig_Down, 		(T2m1) - P1 , 							(P2m1) - T1 );
PrevLegVolAccum = 		IIf( MyZig_Down, 		Sum( V, (T2m1)) - Sum( V, P1 ) ,		Sum( V, (P2m1)) - Sum( V, T1 ) );
PrevLegVolAVE =		PrevLegVolAccum 					/ PrevLegBars 				;
VolAVEChange1 = 		(LastLegVolAVE - PrevLegVolAVE) 	/ PrevLegVolAVE 	* 100	;

PrevLegBarsInc = 		IIf( MyZig_Down, 		(T1m1) - P1 , 							(P1m1) - T1 );
PrevLegVolAccumInc =	IIf( MyZig_Down, 		Sum( V, (T1m1)) - Sum( V, P1 ) ,		Sum( V, (P1m1)) - Sum( V, T1 ) );
PrevLegVolAVEInc =		PrevLegVolAccumInc 				/ PrevLegBarsInc			;
VolAVEChange1Inc = 	(LastLegVolAVE - PrevLegVolAVEInc) / PrevLegVolAVEInc 	* 100	;

	/* Previous Previous Leg */
PrPrLegBars = 			IIf( MyZig_Down, 		(P2m1) - T2 ,							(T2m1) - P2 );
PrPrLegVolAccum = 		IIf( MyZig_Down, 		Sum( V, (P2m1)) - Sum( V, T2 ) ,		Sum( V, (T2m1)) - Sum( V, P2 ) );
PrPrLegVolAVE = 		PrPrLegVolAccum 					/ PrPrLegBars 				;
VolAVEChange2 = 		(LastLegVolAVE - PrPrLegVolAVE) 	/ PrPrLegVolAVE 	* 100 	;

PrPrLegBarsInc = 		IIf( MyZig_Down, 		(P2m1) - T1 ,							(T2m1) - P1 );
PrPrLegVolAccumInc = 	IIf( MyZig_Down, 		Sum( V, (P2m1)) - Sum( V, T1 ) ,  		Sum( V, (T2m1)) - Sum( V, P1 ) );
PrPrLegVolAVEInc = 	PrPrLegVolAccumInc 				/ PrPrLegBarsInc 			;
VolAVEChange2Inc = 	(LastLegVolAVE - PrPrLegVolAVEInc) 	/ PrPrLegVolAVEInc 	* 100 	;


IIf( BarCount == LastValue( BarCount ), 				/////////// Incomplete Leg	 ---------=======
  		PlotText( "" + NumToStr( LastLegVolAVE[bc]/RedVol, 1.0),  
																	BarCount - (LastLegBars[bc]/2) , 
																	LastLegMid_Y_Point[bc], 
																	colorYellow ),
Null );
IIf( BarCount == LastValue( BarCount ), 				
  		PlotText( "" + NumToStr( VolAVEChange1Inc[bc], 1.0) + "%", 
																	BarCount - (LastLegBars[bc]/2) , 
																	LastLegMid_Y_Point[bc] * ( 1 - (LegYoffset/100) ),
																	IIf( VolAVEChange1Inc[bc] <= -40, Color_LPTH, Color_LPTS ),
																	IIf( VolAVEChange1Inc[bc] <= -40, Color_LPBH, Null ) ),
Null );
IIf( BarCount == LastValue( BarCount ), 				
  		PlotText( "" + NumToStr( VolAVEChange2Inc[bc], 1.0) + "%", 
																	BarCount - (LastLegBars[bc]/2) , 
																	LastLegMid_Y_Point[bc] * ( 1 - (2*LegYoffset/100) ),
																	IIf( VolAVEChange2Inc[bc] <= -40, Color_LPTH, Color_LPTS ),
																	IIf( VolAVEChange2Inc[bc] <= -40, Color_LPBH, Null ) ),
Null );
IIf( BarCount == LastValue( BarCount ), 
		PlotText( NumToStr( LastBarVolPerc[bc], 1.0 ) + "%",
																	BarCount, 
																	IIf( MyZig_Up[bc], 	H[bc]*(1+(SwingYoffset/100)), 
																						L[bc]*(1-(SwingYoffset/100)) ),
																	IIf( LastBarVolPerc[bc] <= -8, colorWhite, colorGrey50 ),
																	IIf( LastBarVolPerc[bc] <= -8, colorRed, Null ) ),
Null );

for( i = 0; i < BarCount; i++ )							/////////// Legs	 ---------=================
{								
	if( PeakDef[i] OR TrouDef[i] )	
			PlotText( "" + NumToStr( LastLegVolAVE[i]/RedVol, 1.0) + "  ",
																i - (LastLegBars[i]/2),		
																LastLegMid_Y_Point[i],
																Color_LVT
	);	
	if( PeakDef[i] OR TrouDef[i] )	
			PlotText( "" + NumToStr( VolAVEChange1[i], 1.0) + "%",
																i - (LastLegBars[i]/2),		
																LastLegMid_Y_Point[i] * ( 1 - (LegYoffset/100) ),
																IIf( VolAVEChange1[i] <= -40, Color_LPTH, Color_LPTS ),
																IIf( VolAVEChange1[i] <= -40, Color_LPBH, Null ) 
	);	
	if( PeakDef[i] OR TrouDef[i] )	
			PlotText( "" + NumToStr( VolAVEChange2[i], 1.0) + "%",
																i - (LastLegBars[i]/2),		
																LastLegMid_Y_Point[i] * ( 1 - (2*LegYoffset/100) ),
																IIf( VolAVEChange2[i] <= -40, Color_LPTH, Color_LPTS ),
																IIf( VolAVEChange2[i] <= -40, Color_LPBH, Null ) 
	);	
}

for( i = 0; i < BarCount; i++ )							/////////// Swings ---------=================
{
	if( PeakDef[i] )	PlotText( NumToStr( PeaksVolPerc[i], 1.0 ) + " %",
								/*NumToStr((V[i]/RedVol),1.0) + "   " + */
									i-SwingXoffset, 
									H[i]*(1+(SwingYoffset/100)), 
									IIf( PeaksVolPerc[i] <= -8, colorWhite, colorTeal ),  
									IIf( PeaksVolPerc[i] <= -8, colorRed, Null ) 
	); 
	if( TrouDef[i] )	PlotText( NumToStr( TrousVolPerc[i], 1.0 ) + " %",
								/*NumToStr((V[i]/RedVol),1.0) + "   " + */
									i-SwingXoffset, 
									L[i]*(1-(SwingYoffset/100)), 
									IIf( TrousVolPerc[i] <= -8, colorWhite, colorRed ),  
									IIf( TrousVolPerc[i] <= -8, colorDarkOliveGreen, Null ) 
	); 
}


LastBarVolPerc = 	IIf(		MyZig_Up,
							( 100 * ( V - Peak1Vol ) / Peak1Vol ),
							( 100 * ( V - Trou1Vol ) / Trou1Vol ) );
SwingBreakUp = H > Peak( HoL, ZigPercent );
SwingBreakDn = L < Trough( HoL, ZigPercent );

/////////////////////////////////////////////////////


Plot( MyZig, "%Change("+NumToStr(ZigPercent,1.1)+"%)", IIf( MyZig_Up, ZigUpColor, ZigDownColor ) );
Plot( Close, "Close", colorWhite, styleCandle );
Plot( MyZig + ( MyZig * 0.05 ), "", colorRed, styleNoDraw); 
Plot( MyZig - ( MyZig * 0.05), "", colorRed, styleNoDraw);
_SECTION_END();