avatar of 发明者量化-小小梦 发明者量化-小小梦
konzentrieren Sie sich auf Private Nachricht
4
konzentrieren Sie sich auf
1271
Anhänger

Verständnis der STOCHRSI-Indikatoren

Erstellt in: 2016-08-24 19:25:22, aktualisiert am: 2017-10-11 11:07:31
comments   14
hits   12429

Verständnis der STOCHRSI-Indikatoren

  • In den letzten Tagen habe ich einem Freund geholfen, eine Frage zu einem Indikator zu lösen, und dieser Indikator ist STOCHRSI. Es ist einfach ein Buch, aber wenn man nur etwas studiert, kann man etwas davon gewinnen.

Ich habe einige Berechnungsformeln für diesen Indikator im Internet gefunden.

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

Oh Gott! Ich hatte die Geduld, es zu sehen. Das ist eine allgemeine Formel. Aber auch ich, mit etwas Programmiererfahrung, kann nur raten!

  • 1. Die Informationen, die man im Internet findet, besagen, dass der Indikator etwa drei verschiedene Formen hat. Die obigen Formeln sind zwei davon. Aber die Informationen geben keine weiteren Details zu den drei verschiedenen Formen.
  • 2. Überprüfen Sie die Diagramme der verschiedenen Plattformen und vergleichen Sie sie. Es wurde festgestellt, dass die Beschreibungen für diesen Indikator unterschiedlich sind. Die Parameterbeschreibung der Indikatorfunktion STOCHRSI in der talib-Indikatorbibliothek der Plattform ist auch nicht vollständig verstanden.
  • 3. Einzug in die Tabelle mit den Parametern 14,14,3,3 in der Tabelle mit den Parametern 14,14,3,3 in der Tabelle mit den Parametern 14,14,3,3,3 in der Tabelle mit den Parametern 14,14,3,3,3 in der Tabelle mit den Parametern 14,14,3 in der Tabelle mit den Parametern 14,14,3 in der Tabelle mit den Parametern 14,14,3 in der Tabelle mit den Parametern 14,14,3 in der Tabelle mit den Parametern 14,14,3 in der Tabelle mit den Parametern 14,14,3 in der Tabelle mit den Parametern 14,14,3 in der Tabelle mit den Parametern 14,14,3 in der Tabelle mit den Parametern 14,14,4 in der Tabelle mit den Parametern 14,14,5 in der Tabelle mit den Parametern 14,14,6 in der Tabelle mit den Parametern 14,14,7 in der Tabelle mit den Parametern 14,14,8 in der Tabelle mit den Parametern 14,9 in der Tabelle mit den Parametern 14,9 in der Tab
  • 4. Ein bisschen Angst vor dem Indikator… ((ein bisschen Angst, wenn es nicht klappt, wird der Code gemobbt))

Es ist eine schmerzhafte Zeit, die ich durchlebt habe. Zusammenfassung:

  • 1. Egal in welcher Form dieser Indikator erscheint, der RSI ist die Basisdaten für diesen Indikator. Die anderen Plattformbeschreibungen werden mit der obigen Formel verglichen.
  • 2. Es gibt verschiedene Beschreibungen für den Indikator, einige beschreiben den Indikator als %K, %D, zwei Zeilen. Andere beschreiben den Indikator als STOCHRSI, MA(3) (die Parameter für diese Beschreibung sind 14,14,3,3) Es gibt zwei verschiedene Formen, aber die Formel ist die gleiche für die 2 Datenlinien der Ausgabe: Die übrigen 2 Parameter, die wir in die Formel einfügen, sind M und P1. 14, 3 werden alle ausprobiert. Schließlich werden die Kennzahlen gefunden, die auf den anderen Plattformen gefunden wurden.

Grün ist %K und Orange ist %D Verständnis der STOCHRSI-Indikatoren

  • Wenn Sie Fragen haben, schreiben Sie uns gerne einen Kommentar ^^

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