Jag har uppmärksammat konstiga buggar i mina script när jag använder AREF().
Målet är att räkna ut RSI för 2-perioder.
Betrakta de rödmarkerade partierna nedan.
Exempel:
mRelativeStrengthIndexGain4=DIV(ADD(mRelativeStrengthIndexGain3,AREF(mRelativeStrengthIndexGain3,1)),2)
Detta borde entligt mig räkna ut dagens "mRelativeStrengthIndexGain3", gårdagens "mRelativeStrengthIndexGain3" och dela med två.
dag 0
mRelativeStrengthIndexGain3 = 100
mRelativeStrengthIndexGain4 = N/A
dag1
mRelativeStrengthIndexGain3 = 0
mRelativeStrengthIndexGain4 = 50
dag2
mRelativeStrengthIndexGain3 = 0
mRelativeStrengthIndexGain4 = 25
dag2
mRelativeStrengthIndexGain3 = 0
mRelativeStrengthIndexGain4 = 12.5
osv...
mRelativeStrengthIndexGain4 kan således aldrig bli noll, eftersom man delar ett positivt tal med 2, blir det fortfarande större än noll.
Dock har jag uppmärksammat att ofta så blir just
mRelativeStrengthIndexGain4 noll,trots att den var positiv dagen före.
Hur funkar AREF() egentligen?
Jag förstår ju att tidsserien måste börja någonstans. Hur sker detta? RSI brukar definieras som "Ta första x dagarnas medelvärde, ta därefter gårdagens medelvärde, vikta med x-1, addera dagens medelvärde och dela med x".
Målet är att räkna ut RSI för 2-perioder.
Betrakta de rödmarkerade partierna nedan.
Exempel:
mRelativeStrengthIndexGain4=DIV(ADD(mRelativeStrengthIndexGain3,AREF(mRelativeStrengthIndexGain3,1)),2)
Detta borde entligt mig räkna ut dagens "mRelativeStrengthIndexGain3", gårdagens "mRelativeStrengthIndexGain3" och dela med två.
dag 0
mRelativeStrengthIndexGain3 = 100
mRelativeStrengthIndexGain4 = N/A
dag1
mRelativeStrengthIndexGain3 = 0
mRelativeStrengthIndexGain4 = 50
dag2
mRelativeStrengthIndexGain3 = 0
mRelativeStrengthIndexGain4 = 25
dag2
mRelativeStrengthIndexGain3 = 0
mRelativeStrengthIndexGain4 = 12.5
osv...
mRelativeStrengthIndexGain4 kan således aldrig bli noll, eftersom man delar ett positivt tal med 2, blir det fortfarande större än noll.
Dock har jag uppmärksammat att ofta så blir just
mRelativeStrengthIndexGain4 noll,trots att den var positiv dagen före.
Hur funkar AREF() egentligen?
Jag förstår ju att tidsserien måste börja någonstans. Hur sker detta? RSI brukar definieras som "Ta första x dagarnas medelvärde, ta därefter gårdagens medelvärde, vikta med x-1, addera dagens medelvärde och dela med x".
Kod:
mRSPeriods:=2 i5( xStockDailyClose=cmpref(C,0,A) xStockDailyOpen=cmpref(O,0,A) xStockDailyHigh=cmpref(H,0,A) xStockDailyLow=cmpref(L,0,A) {Calculate the 2 period RSI} mRelativeStrengthIndexDelta=SUB(xStockDailyClose,AREF(xStockDailyClose,1)) {Delta close sedan igår} mRelativeStrengthIndexGain1=IF(GT(mRelativeStrengthIndexDelta,0),mRelativeStrengthIndexDelta,0) {Om delta är positivt, sätt delta, annars noll} mRelativeStrengthIndexGain2=SUM(mRelativeStrengthIndexGain1,mRSPeriods) {Summera gain över antal perioder} mRelativeStrengthIndexGain3=DIV(mRelativeStrengthIndexGain2,mRSPeriods) {Räkna ut medelvärdet} [COLOR="Red"]mRelativeStrengthIndexGain4=DIV(ADD(mRelativeStrengthIndexGain3,AREF(mRelativeStrengthIndexGain3,1)),2) {släta ut medelvärdet}[/COLOR] mRelativeStrengthIndexLoss1=IF(LT(mRelativeStrengthIndexDelta,0),ABS(mRelativeStrengthIndexDelta),0) {Om delta är negativt, sätt abs av delta, annars noll} mRelativeStrengthIndexLoss2=SUM(mRelativeStrengthIndexLoss1,mRSPeriods) {Summera loss över antal perioder} mRelativeStrengthIndexLoss3=DIV(mRelativeStrengthIndexLoss2,mRSPeriods) {Räkna ut medelvärdet} [COLOR="Red"]mRelativeStrengthIndexLoss4=DIV(ADD(mRelativeStrengthIndexLoss3,AREF(mRelativeStrengthIndexLoss3,1)),2) {släta ut medelvärdet}[/COLOR] mRelativeStringthIndex1=DIV(mRelativeStrengthIndexGain4,mRelativeStrengthIndexLoss4) {Räkna ut kvoten} mRelativeStringthIndex2=ADD(1,mRelativeStringthIndex1) {1+RS} mRelativeStringthIndex3=DIV(100,mRelativeStringthIndex2) {100/(1+RS)} mRelativeStringthIndex4=SUB(100,mRelativeStringthIndex3) {100-100/(1+RS)} mRelativeStringthIndex5=IF(GT(mRelativeStrengthIndexLoss4,0),mRelativeStringthIndex4,100) {If we div by zero, rsi is 100 by def} draw(mRelativeStringthIndex5,1,bsd) draw(MULT(mRelativeStrengthIndexGain4,10),2,gse) draw(MULT(mRelativeStrengthIndexLoss4,10),3,rse) AND(1,0) ) {@A(0,OMX Stock )}
Comment