Alıntı Originally Posted by vVvendetta Yazıyı Oku
Ayni median gibi 20 gunluk H,L,C 'i tek bir liste haline getirip iclerinden hangisi en buyuk ise onu aliyor.
MAX(H, L, C) ile MAX(H) ve MIN(H, L, C) ile MIN(L) aynı değerleri verir ancak kodu sizin istediğiniz gibi yazdım. Gönderdiğiniz MRS hesaplamasına değerleri daha makul görebilmek amacıyla 100 ile çarpma işlemi ekledim. Beklediğimden farklı ve güzel bir çıktı verdi. Filtre olarak işe yarayabilir.

Kod:
var P = Sistem.GrafikVerileri;
var H = Sistem.GrafikFiyatOku(P, "Yuksek");
var C = Sistem.GrafikFiyatOku(P, "Kapanis");
var L = Sistem.GrafikFiyatOku(P, "Dusuk");

var MED10 = Sistem.Liste(0f);
var MAX20 = Sistem.Liste(0f);
var MIN20 = Sistem.Liste(0f);
var MRS = Sistem.Liste(0f);
var HLC10 = new List<float>();
var HLC20 = new List<float>();

for (var i = 21; i < P.Count; i++)
{
    var hlc = new List<float> { H[i], C[i], L[i] };
    HLC10.AddRange(hlc);
    HLC20.AddRange(hlc);

    if (HLC10.Count == 30)
    {
        MED10[i] = User.Median(HLC10);
        HLC10.RemoveRange(0, 3);
    }

    if (HLC20.Count == 60)
    {
        MAX20[i] = HLC20.Max();
        MIN20[i] = HLC20.Min();
        HLC20.RemoveRange(0, 3);
    }

    MRS[i] = 100 * (MED10[i] - MAX20[i]) / MAX20[i];
}

Sistem.Cizgiler[0].Deger = MED10;
Sistem.Cizgiler[1].Deger = MAX20;
Sistem.Cizgiler[2].Deger = MIN20;
Sistem.Cizgiler[3].Deger = MRS;
Kodu çalıştırabilmek için daha önce göndermiş olduğum median formülünü User.dll de tutmanız gerekiyor. Hesaplamalarda hatalar olabilir, dolayısıyla kendiniz test etmeyi unutmayın.