[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [amibroker] what am I doing wrong??



PureBytes Links

Trading Reference Links

Graham,
 
I also get the same result for the explore and the scan but the chart shows the signals at a different date.  Below I show where I first encountered a problem. I made a Zig function that allows for "dynamic change". The Buy and Short signals are displayed in the chart. However, if I do a backtest or a scan using this code it doesn't find any signals. Try to do a scan with the code below. It doesn't give any signals. The chart however shows where the signals are. ...... can't figure it out .... but I am sure I am overlooking something. If I change ZZ = ffZig(C,PercentChange); using the normal Zig function:  ZZ = Zig(C,PercentChange);  then the problem disappears. So it seems to be caused by the function but the function ffZig gives a normal output (as far as I can see).
 
rgds, Ed
 
 
/*

Zig function enabling use of a "dynamic" percentage change

Edward Pottasch, dec 2004

vv: the variable
pp: dynamic percentage change

*/



function
ffZig(vv,pp) {

   
// initialize fzg array

   fzg =
0
;

   
// setting things up

   
if (vv[ 1 ] > vv[ 0
]) {
   
      
// direction is up

      dir =
1
;
      
// high

      hvv = vv[
1
];
      
// low

      lvv = vv[
0
];
      
// indicate sb

      sb =
0
;
      
// eb

      eb =
1
;
      
   }
else
{
   
      
// direction is down

      dir = -
1
;
      
// low

      lvv = vv[
1
];
      
// high

      hvv = vv[
0
];
      
// indicate sb

      sb =
0
;
      
// eb

      eb =
1;
   
   }

   
// perform loop to fill fzg array

   
for( i = 2; i < BarCount
; i++ ) {

      
// direction is up

      
if (dir == 1
) {

         
// update the high if necessary

         
if
(vv[ i ] >= hvv) {
         
            
// update high

            hvv = vv[ i ];
            
// update eb

            eb = i;
         
         }

         
// check if dropped below threshold

         
if ( (hvv - vv[ i ]) / hvv * 100
>= pp[ i ]) {
         
            
// change direction

            dir = -
1
;
            
// fill zig

            nbr = eb - sb +
1
;         
            dlta = hvv - lvv;
            incr = dlta / (nbr -
1
);
            
for (j = 0
; j < nbr; j++) {
            
               fzg[ j + sb ] = lvv + j * incr;
            
            }
            
            
// update the start and end bar position

            sb = eb; eb = i;
            
            
// set the low

            lvv = vv[ i ];            
         
         
// special situation at the end of the array

         }
else if (i == BarCount - 1
) {
         
            
// fill zig

            eb =
BarCount - 1
;
            hvv = vv[
BarCount - 1
];
            nbr = eb - sb +
1
;         
            dlta = hvv - lvv;
            incr = dlta / (nbr -
1
);
            
for (j = 0
; j < nbr; j++) {
            
               fzg[ j + sb ] = lvv + j * incr;
            
            }         
         
         }
      
      
// direction is down

      }
else if (dir == -1
) {

         
// update the low if necessary

         
if
(vv[ i ] <= lvv) {
         
            
// update low

            lvv = vv[ i ];
            
// update eb

            eb = i;
         
         }

         
// check if price increase above threshold

         
if ( (vv[ i ] - lvv) / lvv * 100
>= pp[ i ]) {
         
            
// change direction

            dir =
1
;
            
// fill zig

            nbr = eb - sb +
1
;
            dlta = hvv - lvv;
            incr = dlta / (nbr -
1
);
            
for (j = 0
; j < nbr; j++) {
            
               fzg[ j + sb ] = hvv - j * incr;
            
            }
            
            
// update the start and end bar position

            sb = eb; eb = i;
            
            
// set the high

            hvv = vv[ i ];
         
         
// special situation at the end of the array

         }
else if (i == BarCount - 1
) {
            
            
// fill zig

            eb =
BarCount - 1
;
            lvv = vv[
BarCount - 1
];
            nbr = eb - sb +
1
;
            dlta = hvv - lvv;
            incr = dlta / (nbr -
1
);
            
for (j = 0
; j < nbr; j++) {
            
               fzg[ j + sb ] = hvv - j * incr;
            
            }
            
         }
      
      }
      
   }
   
   
   
return
fzg;
}


SetBarsRequired(100000,100000
);
PercentChange =
abs(3*ATR(20)/((H+L)/2)*100
);
ZZ = ffZig(
C
,PercentChange) ;

PivotLow = ZZ <
Ref(ZZ,-1) AND ZZ < Ref(ZZ,1
);
PivotHigh = ZZ >
Ref(ZZ,-1) AND ZZ > Ref(ZZ,1
);
PlotShapes( shapeSmallCircle*PivotLow, colorBrightGreen,0, L, -20
) ;
PlotShapes( shapeSmallCircle*PivotHigh,colorRed,0,H, 20
) ;

Buy = (C - ValueWhen(PivotLow, C, 1)) / ValueWhen(PivotLow, C, 1) * 100 > PercentChange AND ROC(ZZ,1) > 0
;
Short = (ValueWhen(PivotHigh, C, 1) - C) / ValueWhen(PivotLow, C, 1) * 100 > PercentChange AND ROC(ZZ,1) < 0
;

Buy = ExRem(Buy,Short); Buy = Ref(Buy,-1
);
Short = ExRem(Short,Buy); Short = Ref(Short,-1
);

BuyPrice = C
;
ShortPrice = C
;
Sell = Short; SellPrice = C
;
Cover = Buy; CoverPrice = C
;

PlotShapes( shapeUpArrow*Buy, colorWhite,0, BuyPrice, 0
);
PlotShapes( shapeDownArrow*Short, colorYellow,0,ShortPrice, 0
) ;

BuyArea =
IIf(BarsSince(Buy) < BarsSince(Short) AND BarsSince(Buy)!=0, 1, 0
);
ShortArea =
IIf(BarsSince(Short) < BarsSince(Buy) AND BarsSince(Short)!=0, 1, 0
);

BarColors =
IIf(BarsSince(Buy) < BarsSince(Short
)
AND BarsSince(Buy)!=0, colorBrightGreen
,
IIf(BarsSince(Short) < BarsSince(Buy
)
AND BarsSince(Short)!=0,  colorRed, colorBlue
));

Plot(C, " ", BarColors,  styleCandle
) ;
Plot(ZZ," ", BarColors,styleDots|styleNoLine
);
Plot(ZZ," ", colorLightGrey,styleLine|styleThick
);

Filter = 1
;
AddColumn(Buy,"Buy"
);

WriteVal(Buy);
 
 
 
 
 
 
 
 
 
----- Original Message -----
From: Graham
Sent: Monday, December 27, 2004 12:03 PM
Subject: RE: [amibroker] what am I doing wrong??

I always feel it best to start with i=1

You specify inputs of vv and pp for the function, but you have not sued them within the calculation

I checked against a range of stocks and got the same results for explore and scan

 

function ffZig(vv,pp) {

 

   // initialize fzg array

   fzg = 0;

 

   // perform loop to fill fzg array

   for( i = 0; i < BarCount; i= i + 10 ) {

 

      fzg[ i ] = 1;

   }

   

   return fzg;

}

 

SetBarsRequired(10000,10000);

ZZ = ffZig(C,0) ;

 

Buy = ZZ == 1;

Short = 0;

 

PlotShapes( shapeUpArrow*Buy, colorGreen);

Plot(C, " ", colorBluestyleCandle ) ;

 

Filter = 1;

AddColumn(Buy,"Buy");

 

-----Original Message-----
From: ed nl [mailto:ed2000nl@xxxxxxx]
Sent: Monday, December 27, 2004 5:30 PM
To: amibroker@xxxxxxxxxxxxxxx
Subject: [amibroker] what am I doing wrong??

 

hi,

 

can't figure out what I am doing wrong. Below a simple example. I create an array using a function. This array I use to find Buy signals. I put the buy signals in a chart. All seems good. Then I do an explore and then I see that the explore puts the buy signals at a different date. There seems nothing strange about the code. What could be wrong?

 

Ed

 

 

function ffZig(vv,pp) {

   
// initialize fzg array
   fzg =
0;

   
// perform loop to fill fzg array
   
for( i = 0; i < BarCount; i= i + 10 ) {

      fzg[ i ] =
1;
   }
   
   
return fzg;
}


SetBarsRequired(10000,10000);
ZZ = ffZig(C,
0) ;

Buy = ZZ ==
1;
Short =
0;

PlotShapes( shapeUpArrow*Buy, colorGreen);
Plot(C, " ", colorBlue,  styleCandle ) ;

Filter =
1;
AddColumn(Buy,"Buy");



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 Sponsor
ADVERTISEMENT
click here


Yahoo! Groups Links