리소스 로딩... 로딩...

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];
}

더 많은

리징 엑스 function main ()) - 그래요 exchange.SetContractType (("swap") // 영구 계약으로 설정 var records = exchange.GetRecords (PERIOD_M15) let [k, d, rsi] = FstochRSI (records, 14, 14, 3, 3); 로그 (K,k[k.length-2]) 로그 (D,d[d.length-2]) ♪ ♪ --- 이 함수를 호출하고, 출력된 데이터는 Bitcoin 상의 StochRsi의 실제 값과 일치하지 않습니다.

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

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

발명가들의 수량화 - 작은 꿈비교 문제일 수도 있습니다. 비교 데이터가 동일한 품종, 주기, 매개 변수, BAR 위치인지 확인하는 문제입니다.

발명가들의 수량화 - 작은 꿈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 함수를 사용해서

발명가들의 수량화 - 작은 꿈타리브의 반대의 경우, 내부 계산은 조금 다릅니다.