博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
STOCHRSI 指标理解
阅读量:7039 次
发布时间:2019-06-28

本文共 4505 字,大约阅读时间需要 15 分钟。

hot3.png

STOCHRSI 指标理解

这几天帮一个朋友解决一个关于指标的问题 ,这个指标就是 STOCHRSI 。在网上查了很多资料,中文的真是甚少。而且仅有的也不是讲的很清楚。对于我这样的 交易小白,简直是天书。 不过只要研究多少会有点收获的,下面分享下经验,需要用这个的朋友可以借鉴。

在网上找到了一些 关于这个指标的计算公式。

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

 

天哪! 我竟然耐心看完了。(当时看见这个的时候,就感觉碰到钉子了。) 这个描述是通用 公式。但是有点编程经验的我也只能 猜!猜!猜!

  • 在网上找到的资料说,这个指标有大概3个不同形态。上面的公式是其中2个。 但是资料也没说,这3个不同形态的其他详细信息。
  • 在各个平台的图表行情中看、对比。发现,关于这个指标的描述各不相同。平台上的 talib指标库 中的指标函数 STOCHRSI 的参数描述也没有完全明白。
  • 用talib指标库 传入参数 14,14,3,3 这组参数,得出的数据和其他平台的对比,发现差异较大。看了看参数描述发现不一样。于是放弃现成的。
  • 有点想动手撸这个指标…(有点怕怕,弄不好就被代码虐了)。

 

经过了一番痛苦挣扎…

总结:

  1. 这个指标不管哪种形态,RSI 指标是这个指标的基础数据。对比了其他平台描述和上述公式。确定STOCHRSI指标的参数必然有一个是RSI的参数。

  2. 又发现 这个指标的不同描述,有的描述是指标输出的是 %K , %D两条线。 有的描述是 输出的为 STOCHRSI , MA(3) (这个描述的参数是14,14,3,3) 分析了一下, 其实 虽然是2种不同形态, %K === STOCHRSI , %D === MA(3) 输出的2条线(数据)计算公式是一样的。 确定 MA(3)中的3是一个参数。 剩下2个参数,动手往上面的公式里面带入,就是M 和 P1了 。14、3 都试试。最终发现撸出来的指标数据 ,终于对的上其他平台上的数据了。

绿色是快线 %K ,橙色是 %D

自己写的指标,可以对比下 OKCoin的 。 如有问题欢迎留言 ^^

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

 

原文地址:https://quant.la/Article/View/43/

转载于:https://my.oschina.net/u/3949328/blog/2872027

你可能感兴趣的文章
用Javascript获取页面元素的位置
查看>>
ORACLE11g R2【RAC+ASM→单实例FS】
查看>>
消防喷头的原理
查看>>
一点扯淡的随笔
查看>>
Linux常用快捷键以及如何查看命令帮助
查看>>
electron 学习笔记
查看>>
vs 开发 qt 遇到 无法找到 Visual Studio 2010 的生成工具(平台工具集 =“v100”) 解决方案...
查看>>
Oracle死锁处理实例
查看>>
[转]Android Studio创建Xposed模块项目时BridgeApi的正确添加方式
查看>>
【hive】——Hive sql语法详解
查看>>
python 全栈开发,Day50(Javascript简介,第一个JavaScript代码,数据类型,运算符,数据类型转换,流程控制,百度换肤,显示隐藏)...
查看>>
一篇网络流的好blog
查看>>
Python基础之继承与派生
查看>>
filter、map、every函数的使用
查看>>
黑马程序员——iOS学习——UITableView表视图单元样式
查看>>
Bash基础——减号-
查看>>
Android适配文件dimen自动生成代码
查看>>
走马观花--快餐学python笔记
查看>>
jquery轻量级富文本编辑器Trumbowyg
查看>>
VMware Workstation 不可恢复错误 (vcpu-0)
查看>>