avatar of 发明者量化-小小梦 发明者量化-小小梦
fokus pada Pesan pribadi
4
fokus pada
1271
Pengikut

Pengertian Indikator STOCHRSI

Dibuat di: 2016-08-24 19:25:22, diperbarui pada: 2017-10-11 11:07:31
comments   14
hits   12429

Pengertian Indikator STOCHRSI

  • Beberapa hari yang lalu, saya membantu seorang teman untuk menjawab sebuah pertanyaan tentang sebuah indikator, yaitu STOCHRSI. Banyak sekali informasi yang saya cari di internet, namun hanya sedikit yang ditulis dalam bahasa Cina. Perdagangan kecil-kecilan, itu adalah buku langit. Namun, hanya dengan meneliti sedikit saja yang akan menghasilkan sedikit, di bawah ini saya akan berbagi pengalaman saya, saya perlu menggunakan teman-teman saya untuk mengambil contoh.

Saya menemukan beberapa rumus di internet untuk menghitung indikator 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 ampun! aku sudah tidak sabar lagi untuk menonton. Ini adalah deskripsi umum, tetapi saya, dengan sedikit pengalaman dalam programming, hanya bisa menebak!

  • 1. Sumber yang ditemukan di internet mengatakan bahwa ada sekitar 3 bentuk yang berbeda dari indikator ini. Rumus di atas adalah 2 dari mereka.
  • 2. Lihat dan bandingkan grafik yang ada di masing-masing platform. Anda akan menemukan bahwa deskripsi tentang indikator ini berbeda. Deskripsi parameter fungsi indikator STOCHRSI dalam perpustakaan indikator talib di platform juga tidak sepenuhnya dipahami.
  • 3. Menggunakan database indikator talib untuk memasukkan parameter 14,14,3,3. Set parameter ini, data yang dihasilkan dibandingkan dengan platform lain, ditemukan perbedaan yang lebih besar.
  • 4. sedikit ingin menggerakkan indikator ini… ((sedikit takut, jika tidak berhasil, akan dianiaya oleh kode)

Setelah perjuangan yang menyakitkan… Kesimpulannya:

  • 1. Indicator ini tidak peduli apa bentuknya, indikator RSI adalah data dasar dari indikator ini. Dibandingkan dengan deskripsi platform lain dan rumus di atas. Untuk menentukan parameter indikator STOCHRSI pasti ada parameter RSI.
  • 2 , dan menemukan deskripsi yang berbeda dari indikator ini, ada deskripsi bahwa indikator output adalah % K , % D dua baris. Ada deskripsi bahwa output adalah STOCHRSI , MA ((3) (parameter deskripsi ini adalah 14,14,3,3) Analisis, sebenarnya Meskipun 2 bentuk yang berbeda, %K === STOCHRSI, %D === MA(3) 2 baris output ((data) rumus perhitungan adalah sama. Untuk menentukan MA(3) 3 adalah parameter. 2 parameter yang tersisa, yang dimasukkan ke dalam rumus di atas, yaitu M dan P1. 14, 3 semuanya dicoba. Data indikator yang akhirnya ditemukan, akhirnya dipasangkan dengan data di platform lain.

Hijau adalah %K, oranye adalah %D Pengertian Indikator STOCHRSI

  • Indikator yang saya tulis sendiri, bisa dibandingkan dengan OKCoin. Jika ada pertanyaan silahkan komentar ^^

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