STOCHRSI 지표 이해

저자:작은 꿈, 2016-08-24 19:25:22, 업데이트: 2017-10-11 11:07:31

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;
*/

이 사진이 너무 오래 지나지 않아서 이 사진이 너무 오래 지나지 않아서 이 사진이 너무 오래 지나지 않아서 이 설명은 일반적인 공식입니다. 하지만 조금 프로그래밍 경험이 있는 저는 추측만 할 수 있습니다! 추측! 추측!

  • 1. 온라인에서 발견된 자료에 따르면, 이 지표에는 대략 3가지 다른 형태가 있다. 위의 공식은 그 중 2가지이다. 그러나 자료는 이 3가지 다른 형태에 대한 다른 세부적인 정보를 말하지 않는다.
  • 2. 각 플랫폼의 차트 시장을 살펴보고 비교하십시오. 이 지표에 대한 설명이 다르다는 것을 발견하십시오. 플랫폼의 탈립 지표库에서 지표 함수 STOCHRSI의 매개 변수 설명도 완전히 이해되지 않습니다.
  • 3. 타리브 지표库를 사용하여 매개 변수 14,14,3,3를 입력합니다. 이 매개 변수 그룹은 다른 플랫폼과 비교하여 더 큰 차이를 발견했습니다. 매개 변수 설명서를 살펴본 결과 다른 것을 발견했습니다. 그래서 준비 된 것을 포기했습니다.
  • 4.有点想动手撸这个指标…(有点怕怕,弄不好就被代码虐了)。

이 모든 것은 우리가 해야 할 일입니다. 요약:

  • 1, 이 지표의 형태가 무엇이든, RSI 지표는 이 지표의 기본 데이터이다. 다른 플랫폼에 설명된 것과 위의 공식에 대조한다. STOCHRSI 지표의 매개 변수를 결정하는 매개 변수에는 반드시 RSI의 매개 변수가 있어야 한다.
  • 2, 또한 이 지표의 다른 설명이 발견되었다. 어떤 설명은 지표의 출력이 %K, %D 두 줄이라는 것이다. 어떤 설명은 출력이 STOCHRSI, MA ((3) (이 설명의 매개 변수는 14,14,3,3) 이다. 분석해보면, 실제로는 두 가지 다른 형식이지만, %K === STOCHRSI, %D === MA(3) 출력된 2줄의 데이터 계산 공식은 동일하다. MA(3) 중 3을 매개 변수로 결정한다. 나머지 2개 매개 변수는 M와 P1입니다. 14과 3 모두 시도했습니다. 결국 튀어나온 지표 데이터를 발견하고 다른 플랫폼의 데이터를 확인했습니다.

초록색은 빠른 라인 %K, 오렌지색은 %Dimg

  • 이 지표는 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];
}

더 많은

J이 함수가 매우 느리고 개선되어야 한다는 것을 재검토했을 때 발견했습니다.

J이 문서는 타리브.스토크시 (STOCHRSI) 에 대한 Bitcoinwisdom의 데이터에 대해 설명하고 있습니다.

작은 꿈talib는 지표 데이터베이스이다. Open Source이다. BotVS에서는 이렇게 사용된다. 예를 들어, 평균선을 구하는 talib.MA ((records, 10); // records는 평균선을 구하는 주기의 K줄 데이터이다. 계산된 것은 records K 라인의 10bar의 평균 라인이다. BotVS QQ 그룹: 608262365로 문의할 수 있습니다.

작은 꿈FstochRSI ((records,n,m,p1,p2) 에 해당하는 OKCoin의 매개 변수는 동일합니다. 첫 번째 records는 K선 데이터, 즉 계산 지표의 데이터 소스입니다.

작은 꿈알고리즘이나 코드가 최적화될 수도 있습니다.

J아주 좋네요, 이제 정상입니다. 감사합니다.

작은 꿈코드는 이미 게시물에 나와 있습니다.

J그리고 STOCH 함수를 사용해서

작은 꿈타리브의 반대의 경우, 내부 계산은 조금 다릅니다.