Herman - The indicator does very well in
hindshight and your prefix is unique way of controlling it and pointing
this out;
This must be what you mean when you say it looks
forward. For example if you rollback 75 bars(daily) and
walkforward
you'll see the pivot signals don't come until very
late. For example it would be signalling a RED arrow or a SELL way
before
the chart rolls over at days - 38 bars as
an example on 12/3/2004.
I don't understand pivot points at all but I thought PP
would flag a turn and historically this does it in an excellent way. Of
course there maybe another parameter that I'm not adjusting that would correct
this.
IMHO, certainly can't be used to signal a trade Long or
Short, as is, but an excellent example of AFL programming.
Best regards
JOE
j----- Original Message -----
Sent: Sunday, January 30, 2005 5:45
PM
Subject: RE: [amibroker] Re: AFL code
that is too good to be true
I
understood you didn't write the code Ed... I ran the indicator and it gives
nice identification of peaks.
The
code I pre-fixed does not 'correct' any look forward problems but it does
allow you to set bars, starting from the end of your chart, to NULL. If,
when you do this, preceeding bars change that this reveals that those bars
were using data from the bar you nulled, i.e. it was looking forward in time.
This of course limits the code's application to research only, it would
probably not be very useful in trading systems
best
regards,
herman
Hermann,
Thank you for responding.
This is not my code, I just found it on AFL and I'm looking for those
who have utilized this code for a while to see what their experiences
have been. I'm interested though in your commentary about problems with
future code. What does the code you added in intend to do to correct
future problems? Thanks.
Ed
--- In amibroker@xxxxxxxxxxxxxxx,
"Herman van den Bergen" <psytek@xxxx> wrote: > Hello
Ed, > > Correct me if i am wrong...but I think the code looks
ahead, if you remove > bars from the end of your data then when
the Red arrow drops away the > preceeding Green arrow may also
disappear. This mean the Green Arrow depends > (at least some of
the time) on future data. > > Just place the code below ahead
of the code and gradually remove bars from > the end of your chart
to check for look ahead problems. If the display > changes ahead
of the last bar your code looks ahead. > > Z = Null; > LB
=LastValue(BarIndex()); > RM = Param("RemoveBars",0,0,1000,1); >
O = IIf(BarIndex()>(LB-RM),Z,O); > H =
IIf(BarIndex()>(LB-RM),Z,H); > L =
IIf(BarIndex()>(LB-RM),Z,L); > C =
IIf(BarIndex()>(LB-RM),Z,C); > > best regards, >
herman > > -----Original Message----- > From: Ed
[mailto:vvsignin@xxxx] > Sent: Sunday, January 30, 2005 4:43
PM > To: amibroker@xxxxxxxxxxxxxxx > Subject: [amibroker] AFL
code that is too good to be true > > > > Has
anyone looked at this pivot finder? I found it in the AFL
library > and just from eyeballing these signals they are
rediculously good, > almost too good. I just want to see others'
experiences with this > code: > > Details: >
Formula name: Pivot Finder > Author/Uploader: Mark - (email
hidden) > Date/Time added: 2004-07-19 01:06:36 > Origin: This
has got to be one of the best pivot finders I have found > yet.
Nobody knows the author who wrote it.... Whoever you are thanks > a
bunch!! > Keywords: > Level: semi-advanced > Flags:
indicator > > DISCLAIMER: Most formulas present in AFL on-line
library are > submitted by the users and are provided here on an "as
is" and "as > available" basis. AmiBroker.com makes no representations
or > warranties of any kind to the contents or the operation of
material > presented here. We do not maintain nor provide technical
support for > 3rd party formulas. > > Download formula
file | Delete formula > > Description: > /*
********************************** > > 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); > > > Formula: > /*
********************************** > > 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); > > > > > >
> > Check AmiBroker web page at: > http://www.amibroker.com/ >
> Check group FAQ at: > http://groups.yahoo.com/group/amibroker/files/groupfaq.html >
> > > > Yahoo! Groups Links > > To
visit your group on the web, go to: > http://groups.yahoo.com/group/amibroker/ >
> To unsubscribe from this group, send an email to: >
amibroker-unsubscribe@xxxxxxxxxxxxxxx > > Your use of Yahoo!
Groups is subject to the Yahoo! Terms of
Service.
Check AmiBroker web page at: http://www.amibroker.com/
Check
group FAQ at: http://groups.yahoo.com/group/amibroker/files/groupfaq.html
Check AmiBroker web page at: http://www.amibroker.com/
Check
group FAQ at: http://groups.yahoo.com/group/amibroker/files/groupfaq.html
Check AmiBroker web page at:
http://www.amibroker.com/
Check group FAQ at: http://groups.yahoo.com/group/amibroker/files/groupfaq.html
Yahoo! Groups Links
|