Coding the Kase Convergence/Divergence indicator?
Is there anyone that would like to convert Cynthia Kase’s Convergence/Divergence indicator?
Kase has already statistically proven the validity of using her Kase Peak Oscillator (KPO) combined with the Convergence/Divergence (KCD) indicator and it out performs conventional indicators like RSI and MACD for picking out market turning points:
http://www.kaseco.com/support/articles/Proof_That_Technical_Analysis_Really_Works.pdf
Using the KPO and Kase’s Dev Stops have produced more profitable results — on many different currency pairs and also Brent Crude, the Dow and DAX, (just change which Dev Stop to use due to individual markets having their own volatility profile) — than any other system/indicators I’ve used on PRT including the stunning John Ehlers indicators.
As @nicolas pointed out to me, the danger with mean reverting systems is that they can also potentially get you in on the wrong side of the trade resulting in wider movement against your position before the Dev Stop closes the position.
When testing, look at the Maximum Adverse Excursion column figures in the Detailed Report to gauge validity. I have taken out the ADX > 25 part of the entry code to minimise complexity and help future results being less robust than back tests. The simpler the system with the less parameters the more robust it will be in the future.
Please see screen shot for results on the (stable) Swissy (USD/CHF) usingi different time frames and Dev Stops:
The code for the KPO is on this forum as is the code for the Kase’s Dev Stops is below (check out KRev (Reversal) Amounts too to calculate your monetary risk per trade per Dev Stop stop line).
If anyone would like to add to this code below, maybe try different financial instruments or maybe add a trend filter or perhaps a Choppiness Index/Kaufman Efficiency Ratio – I haven’t had time yet – please feel free and post your results here.
When adding a Trailing Stop results were sometimes better, sometimes worse.
Thanks a lot,
Bard
// Definition of code parameters
DEFPARAM CumulateOrders = False // Cumulating positions deactivated
// Conditions to enter long positions
ignored, ignored, ignored, ignored, indicator2 = CALL "Kase Peak Oscillator"
c1 = (indicator2 < 0) //Kase Pink Bar Peak Out Entry
IF c1 THEN
BUY 10 PERPOINT AT MARKET
ENDIF
// Conditions to exit long positions
ignored,ignored,ignored,ignored,indicator3, ignored = CALL "Kase Dev Stop Lisse +SAR+4.5/6"
c2 = (close CROSSES UNDER indicator3) // Kase Dev Stop 4.5
IF c2 THEN
SELL AT MARKET
ENDIF
// Conditions to enter short positions
ignored, ignored, ignored, ignored, indicator5 = CALL "Kase Peak Oscillator"
c3 = (indicator5 > 0)
IF c3 THEN
SELLSHORT 10 PERPOINT AT MARKET
ENDIF
// Conditions to exit short positions
ignored,ignored,ignored, ignored,indicator6, ignored = CALL "Kase Dev Stop Lisse +SAR+4.5/6"
c4 = (close CROSSES OVER indicator6)
IF c4 THEN
EXITSHORT AT MARKET
ENDIF
//KASE DEV STOP + 4.5 + 6.0
//Settings
n=30
p1=1.0
p2=2.2
p3=3.6
p4=4.5
p5=6.0
difference=0
Hg=highest[2](high)
Lw=lowest[2](low)
DTR=max(max(Hg-Lw,abs(Hg-close[2])),abs(Lw-close[2]))
aDTR=average[n](DTR)
for i=0 to n-1 do
difference=difference+square(DTR[i]-aDTR)
next
difference=difference/n
sdev=sqrt(difference)
dev0=close-aDTR
dev1=close-aDTR-p1*sdev
dev2=close-aDTR-p2*sdev
dev3=close-aDTR-p3*sdev
dev4=close-aDTR-p4*sdev
dev5=close-aDTR-p5*sdev
if dev0<dev0[1] and close>dev5[1] then
dev0=dev0[1]
endif
if dev1<dev1[1] and close>dev5[1] then
dev1=dev1[1]
endif
if dev2<dev2[1] and close>dev5[1] then
dev2=dev2[1]
endif
if dev3<dev3[1] and close>dev5[1] then
dev3=dev3[1]
endif
if dev4<dev4[1] and close>dev5[1] then
dev4=dev4[1]
endif
if dev5<dev5[1] and close>dev5[1] then
dev5=dev5[1]
endif
dev6=close+aDTR
dev7=close+aDTR+p1*sdev
dev8=close+aDTR+p2*sdev
dev9=close+aDTR+p3*sdev
dev10=close+aDTR+p4*sdev
dev11=close+aDTR+p5*sdev
if dev6>dev6[1] and close<dev11[1] then
dev6=dev6[1]
endif
if dev7>dev7[1] and close<dev11[1] then
dev7=dev7[1]
endif
if dev8>dev8[1] and close<dev11[1] then
dev8=dev8[1]
endif
if dev9>dev9[1] and close<dev11[1] then
dev9=dev9[1]
endif
if dev10>dev10[1] and close<dev11[1] then
dev10=dev10[1]
endif
if dev11>dev11[1] and close<dev11[1] then
dev11=dev11[1]
endif
if close>dev11[1] then
flag=-1
else
if close<dev5[1] then
flag=1
endif
endif
if flag=-1 then
ind0=dev0
ind1=dev1
ind2=dev2
ind3=dev3
ind4=dev4
ind5=dev5
//k=1
r=0
g=191
b=255
else
ind0=dev6
ind1=dev7
ind2=dev8
ind3=dev9
ind4=dev10
ind5=dev11
//k=-1
r=255
g=128
b=0
endif
//ORANGE AND LIGHT BLUE
return ind0 coloured(r,g,b) style(dottedline,2) as "Warning Line", ind1 coloured(r,g,b) style(dottedline,2) as "Dev Stop 1.0", ind2 coloured(r,g,b) style(dottedline,2) as "Dev Stop 2.2", ind3 coloured(r,g,b) style(line,2) as "Dev Stop 3.6", ind4 coloured(r,g,b) style(dottedline,2) as "Dev Stop 4.5", ind5 coloured(r,g,b) style(line,2) as "Dev Stop 6.0"