PureBytes Links
Trading Reference Links
|
Herman,
Now I understand why you have so much time to answer everyones
questions. You must own the whole planet by now if your system is a bit
better than this one ;-)
Terry
Herman van den Bergen wrote:
Ed, I tested it but it is not quite as good as my own trading system ;-)
just add:
Sell = aHPivs==1;
Buy = aLPivs==1;
Short =Sell;
Cover=Buy;
to the end of the code. The result kind-of confirms the look ahead problem:
147639412554536.28 % in six months.
best regards,
herman
-----Original Message-----
From: Ed [mailto:vvsignin@xxxxxxxxx]
Sent: Sunday, January 30, 2005 7:12 PM
To: amibroker@xxxxxxxxxxxxxxx
Subject: [amibroker] Re: AFL code that is too good to be true
Herman,
Would you happen to know how to actually run a backtest from these
signals? I keep running into trouble when I insert buy/sell
statements into the Auto Analyzer. Thanks.
Ed
--- In amibroker@xxxxxxxxxxxxxxx, "Herman van den Bergen"
<psytek@xxxx> wrote:
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
-----Original Message-----
From: Ed [mailto:vvsignin@x...]
Sent: Sunday, January 30, 2005 5:58 PM
To: amibroker@xxxxxxxxxxxxxxx
Subject: [amibroker] Re: AFL code that is too good to be true
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@x...]
> 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
--------------------------------------------------------------------
--------
--
Yahoo! Groups Links
a.. To visit your group on the web, go to:
http://groups.yahoo.com/group/amibroker/
b.. To unsubscribe from this group, send an email to:
amibroker-unsubscribe@xxxxxxxxxxxxxxx
c.. 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
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.
------------------------ Yahoo! Groups Sponsor --------------------~-->
What would our lives be like without music, dance, and theater?
Donate or volunteer in the arts today at Network for Good!
http://us.click.yahoo.com/Tcy2bD/SOnJAA/cosFAA/GHeqlB/TM
--------------------------------------------------------------------~->
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:
http://docs.yahoo.com/info/terms/
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
|
|