I don't know afl yet. but i borrowd this from vttrader
forum<http://forum.vtsystems.com/index.php?showtopic=6281>
i imagine its relatively easy to translate into afl.
Barnum:= BarCount();
Err:= (tp1=0) or (tp2=0) or (rsitpr=0) or (Sh=0) or (Lg=0) or (K=0) or (D=0)
or (stochsl=0);
{Moving Averages}
ShortMA:= mov(pr1,tp1,mTp1);
LongMA:= mov(pr2,tp2,mTp2);
{Relative Strength Index}
rsi_r:= (rsipr - ref(rsipr,-1));
rsi_rs:= Wilders(if(rsi_r>0,rsi_r,0),rsitpr) /
Wilders(if(rsi_r<0,Abs(rsi_r),0),rsitpr);
RSIndex:= 100-(100/(1+rsi_rs));
RSIML:= 50;
{MACD}
FL:= Mov(spr,Sh,smat) - Mov(lpr,Lg,lmat);
SL:= Mov(FL,sig,sigmat);
OsMA:= FL-SL;
{Slow Stochastic Oscillator}
StK:= ((C-LLV(L,K))/(HHV(H,K)-LLV(L,K)))*100;
StDK:= Mov(StK,stochSl,MtK);
StDD:= Mov(StDK,D,DMt);
StochUp:= 80;
StochDown:= 20;
{Do NOT change the NAMES of the Variables below.
If you Changed The NAMES of Indicator1 or Indicator2,
you will have to change them below.}
{Define Final Trade Entry/Exit Criteria}
LongEntryCond1:= ShortMA>LongMA;
LongEntryCond2:= FL>SL;
LongEntryCond3:= RSIndex>RSIML;
LongEntryCond4:= StDK>StDD;
ShortEntryCond1:= ShortMA<LongMA;
ShortEntryCond2:= FL<SL;
ShortEntryCond3:= RSIndex<RSIML;
ShortEntryCond4:= StDK<StDD;
LongEntrySetup:=
Cross((LongEntryCond1+LongEntryCond2+LongEntryCond3+LongEntryCond4),3.5);
LongExitSetup:=
Cross((ShortEntryCond1+ShortEntryCond2+ShortEntryCond3+ShortEntryCond4),3.5);
ShortEntrySetup:=
Cross((ShortEntryCond1+ShortEntryCond2+ShortEntryCond3+ShortEntryCond4),3.5);
ShortExitSetup:=
Cross((LongEntryCond1+LongEntryCond2+LongEntryCond3+LongEntryCond4),3.5);
{***********************************************}
{That's it! You're done! There is no need to
edit below this point.}
{***********************************************}
{Determine the Pip Value for the currency chart being used}
_SymbolPoint:= SymbolPoint();
_InitialStoploss:= InitialStoploss * _SymbolPoint;
_BEP:= BEP * _SymbolPoint;
_TrailingStoploss:= TrailingStoploss * _SymbolPoint;
_ProfitTarget:= ProfitTarget * _SymbolPoint;
_Spread:= Spread * _SymbolPoint;
{Define Active Market Hours for Taking Trade Entries}
{For Example: StartHour=2 and StartMinute=0 will allow trade entries
beginning at 2:00 AM EST}
{For Example: EndHour=14 and EndMinute=30 will allow trade entries until
2:30 PM EST}
_hour:= hour();
_minute:= minute();
TradingSessionOnStart:= _hour=StartHour and _minute>=StartMinute;
TradingSessionOnEnd:= _hour=EndHour and _minute>=EndMinute;
TradingSessionOn:= SignalFlag(TradingSessionOnStart,TradingSessionOnEnd);
TradingSessionOff:= 1;
TradeEntryTimeFilter:= if(TradeEntryTimeFilterMode=0, TradingSessionOn,
TradingSessionOff);
TradeEntryTimeFilterNotEnabled:= TradeEntryTimeFilter=0;
TradeEntryTimeFilterEnabled:= TradeEntryTimeFilter=1;
{***********************************************}
LongEntrySignal:= (NOT Err AND LongTradeAlert=0 AND ShortTradeAlert=0 AND
TradeEntryTimeFilter=1 AND LongEntrySetup) OR
(NOT Err AND LongTradeAlert=0 AND
Cross(0.5,ShortTradeAlert) AND TradeEntryTimeFilter=1 AND LongEntrySetup) OR
(NOT Err AND LongTradeAlert=0 AND TradeEntryTimeFilter=1
AND ShortExitSetup);
LongEntryPrice:= valuewhen(1,LongEntrySignal,C) + _Spread;
BarsSinceLongEntry:= BarsSince(LongEntrySignal);
LongEntryInitialStop:= if(LongTradeAlert=1 OR LongEntrySignal OR
LongExitSignal, LongEntryPrice - _InitialStoploss, null);
DisplayLongEntryInitialStop:= if(InitialStoplossMode=0,
LongEntryInitialStop, null);
LongEntryBEStoplossFlag:= SignalFlag(LongTradeAlert=1 AND C >=
(LongEntryPrice + _BEP), LongExitSignal);
LongEntryBEStoploss:= if(LongEntryBEStoplossFlag=1 OR LongEntrySignal OR
LongExitSignal, LongEntryPrice, null);
DisplayLongEntryBEStoploss:= if(BEStoplossMode=0, LongEntryBEStoploss,
null);
LongEntryPipTrailingStop:= if(LongTradeAlert=1 OR LongEntrySignal OR
LongExitSignal, max((C - _TrailingStoploss), PREV(LongEntryPrice -
_TrailingStoploss)), null);
LongEntryATRTrailingStop:= if(LongTradeAlert=1 OR LongEntrySignal OR
LongExitSignal, max(HHV(H,BarsSinceLongEntry) - (ATR(ATRper) *
atrmultiplier), PREV(valuewhen(1,LongEntrySignal,H) - (ATR(ATRper) *
atrmultiplier))), null);
DisplayLongEntryTrailingStop:= if(TrailingStoplossMode=0 AND
TrailingStoplossType=1, LongEntryPipTrailingStop,
if(TrailingStoplossMode=0 AND
TrailingStoplossType=0, LongEntryATRTrailingStop,
null));
LongEntryProfitTarget:= if(LongTradeAlert=1 OR LongEntrySignal OR
LongExitSignal, LongEntryPrice + _ProfitTarget, null);
DisplayLongEntryProfitTarget:= if(ProfitTargetMode=0, LongEntryProfitTarget,
null);
LongExitSignal:= (LongTradeAlert=1 AND InitialStoplossMode=0 AND
Cross(LongEntryInitialStop,C))
OR (LongTradeAlert=1 AND BEStoplossMode=0 AND
Cross(LongEntryBEStoploss,C))
OR (LongTradeAlert=1 AND TrailingStoplossMode=0 AND
TrailingStoplossType=1 AND Cross(LongEntryPipTrailingStop,C))
OR (LongTradeAlert=1 AND TrailingStoplossMode=0 AND
TrailingStoplossType=0 AND Cross(LongEntryATRTrailingStop,C))
OR (LongTradeAlert=1 AND ProfitTargetMode=0 AND
Cross(C,LongEntryProfitTarget))
OR (LongTradeAlert=1 AND LongExitSetup);
LongExitPrice:= valuewhen(1,LongExitSignal,C);
ShortEntrySignal:= (NOT Err AND ShortTradeAlert=0 AND LongTradeAlert=0 AND
TradeEntryTimeFilter=1 AND ShortEntrySetup) OR
(NOT Err AND ShortTradeAlert=0 AND
Cross(0.5,LongTradeAlert) AND TradeEntryTimeFilter=1 AND ShortEntrySetup) OR
(NOT Err AND ShortTradeAlert=0 AND TradeEntryTimeFilter=1
AND LongExitSetup);
ShortEntryPrice:= valuewhen(1,ShortEntrySignal,C);
BarsSinceShortEntry:= BarsSince(ShortEntrySignal);
ShortEntryInitialStop:= if(ShortTradeAlert=1 OR ShortEntrySignal OR
ShortExitSignal, ShortEntryPrice + _InitialStoploss - _Spread, null);
DisplayShortEntryInitialStop:= if(InitialStoplossMode=0,
ShortEntryInitialStop, null);
ShortEntryBEStoplossFlag:= SignalFlag(ShortTradeAlert=1 AND C <=
(ShortEntryPrice - _BEP), ShortExitSignal);
ShortEntryBEStoploss:= if(ShortEntryBEStoplossFlag=1 OR ShortEntrySignal OR
ShortExitSignal, ShortEntryPrice - _Spread, null);
DisplayShortEntryBEStoploss:= if(BEStoplossMode=0, ShortEntryBEStoploss,
null);
ShortEntryPipTrailingStop:= if(ShortTradeAlert=1 OR ShortEntrySignal OR
ShortExitSignal, min((C + _TrailingStoploss - _Spread), PREV(ShortEntryPrice
+ _TrailingStoploss - _Spread)), null);
ShortEntryATRTrailingStop:= if(ShortTradeAlert=1 OR ShortEntrySignal OR
ShortExitSignal, min(LLV(L,BarsSinceShortEntry) + (ATR(ATRper) *
atrmultiplier), PREV(valuewhen(1,ShortEntrySignal,L) + (ATR(ATRper) *
atrmultiplier))), null);
DisplayShortEntryTrailingStop:= if(TrailingStoplossMode=0 AND
TrailingStoplossType=1, ShortEntryPipTrailingStop,
if(TrailingStoplossMode=0 AND
TrailingStoplossType=0, ShortEntryATRTrailingStop,
null));
ShortEntryProfitTarget:= if(ShortTradeAlert=1 OR ShortEntrySignal OR
ShortExitSignal, ShortEntryPrice - _ProfitTarget - _Spread, null);
DisplayShortEntryProfitTarget:= if(ProfitTargetMode=0,
ShortEntryProfitTarget, null);
ShortExitSignal:= (ShortTradeAlert=1 AND InitialStoplossMode=0 AND
Cross(C,ShortEntryInitialStop))
OR (ShortTradeAlert=1 AND BEStoplossMode=0 AND
Cross(C,ShortEntryBEStoploss))
OR (ShortTradeAlert=1 AND TrailingStoplossMode=0 AND
TrailingStoplossType=1 AND Cross(C,ShortEntryPipTrailingStop))
OR (ShortTradeAlert=1 AND TrailingStoplossMode=0 AND
TrailingStoplossType=0 AND Cross(C,ShortEntryATRTrailingStop))
OR (ShortTradeAlert=1 AND ProfitTargetMode=0 AND
Cross(ShortEntryProfitTarget,C))
OR (ShortTradeAlert=1 AND ShortExitSetup);
ShortExitPrice:= valuewhen(1,ShortExitSignal,C) + _Spread;
{Simulated Open Trade Determination and Trade Direction}
LongTradeAlert:= SignalFlag(LongEntrySignal,LongExitSignal);
ShortTradeAlert:= SignalFlag(ShortEntrySignal,ShortExitSignal);
{Create Auto-Trading Functionality}
OpenBuy:= LongEntrySignal and
(eventCount('OpenBuy')=eventCount('CloseBuy'));
CloseBuy:= LongExitSignal and
(eventCount('OpenBuy')>eventCount('CloseBuy'));
OpenSell:= ShortEntrySignal and
(eventCount('OpenSell')=eventCount('CloseSell'));
CloseSell:= ShortExitSignal and
(eventCount('OpenSell')>eventCount('CloseSell'));
{***********************************************}
{Calculate Simulated Individual Trade Profit In Pips}
_TradeProfitInPips:= If(LongExitSignal=1,LongExitPrice - LongEntryPrice,
If(ShortExitSignal=1,ShortEntryPrice - ShortExitPrice,
0));
TradeProfitInPips:= if(SymbolDigits()=4, _TradeProfitInPips * 10000,
_TradeProfitInPips * 100);
{Calculate Simulated Total Profit In Pips}
TotalProfitInPips:= cum(TradeProfitInPips);
{Calculate Number of Trades}
LongTrades:= cum(LongExitSignal);
ShortTrades:= cum(ShortExitSignal);
LosingTrades:= cum(If(TradeProfitInPips < 0,1,0));
WinningTrades:= cum(If(TradeProfitInPips > 0,1,0));
BreakEvenTrades:= if((LongExitSignal=1 or ShortExitSignal=1) and
TradeProfitInPips=0, PREV+1, PREV);
TotalTrades:= cum(LongExitSignal) + cum(ShortExitSignal);
{Calculate Additional Stats}
WinningTradesPips:= if(TradeProfitInPips > 0,TradeProfitInPips + PREV,
PREV);
LosingTradesPips:= if(TradeProfitInPips < 0,TradeProfitInPips + PREV, PREV);
LargestWinningTradeInPips:= max(TradeProfitInPips,PREV);
LargestLosingTradeInPips:= min(TradeProfitInPips,PREV);
AverageWinningTradeInPips:= WinningTradesPips / WinningTrades;
AverageLosingTradeInPips:= LosingTradesPips / LosingTrades;
PercentProfitable:= (WinningTrades/TotalTrades) * 100;
AverageWinLossRatio:= AverageWinningTradeInPips / AverageLosingTradeInPips;
{***********************************************}
2008/10/26 Bobby <[EMAIL PROTECTED]>
> Dear Members,
> Has anybody coded QQE indicator available in MT4 into afl,if
> yes,kindly post teh indicator here and if no please can anybody code
> it for me,I shall be highly indebted.
> regards
> bobby kular
>
>
>