|
|
Aşağıdaki sistemle ilgili, ortalamanın kesişiminden çıkan alış ve satış sinyalini bir bar onceden nasıl verdirebilirim?
// kapanış fiyatlarını oku
var C = Sistem.GrafikFiyatSec("Kapanis");
var H = Sistem.GrafikFiyatSec("Yuksek");
var L = Sistem.GrafikFiyatSec("Dusuk");
// hareketli ortalamaları hesapla
var MA1 = Sistem.MA(C, "Exp", 50);
var MA2 = Sistem.MA(C, "Exp", 100);
// strateji
var SonYon = "";
double Fiyat = 0;
var IslemBarNo = 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];
IslemBarNo = 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];
IslemBarNo = i;
}
else if (SonYon == "S") // satış pozisyonundayken FLAT
{
var LimitBarNo = 0;
var Seviye = 0.0;
for (int k = IslemBarNo; k < i; k++)
{
if (Fiyat - L[k] > 5)
{
if (Seviye == 0 || Seviye > L[k])
{
LimitBarNo = k;
Seviye = L[k];
}
}
}
if (LimitBarNo > 0)
{
if (C[i] - Seviye > 3)
{
Sistem.Yon[i] = "F"; // flat
SonYon = Sistem.Yon[i];
}
}
}
else if (SonYon == "A") // alış pozisyonundayken FLAT
{
var LimitBarNo = 0;
var Seviye = 0.0;
for (int k = IslemBarNo; k < i; k++)
{
if (H[k] - Fiyat > 5)
{
if (Seviye == 0 || Seviye < H[k])
{
LimitBarNo = k;
Seviye = H[k];
}
}
}
if (LimitBarNo > 0)
{
if (Seviye - C[i] > 3)
{
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;
yazınızda for döngüsü için resimde açıklaması yazılmış orası işinize yaramaz.
5000 bar varsa toplamda.
oraya 4500 dersiniz sistem son 500 bar için sinyal arar çok eski datalar ile uğraşmaz.
if (MA1[i-1] < MA2[i-1] && MA1[i] >= MA2[i] && SonYon != "A") // AL
bu yukarıdakini ise aşağıdaki gibi değiştirirseniz 1 bar geriye değil üstüne 1 bar daha sinyali geciktirmiş olursunuz.
MA1[i-2] < MA2[i-2] && MA1[i] >= MA2[i]
evet ben sinyali erkene almak istediğimden imkansızı istemiş oluyorum ozaman.
çok uzuldum
şunları denedim belki yaparım diye yine olmadı...
// parametreleri al
var Yontem = Sistem.Parametreler[0];
var Periyot1 = Sistem.Parametreler[1];
var Periyot2 = Sistem.Parametreler[2];
// kapanış fiyatlarını oku
var Veriler = Sistem.GrafikFiyatSec("Kapanis");
var Prev1 = Sistem.OncekiKapanisGun("MA1");
var Prev2 = Sistem.OncekiKapanisGun("MA2");
// hareketli ortalamaları hesapla
var MA1 = Sistem.MA(Veriler, Yontem, Periyot1);
var MA2 = Sistem.MA(Veriler, Yontem, Periyot2);
// hesaplanan verileri çizgilere aktar ve açıklama ekle
Sistem.Cizgiler[0].Deger = MA1;
Sistem.Cizgiler[0].Aciklama = "MA " + Periyot1;
Sistem.Cizgiler[1].Deger = MA2;
Sistem.Cizgiler[1].Aciklama = "MA " + Periyot2;
// strateji
for (int i = 2; i<Sistem.BarSayisi; i++)
{
Prev1 = MA1[i-1];
Prev2 = MA2[i-1];
if (MA1[i-1] < MA2[i-1] && MA1[i] > MA2[i])
Sistem.Yon[i] = "A"; // alış
if (MA1[i-1] > MA2[i-1] && MA1[i] < MA2[i]) // 1.ortalama 2.ortalamanın altına inerse
Sistem.Yon[i] = "F"; // satış
}
oysaki sinyali bir bar one ceksem çok harika olacaktı ya
|
|
Sayin @Bear_Bull
MA5 ve MA22 kesisimli olan bir sistemde,
5-22 kesisiminde al veren ve sati sadece hisse senedi degeri MA22 yi asagi kesince sat veren bir sistem yapilabilir mi?
Satis kismina
If (sonfiyat[i-1]>MA2 )
Seklinde mi olur?
hisse.net kullanarak iPhone aracılığıyla gönderildi
Yer İmleri