Hello Group Members,
I am an avid listener and reader to all group
mails n acitivity in this group from last few years.
I need an help from some of the seniors guys out
there..
I am facing a problem, as I don't have AFL coding
knowledge I request group members (if possible) to convert this AFL into AA scan
or exploration to find out the exact point of buy/sell thru SCAN..
This is an highly successful AFL for trading
trends Intraday as well as on EOD data. for any and all market
types...
This AFl I found after years of research n
tracking in various online groups n forums...
Anyways hoping to het the needful..
Thanks in Advance!!
Regards
Mohit Gupta
AFL chartsindicator for automatically
identifying pivots....
/* **********************************Code to automatically identify
pivots********************************** */
// -- what will be our lookback range for the hh and ll?
farback=
Param("How Far back to go",100,50,5000,10);
nBars =
Param("Number of bars",
12, 5, 40);
// -- Title.
Title
= Name() +
" (" + StrLeft(FullName(), 15) + ") O:
" + Open + ",
H
: " + High + ",
L: " + Low + ",
C: " + Close;
// -- Plot basic candle chart
PlotOHLC
(Open, High, Low,
Close,
"BIdx = "
+ BarIndex() +
"\n"
+ "O =
" + O + "\n"+"H =
"+ H + "\n"+"L =
" + L
+
"\n"+"C ",
colorBlack
, styleCandle);
GraphXSpace
=7;
// -- Create 0-initialized arrays the size of barcount
aHPivs = H - H;
aLPivs = L - L;
// -- More for future use, not necessary for basic plotting
aHPivHighs = H - H;
aLPivLows = L - L;
aHPivIdxs = H - H;
aLPivIdxs = L - L;
nHPivs =
0;
nLPivs =
0;
lastHPIdx =
0;
lastLPIdx =
0;
lastHPH =
0;
lastLPL =
0;
curPivBarIdx =
0;
// -- looking back from the current bar, how many bars
// back were the hhv and llv values of the previous
// n bars, etc.?
aHHVBars =
HHVBars(H, nBars);
aLLVBars =
LLVBars(L, nBars);
aHHV =
HHV(H,
nBars);
aLLV =
LLV(L,
nBars);
// -- Would like to set this up so pivots are calculated back
from
// last visible bar to make it easy to "go back" and see the
pivots
// this code would find. However, the first instance of
// _Trace output will show a value of 0
aVisBars =
Status("barvisible");
nLastVisBar =
LastValue(Highest(IIf(aVisBars,
BarIndex(), 0)));
_TRACE
("Last visible
bar: " + nLastVisBar);
// -- Initialize value of curTrend
curBar = (BarCount-
1);
curTrend =
"";
if
(aLLVBars[curBar] <
aHHVBars[curBar]) {
curTrend =
"D";
}
else
{
curTrend =
"U";
}
// -- Loop through bars. Search for
// entirely array-based approach
// in future version
for
(i=0; i<farback; i++) {
curBar = (BarCount -
1) - i;
// -- Have we identified a pivot? If trend is down...
if
(aLLVBars[curBar] < aHHVBars[curBar])
{
// ... and had been up, this is a trend change
if
(curTrend == "U") {
curTrend =
"D";
// -- Capture pivot information
curPivBarIdx = curBar - aLLVBars[curBar];
aLPivs[curPivBarIdx] =
1;
aLPivLows[nLPivs] = L[curPivBarIdx];
aLPivIdxs[nLPivs] = curPivBarIdx;
nLPivs++;
}
// -- or current trend is up
}
else
{
if
(curTrend == "D") {
curTrend =
"U";
curPivBarIdx = curBar - aHHVBars[curBar];
aHPivs[curPivBarIdx] =
1;
aHPivHighs[nHPivs] = H[curPivBarIdx];
aHPivIdxs[nHPivs] = curPivBarIdx;
nHPivs++;
}
// -- If curTrend is up...else...
}
// -- loop through bars
}
// -- Basic attempt to add a pivot this logic may have missed
// -- OK, now I want to look at last two pivots. If the most
// recent low pivot is after the last high, I could
// still have a high pivot that I didn't catch
// -- Start at last bar
curBar = (BarCount-
1);
candIdx =
0;
candPrc =
0;
lastLPIdx = aLPivIdxs[
0];
lastLPL = aLPivLows[
0];
lastHPIdx = aHPivIdxs[
0];
lastHPH = aHPivHighs[
0];
if
(lastLPIdx > lastHPIdx) {
// -- Bar and price info for candidate pivot
candIdx = curBar - aHHVBars[curBar];
candPrc = aHHV[curBar];
if
(
lastHPH < candPrc AND
candIdx > lastLPIdx AND
candIdx < curBar) {
// -- OK, we'll add this as a pivot...
aHPivs[candIdx] =
1;
// ...and then rearrange elements in the
// pivot information arrays
for
(j=0; j<nHPivs; j++) {
aHPivHighs[nHPivs-j] = aHPivHighs[nHPivs-
(j+
1)];
aHPivIdxs[nHPivs-j] = aHPivIdxs[nHPivs-(j+
1)];
}
aHPivHighs[
0] = candPrc
;
aHPivIdxs[
0] =
candIdx;
nHPivs++;
}
}
else {
// -- Bar and price info for candidate pivot
candIdx = curBar - aLLVBars[curBar];
candPrc = aLLV[curBar];
if
(
lastLPL > candPrc AND
candIdx > lastHPIdx AND
candIdx < curBar) {
// -- OK, we'll add this as a pivot...
aLPivs[candIdx] =
1;
// ...and then rearrange elements in the
// pivot information arrays
for
(j=0; j<nLPivs; j++) {
aLPivLows[nLPivs-j] = aLPivLows[nLPivs-(j+
1)];
aLPivIdxs[nLPivs-j] = aLPivIdxs[nLPivs-(j+
1)];
}
aLPivLows[
0] =
candPrc;
aLPivIdxs[
0] =
candIdx;
nLPivs++;
}
}
// -- Dump inventory of high pivots for debugging
/*
for (k=0; k<nHPivs; k++) {
_TRACE("High pivot no. " + k
+ " at barindex: " + aHPivIdxs[k] + ", "
+ WriteVal(ValueWhen(BarIndex()==aHPivIdxs[k],
DateTime(), 1), formatDateTime)
+ ", " + aHPivHighs[k]);
}
*/
// -- OK, let's plot the pivots using arrows
PlotShapes
(
IIf
(aHPivs==1, shapeDownArrow, shapeNone),
colorRed, 0,
High
, Offset=-15);
PlotShapes
(
IIf
(aLPivs==1, shapeUpArrow , shapeNone),
colorGreen, 0,
Low
, Offset=-15);
// -- what will be our lookback range for the hh and ll?
farback=
Param("How Far back to go",100,50,5000,10);
nBars =
Param("Number of bars",
12, 5, 40);
// -- Title.
Title
= Name() +
" (" + StrLeft(FullName(), 15) + ") O:
" + Open + ",
H
: " + High + ",
L: " + Low + ",
C: " + Close;
// -- Plot basic candle chart
PlotOHLC
(Open, High, Low,
Close,
"BIdx = "
+ BarIndex() +
"\n"
+ "O =
" + O + "\n"+"H =
"+ H + "\n"+"L =
" + L
+
"\n"+"C ",
colorBlack
, styleCandle);
GraphXSpace
=7;
// -- Create 0-initialized arrays the size of barcount
aHPivs = H - H;
aLPivs = L - L;
// -- More for future use, not necessary for basic plotting
aHPivHighs = H - H;
aLPivLows = L - L;
aHPivIdxs = H - H;
aLPivIdxs = L - L;
nHPivs =
0;
nLPivs =
0;
lastHPIdx =
0;
lastLPIdx =
0;
lastHPH =
0;
lastLPL =
0;
curPivBarIdx =
0;
// -- looking back from the current bar, how many bars
// back were the hhv and llv values of the previous
// n bars, etc.?
aHHVBars =
HHVBars(H, nBars);
aLLVBars =
LLVBars(L, nBars);
aHHV =
HHV(H,
nBars);
aLLV =
LLV(L,
nBars);
// -- Would like to set this up so pivots are calculated back
from
// last visible bar to make it easy to "go back" and see the
pivots
// this code would find. However, the first instance of
// _Trace output will show a value of 0
aVisBars =
Status("barvisible");
nLastVisBar =
LastValue(Highest(IIf(aVisBars,
BarIndex(), 0)));
_TRACE
("Last visible
bar: " + nLastVisBar);
// -- Initialize value of curTrend
curBar = (BarCount-
1);
curTrend =
"";
if
(aLLVBars[curBar] <
aHHVBars[curBar]) {
curTrend =
"D";
}
else
{
curTrend =
"U";
}
// -- Loop through bars. Search for
// entirely array-based approach
// in future version
for
(i=0; i<farback; i++) {
curBar = (BarCount -
1) - i;
// -- Have we identified a pivot? If trend is down...
if
(aLLVBars[curBar] < aHHVBars[curBar])
{
// ... and had been up, this is a trend change
if
(curTrend == "U") {
curTrend =
"D";
// -- Capture pivot information
curPivBarIdx = curBar - aLLVBars[curBar];
aLPivs[curPivBarIdx] =
1;
aLPivLows[nLPivs] = L[curPivBarIdx];
aLPivIdxs[nLPivs] = curPivBarIdx;
nLPivs++;
}
// -- or current trend is up
}
else
{
if
(curTrend == "D") {
curTrend =
"U";
curPivBarIdx = curBar - aHHVBars[curBar];
aHPivs[curPivBarIdx] =
1;
aHPivHighs[nHPivs] = H[curPivBarIdx];
aHPivIdxs[nHPivs] = curPivBarIdx;
nHPivs++;
}
// -- If curTrend is up...else...
}
// -- loop through bars
}
// -- Basic attempt to add a pivot this logic may have missed
// -- OK, now I want to look at last two pivots. If the most
// recent low pivot is after the last high, I could
// still have a high pivot that I didn't catch
// -- Start at last bar
curBar = (BarCount-
1);
candIdx =
0;
candPrc =
0;
lastLPIdx = aLPivIdxs[
0];
lastLPL = aLPivLows[
0];
lastHPIdx = aHPivIdxs[
0];
lastHPH = aHPivHighs[
0];
if
(lastLPIdx > lastHPIdx) {
// -- Bar and price info for candidate pivot
candIdx = curBar - aHHVBars[curBar];
candPrc = aHHV[curBar];
if
(
lastHPH < candPrc AND
candIdx > lastLPIdx AND
candIdx < curBar) {
// -- OK, we'll add this as a pivot...
aHPivs[candIdx] =
1;
// ...and then rearrange elements in the
// pivot information arrays
for
(j=0; j<nHPivs; j++) {
aHPivHighs[nHPivs-j] = aHPivHighs[nHPivs-
(j+
1)];
aHPivIdxs[nHPivs-j] = aHPivIdxs[nHPivs-(j+
1)];
}
aHPivHighs[
0] = candPrc
;
aHPivIdxs[
0] =
candIdx;
nHPivs++;
}
}
else {
// -- Bar and price info for candidate pivot
candIdx = curBar - aLLVBars[curBar];
candPrc = aLLV[curBar];
if
(
lastLPL > candPrc AND
candIdx > lastHPIdx AND
candIdx < curBar) {
// -- OK, we'll add this as a pivot...
aLPivs[candIdx] =
1;
// ...and then rearrange elements in the
// pivot information arrays
for
(j=0; j<nLPivs; j++) {
aLPivLows[nLPivs-j] = aLPivLows[nLPivs-(j+
1)];
aLPivIdxs[nLPivs-j] = aLPivIdxs[nLPivs-(j+
1)];
}
aLPivLows[
0] =
candPrc;
aLPivIdxs[
0] =
candIdx;
nLPivs++;
}
}
// -- Dump inventory of high pivots for debugging
/*
for (k=0; k<nHPivs; k++) {
_TRACE("High pivot no. " + k
+ " at barindex: " + aHPivIdxs[k] + ", "
+ WriteVal(ValueWhen(BarIndex()==aHPivIdxs[k],
DateTime(), 1), formatDateTime)
+ ", " + aHPivHighs[k]);
}
*/
// -- OK, let's plot the pivots using arrows
PlotShapes
(
IIf
(aHPivs==1, shapeDownArrow, shapeNone),
colorRed, 0,
High
, Offset=-15);
PlotShapes
(
IIf
(aLPivs==1, shapeUpArrow , shapeNone),
colorGreen, 0,
Low
, Offset=-15);