DALE"!! ASYMMETRICAL RSI ! Author: Sylvain Vervoort, TASC October 2008 ! Coded by: Richard Denning 08/08/08 ! ABBREVIATIONS: C is [close]. C1 is valresult(C,1). H is [high]. H1 is valresult(H,1). L is [low]. L1 is valresult(L,1). O is [open]. PEP is {position entry price}. PD is {position days}. !! RSI WILDER ! To convert Wilder Averaging to Exponential Averaging: ! ExponentialPeriods = 2 * WilderPeriod - 1. U is C - valresult(C,1). D is valresult(C,1) - C. WilderLen is 14. rsiLen is 2 * WilderLen - 1. AvgU is ExpAvg(iff(U>0,U,0),rsiLen). AvgD is ExpAvg(iff(D>=0,D,0),rsiLen). RSI is 100-(100/(1+(AvgU/AvgD))). !! ASYMETRICAL RSI Ucount is countof(U>0,WilderLen). Dcount is WilderLen - Ucount. AvgUasym is expavg(iff(U>0,U,0),Ucount*2-1). AvgDasym is expavg(iff(D>=0,D,0),Dcount*2-1). ARSI is 100-(100/(1+(AvgUasym/AvgDasym))). ! ARSI ! PIVOT FINDER SETUP INFORMATION: Define periods 252. !Total look back period strength is 10. !Number of bars on each side of pivot OTD is Offsettodate(Month(),Day(),Year()). LowR is Lowresult(L,(2*strength)+1). LowM is valresult(L,strength). LS if LowR = LowM. HighR is highresult(H,(2*strength)+1). HighM is valresult(H,strength). HS if HighR = HighM. ! FIND FIRST PIVOT LOW LT1 is scanany(LS,periods) then OTD . LO1 is ^LT1 + Strength. LO1dte is SetDate(LO1). LowLO1 is valresult(L,^LO1). ! FIND FIRST PIVOT HIGH HT1 is scanany(HS,periods,0) then OTD . HO1 is ^HT1 + Strength. HO1dte is SetDate(HO1). HighHO1 is valresult(H,HO1). LO1spx Is TickerUDF("SPX",LO1). LO1dteSPX is TickerUDF("SPX",LO1dte). HO1spx is TickerUDF("SPX",HO1). HO1dteSPX is TickerUDF("SPX",HO1dte). LLstr1 is lowresult(L,strength,1). HHstr1 is highresult(H,strength,1). ! LONG SIDE DIVERGENCE STRATEGY USING ARSI: ! BUY when today's low is lower than the last low pivot of X bar strength ! and the ARSI shows a higher low yesterday compared to its value ! on the low price pivot date and ARSI is oversold: LEdivg if L <= LowLO1 and ARSI > valresult(ARSI,^LO1) and countof(ARSI < 30,2)>=1. LEdivg1 if LEdivg and countof(LEdivg,15,1)=1. LXdivg1 if ARSI > 70 or (PD >=3 and ARSI < 50) or PD >= 10. ! CODE FOR LONG SIDE COMPARATIVE TEST USING RSI: LEdivgR if L <= LowLO1 and RSI > valresult(RSI,^LO1) and countof(RSI < 30,2)>=1. LEdivgR1 if LEdivgR and countof(LEdivgR,15,1)=1. LXdivgR1 if RSI > 70 or (PD >=3 and RSI < 50) or PD >= 10. ! SHORT SIDE DIVERGENCE STRATEGY USING ARSI: ! SELL SHORT when today's high is higher than the last high pivot of X bar ! strength and the ARSI shows a lower high today compared to its value ! on the high price pivot date and ARSI is overbought: SEdivg if H >= HighHO1 and valresult(ARSI,^HO1) > ARSI and ARSI > 70. SEdivg1 if SEdivg and countof(SEdivg,15,1)=1. SXdivg1 if ARSI < 30 or (PD >=3 and ARSI > 50) or PD >= 10. SEdivgR if H >= HighHO1 and valresult(RSI,^HO1) > RSI and RSI > 70. SEdivgR1 if SEdivgR and countof(SEdivgR,15,1)=1. SXdivgR1 if RSI < 30 or (PD >=3 and RSI > 50) or PD >= 10. ! -------------------------------------end TASC code--------------------------------------------- !AIQ LONG TERM RELATIVE STRENGTH !Coded by Rich Denning on 12/14/00 W is 1. LTL is 120/W. Q3 is LTL/4. Q2 is (LTL - Q3) / 3. Q1 is (LTL - Q2 - Q3) / 2. Q0 is LTL - Q1 - Q2 - Q3. ROCq3LT is (val([close],Q2,(Q1+Q0)) - val([open],Q3,(Q2+Q1+Q0))) / val([open],Q3,(Q2+Q1+Q0)) * 100. ROCq2LT is (val([close],Q1,Q0) - val([open],Q2,(Q1+Q0))) / val([open],Q2,(Q1+Q0)) * 100. ROCq1LT is (val([close],Q0,0) - val([open],Q1,Q0)) / val([open],Q1,Q0) * 100. ROCq0LT is ([close] - val([open],Q0,0)) / val([open],Q0,0) * 100. RS_AIQLT is ROCq0LT * 0.40 + ROCq1LT * 0.20 + ROCq2LT * 0.20 + ROCq3LT * 0.20. RS_AIQLT1 is valresult(RS_AIQLT,1). GRS_AIQLT is TickerUDF(RSticker(),RS_AIQLT). GRS_AIQLT1 is valresult(GRS_AIQLT,1). OTC_AIQLT is TickerUDF("OTC",RS_AIQLT). !AIQ MID TERM RELATIVE STRENGTH !Coded by Rich Denning on 12/14/00 MTL is 60/W. Q3m is MTL / 4. Q2m is (MTL - Q3m) / 3. Q1m is (MTL - Q2m - Q3m) / 2. Q0m is MTL - Q1m - Q2m - Q3m. ROCq3m is (val([close],Q2m,(Q1m+Q0m)) - val([open],Q3m,(Q2m+Q1m+Q0m))) / val([open],Q3m,(Q2m+Q1m+Q0m)) * 100. ROCq2m is (val([close],Q1m,Q0m) - val([open],Q2m,(Q1m+Q0m))) / val([open],Q2m,(Q1m+Q0m)) * 100. ROCq1m is (val([close],Q0m,0) - val([open],Q1m,Q0m)) / val([open],Q1m,Q0m) * 100. ROCq0m is ([close] - val([open],Q0m,0)) / val([open],Q0m,0) * 100. RS_AIQmt is ROCq0m * 0.40 + ROCq1m * 0.20 + ROCq2m * 0.20 + ROCq3m * 0.20. RS_AIQmt1 is valresult(RS_AIQmt,1). GRS_AIQmt is TickerUDF(RSticker(),RS_AIQmt). GRS_AIQmt1 is valresult(GRS_AIQmt,1). OTC_AIQmt is TickerUDF("OTC",RS_AIQmt). !AIQ VERY SHORT TERM RELATIVE STRENGTH !Coded by Rich Denning on 12/14/00 !Parameters supplied by AIQ for weights were 40%, 20%, 20%, 20%. STL is 32/W. Q3s is STL / 4. !! Code error discovered 6/28/06 was LTL / 4 Q2s is (STL - Q3s) / 3. Q1s is (STL - Q2s - Q3s) / 2. Q0s is STL - Q1s - Q2s - Q3s. ROCq3s is (val([close],Q2s,(Q1s+Q0s)) - val([open],Q3s,(Q2s+Q1s+Q0s))) / val([open],Q3s,(Q2s+Q1s+Q0s)) * 100. ROCq2s is (val([close],Q1s,Q0s) - val([open],Q2s,(Q1s+Q0s))) / val([open],Q2s,(Q1s+Q0s)) * 100. ROCq1s is (val([close],Q0s,0) - val([open],Q1s,Q0s)) / val([open],Q1s,Q0s) * 100. ROCq0s is ([close] - val([open],Q0s,0)) / val([open],Q0s,0) * 100. RS_AIQst is ROCq0s * 0.40 + ROCq1s * 0.20 + ROCq2s * 0.20 + ROCq3s * 0.20. RS_AIQst1 is valresult(RS_AIQst,1). GRS_AIQst is TickerUDF(RSticker(),RS_AIQst). GRS_AIQst1 is valresult(GRS_AIQst,1). OTC_AIQst is TickerUDF("OTC",RS_AIQst). List if 1.  Rule Libraryÿÿ CCodeViewLEdivg1ÿÿ CReportViewÐSymbolÀ<LEdivgR1€ÐSymbolÀ<SEdivg1€ÐSymbolÀ<SEdivgR1€ÐSymbolÀ<*N07_100ÿÿÿÿÿÿ CBackTestPropertyLEdivg1LXdivg1PP: ARSI Sys1 LEdivg1SPXPN07_100 _ã@è^ã@ÿÿÿÿUâ@ÀYã@€SEdivg1SXdivg1PPŽ:ARSI Sys1 SEdivg1SPXPN07_100 _ã@è^ã@ÿÿÿÿ@Ýá@Uâ@€LEdivgR1LXdivgR1PP: ARSI Sys1 LEdivgR1SPXPN07_100 8_ã@_ã@ÿÿÿÿUâ@ÀYã@€SEdivgR1SXdivgR1PPŽ:ARSI Sys1 SEdivgR1SPXPN07_100 8_ã@_ã@ÿÿÿÿ@Ýá@Uâ@00:00