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.
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.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;
Sayin Caglar;
Ilgi ve alakaniza tesekkurler .Gonderdigim formul Amibroker'da ki percentrank ile daha verimli calisiyor. Orjinal formulde 252 gunluk deger ile kullanmak gerekiyor yani percentrank(MRS,252) seklinde .100 ile carpmak yerine bu sekilde kullanmak daha cok isinize yarayabilir belki.Ideal kullanimi ( Daha once Sezai bey yardimci olmustu cevirisinde) ve orjinali soyle:
Orjinal Amibroker formulu:
function PercentRank( Data, Periods )
{
Count = 0;
for ( i = 1; i < Periods ; i++ )
{
Count = Count + ( Data > Ref( Data, -i ) );
}
return 100 * Count / (Periods-1);
}
Ideal Kullanimi (MRS'e uygulanmis hali):
for ( int i = Lenght; i < C.Count; i++)
{
float Count = 0;
for (int j = i-Lenght; j <= i; j++)
{
if (MRS[j] < MRS[i]) Count ++;
}
Count = Count * 100 / (float)Lenght;
MRSB[i] = Count ;
}
Al-Sat Kosulu olarakta >50 ve <50 kullanilabilir.
Ayrica Sayin Caglar, Percentrank'i surekli kullanmak icin User.dll icerisine nasil adapte edebiliriz acaba? Amibroker kullanimi oldukca verimli cunku.
Merhaba, döngüde tüm barları değilde sadece son 100 barı okumasını istersek nasıl yazmamız gerekir.
SM-N910C cihazımdan hisse.net mobile app kullanarak gönderildi.
Arkadaslar,
kesisme tara veya yukarikestiyse/asagikestiyse sorgularini robot haricinde dongu icinde nasil kullanabilirim ? Asagida ki denemem cevap vermiyor. Ideal kutuphane de ve eski forumlarda yeterli ornek bulamadim:
var AL1 = Sistem.YukariKestiyse(RSI, 30);
var SAT1 = Sistem.AsagiKestiyse(RSI, 70);
var AL2 = Sistem.YukariKestiyse(RSI2, 25);
var SAT2 = Sistem.AsagiKestiyse(RSI2, 75);
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if (SonYon != "A" && AL1 [i] || AL2 [i] )
{
Sistem.Yon[i] = "A"; // alış
SonYon = "A";
}
else if ( SonYon != "S" && SAT1 [i] || SAT2 [i] ) //Satış koşulu
{
Sistem.Yon[i] = "S"; // satış
SonYon = "S";
}
}
|
|
Twitter da Yeni başlayanlara iyi bir öğretici olacak gibi gözüküyor
hisse.net kullanarak iPhone aracılığıyla gönderildi
Yer İmleri