Sayfa 590/593 İlkİlk ... 90490540580588589590591592 ... SonSon
Arama sonucu : 4738 madde; 4,713 - 4,720 arası.

Konu: İDEAL veri terminalinde /Sistem/İndikatör/Robot

  1. #4713
    //Hisse Talimatlari burada girilecek.
    var Sozluk = new Dictionary<string, List<double>>();
    Sozluk["IMKBH'KOZAL"] = new List<double> { 0.04, 0.08, 1, 30, 20 };//Hisse - kademe_al_seviye / kademe_sat_seviye / kademe_lot / yuksek / dusuk
    Sozluk["IMKBH'HALKB"] = new List<double> { 0.02, 0.07, 20, 16.80, 13 };//Hisse - kademe_al_seviye / kademe_sat_seviye / kademe_lot / yuksek / dusuk
    Sozluk["IMKBH'TSKB"] = new List<double> { 0.02, 0.07, 10, 10, 7 };//Hisse - kademe_al_seviye / kademe_sat_seviye / kademe_lot / yuksek / dusuk

    //Ana dongu kod yapisi
    for (var No = 0; No < Sozluk.Count; No++)
    {
    var EmirSembol = Sozluk.ElementAt(No).Key;
    var Anahtar = Sistem.Name + " , " + EmirSembol;
    var IslemFiyat = 0.0;
    DateTime IslemTarih;
    var Rezerv = "";
    var AlisFiyat = 0.0m;
    var SatisFiyat = 0.0m;
    var KademeFiyat = 0.0m;
    var Pozisyon = Sistem.PozisyonKontrolOku(Anahtar, out IslemFiyat, out IslemTarih, out Rezerv);
    var Lot = (double)Sozluk.ElementAt(No).Value[2];
    var Yuksek = (double)Sozluk.ElementAt(No).Value[3];
    var Dusuk = (double)Sozluk.ElementAt(No).Value[4];

    var basicitem = Sistem.YuzeyselVeriOku(EmirSembol);
    var sonfiyat = (decimal)basicitem.LastPrice;
    var bidfiyat = (decimal)basicitem.BidPriceDec;
    var askfiyat = (decimal)basicitem.AskPriceDec;

    if (sonfiyat == 0) continue;
    if (bidfiyat == 0) continue;
    if (askfiyat == 0) continue;

    //Ilk İslem Sarti (Mevcut fiyat yuksek/dusuk arasinda ise ve poz yoksa, Al/Sat seviyesi kademe kadar belirlenir)
    string DosyaDir = "C:\\iDeal\\Kademeler" + EmirSembol.Split('\'')[1] + ".YapilanIslemler.txt"; // Dosya Adi
    if (!System.IO.Directory.Exists("C:\\iDeal\\Kademeler ")) System.IO.Directory.CreateDirectory("C:\\iDeal\\Ka demeler");
    if (!System.IO.File.Exists(DosyaDir)) System.IO.File.Create(DosyaDir);
    var ReadLines = System.IO.File.ReadAllLines(DosyaDir);


    if (ReadLines.Count() != 0)
    {

    KademeFiyat = (decimal)Convert.ToSingle(ReadLines.Last().Split(' \t')[1]);
    AlisFiyat = (decimal)Convert.ToSingle(ReadLines.Last().Split(' \t')[2]);
    SatisFiyat = (decimal)Convert.ToSingle(ReadLines.Last().Split(' \t')[3]);
    }
    else
    {
    AlisFiyat = (decimal)askfiyat;
    }

    var Islem = "";
    var Miktar = 0.0;
    //EKLEDİĞİM YER BURASI.....
    var V = Sistem.GrafikVerileriniOku(Sistem.Sembol, "G");
    // var V = Sistem.GrafikFiyatOku(Sembol, "G", "Kapanis");
    var TOMA = Sistem.TOMA(V, 3, 1, "Variable");
    var MA = Sistem.MA(V, "Variable", 3);
    var START = MA[MA.Count - 1] > TOMA[TOMA.Count - 2];
    if (START) //BU KOŞUL SAĞLANIRSA ALIŞ YAP
    {

    if (bidfiyat <= AlisFiyat && Pozisyon >= 0 && bidfiyat >= (decimal)Dusuk && bidfiyat <= (decimal)Yuksek) // AL
    {
    Rezerv = "Alis : " + bidfiyat.ToString("0.00");
    Miktar = Lot;
    IslemFiyat = (double)bidfiyat;
    }
    }


    else if (askfiyat >= SatisFiyat && Pozisyon > 0)
    {
    Rezerv = "Satis: " + askfiyat.ToString("0.00") + " Kar: " + (1 - Sistem.SayiYuvarla((decimal)IslemFiyat / SatisFiyat, 0.0001)).ToString("%0.00");
    Miktar = -Lot;
    IslemFiyat = (double)askfiyat;
    }

    if (Miktar > 0) Islem = "Alis";
    if (Miktar < 0) Islem = "Satis";
    if (Islem != "")
    {
    Sistem.PozisyonKontrolGuncelle(Anahtar, Miktar + Pozisyon, IslemFiyat, Rezerv);
    Sistem.EmirSembol = EmirSembol;
    Sistem.EmirIslem = Islem;
    Sistem.EmirSuresi = "KIE"; //"GUN", "KIE", "IKG" //Kriptolar icin "GTC", Limit icin "GUN" ve "IKG"
    Sistem.EmirTipi = "Piyasa"; //"Limit", "Piyasa"
    Sistem.EmirMiktari = (double)Math.Abs(Miktar);
    Sistem.EmirFiyati = IslemFiyat;
    Sistem.EmirAciklama = Rezerv;
    Sistem.EmirHesapAdi = "255516, Osmanlı Menkul"; //Portfoy peneceresinde gözüken ile aynı Hesap
    Sistem.EmirAltHesap = "255516"; ////Portfoy peneceresinde gözüken ile aynı Alt Hesap
    Sistem.EmirGonder();

    //Alış Islemi Islemler dosyasına eklenir.
    if (Islem == "Alis")
    {
    string Mesaj = EmirSembol + "\t" + IslemFiyat.ToString() + "\t" + ((decimal)IslemFiyat - (decimal)Sozluk.ElementAt(No).Value[0]).ToString() + "\t" + ((decimal)IslemFiyat + (decimal)Sozluk.ElementAt(No).Value[1]).ToString() + "\t" + Lot.ToString() + "\t" + System.DateTime.Now.ToString() + "\r\n";
    System.IO.File.AppendAllText(DosyaDir, Mesaj);
    }
    //Son Islem Islemler dosyasından çıkarılır.
    if (Islem == "Satis")
    {
    var ReadLines2 = System.IO.File.ReadAllLines(DosyaDir);
    System.IO.File.WriteAllLines(DosyaDir, ReadLines2.Take(ReadLines2.Count() - 1));
    }
    }
    }

    yazım hataları düzeltildi..

  2. var Islem = "";
    var Miktar = 0.0;
    //EKLEDİĞİM YER BURASI.....
    var V = Sistem.GrafikVerileriniOku(Sistem.Sembol, "G");
    // var V = Sistem.GrafikFiyatOku(Sembol, "G", "Kapanis");
    var TTI = Sistem.TOMA(V, 3, 1, "Variable");
    var MA = Sistem.MA(V, "Variable", 3);
    var START = MA[MA.Count - 1] > TOMA[TOMA.Count - 2];
    if (START) //BU KOŞUL SAĞLANIRSA ALIŞ YAP
    {

    teşekkürler
    İDEAL KOD YAZMADA YENİYİM....SORULARIMDAKİ AMACIM ....İDEALİN MANTIĞINI ANLAYABİLMEK ....YOL GÖSTERMENİZ YETERLİDİR TŞK...

  3. if (bidfiyat <= AlisFiyat && Pozisyon >= 0 && bidfiyat >= (decimal)Dusuk && bidfiyat <= (decimal)Yuksek) // AL
    {
    Rezerv = "Alis : " + bidfiyat.ToString("0.00");
    Miktar = Lot;
    IslemFiyat = (double)bidfiyat;

    Lot++; // Alış yapıldığında lot miktarını birer birer arttırmı

    item.Value[2] = Lot; // Yeni lot miktarını kaydet


    al şartında her işlemde 1 er lot artırmak istersek bu kısım doğru olurmu....
    İDEAL KOD YAZMADA YENİYİM....SORULARIMDAKİ AMACIM ....İDEALİN MANTIĞINI ANLAYABİLMEK ....YOL GÖSTERMENİZ YETERLİDİR TŞK...

  4. #4716
    Duhul
    Feb 2017
    İkamet
    Eskişehir / Duhul 2007
    Yaş
    53
    Gönderi
    4,631
    @Noyan

    alıntıladığın @EROLMUTLU robotu ile kendin eklemek istediğin indikatöre göre alım ve ekleme yapması kodun özelliğine ters.

    kod minik fiyat adımları ile çok fazla işlem yapmaya kurulu siz ise indikatör ile hisseyi bulsun sonrasında o kod ile işlem yapsın istiyorsunuz.
    Bu şekil olmaz.

    Ha olur biraz uğraştırır.
    nasıl derseniz?

    Yazdığınız kod ile tüm hisseleri taratıp al şartı oluşanları TXT dosyaya alım / satım fiyatları ile birlikte kaydettirirsiniz.
    sonrasında o TXT dosyasını okutup @ErolMutlu beyin yazdığı kod içinde SOZLUK kısmına entegre edersiniz,
    kod okuyup sadece o hisselerde işlem yapmaya başlar.

    kodun içinden sözlüğe 1-2 tane hisse yazıp işlem yapmasını beklerseniz çok nadir olarak belki (çok doğru bir kurgu yaparsanız) işlem yapacaktır
    ama bu seferde aldığı hisseyi

    var Sozluk = new Dictionary<string, List<double>>();
    Sozluk["IMKBH'KOZAL"] = new List<double> { 0.04, 0.08, 1, 30, 20 };
    Sozluk["IMKBH'HALKB"] = new List<double> { 0.02, 0.07, 20, 16.80, 13 };
    Sozluk["IMKBH'TSKB"] = new List<double> { 0.02, 0.07, 10, 10, 7 };
    sırası ile 0,08 - 0,07 - 0,07 kademe sonra satacak
    kendi indikatörünüze göre yine pozisyon kalmayacaktır.


    kolay gelsin.
    Bear_Bull
    @BearBull26

  5.  Alıntı Originally Posted by Bear_Bull Yazıyı Oku
    @Noyan

    alıntıladığın @EROLMUTLU robotu ile kendin eklemek istediğin indikatöre göre alım ve ekleme yapması kodun özelliğine ters.

    kod minik fiyat adımları ile çok fazla işlem yapmaya kurulu siz ise indikatör ile hisseyi bulsun sonrasında o kod ile işlem yapsın istiyorsunuz.
    Bu şekil olmaz.

    Ha olur biraz uğraştırır.
    nasıl derseniz?

    Yazdığınız kod ile tüm hisseleri taratıp al şartı oluşanları TXT dosyaya alım / satım fiyatları ile birlikte kaydettirirsiniz.
    sonrasında o TXT dosyasını okutup @ErolMutlu beyin yazdığı kod içinde SOZLUK kısmına entegre edersiniz,
    kod okuyup sadece o hisselerde işlem yapmaya başlar.

    kodun içinden sözlüğe 1-2 tane hisse yazıp işlem yapmasını beklerseniz çok nadir olarak belki (çok doğru bir kurgu yaparsanız) işlem yapacaktır
    ama bu seferde aldığı hisseyi


    sırası ile 0,08 - 0,07 - 0,07 kademe sonra satacak
    kendi indikatörünüze göre yine pozisyon kalmayacaktır.


    kolay gelsin.
    orjinali erol hocanın paylaştığı kodun al şartına toma ekleyerek toma al verdiğinde sözlük içindeki kademelere göre alım satım yapmasını sağlamak....tek hisse ile canlıda çalıştı (toma al verdiğinde alım yapmaya başladı...satım tarafında bi koşul olmadığı için txt den okuyup satış yaptı)ama çoklu hisse ile denemedim ....alım kademesi düşük tutularak malsız kalmanın önüne geçilebilir diye düşünüyorum....bu haliyle karlımı hayır tabiki ...geliştirilebilirmi...neden olmasın...derdim kod bilgim eksik bunu tamamlamak pratik yapmak mantığı kavramak...yönlendirmeleriniz için şimdiden teşekkürler...
    İDEAL KOD YAZMADA YENİYİM....SORULARIMDAKİ AMACIM ....İDEALİN MANTIĞINI ANLAYABİLMEK ....YOL GÖSTERMENİZ YETERLİDİR TŞK...

  6. merhabalar kolay gelsin aşağıdaki kodda nadaraya watson indikatörü kullanarak bir dca sistemi yapmaya çalıştım. fiyat her alt bantı ihlal ettiğinde alım yapacak ve her aldığını yüzde 1 yada yüzde 2 gibi satacak şekinde yapmaya çalıştım. ama sanırım çalışmadı yardımcı olursanız sevinirim.

    var Length = 1000;
    var Bandwidth = 17;
    var mult = 2.5;
    var V = Sistem.GrafikVerileri;
    var C = Sistem.GrafikFiyatSec("Kapanis");

    var y = Sistem.Liste(0);
    var up = Sistem.Liste(0);
    var down = Sistem.Liste(0);

    double sum_e = 0.0;
    for (int i = V.Count - Length; i < V.Count; i++)
    {
    double sum = 0.0;
    double sumw = 0.0;
    for (int j = V.Count - Length; j < V.Count - 1; j++)
    {
    double w = Math.Exp(-(Math.Pow(i - j, 2) / (Bandwidth * Bandwidth * 2)));
    sum += C[j] * w;
    sumw += w;
    }
    double y2 = sum / sumw;
    sum_e += (Math.Abs(C[i] - y2));
    y[i] = (float)y2;
    }
    double mae = sum_e / Length * mult;
    for (int i = V.Count - Length + 1; i < V.Count; i++)
    {
    double y2 = y[i];
    double y1 = y[i - 1];

    up[i] = (float)(y2 + mae);
    down[i] = (float)(y2 - mae);
    }

    Sistem.Cizgiler[1].Deger = up;
    Sistem.Cizgiler[2].Deger = down;

    // Alım yapılan fiyatları ve miktarları saklamak için listeler oluşturun
    var alimFiyatlari = new List<double>();
    var alimMiktarlari = new List<int>();
    var karFiyatlari = new List<double>(); // Her alım için hedef kar fiyatını saklar

    for (int i = Bandwidth; i < V.Count; i++)
    {
    Sistem.Yon[i] = ""; // Yönü sıfırla

    // Alım koşulu: Her alt bant ihlali olduğunda alım yap
    if (C[i] < down[i] && C[i - 1] > down[i - 1])
    {
    Sistem.Yon[i] = "A";
    var alimFiyati = C[i];
    var alimMiktari = 1; // Varsayılan olarak 1 lot alım
    alimFiyatlari.Add(alimFiyati);
    alimMiktarlari.Add(alimMiktari);

    // Her alım için hedef kar fiyatını belirle (%2 kar)
    karFiyatlari.Add(alimFiyati * 1.01);
    }

    // Satış koşulu: Hedef kar fiyatına ulaşıldığında satış yap
    if (karFiyatlari.Count > 0 && C[i] >= karFiyatlari[0])
    {
    Sistem.Yon[i] = "S";
    karFiyatlari.RemoveAt(0); // Satış yapılan alımın hedef kar fiyatını listeden kaldır
    }
    }

    // Alınan miktarları ve portföy değerini güncelle
    var Lots = new double[V.Count];
    var Portfoy = new double[V.Count];

    for (int i = Bandwidth; i < V.Count; i++)
    {
    if (alimFiyatlari.Count == 0)
    continue;

    Lots[i] = Lots[i - 1] + alimMiktarlari[i - Bandwidth];
    Portfoy[i] = Portfoy[i - 1] + alimMiktarlari[i - Bandwidth] * C[i];
    }

    // Grafikleri güncelle
    Sistem.Cizgiler[3].Deger = Lots;
    Sistem.Cizgiler[4].Deger = Portfoy;

  7. @mahmutbir
    Bu tarz robotların nerede hata üreteceği belli olmaz ama gözüme çarpan aşağıdaki yer.

    // Satış koşulu: Hedef kar fiyatına ulaşıldığında satış yap
    if (karFiyatlari.Count > 0 && C[i] >= karFiyatlari[0])
    {
    Sistem.Yon[i] = "S";
    karFiyatlari.RemoveAt(0); // Satış yapılan alımın hedef kar fiyatını listeden kaldır
    }

    Burada ilk değeri değil son değeri itibara alıp satış yapmalı ve listeden çıkarman gerek çünkü kodunun mantığına göre ilk satım son alıma ait olmalı.

  8.  Alıntı Originally Posted by bymehmet Yazıyı Oku
    @mahmutbir
    bu tarz robotların nerede hata üreteceği belli olmaz ama gözüme çarpan aşağıdaki yer.

    // satış koşulu: Hedef kar fiyatına ulaşıldığında satış yap
    if (karfiyatlari.count > 0 && c[i] >= karfiyatlari[0])
    {
    sistem.yon[i] = "s";
    karfiyatlari.removeat(0); // satış yapılan alımın hedef kar fiyatını listeden kaldır
    }

    burada ilk değeri değil son değeri itibara alıp satış yapmalı ve listeden çıkarman gerek çünkü kodunun mantığına göre ilk satım son alıma ait olmalı.
    teşekür ederim mehmet hocam

Sayfa 590/593 İlkİlk ... 90490540580588589590591592 ... SonSon

Yer İmleri

Yer İmleri

Gönderi Kuralları

  • Yeni konu açamazsınız
  • Konulara cevap yazamazsınız
  • Yazılara ek gönderemezsiniz
  • Yazılarınızı değiştiremezsiniz
  •