| 
 I am getting a syntex error on 
R (underlined for identification) in the following 
line. 
What should I do.  
  
LOWER FLAG TRENDLINE 
  
Anil 
  ----- Original Message -----  
  
  
  Sent: Tuesday, June 14, 2005 6:42 
PM 
  Subject: [amibroker] Complete AFL code 
  for "Flags and Pennants" Trading System 
  
  Below is the complete AFL code for Markos Katsano's 'Flags 
  and  Pennants' Trading System.  Markos articles appeared in the April 
  and  May 2005 TASC issues.  The May 2005 issue had the Metastock code 
  for  the trading system.  I've simply translated the Metastock code to 
   AFL.  To check for accuracy, I attempted to run the AFL code against 
   the examples illustrated in the articles.  My AFL translation DID NOT 
   pick up the 'flags and pennants' shown in the examples.  That makes 
   me suspect that my translation is not absolutely correct.  However, I 
   backtested the AFL code against a small database of stocks (over a 5 
   year period) and the backtest/scan was able to pick out 'flags and 
   pennants' breakouts with no problems.  For e.g., LJPC went on to make 
   a 77% profit in a mth after being identified as making a breakout by 
   the code.  Another e.g is IDEV which went on to make 82% in less than 
   5 wks.......there are many more.  Of course, some breakouts failed 
   but the AFL sell rules quickly eliminated them.  This system works 
   best on small caps and you would need more than 300 bars of data for 
   the trading rules to work (one of the indicators, VFI, needs more  than 
  a year of data).  Also, the 'flags and pennants' don't occur too 
   frequently so you would need to scan a large database of stocks (at 
   least a 1000) to get a decent number of buy signals or to get a large 
   sample size for valid backtesting.  More signals are picked up during 
   overall market bull periods.  Some small caps have 3-4 'flags and 
   pennants' occurring over a period of 1-2 years. BOTTOM LINE - THE CODE 
  WORKS AND IS A GREAT SCAN FOR BREAKOUT STOCKS  BUT WOULD, PROBABLY, NEED TO 
  BE TWEAKED BY AN 'METASTOCK TO AFL'  GURU.  I've included the 
  Metastock code below the AFL for  afficianados to find my errors, if 
  any.  All comments are welcome.
  Also - Markos Katsanos uses the 
  FVE, VFI, Stoch and ADX indicator  to 'strengthen' his system.  I 
  don't believe its really necessary to  include those to find 'flags and 
  pennants'.  You can remove the  sections - "FVE indicator code", "VFI 
  indicator code" and Buy  Conditions 6 and 7 and still have a great system 
  (call it 'F&P  Lite').  You would then need only 2 mths of data to 
  run the system.   Enough talk - here's the AFL code........  
  
  *****************************************************************
  // 
  Translation of Markos Katsanos Metastock Code for 'Flags and  Pennants' 
  Trading System
  ZZ = Zig(C,17); X = BarsSince(ZZ<Ref(ZZ,-1) AND 
  Ref(ZZ,-1)> Ref(ZZ,-2)); X1 = LastValue(X) + 1; X2 = X1 + 1; SD = 
  StDev(C,X2);
  // FVE indicator code
  PERIOD = 22; COEFF = 
  0.1; intRA = log(H) - log(L); VINTRA = StDev(intRA, PERIOD); intER = 
  log(Avg)-log(Ref(Avg,-1)); VINTER = StDev(intER,PERIOD); CUTOFF = 
  COEFF*(VINTER + VINTRA)*C; MF = C - (H+L)/2 + Avg - Ref(Avg,-1); MFV = 
  IIf(MF>CUTOFF,V,IIf(MF<-CUTOFF,-V,0)); FVE = 
  Sum(MFV,PERIOD)/MA(V,PERIOD)/PERIOD*100;
  // VFI indicator 
  code
  PERIOD1 = 130; COEF = 0.2; VCoef = 2.5; VINTER1 = 
  StDev(intER, 30); Cutoff1 = COEF * VINTER1 * C; VAVE = Ref(MA(V, 
  PERIOD1), -1); VMAX = VAVE * VCoef; Vc = Min (V, VMAX); MF1 = Avg - 
  Ref(Avg, -1); VCP = IIf( MF1 > Cutoff1, Vc, IIf (MF1 < -Cutoff1, -Vc, 
  0)); VFI = Sum(VCP, PERIOD1)/VAVE; 
  // Buy Conditions
  Buy = 
  X1<21 AND X1>2 AND //CONDITION 
  1 Ref(LinRegSlope(C,13)/Ref(C,-13)*100, -X1)>2.2 //CONDITION 2 AND 
  Ref(LinRegSlope(C,X2)/Ref(C,-X2),-1)*100<.2 AND 
  LinRegSlope(C,X1)/Ref(C,-X1)>-1.2 //CONDITION 3 AND 
  Ref(LinRegSlope(V,X2)/Ref(V,-X2),-1)*100<-2 //CONDITION 4 AND 
  Ref(LinRegSlope(SD,X1),-1)<0 //CONDITION 5 AND StochK(20,3)>55 AND 
  ADX(10)>30 //CONDITION 6 AND FVE>10 AND VFI>-3 //CONDITION 
  7 AND C>Ref(C,-1) AND C>O; //CONDITION 8
  //SELL 
  ORDER
  D1 = ApplyStop(stopTypeNBar,stopModeBars, 24, True); D2 = 
  LastValue (D1); zz = Zig(Ref(C,-D2),17); X = 
  BarsSince(ZZ<Ref(ZZ,-1) AND Ref(ZZ,-1)> Ref(ZZ,-2)); X1 = 
  LastValue(X) + 1; //FLAG DURATION C1 = LLV(C,(D2+40)); //POLE BASE C2 = 
  Ref(HHV(C,22),-D2); //POLE TOP
  BREAK1 = 
  ApplyStop(stopTypeNBar,stopModePercent, 45, True);  POLE = (C2-C1)/C1*100; 
  //POLE HEIGHT %
  // EXIT CONDITIONS
  Sell = BREAK1 > 
  1.94*(POLE^0.724) //EXIT CONDITION 1 PROFIT TARGET OR C<Ref(LLV(C,X1), 
  -D2) //EXIT CONDITION 2 STOP LOSS ON BREAKING OF  LOWER FLAG 
  TRENDLINE OR (D2>14 AND BREAK1<.25*POLE) //EXIT CONDITION 3 - 
  INACTIVITY OR (D2>3 AND C<.9*HHV(C,4)) //EXIT CONDITION 4 - TRAILING 
  STOP LOSS OR D2>24; //EXIT CONDITION 5 - TIME 
  EXIT
  **************************************************************** ****************************************************************
  //MARKOS 
  KATSANOS METASTOCK CODE FOR DETECTING BREAKOUTS IN FLAGS 
  AND PENNANTS//
  //Enter Long
  ZZ: = Zig(C,17,%); X: = 
  BarsSince(ZZ<Ref(ZZ,-1) AND Ref(ZZ,-1)> Ref(ZZ,-2)); X1: = 
  LastValue(X) + 1; //FLAG DURATION X2: = X1 + 1; SD: = 
  StDev(C,X2);
  PERIOD: = 22; COEFF: = 0.1; INTRA: = log(H) - 
  log(L); VINTRA: = StDev(INTRA, PERIOD); INTER: = 
  log(Typical())-log(Ref(Typical(),-1)); VINTER: = 
  StDev(INTER,PERIOD); CUTOFF: = COEFF*(VINTER + VINTRA)*C; MF = C - 
  (H+L)/2 + Typical() - Ref(Typical(),-1); FVE = 
  Sum(If(MF>CUTOFF,+V,IF(MF<-CUTOFF,-V,0)),PERIOD)/Mov (V,PERIOD,S)/PERIOD*100;
  X1<21 
  AND X1>2 AND //CONDITION 1 Ref(LinRegSlope(C,13)/Ref(C,-13)*100, 
  -X1)>2.2 //CONDITION 2 AND 
  Ref(LinRegSlope(C,X2)/Ref(C,-X2),-1)*100<.2 AND 
  LinRegSlope(C,X1)/Ref(C,-X1)>-1.2 //CONDITION 3 AND 
  Ref(LinRegSlope(V,X2)/Ref(V,-X2),-1)*100<-2 //CONDITION 4 AND 
  Ref(LinRegSlope(SD,X1),-1)<0 //CONDITION 5 AND Stoch(20,3)>55 AND 
  ADX(10)>30 //CONDITION 6
  AND FVE>10 AND Fml("VFI")>-3 
  //CONDITION 7 //AFL GURUS - CODE FOR VFI IS BELOW
  AND C>Ref(C,-1) 
  AND C>O; //CONDITION 8
  //SELL ORDER
  D1: = 
  Simulation.CurrentPositionAge; D2: = LastValue(D1); zz: = 
  Zig(Ref(C,-D2),17,%); X: = BarsSince(ZZ<Ref(ZZ,-1) AND Ref(ZZ,-1)> 
  Ref(ZZ,-2)); X1: = LastValue(X) + 1; //FLAG DURATION c1: = 
  LLV(C,(D2+40)); //POLE BASE c2: = Ref(HHV(C,22),-D2); //POLE 
  TOP
  BREAK1: = Simulation.CurrentPositionPerformance*100; POLE: = 
  (C2-C1)/C1*100; //POLE HEIGHT %
  //EXIT CONDITIONS
  BREAK1 > 
  1.94*Power(Pole,.724) //EXIT CONDITION 1 PROFIT TARGET - (in article he has 
  profit target as 1.94*pole^0.724)//
  OR C<Ref(LLV(C,X1), -D2) //EXIT 
  CONDITION 2 STOP LOSS ON BREAKING OF LOWER FLAG TRENDLINE OR (D2>14 
  AND BREAK1<.25*POLE) //EXIT CONDITION 3 - INACTIVITY OR (D2>3 AND 
  C<.9*HHV(C,4)) //EXIT CONDITION 4 - TRAILING STOP LOSS OR D2>24; 
  //EXIT CONDITION 5 - TIME EXIT
  //METASTOCK CODE FOR VFI 
  FORMULA// PERIOD: = Input("PERIOD FOR VFI",5,1300,130); COEF: = 
  .2; VCOEF: = Input("MAX VOLUME CUTOFF",0,50,2.5); INTER: = 
  Log(Typical())-Log(Ref(Typical(),-1)); VINTER: = 
  Stdev(INTER,30); CUTOFF: = COEF*VINTER*C; VAVE: = 
  Ref(Mov(V,PERIOD,S),-1); VMAX: = VAVE*VCOEF; VC: = 
  If(V<VMAX,V,VMAX); MF: = Typical()-Ref(Typical(),-1); VFI: = 
  Sum(If(MF>CUTOFF,+VC,If(MF<-CUTOFF,-VC,0)),PERIOD)/VAVE; Mov(VFI,3,E);
 
 
 
 
 
 
  Please 
  note that this group is for discussion between users only.
  To get 
  support from AmiBroker please send an e-mail directly to  SUPPORT {at} 
  amibroker.com
  For other support material please check also: http://www.amibroker.com/support.html
 
 
  
  
Please note that this group is for discussion between users only. 
 
To get support from AmiBroker please send an e-mail directly to  
SUPPORT {at} amibroker.com 
 
For other support material please check also: 
http://www.amibroker.com/support.html 
 
  
 
 
Yahoo! Groups Links 
  |