Type/to search
8
Follow
1370
Followers
STOCHRSI 지표 이해
FAQ
Created 2016-08-24 19:25:22  Updated 2017-10-11 11:07:31
 14
 12712

STOCHRSI 지표 이해

  • 지난 몇일 동안 한 친구에게 STOCHRSI라는 지표에 대한 질문을 해줬습니다. 인터넷에서 많은 자료를 찾아봤는데, 중국어로는 거의 없습니다.
    거래는 작은 일이지만, 그냥 천상의 책이다. 그러나 연구하는 만큼 조금은 수확할 수 있다. 아래에서 경험을 공유하고, 이 친구에게 배울 수 있다.

인터넷에서 이 지표에 대한 계산 공식을 찾아봤습니다.

/* LC := REF(CLOSE,1); //REF(C,1) 上一周期的收盘价 RSI:=SMA(MAX(CLOSE-LC,0),N,1)/SMA(ABS(CLOSE-LC),N,1) *100; %K: MA(RSI-LLV(RSI,M),P1)/MA(HHV(RSI,M)-LLV(RSI,M),P1)*100; LLV(l,60)表示:检索60天内的最低价,可适应于检索任何股票 %D:MA(%K,P2); LC := REF(CLOSE,1); RSI:=SMA(MAX(CLOSE-LC,0),N,1)/SMA(ABS(CLOSE-LC),N,1) *100; STOCHRSI:MA(RSI-LLV(RSI,M),P1)/MA(HHV(RSI,M)-LLV(RSI,M),P1)*100; */

<unk>! 참을성 넘쳐 ᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲᅲ
이 설명은 일반적인 공식입니다. 하지만 약간의 프로그래밍 경험이 있는 저 역시 추측할 수 밖에 없습니다.

    1. 인터넷에서 찾은 자료에 따르면, 이 지표는 대략 3가지의 다른 형태가 있다. 위의 공식은 그 중 2가지이다. 하지만 자료는 이 3가지의 다른 형태에 대한 다른 자세한 정보는 말하지 않는다.
    1. 각 플랫폼의 차트 실태를 보고 비교한다. 이 지표에 대한 설명이 서로 다르다는 것을 발견한다. 플랫폼의 talib 지표 저장소에서의 지표 함수 STOCHRSI의 파라미터 설명도 완전히 이해되지 않는다.
    1. talib 지표 저장소를 사용하여 14,14,3,3 인 매개 변수를 입력합니다. 이 매개 변수 그룹은 다른 플랫폼과 비교하여 큰 차이를 발견했습니다. 매개 변수 설명을 살펴보면 다르다는 것을 발견했습니다. 그래서 기존의 매개 변수를 포기했습니다.
    1. 조금은 이 지표를 움직이고 싶네요... (약간 겁이 났어요, 잘못하면 코드가 괴롭혔어요) ᅲ

