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