Bu kodda bazı sıkıntılar vardı, biraz düzenledim.. Yaptığı iş:
* m1, m2 yi yukarı kestikten sonraki bar alacak; ancak onun bir öncesine de bakacak ki, m1>m2 iken flat olmuşsa hemen yeniden almasın ******Bu da robotta kullanmaya kalktığınızda şöyle bir risk doğurur: Aldınız ve 2. bar stop oldu ama ortalama aşağı kesmedi..Sonra hisse aldı yürüdü, sizin robot arkadan bakar..Grafiklerde epey sık olan bir şey; önce ortalama yukarı kesiyor, fiyat ortalamaların altına inip ortalamaları aşağı kesiştirmeden basıyor yukarı..*** Bu arada, robot kullanmıyorum, sadece mantık yürütüyorum!!Yani robota çevirmeye niyetlenirseniz bir sürü olasılığı test etmelisiniz..
* aldığı barın düşüğünden belirlediğin yüzde kadar aşağısını stop olarak belirleyip, her yeni yüksekte bu stop şartını gerekiyorsa güncelleyecek. Gerekiyorsadan kastım, yeni stop eskisinden yüksek mi?
PHP Code:
int p1=10; //ma kısa periyot
int p2=20; //ma uzun
var C = Sistem.GrafikFiyatSec("Kapanis");
var L = Sistem.GrafikFiyatSec("Düsük");
var H = Sistem.GrafikFiyatSec("Yüksek");
var X = Sistem.SonFiyat(Sistem.Sembol);
var m1 = Sistem.MA(p1, "Exp", "Kapanis");
var m2 = Sistem.MA(p2, "Exp", "Kapanis");
var SonYon = "";
//float StopPuan = 0.15f;//15 kuruş, Puanı kendiniz belirleyebilirsiniz,
//puan kullanmak istiyorsanız aşağıdaki satırın önüne // koyup, yukarıdakinin önündekileri kaldırın
//hisseye özel kullanımda puan olur ama genel için % uygun; aselsan 15 kuruş %1 bile yapmazken zoren de %15 eder
float StopPuan = 0.015f*X;//0.015 = %1.5 ; son fiyatın % kadar puan kullan
float SonStop = 0f;
var IzleyenStop = Sistem.Liste(0);
//son 1000 bar baksın, performans için
for (int i = Sistem.BarSayisi-1000; i < Sistem.BarSayisi; i++) {
//alışta değilse, bir önceki bar m1 > m2 ve ondan önceki barda da m1<m2 mi? aksi durumda m1>m2 iken flat olursa hemen yine alır..
if ( m1[i-1]>m2[i-1] && m1[i-2]<m2[i-2] && SonYon!="A")
{
SonYon = Sistem.Yon[i] = "A";
SonStop = L[i] - StopPuan; //Alışın gerçekleşmesiyle stopu belirledik
IzleyenStop[i] = SonStop;
}
if ( SonYon =="A") {
if (H[i] > H[i-1] && (L[i]-StopPuan)>SonStop ) { //Yeni yüksek var ve potansiyel stop eski stoptan yüksekse..
SonStop = L[i] - StopPuan; //Stop güncellenir
IzleyenStop[i] = SonStop;
} else IzleyenStop[i] = SonStop; //Stop seviyesi değişmez
if (C[i] < IzleyenStop[i-1]) //Stop altında kapatırsa
{
SonYon = Sistem.Yon[i] = "F"; // yön flate döner
//IzleyenStop[i] = H[i-1]; //flat olduğunda görsel açıdan - sistem etkisi yok - stop yukarı atsın istiyorsan bu satırın başındaki // kaldır
}
//alışta son
} else IzleyenStop[i] = IzleyenStop[i-1]; //Burayı sadece sonstop seviyelerini grafikte görebilmeniz için yazdım
//for son
}
Sistem.Cizgiler[0].Deger = IzleyenStop;
Sistem.Cizgiler[1].Deger = m1;
Sistem.Cizgiler[2].Deger = m2;
Bu da idealin içinde geliyor diye hatırlıyorum ama Sistem_Stop_Take_MA, gelmiyorsa da sabit rakamlarla kar al - zarar durdur..
PHP Code:
//%5 Kar Al, %2 Zarar durdur sistem örneği.
// kapanış fiyatlarını oku
var C = Sistem.GrafikFiyatSec("Kapanis");
// hareketli ortalamaları hesapla
var MA1 = Sistem.MA(C, "Exp", 50);
var MA2 = Sistem.MA(C, "Exp", 100);
// strateji
var SonYon = "";
double Fiyat = 0;
for (int i = 1; i<Sistem.BarSayisi; i++)
{
if (MA1[i-1] < MA2[i-1] && MA1[i] >= MA2[i] && SonYon != "A") // AL
{
Sistem.Yon[i] = "A"; // alış
SonYon = Sistem.Yon[i];
Fiyat = C[i];
}
else if (MA1[i-1] > MA2[i-1] && MA1[i] <= MA2[i] && SonYon != "S") // SAT
{
Sistem.Yon[i] = "S"; // satış
SonYon = Sistem.Yon[i];
Fiyat = C[i];
}
else if (SonYon == "A" && C[i] > Fiyat * 1.05) // % 5 kar realizasyonu
{
Sistem.Yon[i] = "F"; // flat
SonYon = Sistem.Yon[i];
}
else if (SonYon == "A" && C[i] < Fiyat * 0.98) // % 2 stop
{
Sistem.Yon[i] = "F"; // flat
SonYon = Sistem.Yon[i];
}
else if (SonYon == "S" && C[i] < Fiyat * 0.95) // % 5 kar realizasyonu
{
Sistem.Yon[i] = "F"; // flat
SonYon = Sistem.Yon[i];
}
else if (SonYon == "S" && C[i] > Fiyat * 1.02) // % 2 stop
{
Sistem.Yon[i] = "F"; // flat
SonYon = Sistem.Yon[i];
}
}
// hesaplanan verileri çizgilere aktar ve açıklama ekle
Sistem.Cizgiler[0].Deger = MA1;
Sistem.Cizgiler[1].Deger = MA2;
Yer İmleri