avatar of 发明者量化-小小梦 发明者量化-小小梦
پر توجہ دیں نجی پیغام
4
پر توجہ دیں
1271
پیروکار

STOCHRSI اشارے کی تفہیم

میں تخلیق کیا: 2016-08-24 19:25:22, تازہ کاری: 2017-10-11 11:07:31
comments   14
hits   12429

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

اوہ میرے خدا! میں نے صبر سے اسے دیکھا۔ یہ ایک عام فارمولا ہے، لیکن میں جو تھوڑا سا پروگرامنگ کا تجربہ رکھتا ہوں، صرف اندازہ لگا سکتا ہوں، اندازہ لگا سکتا ہوں۔

  • 1۔ آن لائن ملنے والی معلومات میں بتایا گیا ہے کہ اس اشارے کی تقریباً تین مختلف شکلیں ہیں۔ اوپر دیے گئے فارمولے میں ان میں سے دو ہیں۔ لیکن ان تین مختلف شکلوں کے بارے میں مزید تفصیلات نہیں بتائی گئیں۔
  • 2۔ ہر پلیٹ فارم کے چارٹ کے حالات کو دیکھیں اور موازنہ کریں۔ پتہ چلا کہ اس اشارے کے بارے میں مختلف وضاحتیں ہیں۔ پلیٹ فارم پر طالبان اشارے کے ذخیرے میں اشارے کے فنکشن STOCHRSI کے پیرامیٹرز کی وضاحت بھی پوری طرح سے سمجھ نہیں آئی ہے۔
  • 3. talib اشارے کے ذخیرے کا استعمال کرتے ہوئے پیرامیٹرز 14 ، 14 ، 3 ، 3 کو داخل کریں۔ اس پیرامیٹرز کے سیٹ میں ، دوسرے پلیٹ فارمز کے مقابلے میں حاصل کردہ اعداد و شمار میں ، بڑے اختلافات پائے گئے۔ پیرامیٹرز کی وضاحت کو دیکھنے کے بعد یہ مختلف پایا گیا۔ لہذا تیار شدہ کو چھوڑ دیا گیا۔
  • 4. میں اس اشارے پر ہاتھ اٹھانا چاہتا ہوں… (کچھ خوفزدہ ہوں، اگر میں نے غلط کام کیا تو میں کوڈ کے ساتھ بدسلوکی کروں گا)

اس کے بعد، میں نے اپنے آپ کو ایک بار پھر دیکھا اور میں نے اس کے بارے میں سوچا. خلاصہ:

  • 1، اس اشارے کی کوئی بھی شکل ، 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 ہے STOCHRSI اشارے کی تفہیم

  • آپ کے اپنے لکھے ہوئے اشارے ہیں اور آپ ان کا موازنہ 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];
}