Amibroker code:
//Code by VangelisM. (aka - sanzprophet )
//Part of Code taken by afl from Library - Paul's "Connors TPS - ETFs.afl"
Plot( C, "Close", ParamColor("Color", colorBlack ), styleNoTitle| ParamStyle("Style") | GetPriceStyle() );
aggresive=ParamToggle("Agressive?","NO|YES",0);
Buy=Sell=Cover=Short=0;
SetTradeDelays(0,0,0,0);
BuyPrice=SellPrice=CoverPrice=ShortPrice=C;
qty=Param("Positions",1,1,50,1);
SetOption( "MaxOpenPositions", qty );
FirstTriggerPrice =InFirstPos=0;
if(!aggresive)
{
aboveMA=C>MA(C,220);
belowMA5=C<MA(C,5);
MDD=Sum(C<Ref(C,-1),5)>=4;
Buy1=aboveMA AND belowMA5 AND MDD;
Buy=Buy1;
Sell=!belowMA5;
Sell=ExRem(Sell,Buy);
MDU=Sum(C>Ref(C,-1),5)>=4;
Short1=C<MA(C,220) AND !belowMA5 AND MDU;
Short=Short1;
Cover=belowMA5;
PositionSize=-98/qty;
PositionScore=IIf(Buy,100-RSI(3),RSI(3));
}
if(aggresive)
{
aboveMA=C>MA(C,220);
belowMA5=C<MA(C,5);
MDD=Sum(C<Ref(C,-1),5)==4;
Buy1=aboveMA AND belowMA5 AND MDD;
Buy=Buy1;
Sell=!belowMA5;
Sell=ExRem(Sell,Buy);
MDU=Sum(C>Ref(C,-1),5)==4;
Short1=C<MA(C,220) AND !belowMA5 AND MDU;
Short=Short1;
Cover=belowMA5;
BarsSinceSell = BarsSince(Sell);
InFirstPos =Flip(Buy1,Sell);
FirstTrigger = ExRem(InFirstPos, Sell);
BarsSinceFirstTrigger = BarsSince(FirstTrigger);
FirstTriggerPrice = IIf(BarsSinceFirstTrigger < BarsSinceSell,Ref(C,-BarsSinceFirstTrigger), 0 );
SecondEntry = aboveMA AND C < FirstTriggerPrice AND InFirstPos AND Ref(InFirstPos,-1);
InSecondPos = Flip(SecondEntry, Sell);
SecondTrigger = ExRem(InSecondPos, Sell);
BarsSinceSecondTrigger = BarsSince(SecondTrigger);
SecondTriggerPrice = IIf(BarsSinceSecondTrigger < BarsSinceSell,
Ref(C,-BarsSinceSecondTrigger), 0);
BarsSinceCover = BarsSince(Cover);
FirstShortEntry = Short1; ;
InFirstShortPos = Flip(FirstShortEntry, Cover );
FirstShortTrigger = ExRem(InFirstShortPos, Cover );
BarsSinceFirstShortTrigger = BarsSince(FirstShortTrigger);
FirstShortTriggerPrice = IIf(BarsSinceFirstShortTrigger < BarsSinceCover ,Ref(C,-BarsSinceFirstShortTrigger), 0 );
//FirstTriggerPrice = IIf(BarsSinceFirstTrigger < BarsSinceSell,Ref(O,-BarsSinceFirstTrigger+1), 0 );
SecondShortEntry = !aboveMA AND C >FirstShortTriggerPrice AND InFirstShortPos AND Ref(InFirstShortPos,-1);
InSecondShortPos = Flip(SecondShortEntry, Cover );
SecondShortTrigger = ExRem(InSecondShortPos, Cover );
BarsSinceSecondShortTrigger = BarsSince(SecondShortTrigger);
SecondShortTriggerPrice = IIf(BarsSinceSecondShortTrigger < BarsSinceCover,
Ref(C,-BarsSinceSecondShortTrigger), 0);
PositionSize=-98/qty;
PositionScore=IIf(Buy OR SecondEntry ,100-RSI(3),RSI(3));
Buy=IIf(Buy1,1,IIf(SecondEntry AND Sum(Secondentry,BarsSinceSell)==1 ,sigScaleIn,0));
Short=IIf(Short1,1,IIf(SecondShortEntry AND Sum(SecondShortentry,BarsSinceCover)==1 ,sigScaleIn,0));
}
"FirstTriggerPrice "+FirstTriggerPrice ;
"InFirstPos "+InFirstPos ;
"InFirstPos -1 "+Ref(InFirstPos, -1) ;
GfxSelectPen( colorBlack, 2 );
GfxSelectFont("Times New Roman", 12, 200, False );
GfxTextOut("Larry Connors MDD/MDU",10,20);
shape = Buy * shapeUpArrow + Sell * shapeDownArrow;
PlotShapes( shape, IIf( Buy, colorGreen, colorYellow ), 0,C );