Saya menemukan beberapa rumus perhitungan untuk indikator ini di internet.
/*
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 Allah, aku sudah sabar menontonnya. (Ketika aku melihat ini, aku merasa seperti memukul paku.) Ini adalah deskripsi rumus umum. Tapi saya yang memiliki sedikit pengalaman dalam pemrograman hanya bisa menebak! menebak! menebak!
Setelah perjuangan yang paling menyakitkan... Hasilnya:
Hijau adalah garis cepat %K, oranye adalah %D.
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];
}
Lijingxfdjfungsi utama Aku tidak tahu. exchange.SetContractType (("swap") // diatur sebagai kontrak permanen 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]) Aku tidak tahu. --- Jadi, saya memanggil fungsi ini, dan data yang dicetak tidak sesuai dengan nilai sebenarnya dari StochRsi di Binance.
JKetika diulang, fungsi ini terlihat sangat lambat dan harus ditingkatkan.
JApakah Anda masih belum mengerti, apa yang harus dilakukan dengan data talib.STOCHRSI????) yang ada di atas Bitcoinwisdom?
Penemu Kuantitas - Mimpi KecilMungkin masalah kontras, menentukan bahwa data kontras adalah jenis, periode, parameter, dan lokasi BAR yang sama.
Penemu Kuantitas - Mimpi Keciltalib adalah sebuah database indikator yang terbuka. Pada BotVS digunakan seperti ini, misalnya talib.MA ((records, 10); // records yang diminta untuk data K-line pada siklus rata-rata. Dihitung adalah garis rata-rata rekaman K dengan 10 bar.
Penemu Kuantitas - Mimpi KecilFstochRSI ((records, n, m, p1, p2) yang sesuai dengan parameter OKCoin adalah sama, kecuali bahwa records pertama adalah data K-line, yaitu sumber data dari indikator perhitungan, dan data yang dihitung dalam grafik OK yang saya bandingkan adalah sama, yaitu algoritma ini sedikit lambat.
Penemu Kuantitas - Mimpi KecilMungkin algoritma atau kode perlu dioptimalkan.
JSangat bagus, sekarang sudah normal. Terima kasih!
Penemu Kuantitas - Mimpi KecilPada artikel ini, kita akan membahas beberapa hal yang bisa kita lakukan untuk membantu orang-orang yang menderita penyakit ini.
JJika kita menggunakan fungsi STOCH, kita akan merasakan efek yang sama.
Penemu Kuantitas - Mimpi KecilTalib tidak setuju, perhitungan internal, sedikit berbeda. Saya sendiri menulis STOCHRSI, yang akan diunggah nanti.