PureBytes Links
Trading Reference Links
|
I'm only getting long results, no shorts. Is this what you get?
--- In amibroker@xxxxxxxxxxxxxxx, "Herman van den Bergen"
<psytek@xxxx> 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@x...]
> 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 --------------------~-->
Has someone you know been affected by illness or disease?
Network for Good is THE place to support health awareness efforts!
http://us.click.yahoo.com/Rcy2bD/UOnJAA/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/
|