Wederom een voorstel voor collega-systeem ontwikkelaars. Ik heb op de thread http://elitetrader.com/vb/showthread.ph ... adid=21376 een interessant onderwerp gevonden over het gebruik van de ADX indicator en zijn componenten DMI-/DMI+ . Dit zou zeer leuke resultaten opleveren voor de meeste intraday timeframes. Ik heb onderstaande code ontwikkelt n.a.v. de thread en getest op de AEX in 15 en 30 minuten timeframe. Beiden leveren profitable resultaten op.... maar met relatief hoge drawdowns (~30%, RRR=3.1).
Nu ben ik alleen niet tevreden met de huidige setup. Ik denk dat er met name nog e.e.a. kan worden verbetert aan de exits en aan voorkomen van verkeerd in te stappen (bijv extra indicator toevoegen?) Aan u allen dus de vraag om hier verbeteringen aan te brengen:
Systeem
value function zsADXDMI(value xADXperiod=15,
value xFactorL=1.2, value xFactorS=1.2, value xFactorT=1.1,
value xTrailProfitFloor=5, value xStopLossS=10, value xStopLossL=10) begin
value xADX[], xDMIp[],xDMIm[], xROC[];
value xTrailExit, xTrailStop,xShortTrailStop,xLongTrailStop,xStopLoss;
{Indicators}
xADX:=ADXCustom(High,Low,Close,xADXperiod);
xDMIp:=DMIplus(xADXperiod);
xDMIm:=DMIminus(xADXperiod);
xROC:=ROC((xDMIp-xDMIm),1);
if xROC>100 then xROC=100;
if xROC<-100 then xROC=-100;
{Entry Conditions}
Condition1= {xADX>xDMIp AND} xADX>xDMIm AND (xDMIp/xDMIm)>(xFactorL);
Condition2= xADX>xDMIp AND {xADX>xDMIm AND} (xDMIm/xDMIp)>(xFactorS);
Condition3= (xADX/(xDMIp<<xDMIm))>xFactorT;
Condition4= xADX>25;
Condition5= xADX>xADX[1];{Is er een toename in sterkte vd trend}
if xDMIp>xDMIm then xShortTrailStop=0;
if xDMIp<xDMIm then xLongTrailStop=0;
{Entries}
If MarketPosition=0 then begin
if Condition1 AND Condition3 AND xLongTrailStop=0 then begin
vEnterLong;
xTrailExit=0; xTrailStop=Lowest(low,6);
xStopLoss=EntryPrice-xStopLossL;
end;
if Condition2 AND Condition3 AND xShortTrailStop=0 then begin
vEnterShort;
xTrailExit=0; xTrailStop=Highest(high,6);
xStopLoss=EntryPrice+xStopLossS;
end;
End;
{Exit Conditions}
If MarketPosition<>0 then begin
if xTrailExit=0 then begin
if MarketPosition=1 AND Close-EntryPrice>xTrailProfitFloor then xTrailExit=1;
if MarketPosition=-1 AND EntryPrice-Close>xTrailProfitFloor then xTrailExit=1;
end;
If xTrailExit=1 then begin
if MarketPosition=1 then begin
If Lowest(low,4)>xTrailStop then xTrailStop=Lowest(low,4);
end;
if MarketPosition=-1 then begin
if Highest(high,4)<xTrailStop then xTrailStop=Highest(high,4);
end;
end;
end;
{Exits}
if MarketPosition=1 then begin
If xTrailExit=1 AND Close < xTrailStop then begin
vExitLong;
xLongTrailStop=1;
end;
{if vCrossesAbove(xDMIm,xDMIp) then vExitLong;}
if Close < xStopLoss then vExitLong;
end;
if MarketPosition=-1 then begin
if xTrailExit=1 AND Close > xTrailStop then begin
vExitShort;
xShortTrailStop=1;
end;
{if vCrossesAbove(xDMIp,xDMIm) then vExitShort;}
if Close > xStopLoss then vExitShort;
end;
plot1(Condition1,"cond1" ) ;
plot2(Condition2,"cond2" ) ;
plot3(xTrailStop,"TrailStop" ) ;
Plot4(xStopLoss,"Stoploss" ) ;
end;
Met vr groet,
Michel