Düşen Kar Maskesi(Değişmeyen KZ): 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= "T3v2"; // Sisteminizin adını yazın.GetiriHesapla içermelidir.
int KzSeviyeMod=5; // KZ al-sat çizgisi adımı.
var KarBiriktirenSembolPeriyot = "VIP'VIP-X030"+"1"; //Sistem başka sembollerde açıldığında robotun takip ettiği kar değerleri bozulmasın diye gerekli.
//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;
double DevirKZ=0;
//Devreden Kar Hesaplamaları
var RefGetiri1000= GetiriList[1000];
var RefGetiri999= GetiriList[999];
if(Sistem.Parametreler[8]=="") //Kaydedilmiş İlk Bar Tarihi Boş ise
{
Sistem.Parametreler[9] = "0"; //Devir KZ 0 kabul et. Elle değiştirebilir devir rakamı.
Sistem.Parametreler[10] = RefGetiri1000.ToString("0.####"); //Referans Getiriyi Yaz
}
if( V[0].Date.ToString("dd.MM.yyyy HH:mm") != Sistem.Parametreler[10]
&& (Sistem.Sembol + Sistem.Periyot)==KarBiriktirenSembolPeriyot
) //Robotun Sembolünde ise ve İlkBar Değişti ise
{
Sistem.Parametreler[8] = V[0].Date.ToString("dd.MM.yyyy HH:mm"); //Yeni ilk barın Tarihini yaz.
DevirKZ = Convert.ToDouble(Sistem.Parametreler[9]) + // DevirKZ
+Convert.ToDouble( Sistem.Parametreler[10] ) - RefGetiri999;
Sistem.Parametreler[9] = DevirKZ.ToString("0.####");
Sistem.Parametreler[10] = RefGetiri1000.ToString("0.####");
}
var YeniGetiriList = Sistem.Liste(0);
for (int i = 0; i < GetiriList.Count; i++){YeniGetiriList[i] = (float)DevirKZ + GetiriList[i];}
//Maske Listesi
var MaskeList = Sistem.Liste(0);
var Maske = 1;
for (int i = 1; i < V.Count; i++)
{
var SonGetiri=YeniGetiriList[i];
var OncekiGetiri=YeniGetiriList[i-1];
MaxKZ = Math.Max(MaxKZ,SonGetiri);
for (int j = 0; j < Math.Round(SonGetiri /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 = YeniGetiriList;
var RenkListesi = new List<Color>();
for (int i = 0; i < V.Count; i++) RenkListesi.Add(Color.Gray);
for (int i = 0; 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: 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];
}
}
//Test Kodu Bar Sayısını 1 eksilttiğinizde KZ değişmiyorsa olmuş demektir.
//Sistem.Mesaj("SonKZ: "+ YeniGetiriList[YeniGetiriList.Count-1].ToString("0.####"));
Yer İmleri