在BotVS 上测试的 用得JS 语言写的。
代码:
这个是这个指标的公式
- /*
- 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
- //Log("rsi:",rsi) //测试
- //Log("rsi:",rsi);//ceshi
- //throw "stop";//ceshi
- table.e5 = "rsi :" + rsi[rsi.length-1] + "rsi[-1]:" + rsi[rsi.length-2];//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];
- }