Type/to search
8
Follow
1370
Followers
Comprensión de los indicadores STOCHRSI
FAQ
Created 2016-08-24 19:25:22  Updated 2017-10-11 11:07:31
 14
 12712

Comprensión de los indicadores STOCHRSI

  • En estos días he estado ayudando a un amigo a resolver una pregunta sobre un indicador, el STOCHRSI. He buscado mucha información en la red, pero la verdad es que hay muy poca información en chino.
    El comercio es un libro de magia, pero siempre y cuando se estudia un poco, se obtiene un poco de ganancia, a continuación se comparte la experiencia, se puede aprender con este amigo.

En la web encontré algunas fórmulas de cálculo para este indicador.

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

¡Dios mío! ¡Me he quedado sin paciencia para ver! (Cuando vi esto, sentí que había tocado un clavo).
Esta descripción es una fórmula general. Pero yo, con un poco de experiencia en programación, sólo puedo adivinar. ¡Adivina!

    1. La información encontrada en la red dice que el indicador tiene aproximadamente 3 formas diferentes. La fórmula de arriba es 2 de ellas. Pero la información no dice que haya más detalles de las 3 formas diferentes.
    1. Comparar las gráficas de las distintas plataformas. Descubrir que las descripciones de este indicador varían. La descripción de los parámetros de la función indicador STOCHRSI en la biblioteca de indicadores talib de la plataforma tampoco se entiende completamente.
    1. Utiliza la base de indicadores de talib para introducir los parámetros 14,14,3,3 Este conjunto de parámetros, los datos obtenidos en comparación con otras plataformas, encontró una gran diferencia. Miró la descripción de los parámetros y descubrió que no era el mismo. Por lo tanto, abandonó el estándar.
    1. un poco de miedo a mover el indicador... (un poco de miedo a ser maltratado por el código si no lo haces bien)

Después de una lucha dolorosa...
En resumen:

    1. Cualquiera que sea la forma de este indicador, el indicador RSI es el dato básico de este indicador. Comparando la descripción de otras plataformas con la fórmula anterior. Determinar el parámetro del indicador STOCHRSI requiere un parámetro que sea el RSI.
  • 2), y encontramos diferentes descripciones de este indicador, algunas descripciones de que el indicador es la salida de %K, %D dos líneas. Algunas descripciones de que la salida es STOCHRSI, MA(3) (los parámetros de esta descripción son 14,14,3,3)
    Analizando un poco, de hecho, aunque son dos formas diferentes, %K === STOCHRSI, %D === MA(3) La fórmula de cálculo de las 2 líneas de datos de salida es la misma. Determina que 3 de MA(3) es un parámetro.
    Los dos parámetros restantes, que se introducen en la fórmula anterior, son M y P1. 14, 3 se prueban. Finalmente, los datos del indicador se encuentran, y finalmente los datos de otras plataformas se encuentran.

El verde es la línea rápida %K, el naranja es la línea rápida %D
img

  • Los indicadores que escribo yo mismo pueden ser comparados con los de OKCoin. Si tienes alguna pregunta, por favor, deja un comentario ^^
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]; }
Related Recommendations
Comment
All comments (11)

    function main()
    {
    exchange.SetContractType("swap") // 设置为永续合约
    var records = exchange.GetRecords(PERIOD_M15)
    let [k, d, rsi] = FstochRSI(records, 14, 14, 3, 3);
    Log("K",k[k.length-2])
    Log("D",d[d.length-2])
    }

    梦总,我调用了这个函数,并且打印出来的数据跟币安上的StochRsi的实际值是对不上的

    2 years ago

    可能是对比的问题,确定对比的数据是同样品种、周期、参数、BAR位置。这个之前测试过,应该是一样的。

    2 years ago
    J

    回测时发现这个函数的速度非常慢,有待提高

    10 years ago

    可能算法或者代码需要优化

    10 years ago
    J

    还是没看明白,这最后到底要怎么用 talib.STOCHRSI() 才能对的上bitcoinwisdom的数据?

    10 years ago

    talib的 对不上,内部计算,有些不一样。我自己写了下 STOCHRSI ,稍后贴出来。

    10 years ago

    先用STOCH函数了,感觉效果差不多

    10 years ago

    代码已经写在帖子上了, 可以对比下看看。

    10 years ago

    太好了,现在正常了。谢谢!

    10 years ago
  • 1
Forums
PINE Language
Get the app
iPhone Download
© 2015 - ∞ INVENTOR PTE LTD (SG)