Vade Geçişi İndikatörü: Aktif Viop Sözleşmelerinin Son günlerine ait barlarda 1 döndürür, diğer günlerde 0 döndürür.
Bunu kullanarak kendi stratejinizi uygulayabilirsiniz. gerçek durumla backtestler arasında fark oluşmaması için vade geçişlerini sistemlere uygulamak daha doğru olacaktır.
Yalın Hali
PHP Code:
//Vade Sonu İndikatörü------------------------------------------------------
//Aktif Viop Sözleşmelerinin Son günlerine ait barlarda 1 döndürür, diğer günlerde 0 döndürür.
var IndVadeSonu = Sistem.Liste(0);
for (int i = 2; i < V.Count; i++) {
DateTime BarTarih = V[i].Date; DateTime AyinSonGunu = new DateTime(BarTarih.AddMonths(1).Year, BarTarih.AddMonths(1).Month , 1).AddDays(-1);
if ((BarTarih.Month % 2) == 0 && BarTarih >= (AyinSonGunu.DayOfWeek == DayOfWeek.Sunday ? AyinSonGunu.AddDays(-2) : AyinSonGunu.DayOfWeek == DayOfWeek.Saturday ? AyinSonGunu.AddDays(-1) : AyinSonGunu))
IndVadeSonu[i] = 1; else IndVadeSonu[i] = 0;
}
//---------------------------------------------------------------------------
Sistem içerisinde kullanım örneği
PHP Code:
//Ayarlar
string VadeSonGunuFlatSaat="17:00"; //Vade Sonu Günü Flat olunacak Zaman
int IndikatorlerKacBardaToparliyor = 60; //Vade Sonu gününe içinde olan bardan kaç bar sonra devam edilsin.
//Veriler
var V = Sistem.GrafikVerileri;
var C = Sistem.GrafikFiyatOku(V, "Kapanis");
//İndikatörler
var MA1 = Sistem.MA(C, "Simple", 50);
var MA2 = Sistem.MA(C, "Simple", 220);
//Vade Geçişi İndikatörü------------------------------------------------------
//Aktif Viop Sözleşmelerinin Son günlerine ait barlarda 1 döndürür, diğer günlerde 0 döndürür.
var IndVadeSonu = Sistem.Liste(0);
for (int i = 2; i < V.Count; i++) {
DateTime BarTarih = V[i].Date; DateTime AyinSonGunu = new DateTime(BarTarih.AddMonths(1).Year, BarTarih.AddMonths(1).Month , 1).AddDays(-1);
if ((BarTarih.Month % 2) == 0 && BarTarih >= (AyinSonGunu.DayOfWeek == DayOfWeek.Sunday ? AyinSonGunu.AddDays(-2) : AyinSonGunu.DayOfWeek == DayOfWeek.Saturday ? AyinSonGunu.AddDays(-1) : AyinSonGunu))
IndVadeSonu[i] = 1; else IndVadeSonu[i] = 0;
}
//---------------------------------------------------------------------------
var VadeSonuHHV = Sistem.HHV(IndikatorlerKacBardaToparliyor, IndVadeSonu );
//Çizgiler
Sistem.Cizgiler[0].Deger = IndVadeSonu; Sistem.Cizgiler[0].Panel=2; Sistem.Cizgiler[0].Aciklama="IndVadeSonu"; Sistem.Cizgiler[0].Stil=5;
//Değişkenler
var SonYon = "";
bool VadeSonuNedeniyleFlat = false;
//Yön Kalıbı
for (int i = 300; i < V.Count; i++)
{
//Yeni Vadenin ilk gününde ise ve İndikatörler topladı ise FLAT dan çıkış için değişkeni false yap.
if(VadeSonuNedeniyleFlat && IndVadeSonu[i-1]==0 && VadeSonuHHV[i-1]==0) VadeSonuNedeniyleFlat=false;
//Vade Sonu Stratejisi
//Vade Son Günü ise ve belirlenen saat geçti ise FLAT
if( IndVadeSonu[i-1]==1 && V[i].Date.TimeOfDay >= TimeSpan.Parse(VadeSonGunuFlatSaat) ) {VadeSonuNedeniyleFlat=true; if (SonYon!= "F") {Sistem.Yon[i] = SonYon = "F";}}
//İndikatörler Toprlamadı ise İşlem yok
else if(VadeSonuNedeniyleFlat) { }
//Normal Strateji
else if ( SonYon!= "A" && MA1[i] > MA2[i] ) { Sistem.Yon[i] = SonYon = "A"; }
else if ( SonYon!= "S" && MA1[i] < MA2[i] ) { Sistem.Yon[i] = SonYon = "S"; }
}
Yukarıdaki sistemin görüntüsü
Yer İmleri