그리고 그 후로, 저는 제 인생을 다시 시작하게 되었습니다.
결론:

    1. 이 지표가 어떤 형태를 취하든, RSI 지표는 이 지표의 기본 데이터이다. 다른 플랫폼 설명과 위의 공식을 비교한다. STOCHRSI 지표의 파라미터를 결정하는 것은 반드시 RSI의 파라미터가 있어야 한다.
  • 2, 이 지표에 대한 다른 설명이 있습니다, 어떤 설명은 지표 출력이 %K, %D 두 줄입니다. 어떤 설명은 출력이 STOCHRSI, MA(3) (이 설명의 변수는 14,14,3,3)
    분석해보자, 사실 2가지의 다른 형태임에도 불구하고, %K === STOCHRSI, %D === MA(3) 출력된 2개의 줄 ((데이터) 의 계산 공식은 동일하다. MA(3) 중 3개가 하나의 변수임을 확인한다.
    나머지 2개의 변수는, 위의 공식에 들어가게 되는데, M와 P1입니다. 14와 3 모두 시도해 보겠습니다. 결국 <unk>아낸 지표 데이터는, 결국 다른 플랫폼의 데이터와 일치합니다.

초록색은 %K, 오렌지색은 %D입니다.
img

  • OKCoin과 비교할 수 있는 직접 작성한 지표입니다.
function LLV(array,period){ if(!array || array.length - period < 0){ throw "error:" + array; } var min = array[array.length - period]; for(var i = array.length - period; i < array.length; i++){ if( array[i] < min ){ min = array[i]; } } return min; } function HHV(array,period){ if(!array || array.length - period < 0){ throw "error:" + array; } var max = array[array.length - period]; for(var i = array.length - period; i < array.length; i++){ if( array[i] > max){ max = array[i]; } } return max; } function DeleteNullEle(initArr){ var dealArr = []; var initArrLen = initArr.length; for(var i = 0,j = 0 ; i < initArrLen ; i++,j++){ if(initArr[i] === null || isNaN(initArr[i]) ){ j--; continue; } dealArr[j] = initArr[i]; } return dealArr; } /* LC := REF(CLOSE,1); //REF(C,1) 上一周期的收盘价 RSI:=SMA(MAX(CLOSE-LC,0),N,1)/SMA(ABS(CLOSE-LC),N,1) *100; %K: MA(RSI-LLV(RSI,M),P1)/MA(HHV(RSI,M)-LLV(RSI,M),P1)*100; LLV(l,60)表示:检索60天内的最低价,可适应于检索任何股票 %D:MA(%K,P2); LC := REF(CLOSE,1); RSI:=SMA(MAX(CLOSE-LC,0),N,1)/SMA(ABS(CLOSE-LC),N,1) *100; STOCHRSI:MA(RSI-LLV(RSI,M),P1)/MA(HHV(RSI,M)-LLV(RSI,M),P1)*100; */ function FstochRSI(records,n,m,p1,p2){ var len = records.length; //var LC = records[len-2];//上一周期收盘价 //var rsi = TA.RSI(records,n);// RSI 数组 ,talib var rsi = talib.RSI(records,n); rsi = DeleteNullEle(rsi);//ceshi var arr1 = []; var arr2 = []; var arr3 = []; var arr4 = []; var rsi_a = []; var rsi_b = []; var k = []; var d = null; /*不包含当前柱 for(var a = 0 ;a < rsi.length ; a++ ){//改造 不用 LLV for(var aa = 0 ; aa <= a; aa++ ){ rsi_a.push(rsi[aa]); } arr1.push(rsi[a] - TA.Lowest(rsi_a,m)); } for(var b = 0 ;b < rsi.length ; b++ ){//改造 不用 HHV for(var bb = 0 ; bb <= b; bb++ ){ rsi_b.push(rsi[bb]); } arr2.push(TA.Highest(rsi_b,m) - TA.Lowest(rsi_b,m)); } */ for(var a = 0 ;a < rsi.length ; a++ ){//改造 不用 LLV if(a < m){ continue; } for(var aa = 0 ; aa <= a; aa++ ){ rsi_a.push(rsi[aa]); } arr1.push(rsi[a] - LLV(rsi_a,m)); } for(var b = 0 ;b < rsi.length ; b++ ){//改造 不用 HHV if(b < m){ continue; } for(var bb = 0 ; bb <= b; bb++ ){ rsi_b.push(rsi[bb]); } arr2.push(HHV(rsi_b,m) - LLV(rsi_b,m)); } arr1 = DeleteNullEle(arr1); arr2 = DeleteNullEle(arr2); //Log("arr1:",arr1.length,"-",arr1);//ceshi //Log("arr2:",arr2.length,"-",arr2);//ceshi arr3 = talib.MA(arr1,p1); arr4 = talib.MA(arr2,p1); arr3 = DeleteNullEle(arr3); arr4 = DeleteNullEle(arr4); //Log("ceshi");//ceshi var c = 0; var diff = 0; if(arr3.length !== arr4.length){//实测 长度不相等 throw "error: !=" + arr3.length + "----" + arr4.length; diff = arr4.length - arr3.length; //example diff = 10 - 6 }else{ //throw "error:" + arr3.length + "----" + arr4.length; } for( ;c < arr3.length ; c++ ){ k.push(arr3[c] / arr4[c + diff] * 100); } d = talib.MA(k,p2); return [k,d,rsi]; }
Related Recommendations
Comment
All comments (11)

    function main()
    {
    exchange.SetContractType("swap") // 设置为永续合约
    var records = exchange.GetRecords(PERIOD_M15)
    let [k, d, rsi] = FstochRSI(records, 14, 14, 3, 3);
    Log("K",k[k.length-2])
    Log("D",d[d.length-2])
    }

    梦总,我调用了这个函数,并且打印出来的数据跟币安上的StochRsi的实际值是对不上的

    2 years ago

    可能是对比的问题,确定对比的数据是同样品种、周期、参数、BAR位置。这个之前测试过,应该是一样的。

    2 years ago
    J

    回测时发现这个函数的速度非常慢,有待提高

    10 years ago

    可能算法或者代码需要优化

    10 years ago
    J

    还是没看明白,这最后到底要怎么用 talib.STOCHRSI() 才能对的上bitcoinwisdom的数据?

    10 years ago

    talib的 对不上,内部计算,有些不一样。我自己写了下 STOCHRSI ,稍后贴出来。

    10 years ago

    先用STOCH函数了,感觉效果差不多

    10 years ago

    代码已经写在帖子上了, 可以对比下看看。

    10 years ago

    太好了,现在正常了。谢谢!

    10 years ago
  • 1
Forums
PINE Language
Get the app
iPhone Download
© 2015 - ∞ INVENTOR PTE LTD (SG)