Skip to content

Instantly share code, notes, and snippets.

Created December 15, 2016 20:15
Show Gist options
  • Select an option

  • Save anonymous/998ae6fdf4ebd874178bdc2d1338e3ef to your computer and use it in GitHub Desktop.

Select an option

Save anonymous/998ae6fdf4ebd874178bdc2d1338e3ef to your computer and use it in GitHub Desktop.

Revisions

  1. @invalid-email-address Anonymous created this gist Dec 15, 2016.
    260 changes: 260 additions & 0 deletions teco_spike v2.cs
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,260 @@
    /*********
    * This Gist was created at CSharpPad.com
    * To run this file, open http://csharppad.com/gist/76a68d8c2927ad66154416889e898935
    **********/

    DateTime Bugun_Tarih = DateTime.Today;
    //DateTime Bugun_Tarih = DateTime.Today.AddDays(-1);

    int Gunluk_Bar_Sayisi;
    float Toplam_Gunluk_Hacim;
    float Toplam_Gunluk_Hacmin_2_Kati;
    float Ortalama_Gunluk_Hacim;
    int Gunluk_Hacim_Kontrol;
    float Son_Bes_Dakika_Hacim;
    int Bes_Dakikalik_Hacim_Kontrol;
    float Toplam_Derinlik_Alis_Hacim;
    int Derinlik_Alis_Hacim_Kontrol;
    float Son_Bes_Dakika_En_Dusuk;
    float Son_Dort_Dakika_En_Yuksek;
    float Son_Bir_Dakika_En_Yuksek;
    float Son_Bes_Dakika_En_Yuksek;
    float Gunluk_Spike_Hacim;
    float Onceki_Gun_Kapanis;
    float Onceki_Gun_Yuksek;
    float Fiyat_Artis_Farki;
    float Gunluk_Dusuk_Fiyat;
    float Guncel_Alis_Fiyati;
    float Guncel_Satis_Fiyati;
    float Fiyat_Adimi;
    float Bekleyen_Alis_Emirleri_Toplami;
    float Bekleyen_Alis_Emirleri_Agirlikli_Ortalama;
    float Ortalama_Gunluk_Hacim_Katsayisi;

    /*
    List<string[]> hisseler = new List<string[]>();
    hisseler.Add(new string[] {"OTOKAR", "A"});
    hisseler.Add(new string[] {"GARAN", "B"});
    */

    var liste = Sistem.YuzeyselListeGetir("IMKBH'"); //tüm IMKB hisselerinin listesi

    for (int h = 0 ; h <= liste.Count-1; h+=1)
    {

    Gunluk_Bar_Sayisi = 0;
    Toplam_Gunluk_Hacim = 0;
    Gunluk_Hacim_Kontrol = 0;
    Son_Bes_Dakika_Hacim = 0;
    Bes_Dakikalik_Hacim_Kontrol = 0;
    Toplam_Derinlik_Alis_Hacim = 0;
    Derinlik_Alis_Hacim_Kontrol = 0;
    Gunluk_Spike_Hacim = 0;
    Onceki_Gun_Kapanis = 0;
    Onceki_Gun_Yuksek = 0;
    Fiyat_Artis_Farki = 0;
    Gunluk_Dusuk_Fiyat = 0;
    Guncel_Alis_Fiyati = 0;
    Guncel_Satis_Fiyati = 0;
    Fiyat_Adimi = 0;
    Bekleyen_Alis_Emirleri_Toplami = 0;
    Bekleyen_Alis_Emirleri_Agirlikli_Ortalama = 0;
    Ortalama_Gunluk_Hacim_Katsayisi = 0;

    var Sembol = "IMKBH'"+liste[h].Root.Split('-')[0]; //tum IMKB hisse senetlerinin listesi alınıyor

    var Pozisyon = Sistem.PozisyonKontrolOku(Sistem.Name + Sembol);
    if ( Pozisyon > 0 ) {continue;} //elde zaten bu hisse varsa devam et

    var Yuzeysel_Veriler = Sistem.YuzeyselVeriOku(Sembol);
    if ( Yuzeysel_Veriler.Grup != "A" && Yuzeysel_Veriler.Grup != "B" ) {continue;} //sadece A ve B grubundaki hisseler için işlem başlıyor

    //Sistem.Debug(Sembol + " Hisse Grubu = " + Yuzeysel_Veriler.Grup.ToString());

    var Gunluk_Grafik = Sistem.GrafikVerileriniOku(Sembol,"G");
    if (Gunluk_Grafik.Count-1 < 250) { continue; } //Günlük grafik listesinde 250'den az veri varsa geç

    int Gunluk_Grafik_Max_Veri = Gunluk_Grafik.Count-1;
    if (Gunluk_Grafik[Gunluk_Grafik_Max_Veri].Date != Bugun_Tarih) { continue; } //son veri bugüne ait değilse geç

    Onceki_Gun_Kapanis = Yuzeysel_Veriler.PrevCloseDay;
    Onceki_Gun_Yuksek = Gunluk_Grafik[Gunluk_Grafik_Max_Veri-1].High;
    Gunluk_Dusuk_Fiyat = Yuzeysel_Veriler.LowDay;
    Guncel_Alis_Fiyati = Yuzeysel_Veriler.BidPrice;
    Guncel_Satis_Fiyati = Yuzeysel_Veriler.AskPrice;
    Fiyat_Adimi = Yuzeysel_Veriler.AskPrice - Yuzeysel_Veriler.BidPrice;

    if (Gunluk_Dusuk_Fiyat-Fiyat_Adimi > Onceki_Gun_Yuksek) { continue; } //günlükte gap varsa geç

    Fiyat_Artis_Farki = Fiyat_Adimi * 2;

    /*
    if (Onceki_Gun_Kapanis <= 5f)
    { Fiyat_Artis_Farki = 0.02f; }
    else if (Onceki_Gun_Kapanis <= 10f)
    { Fiyat_Artis_Farki = 0.04f; }
    else if (Onceki_Gun_Kapanis <= 20f)
    { Fiyat_Artis_Farki = 0.08f; }
    else if (Onceki_Gun_Kapanis <= 50f)
    { Fiyat_Artis_Farki = 0.16f; }
    else if (Onceki_Gun_Kapanis <= 100f)
    { Fiyat_Artis_Farki = 0.32f; }
    else if (Onceki_Gun_Kapanis <= 200f)
    { Fiyat_Artis_Farki = 0.64f; }
    else if (Onceki_Gun_Kapanis <= 500f)
    { Fiyat_Artis_Farki = 1.28f; }
    else if (Onceki_Gun_Kapanis <= 1000f)
    { Fiyat_Artis_Farki = 2.56f; }
    */

    for (int i = 0 ; i <= Gunluk_Grafik_Max_Veri; i++)
    {
    if(Gunluk_Grafik[i].Date >= Gunluk_Grafik[Gunluk_Grafik_Max_Veri].Date.AddYears(-1)) //son 1 yıl
    {
    Toplam_Gunluk_Hacim += Gunluk_Grafik[i].Vol;
    Gunluk_Bar_Sayisi++;
    }
    }

    Ortalama_Gunluk_Hacim = (Toplam_Gunluk_Hacim / Gunluk_Bar_Sayisi);
    Toplam_Gunluk_Hacmin_2_Kati = Ortalama_Gunluk_Hacim * 2;

    Gunluk_Bar_Sayisi = 0;
    Toplam_Gunluk_Hacim = 0;

    for (int i = 0 ; i <= Gunluk_Grafik_Max_Veri; i++)
    {
    if(Gunluk_Grafik[i].Date >= Gunluk_Grafik[Gunluk_Grafik_Max_Veri].Date.AddYears(-1) && Gunluk_Grafik[i].Vol < Toplam_Gunluk_Hacmin_2_Kati)
    {
    Toplam_Gunluk_Hacim += Gunluk_Grafik[i].Vol;
    Gunluk_Bar_Sayisi++;
    }
    }

    Ortalama_Gunluk_Hacim = (Toplam_Gunluk_Hacim / Gunluk_Bar_Sayisi);
    Toplam_Gunluk_Hacmin_2_Kati = Ortalama_Gunluk_Hacim * 2;

    for (int i = Gunluk_Grafik_Max_Veri-10 ; i<=Gunluk_Grafik_Max_Veri; i++) //son 11 gün içinde günlük volume spike (ortalama günlük hacim x 2) hacim var mı?
    {
    if(Gunluk_Grafik[i].Vol >= Toplam_Gunluk_Hacmin_2_Kati)
    {
    Gunluk_Hacim_Kontrol = 1;
    Gunluk_Spike_Hacim = Gunluk_Grafik[i].Vol;
    break;
    }
    }

    if(Gunluk_Hacim_Kontrol == 1)
    {

    Son_Bes_Dakika_En_Dusuk = 0;
    Son_Bes_Dakika_En_Yuksek = 0;
    Son_Bir_Dakika_En_Yuksek = 0;
    Son_Dort_Dakika_En_Yuksek = 0;

    var Bir_Dakikalik_Grafik = Sistem.GrafikVerileriniOku(Sembol,"1");
    int Bir_Dakikalik_Grafik_Max_Veri = Bir_Dakikalik_Grafik.Count-1;

    for (int d = Bir_Dakikalik_Grafik_Max_Veri-4 ; d <= Bir_Dakikalik_Grafik_Max_Veri; d++) //son 5 dakika içinde günlük volume spike (gunluk ortalama / 5) hacim var mı?
    {
    //aynı gün içindeki son 5 dakika toplam hacim
    if ( Bir_Dakikalik_Grafik[d].Date.Date == Bugun_Tarih.Date )
    {
    Son_Bes_Dakika_Hacim += Bir_Dakikalik_Grafik[d].Vol;
    }

    //son dakika hariç son 5 dakikada gördüğü en yüksek
    //if ( d != Bir_Dakikalik_Grafik_Max_Veri )
    //{
    // if ( Bir_Dakikalik_Grafik[d].High > Son_Dort_Dakika_En_Yuksek ) { Son_Dort_Dakika_En_Yuksek = Bir_Dakikalik_Grafik[d].High; }


    //}

    if ( d == Bir_Dakikalik_Grafik_Max_Veri-4 )
    {
    Son_Dort_Dakika_En_Yuksek = Bir_Dakikalik_Grafik[d].High;
    }

    //son dakika en yüksek
    if ( d == Bir_Dakikalik_Grafik_Max_Veri )
    {
    Son_Bir_Dakika_En_Yuksek = Bir_Dakikalik_Grafik[d].High;
    }
    }

    //Sistem.Debug(Sembol + " En Düşük = " + Son_Bes_Dakika_En_Dusuk.ToString());
    //Sistem.Debug(Sembol + " En Yüksek = " + Son_Bes_Dakika_En_Yuksek.ToString());

    if (Ortalama_Gunluk_Hacim <= 0200000)
    { Ortalama_Gunluk_Hacim_Katsayisi = 2.0f; }
    else if (Ortalama_Gunluk_Hacim <= 1000000)
    { Ortalama_Gunluk_Hacim_Katsayisi = 1.0f; }
    else if (Ortalama_Gunluk_Hacim <= 2000000)
    { Ortalama_Gunluk_Hacim_Katsayisi = 0.5f; }
    else if (Ortalama_Gunluk_Hacim <= 5000000)
    { Ortalama_Gunluk_Hacim_Katsayisi = 0.4f; }
    else if (Ortalama_Gunluk_Hacim <= 10000000)
    { Ortalama_Gunluk_Hacim_Katsayisi = 0.3f; }
    else
    { Ortalama_Gunluk_Hacim_Katsayisi = 0.2f; }

    //son 5 dakikada ortalama günlük hacmin 5'de biri ve son dakika en yüksek > son 4 dakika en yüksek
    if( (Son_Bes_Dakika_Hacim >= Ortalama_Gunluk_Hacim * Ortalama_Gunluk_Hacim_Katsayisi) && ( (Son_Bir_Dakika_En_Yuksek - Son_Dort_Dakika_En_Yuksek) >= Fiyat_Artis_Farki ) )
    {
    Bes_Dakikalik_Hacim_Kontrol = 1;
    }

    if(Bes_Dakikalik_Hacim_Kontrol == 1)
    {

    /*
    var Derinlik = Sistem.DerinlikVerisiOku(Sembol);
    for (int k=0 ; k < 10 ; k++) //10 alış kademesindeki toplam bekleyen hacim
    { Toplam_Derinlik_Alis_Hacim += Derinlik.Bids[k].Size * Derinlik.Bids[k].Price;}
    if(Toplam_Derinlik_Alis_Hacim >= 250000) //toplam alış derinliği 250bin ve üzerindeyse
    { Derinlik_Alis_Hacim_Kontrol = 1;}
    */

    Toplam_Derinlik_Alis_Hacim = Bekleyen_Alis_Emirleri_Toplami * Bekleyen_Alis_Emirleri_Agirlikli_Ortalama;

    if(Toplam_Derinlik_Alis_Hacim >= 500000) //toplam alış derinliği 500bin ve üzerindeyse
    { Derinlik_Alis_Hacim_Kontrol = 1;}

    if (Derinlik_Alis_Hacim_Kontrol == 1)
    {

    Sistem.ZamanKontrolGuncelle(Sembol);
    var Miktar = 1;
    Sistem.EmirSembol = Sembol;
    Sistem.EmirIslem = "Alış";
    Sistem.EmirMiktari = Miktar;
    Sistem.EmirFiyati = Guncel_Satis_Fiyati; // aktif fiyat
    Sistem.EmirSuresi = "SEANS"; // SEANS, GUN
    Sistem.EmirTipi = "NORMAL"; // NORMAL, KIE, KPY, AFE/KAFE
    Sistem.EmirGonder();
    Sistem.PozisyonKontrolGuncelle(Sistem.Name + Sembol,Pozisyon + Miktar);

    var Mesaj =
    "\r\n" + "Sembol = " + Sembol.ToString()
    + "\r\n" + "Ortalama Günlük Hacim = " + Ortalama_Gunluk_Hacim.ToString("f")
    + "\r\n" + "Son 5 Dakika Hacim = " + Son_Bes_Dakika_Hacim.ToString("f")
    + "\r\n" + "5 Dakika Önceki En Yüksek = " + Son_Dort_Dakika_En_Yuksek.ToString()
    + "\r\n" + "Son Dakika En Yüksek = " + Son_Bir_Dakika_En_Yuksek.ToString()
    + "\r\n" + "Toplam Derinlik Alış Hacim = " + Toplam_Derinlik_Alis_Hacim.ToString("f")
    + "\r\n" + "Günlük Hacim Spike = " + Gunluk_Spike_Hacim.ToString("f")
    + "\r\n" + "Fiyat Artış Farkı = " + Fiyat_Artis_Farki.ToString("f")
    + "\r\n" + "Alış Fiyatı = " + Guncel_Satis_Fiyati.ToString("f");

    using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"D:\TECO_Gunluk_Hacim_Spike.txt", true))
    file.WriteLine(DateTime.Now.ToString() + " | " + Mesaj);

    }
    }
    }

    }