Die Ressourcen sind geladen. Beförderung...

STOCHRSI-Indikatoren verstehen

Schriftsteller:Die Erfinder quantifizieren - Kleine Träume, Erstellt: 2016-08-24 19:25:22, Aktualisiert: 2017-10-11 11:07:31

STOCHRSI-Indikatoren verstehen

  • In den letzten Tagen habe ich einem Freund geholfen, eine Frage zu einem Indikator zu lösen, der sich STOCHRSI nennt. Der Handel ist nicht viel, es ist einfach die Schrift. Aber wenn man nur viel studiert, bekommt man ein wenig Gewinn.

Ich habe im Internet einige Rechenformeln für diesen Indikator 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;
*/

Mein Gott, ich war so geduldig, dass ich es gesehen habe. Diese Beschreibung ist eine allgemeine Formel. Aber auch ich, mit etwas Programmiererfahrung, kann nur raten!

  • 1. Die Informationen, die im Internet gefunden werden, besagen, dass es drei verschiedene Formen dieses Indikators gibt. Die obige Formel ist zwei davon.
  • 2. Betrachtet, vergleicht und analysiert die Chart-Marktbedingungen auf den verschiedenen Plattformen und stellt fest, dass die Beschreibung des Indikators unterschiedlich ist. Auch die Parameterbeschreibung der Indikatorfunktion STOCHRSI in der Talib-Indikatorbank der Plattform ist nicht vollständig verstanden.
  • 3. Mit der Talib-Indikatorbank, die Parameter 14,14,3,3 übertragen. Diese Parameter, die Daten und andere Plattformen im Vergleich zu den Ergebnissen, haben große Unterschiede gefunden.
  • 4.有点想动手撸这个指标…(有点怕怕,弄不好就被代码虐了)。

Nach einem schmerzhaften Kampf... Zusammenfassung:

  • 1. Der RSI ist die Basisdaten des Indikators, egal in welcher Form er ist. Vergleiche mit anderen Plattformen und der oben beschriebenen Formel.
  • 2. Es wurden auch verschiedene Beschreibungen dieses Indikators gefunden. Einige beschreiben den Ausgang als %K, %D zwei Linien. Andere beschreiben den Ausgang als STOCHRSI, MA ((3)). Die Analyse zeigt, dass es sich zwar um zwei verschiedene Formen handelt, %K === STOCHRSI und %D === MA(3) aber die beiden Linien der Ausgabe ((Daten)) haben die gleiche Rechenformel. Die beiden übrigen Parameter, die man in die oben genannte Formel einfügt, sind M und P1. 14 und 3 sind alle ausprobiert.

Grün ist die Schnelllinie %K, Orange ist die Schnelllinie %D.img

  • Ich habe einen eigenen Indikator geschrieben, den ich mit OKCoin vergleichen kann.

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

Mehr

- Das ist nicht wahr.Funktion main (() - Was ist los? exchange.SetContractType (("swap") // als dauerhafter Vertrag eingestellt Var records = exchange.GetRecords ((PERIOD_M15)) ist eine von den folgenden Websites: let [k, d, rsi] = FstochRSI ((records, 14, 14, 3, 3); Log (("K", k[k.length-2]) Log (("D", d[d.length-2]) Wir sind hier. - Ich weiß. Ich habe diese Funktion aufgerufen, und die Daten, die ich ausgedruckt habe, entsprechen nicht dem tatsächlichen Wert von StochRsi auf Binance.

JBei der Wiederholung wurde festgestellt, dass diese Funktion sehr langsam ist und verbessert werden muss.

JIch bin mir nicht sicher, was ich mit talib.STOCHRSI (WEB tun soll, um die Daten von Bitcoinwisdom zu korrigieren.

Die Erfinder quantifizieren - Kleine TräumeEs kann ein Vergleichsproblem sein, um festzustellen, dass die Daten der gleichen Art, Periode, Parameter, BAR-Position sind.

Die Erfinder quantifizieren - Kleine Träumetalib ist eine Indikator-Datenbank. Open Source. In BotVS wird so verwendet, z. B. für die Periode der gewünschten Durchschnittslinie. Die Berechnung erfolgt mit einer Durchschnittslinie von 10 bar in der Linie K der Records.

Die Erfinder quantifizieren - Kleine TräumeFstochRSI ((records,n,m,p1,p2)) entspricht den gleichen OKCoin-Parametern, außer dass der erste records, der K-Liniendaten ist, die Datenquelle für die Berechnung der Indikatoren ist, und ich habe die gleichen Daten für die Berechnung des OK-Graphs verglichen, weil der Algorithmus etwas langsam ist.

Die Erfinder quantifizieren - Kleine TräumeVielleicht müssen die Algorithmen oder der Code optimiert werden.

JDas ist sehr gut, jetzt ist alles normal.

Die Erfinder quantifizieren - Kleine TräumeDer Code ist bereits in einem Beitrag geschrieben, und Sie können einen Vergleich hier sehen.

JWir haben die Funktion STOCH benutzt.

Die Erfinder quantifizieren - Kleine TräumeIch habe selbst STOCHRSI geschrieben und später gepostet.