avatar of 发明者量化-小小梦 发明者量化-小小梦
fokus pada mesej peribadi
4
fokus pada
1271
Pengikut

Pengertian STOCHRSI

Dicipta dalam: 2016-08-24 19:25:22, dikemas kini pada: 2017-10-11 11:07:31
comments   14
hits   12429

Pengertian STOCHRSI

  • Dalam beberapa hari ini saya telah membantu seorang rakan untuk menyelesaikan satu soalan mengenai indeks, iaitu STOCHRSI. Saya telah mencari banyak maklumat di internet, tetapi tidak banyak yang ditulis dalam bahasa Cina. Berniaga kecil-kecilan, ia adalah perkara biasa. Tetapi, anda akan mendapat sedikit hasil dari penyelidikan anda, dan anda boleh mengambil contoh daripada rakan anda yang perlu berkongsi pengalaman anda di bawah.

Terdapat beberapa formula yang boleh dijumpai dalam talian untuk mengira nilai ini.

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

Ya Tuhan! Saya sudah tidak sabar lagi untuk menontonnya. Ini adalah formula umum, tetapi saya yang mempunyai sedikit pengalaman pengaturcaraan hanya boleh meneka! meneka! meneka!

  • 1. Sumber yang ditemui di internet mengatakan bahawa terdapat kira-kira 3 bentuk yang berbeza. Rumus di atas adalah 2 daripadanya. Tetapi sumber itu tidak mengatakan maklumat lanjut mengenai 3 bentuk yang berbeza.
  • 2. Lihat dan bandingkan keadaan carta di setiap platform. Ia mendapati bahawa penerangan mengenai indikator ini berbeza. Penerangan parameter fungsi indikator STOCHRSI dalam perpustakaan indikator talib di platform juga tidak sepenuhnya difahami.
  • 3. Menggunakan talib indicator library untuk memasukkan parameter 14,14,3,3 Kumpulan parameter ini, data yang dihasilkan dibandingkan dengan platform lain, mendapati perbezaan yang besar.
  • 4. sedikit ingin menggerakkan tangan pada penunjuk ini… ((sedikit takut, jika gagal, ia akan dianiaya oleh kod) )

Selepas perjuangan yang menyakitkan… Kesimpulannya:

  • 1 , Indeks ini tidak kira apa bentuknya, RSI adalah data asas untuk indikator ini. Dibandingkan dengan penerangan platform lain dan formula di atas. Untuk menentukan parameter indikator STOCHRSI, mesti ada parameter RSI.
  • 2), dan terdapat pelbagai penerangan mengenai penunjuk ini, ada yang menyatakan bahawa penunjuk ini menghasilkan dua baris %K, %D. Ada juga yang menyatakan bahawa penunjuk ini menghasilkan STOCHRSI, MA(3) (parameter penerangan ini adalah 14, 14, 3, 3) Analisis, sebenarnya walaupun 2 bentuk yang berbeza, %K === STOCHRSI, %D === MA(3) 2 baris () data) formula perhitungan output adalah sama. Menentukan MA(3) 3 adalah parameter. 2 parameter yang tersisa, yang dibawa ke dalam formula di atas, iaitu M dan P1. 14, 3 telah dicuba. Data penunjuk akhirnya ditemui, dan akhirnya data di platform lain.

Hijau ialah %K, oren ialah %D Pengertian STOCHRSI

  • Ia adalah penunjuk yang saya tulis sendiri, dan boleh dibandingkan dengan OKCoin. Sila komen jika anda mempunyai soalan ^^

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