Volume Spike Exploration for Amibroker (AFL)
ngocleasing almost 16 years ago Amibroker (AFL)
Demo code by Progster in response to this thread here and posted in this thread
The formula is an exploration for finding volume spikes:
- A volume spike is defined to be when volume exceeds a StdDev above it’s moving average
- Looking back, the code filters for a volume spike an exact # of bars ago
- Looking forward, the code filters for the first volume spike that takes place after the current bar.
Indicator / Formula
Copy & Paste Friendly
/*
VolSpikeDemo_01.afl
Demo code by Progster in response to:
http://finance.groups.yahoo.com/group/amibroker/message/124977
This is Exploration code.
*/
MaxBack = 150; // maximum number of bars to look back
MaxFwd = 30; // maximum number of bar to look forward
// Exploration parameters
ShowBack = ParamToggle("ShowBack","No|Yes",1);
LB = Param("LookBack",1,1,MaxBack,1); // LookBack (for vol spikes exactly this many bars ago)
ShowFwd = ParamToggle("ShowFwd","No|Yes",0);
LF = Param("LookFwd",10,1,MaxFwd,1); // LookFwd (for vol spikes up to this many bars in the future)
// Array calculations
MA_V = (MA(V,MaxBack)) ;
SD_V = StDev(V,MaxBack) ;
VolSpike = Volume > (MA_V + SD_V);
// Use array function BarsSince() to look back (convenient and fast)
BarsSinceVolSpike = BarsSince(VolSpike);
// Use a loop to look forward (less convenient, less fast)
BarsToVolSpike = -1 ;
if ( ShowFwd )
{
for ( idx = 0 ; idx < ( BarCount - MaxFwd ); idx++ )
{
// Since jdx is positive, we are looking into the future relative to the current bar
for ( jdx = 1; jdx < MaxFwd; jdx++ )
{
if ( VolSpike[idx + jdx] )
{
BarsToVolSpike[idx] = jdx;
break;
}
}
}
}
// Set exploration Filter according to whether we are looking back, forward, or both
if(ShowBack AND ShowFwd){
Filter = (BarsSinceVolSpike == LB) OR (BarsToVolSpike >= 0) ;
}
else if ( ShowBack ){
Filter = (BarsSinceVolSpike == LB) ;
}
else if ( ShowFwd ){
Filter = (BarsToVolSpike >= 0) ;
}
// Info at current bar
AddColumn( DateTime(), "cDate", formatDateTime ); // c = "current"
/*
AddColumn(Volume, "cVolume" );
AddColumn(MA_V, "cMA_V" );
AddColumn(SD_V, "cSD_V" );
*/
// Info at the previous VolSpike bar. p = "previous" or "past"
if ( ShowBack )
{
// Volume-based calcs with no particular formatting applied
AddColumn( LB, "BarsBack" );
AddColumn( Ref( DateTime(), -LB ), "pDate", formatDateTime );
AddColumn( Ref( Volume, -LB ), "pVolume" );
AddColumn( Ref( MA_V, -LB ), "pMA_V" );
AddColumn( Ref( SD_V, -LB ), "pSD_V" );
}
// Info at the next VolSpike bar. f = "forward"
if ( ShowFwd )
{
textColor = colorDefault ;
BGColor = IIf( BarsToVolSpike < 0, colorRed, colorDefault ) ; // Use Red BG color if no forward vol spike found
// Volume-based calcs formetted to 0 decimals
AddColumn( BarsToVolSpike, "BarsFwd", 1.0, textColor, BGColor );
AddColumn( Ref( DateTime(), BarsToVolSpike ), "fDate", formatDateTime, textColor, BGColor );
AddColumn( Ref( Volume, BarsToVolSpike ), "fVolume", 1.0, textColor, BGColor );
AddColumn( Ref( MA_V, BarsToVolSpike ), "fMA_V", 1.0, textColor, BGColor );
AddColumn( Ref( SD_V, BarsToVolSpike ), "fSD_V", 1.0, textColor, BGColor );
}1 comments
Leave Comment
Please login here to leave a comment.
Hi do you have afl for volume spike in line chart
thanks