Şablon Sezai bey'de var üstat, müsait bir zamanda paylaşacaktır. (en geç salı günü)
Printable View
Düşen Kar Maskesi: KZ belirlenen dilimi aşağı keserse Flat, yukarı keserse sisteminizin sinyali.
Detaylı kontrol edilmedi. Test etmelisiniz.
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. GetiriHesapla içermelidir.
int KzSeviyeMod=5; // KZ al-sat çizgisi adımı.
//Veriler
var V = Sistem.GrafikVerileri;
var O = Sistem.GrafikFiyatSec("Açılış");
//Sistem Getir
var GrafikSistem = Sistem.SistemGetir(GrafikSistemAd, Sistem.Sembol, Sistem.Periyot);
var Yonler = GrafikSistem.Yon;
var Seviyeler = GrafikSistem.Seviye;
var GetiriList = GrafikSistem.GetiriKZ;
//Değişkenler
string SonYon="F";
string GercekSonYon="";
bool AksamFlatIslemde=false;
float MaxKZ=0;
//Maske Listesi
var MaskeList = Sistem.Liste(0);
var Maske = 1;
for (int i = 1; i < V.Count; i++)
{
var SonGetiri=GetiriList[i];
var OncekiGetiri=GetiriList[i-1];
MaxKZ = Math.Max(MaxKZ,SonGetiri);
for (int j = 0; j < Math.Round(GetiriList[i] /KzSeviyeMod)+3; j++)
{
var jSeviye=j*KzSeviyeMod;
if (OncekiGetiri > jSeviye && SonGetiri <= jSeviye )
{
Maske = 0;
break;
}
if (OncekiGetiri < jSeviye && SonGetiri >= jSeviye )
{
Maske = 1;
break;
}
}
MaskeList[i] = Maske;
}
//Çizgiler
Sistem.Cizgiler[0].Deger = GetiriList;
var RenkListesi = new List<Color>();
for (int i = 0; i < Sistem.BarSayisi; i++) RenkListesi.Add(Color.Gray);
for (int i = 1; i < V.Count; i++)
{
if (MaskeList[i] == 0) RenkListesi[i] = Color.Gray;
else if (MaskeList[i] == 1) RenkListesi[i] = Color.Cyan;
}
Sistem.Cizgiler[0].RenkListesi = RenkListesi;
//KZ Seviye Çizgileri(Sadece görsellik için, algoyu etkilemez, son Kz ye yakın 10 çizgi.)
if(MaskeVar )
{
var SeviyeCizgiCounter=10;
for (var i =Math.Round(MaxKZ/KzSeviyeMod)+3 -10 ; i < Math.Round(MaxKZ/KzSeviyeMod)+3 ; i++)
{
SeviyeCizgiCounter+=1;
Sistem.Cizgiler[SeviyeCizgiCounter].ActiveBool = true;
Sistem.Cizgiler[SeviyeCizgiCounter].Deger = Sistem.Liste(i*KzSeviyeMod);
Sistem.Cizgiler[SeviyeCizgiCounter].Panel = 2;
Sistem.Cizgiler[SeviyeCizgiCounter].Renk = Color.IndianRed;
Sistem.Cizgiler[SeviyeCizgiCounter].Stil = 2;
}
}
//Yön Kalıbı
for (int i = 1 ; i < Yonler.Count; i++)
{
//Sistemde Yön var ise GercekSonYon'e ata.
if( Yonler[i] != "") GercekSonYon=Yonler[i];
//Akşam Flat: Maske aktif ise ve bir KZ dilimini aşağı kesti ise
if ( MaskeVar && MaskeList[i]==0 )
{
//Zaten Flat'da ise İşlem Yok.
if(SonYon != "F")
{
SonYon = "F";
Sistem.Yon[i] = "F";
}
}
//Gerçek Sinyal: Gerçek sistemde Yön var ise ve 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];
}
}
Orhan hoca seni eskiden tanimiyoruz galiba kod bilgin saglam sakincasi yoksa tanisalim
hocam tesekkurler kodlama acaisindan ogretici. denedim max dd yi ciddi dusurdu.
vpslerde genlde hizli islem yapilmasi icin 10 bin veya daha az bar tutulmasindan dolayi getiri egrisinin degiskenligi, bu tip bir stratejinin sikintilariydi diye hatirliyorum. kodda buna yonelik bir duzenleme yok sanirim.
erhan hocam bi kac kez buna dair seylerden yakinmisti, gerci o zaman toma ile filtreliyordu diye aklimda kalmisti.
kz değişimi bar atlaması nedeniyle oluyorsa dediğiniz gibi bu bir sorun olacaktır.
getiri hesapla tarihinin bar sayısı sınırını ihlal etmeyecek şekilde içeride kalması gerekir.buna uyularak her haftasonu modX i etkilmeyecek bir tarihe çekilebilir. bunu kodla da yapmak mümkün.
toma alternatif olarak daha da iyi bir yöntem olabilir.
örnek geliştirmeye açık.
Kz egrisindeki cizgiyi wps ile esitlemeniz lazim vwriler kaydiginda egri degeri degisecegi icin cizgide degisir