Hi Mohit,

I have to admit the code makes a very pretty picture indeed. Now two things
you need to do:

[1] Paste this code into formula editor. Having done that, select
"Tools"------>"Check". You will get a message which is self explanatory.

[2] Now you need to consider if you wish to use signals which may not be
valid after you enter the trade.


BR


Rakesh Sahgal


PS: As ALL the successful traders I have ever come across say, "The GRAIL is
YOU"(caps for added emphasis and apologies for violating net etiquette and
not being more helpful).



On Fri, May 16, 2008 at 11:01 AM, Stock2india.Com <
[EMAIL PROTECTED]> wrote:

>  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);
> 
>

Reply via email to