| 
 PureBytes Links 
Trading Reference Links 
 | 
| 
 Thanks for the quick reply Prashanth. 
  
Anil Desai 
  ----- Original Message -----  
  
  
  Sent: Tuesday, June 14, 2005 10:28 
  PM 
  Subject: Re: [amibroker] Complete AFL 
  code for "Flags and Pennants" Trading System 
  
  
  Hello Anil, 
    
  Its only a word wrap which has 
  caused the problem. 
    
  Attached is the code 
  file. 
    
  Cheers 
    
  Prashanth 
  
    ----- Original Message -----  
    
    
    Sent: Tuesday, June 14, 2005 10:10 
    PM 
    Subject: Re: [amibroker] Complete AFL 
    code for "Flags and Pennants" Trading System 
    
  
    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
 
 
 
   
  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 
  |   
 |