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
|