Ortalama sevenler için Smoothed ve Hull Ortalamaları..
Hull hızlı, smoothed ise yavaş tepki veriyor.. Hazır hesaplamada kullanmışken basit ve ağırlıklı ortalamayı da çizdirdim.. Dolayısıyla 4 tick lazım..
PHP Code:
var p = 22;
var C = Sistem.GrafikFiyatSec("Kapanis");
var MA = Sistem.MA(C, "Simple", p);
var a = Sistem.Liste(0);
var wm = Sistem.MA(C, "Weighted", p);
var wm2 = Sistem.MA(C, "Weighted", p/2);
var b = Sistem.Liste(0);
for (int i = 1; i < Sistem.BarSayisi; i++){
if (i==1) a[i]=MA[i];
else a[i]=((p-1)*a[i-1]+C[i])/p;
b[i]=2*wm2[i]-wm[i];
}
var k = Math.Floor(Math.Sqrt(p));
var Hm=Sistem.MA(b, "Weighted", k);
// hesaplanan verileri çizgilere aktar
Sistem.Cizgiler[0].Deger = a;
Sistem.Cizgiler[0].Aciklama = "Smoothed " + p;
Sistem.Cizgiler[1].Deger = MA;
Sistem.Cizgiler[1].Aciklama = "Simple MA " + p;
Sistem.Cizgiler[2].Deger = wm;
Sistem.Cizgiler[2].Aciklama = "Weighted " + p;
Sistem.Cizgiler[3].Deger = Hm;
Sistem.Cizgiler[3].Aciklama = "Hull MA " + p;
Aşağıda sadece Hull MA kodu var ve bir önceki bar kapanış değerlerine göre Al-Sat veriyor.. Kaydırmaya örnek olsun diye 5 bar geriden gelen bir değişken(hmR) daha ekledim.. [i-1] bir önceki değeri ifade eder, [i-2] ile iki önceki değeri, vb. kullanabilirsiniz.
PHP Code:
var p = 50;
var k = Math.Floor(Math.Sqrt(p));
var C = Sistem.GrafikFiyatSec("Kapanis");
var MA = Sistem.MA(C, "Weighted", p);
var MA2 = Sistem.MA(C, "Weighted", p/2);
var a = Sistem.Liste(0);
for (int i = 1; i < Sistem.BarSayisi; i++){
a[i]=2*MA2[i]-MA[i];
}
var Hm=Sistem.MA(a, "Weighted", k);
var hmR = Sistem.Ref(Hm, -5);//5 bar geriden takip
var SonYon="";
float Fiyat = 0.0f;
for (int i = 1; i < Sistem.BarSayisi; i++){
//Aktif barda işlem yapmak için aşağıdaki [i-1] leri [i] yapmanız gerekir
if (C[i-1] > Hm[i-1] && SonYon != "A") // AL
{
SonYon = Sistem.Yon[i] = "A"; // alış
//Fiyat = C[i];
}
if (C[i-1] < Hm[i-1] && SonYon != "S") // SAT
{
SonYon = Sistem.Yon[i] = "S"; // satış
//Fiyat = C[i];
}
}
Sistem.GetiriHesapla("01/01/2018", 0.00);
// hesaplanan verileri çizgilere aktar
Sistem.Cizgiler[0].Deger = Hm;
Sistem.Cizgiler[0].Aciklama = "Hull MA " + p;
Sistem.Cizgiler[1].Deger = MA;
Sistem.Cizgiler[1].Aciklama = "wMA " + p;
Sistem.Cizgiler[2].Deger = hmR;
Sistem.Cizgiler[3].Deger = Sistem.GetiriKZ;
//Strateji
//Sistem.KesismeTara(C,Hm);
Son düzenleme : sonli; 11-03-2019 saat: 00:16.
Biçare gönüller! Ne giden son gemidir bu!
Hicranlı hayatın ne de son matemidir bu.
Burada smoothed SMMA ve hull MA için ayrı periyotlar belirleyebilirsiniz..
Sadece Smoothed ile basit ortalama veya hull ile ağırlıklı ortalama kıyası faydalı olabiliyor..
Smooth basitten biraz daha yumuşak ve yavaş hareket ediyor..
Hull ise ağırlıklıya göre trende daha hızlı ayak uyduruyor..
PHP Code:
var p1 = 9;//smooth+basit periyodu
var p = 22;//hull+ağırlıklı periyodu
//Sistem.Mesaj("Sonuç: " + p );
var C = Sistem.GrafikFiyatSec("Kapanis");
var MA = Sistem.MA(C, "Simple", p1);
var wm = Sistem.MA(C, "Weighted", p);
var wm2 = Sistem.MA(C, "Weighted", p/2);
var a = Sistem.Liste(0);
var b = Sistem.Liste(0);
for (int i = 1; i < Sistem.BarSayisi; i++){
if (i==1) a[i]=MA[i];
else a[i]=((p1-1)*a[i-1]+C[i])/p1;
b[i]=2*wm2[i]-wm[i];
}
var k = Math.Floor(Math.Sqrt(p));
var Hm=Sistem.MA(b, "Weighted", k);//hull ma
// hesaplanan verileri çizgilere aktar
Sistem.Cizgiler[0].Deger = a;
Sistem.Cizgiler[0].Aciklama = "Smoothed " + p1;
Sistem.Cizgiler[1].Deger = MA;
Sistem.Cizgiler[1].Aciklama = "Simple MA " + p1;
Sistem.Cizgiler[2].Deger = wm;
Sistem.Cizgiler[2].Aciklama = "Weighted " + p;
Sistem.Cizgiler[3].Deger = Hm;
Sistem.Cizgiler[3].Aciklama = "Hull MA " + p;
Selam;
Geçen gördüm diye hatırlıyorum ama geriye dönük aradım bulamadım. (sanırım Sezai bey veya bear_bull hocam dı)
kendi kodlarımı robota bağlamak istiyorum. fakat "yon" ile denedim tabiki beceremedim
bu konuda komplex olmayan çözüm varmıdır?
Son düzenleme : netkit; 11-02-2019 saat: 15:31. Sebep: imla
Yer İmleri