Vade Geçişi Maskesi(Özel Tatil İstisnası Destekli): Sisteminizde hiç bir düzenleme yapmadan vade geçişini otomatikleştirmeye yarar.
Test edilmemiştir.
Haftasonu kontrolü zaten vardı, çağlar beyin bahsettiği hem yarım gün hemde farklı tam günlerde istisna olarak tanımlanabilir yapılmıştır.
istisna örneği 31.08.2017 de 1 dk grafikte 12:00 da flata geçtiği kontrol edilebilir.
PHP Code:
//Ayarlar
bool MaskeVar = true; // false ise sizin sistem, true ise Düşen Kar Maskesi Aktif.
var GrafikSistemAd= "A1"; // Sisteminizin adını yazın.
string VadeSonGunuFlatSaat="17:00"; //Vade Sonu Günü Flat olunacak Zaman (saat periyotla uyumlu olmasada doğru çalışır.)
int IndikatorlerKacBardaToparliyor = 60; //Vade Sonu gününe içinde olan bardan kaç bar sonra devam edilsin.
var IstisnaFlatTarihSaatleri = new List<string>(new string[]{ "31.08.2017 12:00" }); //Özel Tatillerdeki Flat zamanlarıdır. Araya virgül koyarak dilediğiniz kadar ekleyebilirsiniz. BackTest açısından eski istisnalarda durmalıdır. (saat periyotla uyumlu olmaz ise HATALI çalışır. tarihler dd.MM.yyyy HH:mm formatında eklenmelidir.)
//Veriler
var V = Sistem.GrafikVerileri;
var C = Sistem.GrafikFiyatOku(V, "Kapanis");
//Sistem Getir
var GrafikSistem = Sistem.SistemGetir(GrafikSistemAd, Sistem.Sembol, Sistem.Periyot);
var Yonler = GrafikSistem.Yon;
var Seviyeler = GrafikSistem.Seviye;
//İndikatörler
//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;
for (int k = 0; k < IstisnaFlatTarihSaatleri.Count; k++) { if(V[i].Date.ToString("dd.MM.yyyy")==IstisnaFlatTarihSaatleri[k]) IndVadeSonu[i] = 1; }
}
//---------------------------------------------------------------------------
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 = "";
string GercekSonYon="";
bool VadeSonuNedeniyleFlat = false;
//Yön Kalıbı
for (int i = 300; i < V.Count; i++)
{
//Sistemde Yön var ise GercekSonYon'e ata.
if( Yonler[i] != "") GercekSonYon=Yonler[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;
bool VadeSonuFlatZaman = false;
if(MaskeVar)
{
VadeSonuFlatZaman = V[i].Date.TimeOfDay >= TimeSpan.Parse(VadeSonGunuFlatSaat); //Normal Kontrol
for (int k = 0; k < IstisnaFlatTarihSaatleri.Count; k++) { if( V[i].Date.ToString("dd.MM.yyyy HH:mm") == IstisnaFlatTarihSaatleri[k] ) VadeSonuFlatZaman = true; } //İstisna Kontrol
}
//Vade Sonu Stratejisi
//Vade Son Günü ise ve belirlenen saat geçti ise FLAT
if( MaskeVar && IndVadeSonu[i-1]==1 && VadeSonuFlatZaman) {VadeSonuNedeniyleFlat=true; if (SonYon!= "F") {Sistem.Yon[i] = SonYon = "F";}}
//İndikatörler Toprlamadı ise İşlem yok
else if(MaskeVar && VadeSonuNedeniyleFlat) { }
//Gerçek Sinyal: SonYon ile GercekSonYon aynı değil ise
else if( SonYon != GercekSonYon )
{
SonYon = GercekSonYon;
Sistem.Yon[i] = GercekSonYon;
if(Seviyeler[i]!=null) Sistem.Seviye[i] = Seviyeler[i];
}
}