PDA

View Full Version : (Bu başlıkta soru sormayın)İdeal Formülleri (Soru-Cevap için diğer başlığı kullanın!)



Pages : [1] 2

thebaboli
10-11-2013, 03:08
Bu konu sadece yazımı tamamlanmış formüller içindir. Idealde kullanılabilecek, faydalı olacağını düşündüğünüz, ufuk açabilecek formülleri paylaşılabilirsiniz.

Programla ilgili duyurular, bilgilendirmeler, soru-cevaplar İDEAL veri terminalinde /Sistem/İndikatör/Robot (http://www.hisse.net/forum/showthread.php?t=112740) başlığında yapılmaktadır.

Ideal Teknik
http://indir.platodata.com.tr/teknik/

thebaboli
10-11-2013, 05:33
Diğer başlıkta yazılan bazı formülleri alarak başlayayım ;


manuel girilecek gün sayısına göre fibo seviyesi çizecek bişey yazdım ama acemilikten verdiği hatayı çözemedim.

/// fibonachi

var DD = Sistem.Parametreler[0]; // parametre kısmından kullanılacak değeri gir
var ftepe = Sistem.HHV( DD, "Kapanis");
var fdip = Sistem.LLV(DD, "Kapanis");
var forta = Sistem.ftepe+fdip/2;
var fark = Sistem.ftepe-fdip;

//
Sistem.Cizgiler[0].Deger = (ftepe+(fark*0.618));
Sistem.Cizgiler[1].Deger = ftepe; //
Sistem.Cizgiler[2].Deger = forta; //
Sistem.Cizgiler[3].Deger = fdip; //
Sistem.Cizgiler[4].Deger = (fdip-(fark*0.618));




Düzgün formül ve çıktısı (parametreye 10 girdik) aşağıdadır..

/// fibonachi

var DD = Sistem.Parametreler[0]; // parametre kısmından kullanılacak değeri gir

// hazır sistem hesaplama fonksiyonları liste olarak değer döndürür
var Tepe = Sistem.HHV(DD, "Kapanis");
var Dip = Sistem.LLV(DD, "Kapanis");

// sistem fonksiyonu kullanmadan yapılan hesaplamalarda liste yaratıp, döngü kullanmamız gerekiyor
var BarSayisi = Tepe.Count; // kolaylık olsun diye grafikteki bar sayısını değişkene aktar
var Orta = Sistem.Liste(BarSayisi , 0); // boş liste oluştur
var FiboUst = Sistem.Liste(BarSayisi , 0); // boş liste oluştur
var FiboAlt = Sistem.Liste(BarSayisi , 0); // boş liste oluştur

// döngü kullanarak listeleri hesaplat
for (int i = 0; i < BarSayisi; i++)
{
Orta[i] = (Tepe[i] + Dip[i]) / 2;
FiboAlt[i] = Dip[i] - (Tepe[i] - Dip[i]) * 0.618f; // c# sentaksında ondalık sayıların sonuna f harfi yazmak gerekiyor
FiboUst[i] = Tepe[i] + (Tepe[i] - Dip[i]) * 0.618f;
}

// listeleri çizgilere aktar
Sistem.Cizgiler[0].Deger = FiboUst;
Sistem.Cizgiler[1].Deger = Tepe;
Sistem.Cizgiler[2].Deger = Orta;
Sistem.Cizgiler[3].Deger = Dip;
Sistem.Cizgiler[4].Deger = FiboAlt;


// strateji
//for (int i = 1; i<BarSayisi; i++)
//{
// if ()
// Sistem.Yon[i] = "A"; // alış
// if ()
// Sistem.Yon[i] = "S"; // satış
//}



Çıktısı ise böyle;

http://s1308.hizliresim.com/1d/u/rxfzk.png (http://bit.ly/c25MCx)

parametreler ise;

http://r1308.hizliresim.com/1d/u/rxg1w.png (http://bit.ly/c25MCx)

thebaboli
10-11-2013, 05:36
Başka bir alıntı ;


Bu formül error veriyor. Sebebi nedir acaba?
Standart formülün yanına RSI şartı eklemeye çalıştım ama beceremedim.


var Sembol = "IMKBH'GARAN";
var SembolDeger = Sistem.SonFiyat(Sembol);
var Kapanislar = Sistem.GrafikFiyatOku(Sembol, "Kapanis");
var RSIDeger = Sistem.RSI(Kapanislar,14);
// pozisyon tablosundan pozisyon miktarını al
var Pozisyon = Sistem.PozisyonKontrolOku(Sembol);

// alış
if (SembolDeger <= 7.10 && RSIDeger > 45 )
{
if (Pozisyon == 0 )
{
var Miktar=2;
Sistem.PozisyonKontrolGuncelle(Sembol, Miktar);
Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = "Alış";
Sistem.EmirMiktari = Miktar;
Sistem.EmirFiyati = "Aktif"; // aktif fiyat
Sistem.EmirSuresi = "SEANS"; // SEANS, GUN
Sistem.EmirTipi = "NORMAL"; // NORMAL, KIE, KPY, AFE/KAFE
Sistem.EmirGonder();
}
}

// satış
if (SembolDeger >= 10.50)
{
if (Pozisyon > 0)
{
var Miktar = Pozisyon;
Sistem.PozisyonKontrolGuncelle(Sembol, 0);
Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = "Satış";
Sistem.EmirMiktari = Miktar;
Sistem.EmirFiyati = "Aktif"; // aktif fiyat
Sistem.EmirSuresi = "SEANS"; // SEANS, GUN
Sistem.EmirTipi = "NORMAL"; // NORMAL, KIE, KPY, AFE/KAFE
Sistem.EmirGonder();
}
}




Merhabalar;

1-) RSI okutma bölümü hatalıydı, düzeltildi..

2-) RSIDeger liste olarak döner, RSI’ın son değeri aşağıdaki gibi kullanılır..
if (SembolDeger <= 7.10 && RSIDeger[RSIDeger.Count-1] > 45)

3-) Satış bölümüne EmirSatisTipi parametresinin eklenmesi gerekir..
satış bölümüme Sistem.EmirSatisTipi = "NORMAL"; // imkb (NORMAL, ACIGA, VIRMANDAN) eklenmesi gerekir

4-) Satış bölümünde RSI eklenmemiş, gözden mi kaçtı, yoksa bu şekilde kullanım mı tercih edildi..



var Sembol = "IMKBH'GARAN";
var SembolDeger = Sistem.SonFiyat(Sembol);

// RSI değerlerini listeye oku
var Veriler = Sistem.GrafikVerileriniOku(Sembol, "G");
var RSIDeger = Sistem.RSI(Veriler, 14);

// pozisyon tablosundan pozisyon miktarını al
var Pozisyon = Sistem.PozisyonKontrolOku(Sembol);

// alış
if (SembolDeger <= 7.10 && RSIDeger[RSIDeger.Count-1] > 45)
{
if (Pozisyon == 0 )
{
var Miktar=2;
Sistem.PozisyonKontrolGuncelle(Sembol, Miktar);
Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = "Alış";
Sistem.EmirMiktari = Miktar;
Sistem.EmirFiyati = "Aktif"; // aktif fiyat
Sistem.EmirSuresi = "SEANS"; // SEANS, GUN
Sistem.EmirTipi = "NORMAL"; // NORMAL, KIE, KPY, AFE/KAFE
Sistem.EmirGonder();
}
}

// satış
if (SembolDeger >= 10.50)
{
if (Pozisyon > 0)
{
var Miktar = Pozisyon;
Sistem.PozisyonKontrolGuncelle(Sembol, 0);
Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = "Satış";
Sistem.EmirMiktari = Miktar;
Sistem.EmirFiyati = "Aktif"; // aktif fiyat
Sistem.EmirSuresi = "SEANS"; // SEANS, GUN
Sistem.EmirTipi = "NORMAL"; // NORMAL, KIE, KPY, AFE/KAFE
Sistem.EmirSatisTipi = "NORMAL"; // imkb (NORMAL, ACIGA, VIRMANDAN)
Sistem.EmirGonder();
}
}

thebaboli
10-11-2013, 05:39
Robot ile ilgili birkaç bilgi ;


ROBOT ile emir gönderimi için 3 önemli hatırlatma / bilgilendirme;

1-
Bir robot 100 milisaniyede bir çalışır. (Tüm istenenler tek robot'a yazılmışsa)
Yani bir robot saniyede 10 kez çalılır. (10 ayrı Robot yazılırsa her biri 1 saniye içinde 1 kez)
PozisyonKontrol fonksiyonu ile, işlem yapıldığında pozisyon'a değer atanıp bu değer kontrol ettirilerek, döngüye girmesi ve aynı emri saniyede 10 kez göndermesinin önüne geçilir.(bu kontrol ile denetimler AL-AL-AL-SAT şeklinde ilerlemesi mumkün bir formülasyon varsa pozisyon değer ataması ona göre kontrol edilebilir.)


2-
Satış emri gönderileceği zaman mutlaka EmirSatisTipi bilgisi girilmelidir.

3-
Robot yazımı tamamlandığındai gerçek hesaba emir gönderecek şekilde robotu çalıştırmadan önce mutlaka "sanal" ortamda çalışıtırıp gözlemlemeniz önerilir. Portföy/Robot sekmesinde yer alan AKSİYON kısmından SANAL seçildiğinde, herhangi bir hesaba login olunmamışsa dahi robot çalışır ve emir gönderilir.
Hatta aynı sekmedeki POZİSYON yazısına basılarak emirler robot tarafından gönderildikçe, sembol bazında POZISYON değişkeninin kaç olduğu takip edilebilir. Kodun içine gitmeden, pozisyon değişkeni başka bir değere set edilebilir.

ÖRNEK EMİR GÖNDERİM: Senet değeri 2.50 ise ve pozisyon sıfırdan büyükse (Daha önce AL işlemi yapılmış ve pozisyon > 0 olmuş) SAT örnek kodu..

if (SembolDeger >= 2.50)
{
if (Pozisyon > 0)
{
var Miktar = Pozisyon;
Sistem.PozisyonKontrolGuncelle(Sembol, 0);
Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = "Satış";
Sistem.EmirMiktari = Miktar;
Sistem.EmirFiyati = "Aktif"; // aktif fiyat
Sistem.EmirSuresi = "SEANS"; // SEANS, GUN
Sistem.EmirTipi = "NORMAL"; // NORMAL, KIE, KPY, AFE/KAFE
Sistem.EmirSatisTipi = "NORMAL"; // imkb (NORMAL, ACIGA, VIRMANDAN)
Sistem.EmirGonder();
}
}

thebaboli
10-11-2013, 05:46
Günaydın.

Grafikte bir senede ait tarihsel verilelerin kullanımı için "Sistem.GrafikVerileri" fonksiyonu eklenmiştir. Aşağıda, önceki yüksek ve düşüğü indikatör olarak çizen bir sistemin kodları paylaşılmıştır. Bu örnek üzerinden sizler de GrafikVerileri Fonksiyonunu kullanma şeklini inceleyebilirsiniz.
(NOT: "OrnekOncekiYuksekDusuk" isimli sistem, yayın üzerinden iDeal ekranlarına da gönderilmiştir.



// önceki yüksek ve düşügü indikatör olarak çizdiren örnek

// Sistem.GrafikVerileri senedin tüm grafik verilerini tutan listedir
var Veriler = Sistem.GrafikVerileri;

// sistem fonksiyonu kullanmadan yapılan hesaplamalarda liste yaratıp, döngü kullanmamız gerekiyor
var BarSayisi = Veriler.Count; // kolaylık olsun diye grafikteki bar sayısını değişkene aktar
var OncekiYuksek = Sistem.Liste(BarSayisi , 0); // boş liste oluştur
var OncekiDusuk = Sistem.Liste(BarSayisi , 0); // boş liste oluştur

// döngü kullanarak listeleri hesaplat
for (int i = 1; i < BarSayisi; i++)
{
OncekiYuksek[i] = Veriler[i-1].High;
OncekiDusuk[i] = Veriler[i-1].Low;
}

// listeleri çizgilere aktar
Sistem.Cizgiler[0].Deger = OncekiYuksek;
Sistem.Cizgiler[1].Deger = OncekiDusuk;


Saygılarımızla


iDeal de sistem yazarken önceki değerlere şu şekilde erişebilirsiniz.



// döngü kullanarak listeleri hesaplatma
for (int i = 1; i < BarSayisi; i++)
{
OncekiYuksek[i] = Veriler[i-1].High;
OncekiDusuk[i] = Veriler[i-1].Low;
}




Saygılarımızla
,,,,,,,,,,

thebaboli
10-11-2013, 05:48
iDeal Kullanıcıları için "Sistem Tester" modülüne bir "örnek indikatör" eklenmiştir ve formülü açık olarak konulmuştur.
Formülü aşağıda da paylaşılan indikatörün, 5 barlık üssel hareketli ortalamasını yukarı ve aşağı kesmesiyle AL/SAT sinyali ürettirilmiştir.
Yine aşağıda, XU100 grafiğine uygulanmış ekran görüntüsü de paylaşılmıştır.

Grafik verilerini okutma
Bar sayılarını okutma
Fonksiyonların kullanılması
Çizgilerin çizdirilmesi, isimlendirilmesi gibi pek çok olay için örnek teşkil edecektir.

Saygılarımızla



var Bar = Sistem.GrafikVerileri; // tüm bar varilerini içeren listeyi Bar değişkenine ata
var BarSayisi = Sistem.BarSayisi; // grafikteki bar sayısını değişkene aktar

// hazır sistem hesaplama fonksiyonları liste olarak değer döndürür
var HHV = Sistem.HHV(13, "Yuksek");
var LLV = Sistem.LLV(13, "Dusuk");

// sistem fonksiyonu kullanmadan yapılan hesaplamalarda liste yaratıp, döngü kullanmamız gerekiyor
var Part1 = Sistem.Liste(BarSayisi , 0); // C - (.5 * ( HHV + LLV)
var Part2 = Sistem.Liste(BarSayisi , 0); // HHV - LLV

// döngü kullanarak listeleri hesaplat
for (int i = 100; i < BarSayisi; i++)
{
Part1[i] = Bar[i].Close - 0.5f * (HHV[i] + LLV[i]); // C - (.5 * ( HHV + LLV);
Part2[i] = HHV[i] - LLV[i] ; // HHV - LLV
}

// sistem fonksiyonlarını kullanarak hareketli ortalama listelerini oluştur
var Part1Mov = Sistem.MA(Sistem.MA(Part1, "Exp", 25) , "Exp" , 2);
var Part2Mov = Sistem.MA(Sistem.MA(Part2, "Exp", 25) , "Exp" , 2);

// boş indikator listesi tanımla ve hesapla
var IND = Sistem.Liste(BarSayisi , 0); // boş liste
for (int i = 100; i < BarSayisi; i++)
{
IND[i] = 100 * ( Part1Mov[i] / (0.5f * Part2Mov[i]));
}
// indikator ortalama listesi
var AVR = Sistem.MA(IND ,"Exp", 5);

// listeleri çizgilere aktar
Sistem.Cizgiler[0].Deger = IND;
Sistem.Cizgiler[1].Deger = AVR;

// strateji
Sistem.KesismeTara(IND, AVR);


Ekran Görüntüsü:

http://k1308.hizliresim.com/1d/x/s1ls0.png (http://bit.ly/c25MCx)




Yukarıdaki örnek sistemin sinyal üretmesiyle otomatik olarak alış ve satış yapması istenen ÖRNEK ROBOT formülü de aşağıdaki gibidir.
Hisse olarak GARAN, periyot olarak GÜN ve Miktar olarak 1000 kullanılmıştır.
Açığa Satış yapılmayacağı varsayılmıştır.
ROBOT üzerinde, SANAL aksiyon seçerek ve mesela 1 dk periyot ayarlayarak sizler de test edebilirsiniz. Sanal olarak robot'a emir göndertmek için bir hesaba bağlanmış olmanız gerekmez...
giden emirleri, her emir sonrası pozisyonlarının son durumunu (GARAN miktarı emirlerden sonra kaç adet oldu) ROBOT sekmesindeki "pozisyonlar" ve "Emirler" sekmelerinden takip edebilirsiniz.




var Sembol = "IMKBH'GARAN";
var Bar = Sistem.GrafikVerileriniOku(Sembol, "G"); // tüm bar varilerini içeren listeyi Bar değişkenine ata
var BarSayisi = Bar.Count; // grafikteki bar sayısını değişkene aktar

// hazır sistem hesaplama fonksiyonları liste olarak değer döndürür
var HHV = Sistem.HHV(Bar, 13, "Yuksek");
var LLV = Sistem.LLV(Bar, 13, "Dusuk");

// sistem fonksiyonu kullanmadan yapılan hesaplamalarda liste yaratıp, döngü kullanmamız gerekiyor
var Part1 = Sistem.Liste(BarSayisi , 0); // C - (.5 * ( HHV + LLV)
var Part2 = Sistem.Liste(BarSayisi , 0); // HHV - LLV

// döngü kullanarak listeleri hesaplat
for (int i = 100; i < BarSayisi; i++)
{
Part1[i] = Bar[i].Close - 0.5f * (HHV[i] + LLV[i]); // C - (.5 * ( HHV + LLV);
Part2[i] = HHV[i] - LLV[i] ; // HHV - LLV
}

// sistem fonksiyonlarını kullanarak hareketli ortalama listelerini oluştur
var Part1Mov = Sistem.MA(Sistem.MA(Part1, "Exp", 25) , "Exp" , 2);
var Part2Mov = Sistem.MA(Sistem.MA(Part2, "Exp", 25) , "Exp" , 2);

// boş indikator listesi tanımla ve hesapla
var IND = Sistem.Liste(BarSayisi , 0); // boş liste
for (int i = 100; i < BarSayisi; i++)
{
IND[i] = 100 * ( Part1Mov[i] / (0.5f * Part2Mov[i]));
}
// indikator ortalama listesi
var AVR = Sistem.MA(IND ,"Exp", 5);

// IŞLEM YAP
// pozisyon tablosundan pozisyon miktarını al
var Pozisyon = Sistem.PozisyonKontrolOku("ROBOT_001 " + Sembol);

// alış
if (Sistem.YukariKestiyse(IND, AVR))
{
if (Pozisyon == 0)
{
var Miktar = 1000;
Sistem.PozisyonKontrolGuncelle("ROBOT_001 " + Sembol);
Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = "Alış";
Sistem.EmirMiktari = Miktar;
Sistem.EmirFiyati = "Aktif";
Sistem.EmirSuresi = "SEANS"; // SEANS, GUN
Sistem.EmirTipi = "NORMAL"; // NORMAL, KIE, KPY, AFE/KAFE
Sistem.EmirGonder();
}
}

// satış
if (Sistem.AsagiKestiyse(IND, AVR))
{
if (Pozisyon > 0)
{
var Miktar = Pozisyon;
Sistem.PozisyonKontrolGuncelle("ROBOT_001 " + Sembol, 0);
Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = "Satış";
Sistem.EmirMiktari = Miktar;
Sistem.EmirFiyati = "Aktif";
Sistem.EmirSuresi = "SEANS"; // SEANS, GUN
Sistem.EmirTipi = "NORMAL"; // NORMAL, KIE, KPY, AFE/KAFE
Sistem.EmirSatisTipi = "NORMAL"; // imkb (NORMAL, ACIGA, VIRMANDAN)
Sistem.EmirGonder();
}
}


,,,,,,,,,,,,,

thebaboli
10-11-2013, 05:49
Bir (A) hisse senedinin son işlem fiyatının, bir başka (B) hisse senedinin son işlem fiyatına oranı "x" olursa 1000 adet A hissesi AL, 1875 adet B hissesi SAT;
Bu oran "y" olursa 1875 adet B hissesi AL, 1000 adet A hissesi SAT

Örnek ROBOT kodları aşağıda verilmiştir.

Bu formülde, son işlem fiyatı yerine herhangi bir başka veri kullanabilirsiniz.
şart yerine geldiğinde herhangi başka hisse senetlerine emir göndertebilirsiniz.
Birbirinden farklı hisselerin verilerinden olşturduğunuz şartlar için, yişne başka senetlere robot emir yollatabilirsiniz.

Tüm bunları tek robot formülü içinde yapmak mümkündür ve başka platformlarda bunu yapmak mümkün değildir.

KOD



var SembolHALKB = "IMKBH'HALKB";
var SonHALKB = Sistem.SonFiyat(SembolHALKB);
var SembolGARAN = "IMKBH'GARAN";
var SonGARAN = Sistem.SonFiyat(SembolGARAN);

// zaman kontrolu ( bu saat aralıklarında emir gönderilebilsin )
if (Sistem.SaatAraligi("09:30", "12:30") || Sistem.SaatAraligi("14:15", "17:30"))
{
// değerler sıfırdan büyük ise çalışsın
if (SonHALKB > 0 && SonGARAN > 0)
{
var Oran = SonHALKB / SonGARAN;
var Pozisyon = Sistem.PozisyonKontrolOku("Robot002"); // pozisyon kontrolü yap

// HALKB al, GARAN sat
if (Oran <= 1.70f)
{
if (Pozisyon != 1000) // HALKB pozisyon kontrolu yap, 1000 değil ise işlemi gerçekleştir..
{
Sistem.PozisyonKontrolGuncelle("Robot002", 1000);

// HALKB alış emri gönder
Sistem.EmirSembol = SembolHALKB;
Sistem.EmirIslem = "Alış";
Sistem.EmirMiktari = 1000;
Sistem.EmirFiyati = "Aktif"; // aktif fiyat
Sistem.EmirSuresi = "SEANS"; // SEANS, GUN
Sistem.EmirTipi = "NORMAL"; // NORMAL, KIE, KPY, AFE/KAFE
Sistem.EmirGonder();

// GARAN satış emri gönder
Sistem.EmirSembol = SembolGARAN;
Sistem.EmirIslem = "Satış";
Sistem.EmirMiktari = 1875;
Sistem.EmirFiyati = "Aktif"; // aktif fiyat
Sistem.EmirSuresi = "SEANS"; // SEANS, GUN
Sistem.EmirTipi = "NORMAL"; // NORMAL, KIE, KPY, AFE/KAFE
Sistem.EmirSatisTipi = "NORMAL"; // imkb (NORMAL, ACIGA, VIRMANDAN)
Sistem.EmirGonder();
}
}

// HALKB sat, GARAN al
if (Oran >= 1.99f)
{
if (Pozisyon != -1000)
{
Sistem.PozisyonKontrolGuncelle("Robot002", -1000);

// HALKB satış emri gönder
Sistem.EmirSembol = SembolHALKB;
Sistem.EmirIslem = "Satış";
Sistem.EmirMiktari = 1000;
Sistem.EmirFiyati = "Aktif"; // aktif fiyat
Sistem.EmirSuresi = "SEANS"; // SEANS, GUN
Sistem.EmirTipi = "NORMAL"; // NORMAL, KIE, KPY, AFE/KAFE
Sistem.EmirSatisTipi = "NORMAL"; // imkb (NORMAL, ACIGA, VIRMANDAN)
Sistem.EmirGonder();

// GARAN alış emri gönder
Sistem.EmirSembol = SembolGARAN;
Sistem.EmirIslem = "Alış";
Sistem.EmirMiktari = 1875;
Sistem.EmirFiyati = "Aktif"; // aktif fiyat
Sistem.EmirSuresi = "SEANS"; // SEANS, GUN
Sistem.EmirTipi = "NORMAL"; // NORMAL, KIE, KPY, AFE/KAFE
Sistem.EmirGonder();
}
}
}
}


*********

thebaboli
10-11-2013, 05:54
paylaşımları not alarak takip ediyorum.

çok teşekkürler...




// hazır sistem hesaplama fonksiyonları liste olarak değer döndürür
var H = Sistem.HHV(1, "Yuksek");
var L = Sistem.LLV(1, "Dusuk");
var C = Sistem.GrafikFiyatSec("Kapanis");

// sistem fonksiyonu kullanmadan yapılan hesaplamalarda liste yaratıp, döngü kullanmamız gerekiyor
var BarSayisi = H.Count; // kolaylık olsun diye grafikteki bar sayısını değişkene aktar

var R1 = Sistem.Liste(BarSayisi , 0); // boş liste oluştur
var R2 = Sistem.Liste(BarSayisi , 0); // boş liste oluştur
var R3 = Sistem.Liste(BarSayisi , 0); // boş liste oluştur
var Pivot = Sistem.Liste(BarSayisi , 0); // boş liste oluştur
var S1 = Sistem.Liste(BarSayisi , 0); // boş liste oluştur
var S2 = Sistem.Liste(BarSayisi , 0); // boş liste oluştur
var S3 = Sistem.Liste(BarSayisi , 0); // boş liste oluştur

// döngü kullanarak listeleri hesaplat
for (int i = 0; i < BarSayisi; i++)
{
Pivot[i] = (H[i] + L[i] + C[i]) / 3;

R1[i] = (2 * Pivot[i]) - L[i];
R2[i] = Pivot[i] + (H[i] - L[i]);
R3[i] = R1[i] + (H[i] - L[i]);

S1[i] = (2 * Pivot[i]) - H[i];
S2[i] = Pivot[i] - (H[i] - L[i]);
S3[i] = S1[i] - (H[i] - L[i]);
}

// listeleri çizgilere aktar
Sistem.Cizgiler[0].Deger = R3;
Sistem.Cizgiler[1].Deger = R2;
Sistem.Cizgiler[2].Deger = R1;
Sistem.Cizgiler[3].Deger = Pivot;
Sistem.Cizgiler[4].Deger = S1;
Sistem.Cizgiler[5].Deger = S2;
Sistem.Cizgiler[6].Deger = S3;





*********


Ekran görüntüsü güzelmiş. Başlık hayırlı olsun...

Teşekkürler görüntüsü gibi işlevide çok güzeldir. :)

thebaboli
10-11-2013, 05:58
Sn İdealTrade,

AYARLAR
http://badgs.webege.com/png/Eylul1.png

LOT [ALGO İÇİN] sistemde kullanmadım.
http://badgs.webege.com/png/Eylul3.png

http://badgs.webege.com/png/Eylul5.png

GRAFİK
http://badgs.webege.com/png/Eylul2.png

sistem ayarları
http://badgs.webege.com/png/Eylul4.png


Sistem + Robot Yazılımı



// parametreleri al
var Yontem = Sistem.Parametreler[0];
var Periyot1 = Sistem.Parametreler[1];
var Periyot2 = Sistem.Parametreler[2];

// kapanış fiyatlarını oku
var Veriler = Sistem.GrafikFiyatSec("Kapanis");

// hareketli ortalamaları hesapla
var MA1 = Sistem.MA(Veriler, Yontem, Periyot1);
var MA2 = Sistem.MA(Veriler, Yontem, Periyot2);

// hesaplanan verileri çizgilere aktar ve açıklama ekle
Sistem.Cizgiler[0].Deger = MA1;
Sistem.Cizgiler[0].Aciklama = "MA küçük " + Periyot1;
Sistem.Cizgiler[1].Deger = MA2;
Sistem.Cizgiler[1].Aciklama = "MA büyük " + Periyot2;

// strateji
for (int i = 1; i<Sistem.BarSayisi; i++)
{
if (MA1[i-1] < MA2[i-1] && MA1[i] > MA2[i]) // 1.ortalama 2.ortalamanın üstüne çıkarsa
Sistem.Yon[i] = "Aldım"; // alış
if (MA1[i-1] > MA2[i-1] && MA1[i] < MA2[i]) // 1.ortalama 2.ortalamanın altına inerse
Sistem.Yon[i] = "Sattım"; // satış
}
Sistem.KesismeTara(MA1,MA2);

///////// ROBOT İLE İŞLEMLERİ YAPTIR /////////////


// zaman kontrolu ( bu saat aralıklarında emir gönderilebilsin )
if (Sistem.SaatAraligi("09:15", "12:30") || Sistem.SaatAraligi("14:00", "17:45"))
{
var Sembol = "VIP'F_XU0301013S0";
var Kapanislar = Sistem.GrafikFiyatOku(Sembol, "1", "Kapanis");
// pozisyon tablosundan pozisyon miktarını al
var Pozisyon = Sistem.PozisyonKontrolOku(Sembol);

// alış
if (Sistem.YukariKestiyse(MA1, MA2))
{
if (Pozisyon == 0)
{
var Miktar = 1;
Sistem.PozisyonKontrolGuncelle(Sembol, Pozisyon+Miktar);
Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = "Alış";
Sistem.EmirMiktari = Miktar;
Sistem.EmirSuresi = "GUN"; // GUN, SNS, IKG
Sistem.EmirTipi = "KPY"; // KPY, KIE, GIE, SAR
Sistem.EmirFiyatTipi = "PYS"; // PYS, LMT, EIF, KAP
Sistem.EmirGonder();
}
else if (Pozisyon < 0)
{
var Miktar = -2*Pozisyon;
Sistem.PozisyonKontrolGuncelle(Sembol, Pozisyon+Miktar);
Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = "Alış";
Sistem.EmirMiktari = Miktar;
Sistem.EmirSuresi = "GUN"; // GUN, SNS, IKG
Sistem.EmirTipi = "KPY"; // KPY, KIE, GIE, SAR
Sistem.EmirFiyatTipi = "PYS"; // PYS, LMT, EIF, KAP
Sistem.EmirGonder();
}
}

// satış
if (Sistem.AsagiKestiyse(MA1, MA2))
{
if (Pozisyon == 0)
{
var Miktar = 1;
Sistem.PozisyonKontrolGuncelle(Sembol, Pozisyon-Miktar);
Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = "Satış";
Sistem.EmirMiktari = Miktar;
Sistem.EmirSuresi = "GUN"; // GUN, SNS, IKG
Sistem.EmirTipi = "KPY"; // KPY, KIE, GIE, SAR
Sistem.EmirFiyatTipi = "PYS"; // PYS, LMT, EIF, KAP
Sistem.EmirGonder();
}
else if (Pozisyon > 0)
{
var Miktar = 2*Pozisyon;
Sistem.PozisyonKontrolGuncelle(Sembol, Pozisyon-Miktar);
Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = "Satış";
Sistem.EmirMiktari = Miktar;
Sistem.EmirSuresi = "GUN"; // GUN, SNS, IKG
Sistem.EmirTipi = "KPY"; // KPY, KIE, GIE, SAR
Sistem.EmirFiyatTipi = "PYS"; // PYS, LMT, EIF, KAP
Sistem.EmirGonder();
}
}
}



bu ayarlar ile sistem otomatik alım satımı yapabilir mi? yoksa eksik yazılan/yapılan birşeyler mi var?

kendi sistemimde 1-5-10-15-30-60 dk grafiklere uyguladım sabahtan beri değişik Periyot grafiklerde vix0301013 vade
sinyal oluşmasına rağmen SANAL olarak otomatik emir gönderimi yaptıramadım.

ALIM-SATIM bölümünü hazır sistemlerden birinin içine adapte ederek resimledim.
çalışır halini alabilirsem kendi sistemime adapte edeceğim.
Teşekkürler.

************


Düzgün çalışan kod ve panel üzerinden kullanılan parametreler aşağıdaki gibidir...
Formülünüz hazırlanmış "sistem+robot" dosyası ayrıca mail adresinize de gönderilmiştir.

İyi çalışmalar dileklerimizle...



// parametreleri al
var Yontem = Sistem.Parametreler[0];
var Periyot1 = Sistem.Parametreler[1];
var Periyot2 = Sistem.Parametreler[2];

// kapanış fiyatlarını oku
var Veriler = Sistem.GrafikFiyatSec("Kapanis");

// hareketli ortalamaları hesapla
var MA1 = Sistem.MA(Veriler, Yontem, Periyot1);
var MA2 = Sistem.MA(Veriler, Yontem, Periyot2);

// hesaplanan verileri çizgilere aktar ve açıklama ekle
Sistem.Cizgiler[0].Deger = MA1;
Sistem.Cizgiler[0].Aciklama = "MA küçük " + Periyot1;
Sistem.Cizgiler[1].Deger = MA2;
Sistem.Cizgiler[1].Aciklama = "MA büyük " + Periyot2;


///////// PERFORMANS GÖSTERİMİ İÇİN STRATEJİ /////////////
Sistem.KesismeTara(MA1,MA2);


///////// ALGO İLE ŞART KONTROL ET /////////////
// algo'ya emir bağlanmadıysa bu bölümü silebilirsiniz
if (Sistem.YukariKestiyse(MA1, MA2)) // alış
Sistem.AlgoIslem = "A";
if (Sistem.AsagiKestiyse(MA1, MA2)) // satış
Sistem.AlgoIslem = "S";



///////// ROBOT İLE İŞLEMLERİ YAPTIR /////////////
// zaman kontrolu ( bu saat aralıklarında emir gönderilebilsin )
if (Sistem.SaatAraligi("09:15", "12:30") || Sistem.SaatAraligi("14:00", "17:45"))
{
// robot'da kullanılacak sembol ve zaman aralığını parametre tablosundan çekiyoruz
var Sembol = Sistem.Parametreler[4];
var zamanAraligi = Sistem.Parametreler[5];

// robot için hareketli ortalamaları tekrar hesaplatıyoruz. çünkü sembol ve zaman aralığı sistem'de kullandığımızdan farklı
var Kapanislar = Sistem.GrafikFiyatOku(Sembol,zamanAraligi , "Kapanis");
var RobotMA1 = Sistem.MA(Kapanislar, Yontem, Periyot1);
var RobotMA2 = Sistem.MA(Kapanislar, Yontem, Periyot2);


// pozisyon tablosundan pozisyon miktarını al
var Pozisyon = Sistem.PozisyonKontrolOku(Sembol);

// alış
if (Sistem.YukariKestiyse(RobotMA1, RobotMA2))
{
if (Pozisyon == 0)
{
var Miktar = 1;
Sistem.PozisyonKontrolGuncelle(Sembol, Pozisyon+Miktar);
Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = "Alış";
Sistem.EmirMiktari = Miktar;
Sistem.EmirSuresi = "GUN"; // GUN, SNS, IKG
Sistem.EmirTipi = "KPY"; // KPY, KIE, GIE, SAR
Sistem.EmirFiyatTipi = "PYS"; // PYS, LMT, EIF, KAP
Sistem.EmirGonder();
}
else if (Pozisyon < 0)
{
var Miktar = -2*Pozisyon;
Sistem.PozisyonKontrolGuncelle(Sembol, Pozisyon+Miktar);
Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = "Alış";
Sistem.EmirMiktari = Miktar;
Sistem.EmirSuresi = "GUN"; // GUN, SNS, IKG
Sistem.EmirTipi = "KPY"; // KPY, KIE, GIE, SAR
Sistem.EmirFiyatTipi = "PYS"; // PYS, LMT, EIF, KAP
Sistem.EmirGonder();
}
}

// satış
if (Sistem.AsagiKestiyse(RobotMA1, RobotMA2))
{
if (Pozisyon == 0)
{
var Miktar = 1;
Sistem.PozisyonKontrolGuncelle(Sembol, Pozisyon-Miktar);
Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = "Satış";
Sistem.EmirMiktari = Miktar;
Sistem.EmirSuresi = "GUN"; // GUN, SNS, IKG
Sistem.EmirTipi = "KPY"; // KPY, KIE, GIE, SAR
Sistem.EmirFiyatTipi = "PYS"; // PYS, LMT, EIF, KAP
Sistem.EmirGonder();
}
else if (Pozisyon > 0)
{
var Miktar = 2*Pozisyon;
Sistem.PozisyonKontrolGuncelle(Sembol, Pozisyon-Miktar);
Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = "Satış";
Sistem.EmirMiktari = Miktar;
Sistem.EmirSuresi = "GUN"; // GUN, SNS, IKG
Sistem.EmirTipi = "KPY"; // KPY, KIE, GIE, SAR
Sistem.EmirFiyatTipi = "PYS"; // PYS, LMT, EIF, KAP
Sistem.EmirGonder();
}
}
}





http://l1309.hizliresim.com/1f/2/s70y9.png (http://bit.ly/c25MCx)

thebaboli
10-11-2013, 06:05
yeni versiyonu akşam kurdum şimdi denedim.

TP1 = Sistem.SayiYuvarla(TP1[i], 0.025);
Sistem.Debug(TP1[i].ToString());

sonuç süper :ley:
http://badgs.webege.com/png/Eylul56.png


Merhabalar

Sistem Modülüne yeni bir fonskiyon eklenerek bu ihtiyaçlarınızda kullanabilmeniz sağlanmıştır.
Siz sadecve yuvarlama yaptırmak istediğinizde işi bu fonksiyona havale ediniz;

Fonsiyonun adı: SayiYuvarla

Önek Kullanım:




// kaydettikten sonra Formul Test butonuna basın,
// parametrelerin olduğu yerde debug penceresi açılacak, değeri test edin
var Sayi = Sistem.SayiYuvarla(81.064, 0.025);
Sistem.Debug(Sayi.ToString());



[I]Not: Yeni Foksiyon 2.36 versiyonunda yer almaktadır.
Saygılarımızla..

*****************

thebaboli
10-11-2013, 06:08
Teşekkürler Bearbull abi


İdeal kullanıcılarına

BearBull dan bir indikatör grafikler üzerinde her periyotta işinize yarayacaktır.

IY_KOP = iNCELDİĞİ YERDEN KOP


http://badgs.webege.com/png/Eylul68.png

// iNCELDİĞİ YERDEN KOP
//var data = Sistem.GrafikFiyatSec("Kapanis");
var veri = Sistem.Parametreler[7];
var p0 = Sistem.Parametreler[0];
var p1 = Sistem.Parametreler[1];
var p2 = Sistem.Parametreler[2];
var p3 = Sistem.Parametreler[3];
var p4 = Sistem.Parametreler[4];
var p5 = Sistem.Parametreler[5];
var buw = Sistem.Parametreler[6]; // Paranetre "6" yı Simple/Exp/Weighted yapabilirsiniz



Sistem.Cizgiler[0].Deger = Sistem.MA(p0, buw, veri);
Sistem.Cizgiler[1].Deger = Sistem.MA(p1, buw, veri);
Sistem.Cizgiler[2].Deger = Sistem.MA(p2, buw, veri);
Sistem.Cizgiler[3].Deger = Sistem.MA(p3, buw, veri);
Sistem.Cizgiler[4].Deger = Sistem.MA(p4, buw, veri);
Sistem.Cizgiler[5].Deger = Sistem.MA(p5, buw, veri);

http://badgs.webege.com/png/Eylul69.png


// İndikatörler devam

RSI CCI MACD Trıgger Momentum StochasticMomIndex StochasticOsc
3-5 indikatörü aynı anda gösterebilmek için

http://666kb.com/i/chawjkumdos741ts9.png




// RSI CCI MACD Trıgger Momentum StochasticMomIndex StochasticOsc
//var data = Sistem.GrafikFiyatSec("Kapanis");
//



Sistem.Cizgiler[0].Deger = Sistem.RSI(14);
Sistem.Cizgiler[1].Deger = Sistem.CommodityChannelIndex(14);
Sistem.Cizgiler[2].Deger = Sistem.MACD(12, 26);
//Sistem.Cizgiler[3].Deger = Sistem.MA((Sistem.MACD(12, 26), "Simple", 9);
Sistem.Cizgiler[4].Deger = Sistem.Momentum(12);
Sistem.Cizgiler[5].Deger = Sistem.StochasticMomIndex(5, 3, 3);
Sistem.Cizgiler[6].Deger = Sistem.StochasticOsc(5, 3);



Macd ın Trıggeri beceremedim "0" seviyesini çizmiş oldu :yes:

http://666kb.com/i/chawhexy5rjadlte1.png


Grafikte görünümü

http://666kb.com/i/chawns4wdcf1doao9.png





// RSI CCI MACD Trıgger Momentum StochasticMomIndex StochasticOsc
//var data = Sistem.GrafikFiyatSec("Kapanis");
//



Sistem.Cizgiler[0].Deger = Sistem.RSI(14);
Sistem.Cizgiler[1].Deger = Sistem.CommodityChannelIndex(14);
Sistem.Cizgiler[2].Deger = Sistem.MACD(12, 26);
Sistem.Cizgiler[3].Deger = Sistem.MA(Sistem.Cizgiler[2].Deger, "Simple", 9);
Sistem.Cizgiler[4].Deger = Sistem.Momentum(12);
Sistem.Cizgiler[5].Deger = Sistem.StochasticMomIndex(5, 3, 3);
Sistem.Cizgiler[6].Deger = Sistem.StochasticOsc(5, 3);


çizgiler 2 nin ortalaması çizdirilirek Sistem.Cizgiler[3].Deger = Sistem.MA(Sistem.Cizgiler[2].Deger, "Simple", 9);
Sorun çözülmüştür :yes:

bildiğimde değil ha hazır TKE indikatörü içinden kopya çektim :kahkah:
öyle birşey gördüğümü hatırladım :yes:

thebaboli
10-11-2013, 06:14
Teşekkürler Levent abi


http://i884.photobucket.com/albums/ac47/ldogan/EkranAl1310nt1310s1310-13.png



// parametreleri al
var Yontem = Sistem.Parametreler[0];
var Periyot1 = Sistem.Parametreler[1];
var Periyot2 = Sistem.Parametreler[2];
var Periyot3 = Sistem.Parametreler[3];
var Periyot4 = Sistem.Parametreler[4];

// kapanış fiyatlarını oku

var Veriler = Sistem.GrafikFiyatSec("Kapanis");

// hareketli ortalamaları hesapla
var MA1 = Sistem.MA(Veriler, Yontem, Periyot1);
var MA2 = Sistem.MA(Veriler, Yontem, Periyot2);
var MA3 = Sistem.MA(Veriler, Yontem, Periyot3);
var MA4 = Sistem.MA(Veriler, Yontem, Periyot4);

// hesaplanan verileri çizgilere aktar ve açıklama ekle
Sistem.Cizgiler[0].Deger = MA1;
Sistem.Cizgiler[0].Aciklama = "MA " + Periyot1;
Sistem.Cizgiler[1].Deger = MA2;
Sistem.Cizgiler[1].Aciklama = "MA " + Periyot2;
Sistem.Cizgiler[2].Deger = MA3;
Sistem.Cizgiler[2].Aciklama = "MA " + Periyot3;
Sistem.Cizgiler[3].Deger = MA4;
Sistem.Cizgiler[3].Aciklama = "MA " + Periyot4;




bendende minik birşey :he:

piyasa ortalamaları herkesin bilmesi gereken önemli değerler...

pratikte elinizin altında dursun...


şimdi programcılık dilinde şu nasıldır....

e1:=Mov(C,3,E);
e2:=Mov(e1,3,E);
e3:=Mov(e2,3,E);
e4:=Mov(e3,3,E);
e5:=Mov(e4,3,E);
e6:=Mov(e5,3,E);
c1:=-.618*.618*.618;
c2:=3*.618*.618+3*.618*.618*.618;
c3:=-6*.618*.618-3*.618-3*.618*.618*.618;
c4:=1+3*.618+.618*.618*.618+3*.618*.618;
T3:=c1*e6+c2*e5+c3*e4+c4*e3;
T3


Merhabalar

Sisteme direk kopyala/yapıştır yaparak (bir isim verip kaydedeceksiniz sadece) hemen kullanacağınız kod ve kullanılmış ekran çıktısı aşağıdadir.

Yardımcı olabildiğimizi umarız.

Saygılarımızla





// kapanış fiyatlarını oku
var Veriler = Sistem.GrafikFiyatSec("Kapanis");

// hareketli ortalamala listelerini hesapla
var e1 = Sistem.MA(Veriler, "Exp", 3);
var e2 = Sistem.MA(e1, "Exp", 3);
var e3 = Sistem.MA(e2, "Exp", 3);
var e4 = Sistem.MA(e3, "Exp", 3);
var e5 = Sistem.MA(e4, "Exp", 3);
var e6 = Sistem.MA(e5, "Exp", 3);

// sabit sayıları tanımla
var c1 = -0.618f * 0.618f * 0.618f;
var c2 = 3 * 0.618f * 0.618f + 3 * 0.618f * 0.618f * 0.618f;
var c3 = -6 * 0.618f * 0.618f - 3 * 0.618f -3 * 0.618f * 0.618f * 0.618f;
var c4 = 1 + 3 * 0.618f + 0.618f * 0.618f * 0.618f + 3 * 0.618f * 0.618f;

// T3 boş listesini yarat ve döngü kullanarak değerleri hesapla
var T3 = Sistem.Liste(Sistem.BarSayisi, 0);
for (int i = 1; i<Sistem.BarSayisi; i++)
{
T3[i] = c1 * e6[i] + c2 * e5[i] +c3 * e4[i] + c4 * e3[i];
}

// hesaplanan verileri çizgilere aktar ve açıklama ekle
Sistem.Cizgiler[0].Deger = e1;
Sistem.Cizgiler[0].Aciklama = "Pusula e1";
Sistem.Cizgiler[1].Deger = e2;
Sistem.Cizgiler[1].Aciklama = "Pusula e2";
Sistem.Cizgiler[2].Deger = e3;
Sistem.Cizgiler[2].Aciklama = "Pusula e3";
Sistem.Cizgiler[3].Deger = e4;
Sistem.Cizgiler[3].Aciklama = "Pusula e4";
Sistem.Cizgiler[4].Deger = e5;
Sistem.Cizgiler[4].Aciklama = "Pusula e5";
Sistem.Cizgiler[5].Deger = e6;
Sistem.Cizgiler[5].Aciklama = "Pusula e6";
Sistem.Cizgiler[6].Deger = T3;
Sistem.Cizgiler[6].Aciklama = "Pusula T3";
Sistem.Cizgiler[7].Deger = Sistem.MA(T3, "Exp", 9);
Sistem.Cizgiler[7].Aciklama = "Pusula T3 AVR";

// strateji : al-sat noktalarını buraya ifade yazarak belirleyebilirsiniz
for (int i = 1; i<Sistem.BarSayisi; i++)
{
//if ( )
// Sistem.Yon[i] = "A"; // alış
//if ( )
// Sistem.Yon[i] = "S"; // satış
}



http://o1309.hizliresim.com/1f/7/sfc95.png (http://bit.ly/c25MCx)

thebaboli
10-11-2013, 23:35
// kapanış fiyatlarını oku
var Veriler = Sistem.GrafikFiyatSec("Kapanis");

// hareketli ortalamala listelerini hesapla
var e1 = Sistem.MA(Veriler, "Exp", 3);
var e2 = Sistem.MA(e1, "Exp", 3);
var e3 = Sistem.MA(e2, "Exp", 3);
var e4 = Sistem.MA(e3, "Exp", 3);
var e5 = Sistem.MA(e4, "Exp", 3);
var e6 = Sistem.MA(e5, "Exp", 3);
var e1a = Sistem.MA(Veriler, "Exp", 3);
var e2a = Sistem.MA(e1, "Exp", 5);
var e3a = Sistem.MA(e2, "Exp", 5);
var e4a = Sistem.MA(e3, "Exp", 5);
var e5a = Sistem.MA(e4, "Exp", 5);
var e6a = Sistem.MA(e5, "Exp", 5);

// sabit sayıları tanımla
var c1 = -0.618f * 0.618f * 0.618f;
var c2 = 3 * 0.618f * 0.618f + 3 * 0.618f * 0.618f * 0.618f;
var c3 = -6 * 0.618f * 0.618f - 3 * 0.618f -3 * 0.618f * 0.618f * 0.618f;
var c4 = 1 + 3 * 0.618f + 0.618f * 0.618f * 0.618f + 3 * 0.618f * 0.618f;

// T3 boş listesini yarat ve döngü kullanarak değerleri hesapla
var T3 = Sistem.Liste(Sistem.BarSayisi, 0);
for (int i = 1; i<Sistem.BarSayisi; i++)
{
T3[i] = c1 * e6[i] + c2 * e5[i] +c3 * e4[i] + c4 * e3[i];
}

// T5 boş listesini yarat ve döngü kullanarak değerleri hesapla
var T5 = Sistem.Liste(Sistem.BarSayisi, 0);
for (int i = 1; i<Sistem.BarSayisi; i++)
{
T5[i] = c1 * e6a[i] + c2 * e5a[i] +c3 * e4a[i] + c4 * e3a[i];
}

// hesaplanan verileri çizgilere aktar ve açıklama ekle
Sistem.Cizgiler[0].Deger = T3;
Sistem.Cizgiler[0].Aciklama = "Pusula T3";
Sistem.Cizgiler[1].Deger = T5;
Sistem.Cizgiler[1].Aciklama = "Pusula T5";


uzun vade haftalık grafiklerde ilginç sonuçlar verir...T3 T5 kesişmesi haftalık grafiklerde kesişmişse yön belirler.garanticidir...

al sat eklemedim. grafik üzerinde inceleyin... eksikler ve ilaveler varsa halledelim...

*************

thebaboli
10-11-2013, 23:37
iDeal Sisteme Yeni bir fonksiyon daha (Sistem.Renk) eklenmiştir.
"Sistem.Renk" fonksiyonu kullanımı şu şekildedir;
Sistem.Renk(OpaklikOrani, KirmiziOrani, YesilOrani, MaviOrani) Değerler 0-255 arasında olmalıdır

Ayrıca;

Sistem'de çizgilerin "renkleri", "kalınlıkları" ve "tipleri" hem koddan, hem panelden değiştirlebilir hale getirildi.
Renk, kalınlık ve stil kodlaması için aşağıda bir örnek bulabilirsiniz;



var RSI = Sistem.RSI (14);
var AVR = Sistem.MA(RSI, "Exp", 9);


Sistem.Cizgiler[0].Deger = RSI;
Sistem.Cizgiler[0].Aciklama = "RSI";
Sistem.Cizgiler[0].Panel = 2;
// Sistem.Renk(OpaklikOrani, KirmiziOrani, YesilOrani, MaviOrani) Değerler 0-255 arasında olmalıdır
Sistem.Cizgiler[0].Renk = Sistem.Renk(255, 255, 100, 0);
Sistem.Cizgiler[0].Kalinlik = 3;
Sistem.Cizgiler[0].Stil = 1; // 1:Düz, 2:Nokta, 3:Kesik, 4:Yassı

Sistem.Cizgiler[1].Deger = AVR;
Sistem.Cizgiler[1].Aciklama = "AVR";
Sistem.Cizgiler[1].Panel = 2;
// Sistem.Renk(OpaklikOrani, KirmiziOrani, YesilOrani, MaviOrani) Değerler 0-255 arasında olmalıdır
Sistem.Cizgiler[1].Renk = Sistem.Renk(255, 0, 200, 0);
Sistem.Cizgiler[1].Kalinlik = 3;
Sistem.Cizgiler[1].Stil = 2; // 1:Düz, 2:Nokta, 3:Kesik, 4:Yassı



Panel üzerinden değişiklik yapabilmek için panele yeni alanlar eklendi.;

http://p1309.hizliresim.com/1f/8/sg1f4.png (http://bit.ly/c25MCx)

Grafik üzerindeki görünüm;

http://l1309.hizliresim.com/1f/8/sg1gl.png (http://bit.ly/c25MCx)

Saygılarımızla
*************

thebaboli
10-11-2013, 23:40
bende HHL_LLV_BAND_CLOSE yokmuş yada değiştirmişim. :notr:


Sadece Parametre girerek değişik periyotlarda kullanmak isteyenlere,

Parametre değiştir
http://badgs.webege.com/png/Eylul82.png



var Bar = Sistem.GrafikVerileri; // tüm bar varilerini içeren listeyi Bar değişkenine ata
var BarSayisi = Sistem.BarSayisi; // grafikteki bar sayısını değişkene aktar
var bb = Sistem.Parametreler[0]; // parametre kısmından kullanılacak değeri gir
// hazır sistem hesaplama fonksiyonları liste olarak değer döndürür
var HHV = Sistem.HHV(bb, "Yuksek");
var LLV = Sistem.LLV(bb, "Dusuk");

// sistem fonksiyonu kullanmadan yapılan hesaplamalarda liste yaratıp, döngü kullanmamız gerekiyor
var Part1 = Sistem.Liste(BarSayisi , 0); // C - (.5 * ( HHV + LLV)
var Part2 = Sistem.Liste(BarSayisi , 0); // HHV - LLV

// döngü kullanarak listeleri hesaplat
for (int i = 100; i < BarSayisi; i++)
{
Part1[i] = Bar[i].Close - 0.5f * (HHV[i] + LLV[i]); // C - (.5 * ( HHV + LLV);
Part2[i] = HHV[i] - LLV[i] ; // HHV - LLV
}

// sistem fonksiyonlarını kullanarak hareketli ortalama listelerini oluştur
var Part1Mov = Sistem.MA(Sistem.MA(Part1, "Exp", 25) , "Exp" , 2);
var Part2Mov = Sistem.MA(Sistem.MA(Part2, "Exp", 25) , "Exp" , 2);

// boş indikator listesi tanımla ve hesapla
var IND = Sistem.Liste(BarSayisi , 0); // boş liste
for (int i = 100; i < BarSayisi; i++)
{
IND[i] = 100 * ( Part1Mov[i] / (0.5f * Part2Mov[i]));
}
// indikator ortalama listesi
var AVR = Sistem.MA(IND ,"Exp", 5);

// listeleri çizgilere aktar
Sistem.Cizgiler[0].Deger = IND;
Sistem.Cizgiler[1].Deger = AVR;

// strateji
Sistem.KesismeTara(IND, AVR);
**********

thebaboli
10-11-2013, 23:42
Sistem/İndikatör Yazarlarına;

Yoğun emek harcayıp geliştirdiğiniz sistemleri görsel koruma altına alabilirsiniz..
Bunun için aşağıdaki fonksiyonu ekledik..
(Not:renk tanımlarken opaklık oranını düşük tutarsanız daha mantıklı olacaktır..)
(var Renk1 = Sistem.Renk(OpaklikOrani, KırmızıOranı, YeşilOranı, MaviOranı); değerler 0-255 arasında olmalıdır)

Sistem.ZeminYazisiEkle(Metin, Panel, X, Y, Renk, FontAdi, FontBoyut)

Örnek Kod ve ekran çıktısını aşağıda bulabilirsiniz..




// kapanış fiyatlarını oku
var Veriler = Sistem.GrafikFiyatSec("Kapanis");

// hareketli ortalamaları hesapla
var MA1 = Sistem.MA(Veriler, "Exp", 5);
var MA2 = Sistem.MA(Veriler, "Exp", 22);

// hesaplanan verileri çizgilere aktar ve açıklama ekle
Sistem.Cizgiler[0].Deger = MA1;
Sistem.Cizgiler[1].Deger = MA2;

// strateji
Sistem.KesismeTara(MA1, MA2);

// zemin yazısı
var Renk1 = Sistem.Renk(50, 255, 50, 50);
Sistem.ZeminYazisiEkle("iDeal", 1, 300, 100, Renk1, "Tahoma", 72);

var Renk2 = Sistem.Renk(50, 80, 255, 80);
Sistem.ZeminYazisiEkle("Professional", 1, 120, 200, Renk2, "Tahoma", 72);

var Renk3 = Sistem.Renk(50, 50, 100, 200);
Sistem.ZeminYazisiEkle("Trading Platform", 1, 50, 300, Renk3, "Tahoma", 72);




http://p1309.hizliresim.com/1f/8/sgcbk.png (http://bit.ly/c25MCx)

******************


Teknik Analizcilere yönelik önemli bir yenilik iDeal Terminaline eklenmiştir.

Artık, üst dönem MA çizgilerini alt döneme uygulayabilirsiniz.
Örneğin 60 Dakikalık grafikte, günlük, haftalık ve aylık MA çizdirebilirsiniz.

Bunun için tek yapmanız gereken Indikatör Parametreleri penceresinde STATİK MA periyodunuz girmeniz...
Hatta dolgu özellğini kullanarak daha efektif görsellik elde edebilirsiniz..

http://o1309.hizliresim.com/1f/9/shl0w.png (http://bit.ly/c25MCx)

http://n1309.hizliresim.com/1f/9/shl43.png (http://bit.ly/c25MCx)

http://n1309.hizliresim.com/1f/9/shl4g.png (http://bit.ly/c25MCx)

Saygılarımızla

thebaboli
10-11-2013, 23:47
Grafiğe, diğer sembol grafiklerini indikatör gibi çizdirin..Zemin Yazısı fonksiyonunu indikatör alanında da kullanın..

Aşağıdaki ekran görüntüsünün kodu şöyledir;

grafiklerin çizdirilmesi..


var Sembol1 = Sistem.Sembol;
var Veriler1 = Sistem.GrafikVerileri;

var Sembol2 = "IMKBX'XU100";
var Veriler2 = Sistem.GrafikVerileriniOku(Sembol2, Sistem.Periyot);
Veriler2 = Sistem.GrafikVerilerindeTarihHizala(Veriler1, Veriler2);
var data2 = Sistem.GrafikFiyatOku(Veriler2 , "Kapanis");

var Sembol3 = "VIP'VIP-X030";
var Veriler3 = Sistem.GrafikVerileriniOku(Sembol3, Sistem.Periyot);
Veriler3 = Sistem.GrafikVerilerindeTarihHizala(Veriler1, Veriler3);
var data3 = Sistem.GrafikFiyatOku(Veriler3 , "Kapanis");

var Sembol4 = "FX'EURUSD";
var Veriler4 = Sistem.GrafikVerileriniOku(Sembol4, Sistem.Periyot);
Veriler4 = Sistem.GrafikVerilerindeTarihHizala(Veriler1, Veriler4);
var data4 = Sistem.GrafikFiyatOku(Veriler4 , "Kapanis");

var Sembol5 = "IMKBH'HALKB";
var Veriler5 = Sistem.GrafikVerileriniOku(Sembol5, Sistem.Periyot);
Veriler5 = Sistem.GrafikVerilerindeTarihHizala(Veriler1, Veriler5);
var data5 = Sistem.GrafikFiyatOku(Veriler5 , "Kapanis");


// hesaplanan verileri çizgilere aktar
Sistem.Cizgiler[0].Deger = data2;
Sistem.Cizgiler[0].Aciklama = Sembol2;

Sistem.Cizgiler[1].Deger = data3;
Sistem.Cizgiler[1].Aciklama = Sembol3;

Sistem.Cizgiler[2].Deger = data4;
Sistem.Cizgiler[2].Aciklama = Sembol4;

Sistem.Cizgiler[3].Deger = data5;
Sistem.Cizgiler[3].Aciklama = Sembol5;


zemin yazılarının eklenmesi için




// zemin yazısı
var Renk1 = Sistem.Renk(70, 255, 50, 50);
Sistem.ZeminYazisiEkle("iDeal", 1, 500, 50, Renk1, "Tahoma", 50);

var Renk2 = Sistem.Renk(80, 80, 200, 80);
Sistem.ZeminYazisiEkle("Professional", 1, 320, 100, Renk2, "Tahoma", 50);

var Renk3 = Sistem.Renk(70, 50, 100, 50);
Sistem.ZeminYazisiEkle("Trading Platform", 1, 150, 150, Renk3, "Tahoma", 50);

var Renk4 = Sistem.Renk(70, 50, 50, 180);
Sistem.ZeminYazisiEkle("HALK BANKASI", 2, 300 ,30, Renk4, "Tahoma", 30);

var Renk5 = Sistem.Renk(70, 50, 100, 200);
Sistem.ZeminYazisiEkle("BIST 100", 3, 300, 30, Renk5, "Tahoma", 30);

var Renk6 = Sistem.Renk(70, 50, 100, 200);
Sistem.ZeminYazisiEkle("VIOP ENDEKS 30", 4, 300, 30, Renk6, "Tahoma", 30);

var Renk7 = Sistem.Renk(70, 50, 100, 200);
Sistem.ZeminYazisiEkle("EURO/DOLAR", 5, 300, 30, Renk7, "Tahoma", 30);



http://u1309.hizliresim.com/1f/b/sjb7c.png (http://bit.ly/c25MCx)

panelde çizgilerin yerlerini seçmeyi unutmayınız..
http://s1309.hizliresim.com/1f/b/sjb8u.png (http://bit.ly/c25MCx)



****************


Üst döneme ait Bollinger, alt dönem grafikte görüntülenebiliyor.

Günlük Grafik üzerinde, Aylık Bollinger görseli;

http://n1309.hizliresim.com/1f/b/sk5r9.png (http://bit.ly/c25MCx)




Üst dönemi alt dönemde çizdirme özelliğinin kullanılabildiği indikatörlere Envelope da dail edildi.

http://o1309.hizliresim.com/1f/b/sk6db.png (http://bit.ly/c25MCx)



Euroline’da da bulunan ProHigh / ProLow indikatörü eklendi
Aşağıdaki resimde de 15 dk grafiğe günlük ve haftalık değerler giydirilmiştir..
istediğimiz kadar dönem giydirebiliriz..


iDeal'den;

http://r1309.hizliresim.com/1f/c/skflv.png (http://bit.ly/c25MCx)

Euroline'dan;

http://m1309.hizliresim.com/1f/c/skfjp.png (http://bit.ly/c25MCx)




Sistemciler için Pivot formülü;

Pivot = ( Önceki Yüksek + Önceki Düşük + Önceki Kapanış ) / 3
ProHigh = 2 * Pivot – Önceki Düşük
ProLow = 2 * Pivot – Önceki Yüksek

Ayrıca SİSTEM yazanlar için üç yeni fonksiyon eklenmiştir.;

Sistem.PH01
Sistem.PL01
Sistem.PVT01



http://r1309.hizliresim.com/1f/c/skflv.png (http://bit.ly/c25MCx)




iDeal Sistem'e iki yeni fonksiyon eklenmiştir.;

Sistem.DonemCevir(Veriler, UstDonemVerileri, UstDonemCevrilecekData)
üst dönem verisini mevcut döneme giydirmek için kullanılır

Sistem.DolguEkle(No1, No2, YukselisRenk, DususRenk)
iki çizgi arasını boyamak için kullanılır




iDeal Kullanıcılarıi Sistem'i kullanarak kendi pivotlarını yaratabilirler.

Bunun için gerekli fonksiyonlar iDeal Sistem'e eklenmiştir.

Aşağıda örnek bir kod ve kodun uygulanmasıyla elde edilen grafik görüntüsü paylaşılmıştır;




// haftalık verileri oku
var HaftalikVeriler = Sistem.GrafikVerileriniOku(Sistem.Sembol, "H");

// boş veri listeleri yarat
var PH = Sistem.Liste(0);
var PL = Sistem.Liste(0);
var PVT = Sistem.Liste(0);

// döngü ile haftalık pivot, prohigh, prolow hesapla
for (int i = 1; i < HaftalikVeriler.Count; i++)
{
// pivot önceki barın (H+L+C)/3 değeri
PVT[i] = (HaftalikVeriler[i-1].High + HaftalikVeriler[i-1].Low + HaftalikVeriler[i-1].Close) / 3;
// pro high hesapla
PH[i] = 2 * PVT[i] - HaftalikVeriler[i-1].Low;
// pro low hesapla
PL[i] = 2 * PVT[i] - HaftalikVeriler[i-1].High;
}


// 0 nolu çizgi
Sistem.Cizgiler[0].Deger = Sistem.DonemCevir(Sistem.GrafikVerileri, HaftalikVeriler, PH);
Sistem.Cizgiler[0].Aciklama = "Pro High , Hafta";
Sistem.Cizgiler[0].ActiveBool = true;
Sistem.Cizgiler[0].Renk = Sistem.Renk(255, 0, 0, 255);
Sistem.Cizgiler[0].Kalinlik = 5;

// 1 nolu çizgi
Sistem.Cizgiler[1].Deger = Sistem.DonemCevir(Sistem.GrafikVerileri, HaftalikVeriler, PL);
Sistem.Cizgiler[1].Aciklama = "Pro Low , Hafta";
Sistem.Cizgiler[1].ActiveBool = true;
Sistem.Cizgiler[1].Renk = Sistem.Renk(255, 255, 0, 0);
Sistem.Cizgiler[1].Kalinlik = 5;


// 2 nolu çizgi
Sistem.Cizgiler[2].Deger = Sistem.DonemCevir(Sistem.GrafikVerileri, HaftalikVeriler, PVT);
Sistem.Cizgiler[2].Aciklama = "Pro Low , Hafta";
Sistem.Cizgiler[2].ActiveBool = true;
Sistem.Cizgiler[2].Renk = Sistem.Renk(255, 0, 0, 0);
Sistem.Cizgiler[2].Kalinlik = 2;


// dolgu tamınla
var DolguRengi = Sistem.Renk(40, 100, 100, 255);
Sistem.DolguEkle(0, 1, DolguRengi, DolguRengi);



http://m1309.hizliresim.com/1f/c/skj41.png (http://bit.ly/c25MCx)

http://t1309.hizliresim.com/1f/c/skj67.png (http://bit.ly/c25MCx)



Saygılarımızla

thebaboli
10-11-2013, 23:52
sn. idealtrade,

paylaşımlar süper, çok teşekkür ederim.


robot kodunda, alış fiyatını kapaniş fiyatı ile nasıl mukayese ederiz.

basit bir örnek yapabilirmisiniz?

*******************


Merhabalar,
açılış kapanışdan büyük ise 1
küçük ise -1
eşit ise 0
değeri alan bir indikatör için iki ayrı kod örneği ve birinci yöntem için grafik görüntüsü aşağıda verilmiştir.;

Yöntem 1:


var AcilisListe = Sistem.GrafikFiyatSec("Acilis");
var KapanisListe = Sistem.GrafikFiyatSec("Kapanis");

// döngü ile hesapla
for (int i = 1; i < AcilisListe.Count; i++)
{
if (AcilisListe[i] > KapanisListe[i])
Sistem.Cizgiler[0].Deger[i] = 1.0f;
else if (AcilisListe[i] < KapanisListe[i])
Sistem.Cizgiler[0].Deger[i] = -1f;
else
Sistem.Cizgiler[0].Deger[i] = 0f;
}


// 0 nolu çizgi
Sistem.Cizgiler[0].Panel = 2;
Sistem.Cizgiler[0].ActiveBool = true;
Sistem.Cizgiler[0].Aciklama = "Açılış vs Kapanış , Yontem 1";


Yöntem 2:


// döngü ile hesapla
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if (Sistem.GrafikVerileri[i].Open > Sistem.GrafikVerileri[i].Close)
Sistem.Cizgiler[0].Deger[i] = 1.0f;
else if (Sistem.GrafikVerileri[i].Open < Sistem.GrafikVerileri[i].Close)
Sistem.Cizgiler[0].Deger[i] = -1f;
else
Sistem.Cizgiler[0].Deger[i] = 0f;
}


// 0 nolu çizgi
Sistem.Cizgiler[0].Panel = 2;
Sistem.Cizgiler[0].ActiveBool = true;
Sistem.Cizgiler[0].Aciklama = "Açılış vs Kapanış , Yontem 2";


Grafikte görüntü şöyle olur;

http://s1309.hizliresim.com/1f/c/slg36.png (http://bit.ly/c25MCx)

Saygılarımızla

thebaboli
10-11-2013, 23:53
Sayın Bear_Bull,

VIOP "Açık pozisyon sayısı değişimi" değerini sistem formüllerinizde kullanmak istiyordunuz;
İki ayrı yöntemle bunu yapabileceğinizi örnek kodlarla birlikte bilgilerinize sunarız;



// seçilen bir senet
var yuzeysel = Sistem.YuzeyselVeriOku("VIP'VIP-X030");
var Y = yuzeysel.OpenInterestDif;
Sistem.Debug(Y.ToString()+ " " + DateTime.Now.ToString());




// grafik sisteminden gelen senet
var X = Sistem.YuzeyselVeri.OpenInterestDif;
Sistem.Debug(X.ToString()+ " " + DateTime.Now.ToString());


İyi çalışmalar

*****************


ileri düzey robot geliştiren abonelerimizden gelen talepler doğrultusunda yeni kontrol tabloları eklenmiştir..

yapı sözlük mantığıyla çalışmaktadır..
bir sayıyı ve sözcüğü tabloya ekleyip, daha sonra onun değerini okuyup kontrol yaptırabilirsiniz..
sözlüğe eklediğiniz sayı veya sözcük iDeal Framework içinde saklanmaktadır..
yani bir sistem ile sözlüğe eklediğiniz sayı veya sözcüğü başka bir sistem içinden çağırabilirsiniz..

sayı tipi decimal dir..
kullanıcıların sayı tipi dönüştürmeye ihtiyacı olabilir ve biraz C# bilgisi gerektirmektedir..
bu konuda yardıma ihtiyacı olan arkadaşlar hiç çekinmeden bize başvurabilirler..

Yeni eklenenler şunlar

// sözcük ekler
Sistem.SozcukTablosunuGuncelle(Anahtar, Sozcuk);

// depolanmış sözcüğü okur
var X = Sistem.SozcukTablosunuOku(Anahtar);

// sayı ekler
Sistem.SayiTablosunuGuncelle(Anahtar, sayı);

// depolanmış sayıyı okur
var Y = Sistem.SayiTablosunuOku(Anahtar);

thebaboli
10-11-2013, 23:55
Merhabalar, sadece 1 tana MA ile al-sat sinyali alma imkanı var mı ?
MA(20) üstü al
altı sat sinyali istiyorum.

Cevap ve yardım için şimdiden tşkr




Merhabalar,

İstemiş olduğunuz sinyali veren sistemin kodu aşağıdadır. Grafik üzerindeki görüntüsü de paylaşılmıştır. Sistem dosyası örnek olması açısından yayına da gönderilmiştir. (ekranınız açık idiyse 13:10 - 13:15 arasında dosyayı almışsınızdır. Sadece programı kapatıp açın.. Sistem tanımlarında ORNEK_KAPANIS_CROSS_MA ismiyle göreceksiniz.

Talep ederseniz veya kullanacaksanız, sistemin Robot kodları konusunda da yardımcı oluruz.




// kapanış fiyatlarını oku
var KapanisListesi = Sistem.GrafikFiyatSec("Kapanis");

// hareketli ortalamayı hesapla
var MA = Sistem.MA(KapanisListesi, "Exp", 20);

// hesaplanan verileri çizgilere aktar
Sistem.Cizgiler[0].Deger = MA;

// strateji
Sistem.KesismeTara(KapanisListesi, MA);


http://j1309.hizliresim.com/1f/f/snfp2.png (http://bit.ly/c25MCx)

Saygılarımızla
*************

thebaboli
10-11-2013, 23:56
sn idealtrade,

robot kod paylaşımları için çok teşekkürler, devamı bekleriz....

yeni eklenen kontrol tabloları ile takeprofit ve stoploss yazabiliriz.



sayı tipi decimal dir..
kullanıcıların sayı tipi dönüştürmeye ihtiyacı olabilir ve biraz C# bilgisi gerektirmektedir..
bu konuda yardıma ihtiyacı olan arkadaşlar hiç çekinmeden bize başvurabilirler..


sayı tipi dönüştürme ile ilgili örnek atabilirmisiniz?

******************


Merhabalar,

Sayı tipi uyuşmazlığında aşağıdaki mesajı alırsınız..
10f float sayıdır, decimal ise daha çok küsurat tutan bir tiptir.. bunları çarpabilmek için tip dönüştürmek gerekir

C# bazı tip çeviren fonksiyonlara sahiptir..
var TestSayisi = Convert.ToSingle(Deger) * 10.0F;
var TestSayisi = Deger * Convert .ToDecimal(10.0F);


Aşağıdaki örnek her çağırıldığında bir sayı artar

http://t1309.hizliresim.com/1f/f/snkqg.png (http://bit.ly/c25MCx)


Saygılarımızla

thebaboli
10-11-2013, 23:58
Diğer yazılım dillerinden alışkın olunan bazı mantıksal ifadeler c# ortamında aşağıdaki gibi kullanılır.

== "eşit" ise
| "mantıksal veya" ( || bunu tercih edin)
& "mantıksal ve" ( && bunu tercih edin)
!= "eşit değil" ise
>= "büyük eşit" ise
<= "küçük eşit" ise

İyi çalışmalar

*********************


Farklı iki senedinin birbirine oranının indikatör olarak çizdirilmesi için örnek kod ve görsel aşağıda paylaşılmıştır.

Gerek fonksiyonların kullanımına daha kolay alışılabilmesi gerekse nelerin yapılabileceğinin görülmesi adına örnek paylaşımlarımızı olabildiğince arttırmaya çalışıyoruz. Başkalarıyla da paylaşmamız istenen / izin verilen örnekler oldukça, onlar da buradan paylaşılacaktır.

Saygılarımızla



var GrafiktenGelen = Sistem.GrafikVerileri;
var VerilerISCTR = Sistem.GrafikVerileriniOku("IMKBH'ISCTR", Sistem.Periyot);
var VerilerHALKB = Sistem.GrafikVerileriniOku("IMKBH'HALKB", Sistem.Periyot);

// bar sayıları farklı olabileceğinden hizalama yapmak gerekiyor
var HizalaISCTR = Sistem.GrafikVerilerindeTarihHizala(GrafiktenGelen , VerilerISCTR);
var HizalaHALKB = Sistem.GrafikVerilerindeTarihHizala(GrafiktenGelen , VerilerHALKB);

var Oran = Sistem.Liste(GrafiktenGelen.Count, 0);
for (int i =0; i < GrafiktenGelen.Count; i++)
{
Oran[i] = HizalaISCTR [i].Close / HizalaHALKB [i].Close;
}

// 0 nolu çizgi
Sistem.Cizgiler[0].Deger = Oran;


Not: Hazır sistem dosyası iDeal ekranlarına da gönderildi.

Görsel: (Not grafikte diğer senede böl diye bir seçenek vardı zaten. Ama bu bölünme sonucu takip/yorum açısından anlamlı
olmuyordu fazla. Bir indikatör gibi gözlemlemekle arasındaki fark aşağıda görülmektedir. (sağ taraftaki, ISCTR/HALKB grafiği)

http://k1309.hizliresim.com/1f/f/snquc.png (http://bit.ly/c25MCx)


iDeal 2.45 versiyonu yayındadır.

Bugün sisteme üç yeni indikatör eklenmiştir. Bu indikatörler;


o Ehlers Filter

o RAVI

o RSI Denvelope




Ayrıcai Sistem yazanlar için, söz konusu indikatörlere yönelik aşağıdaki fonksiyonlar eklenmiştir;



o Sistem.EhlersFilter()

o Sistem.EhlersFilter(Veriler)

o Sistem.RAVI(7, 65,"Simple")

o Sistem.RAVI(Veriler, 7, 65,"Simple")

o Sistem.RSIDenvelopeMid(Veriler, "Simple", 14, 2)

o Sistem.RSIDenvelopeUp(Veriler, "Simple", 14, 2)

o Sistem.RSIDenvelopeDown(Veriler, "Simple", 14, 2)




Son olarak yine sistemcilere yönelik olarak aşağıdaki fonksiyon eklenmiştir;



o Sistem.Yazitipi

Saygılarımızla

******************


Merhabalar

iDeal 2.48 versiyonunda (şu an yayındadır) Paralel Kanal Çizimlerinin Logaritmik grafiklere uyarlanması yapılmıştır.
Dün yayınlanan 2.47 versiyonunda ise aşağıdaki güncellemeler yapılmıştır;

- Teknik Analize 120 ve 240 dk priyot seçenekleri eklenmiştir.
- Sistem kullanıcılar HHV ve LLV fonksiyonların kendi özel liste değerleri ile kullanabilsinler diye iki yeni fonksiyon eklendi;
-Sistem.HHV(periyot, Liste
-Sistem.LLV(periyot, Liste
- Grafik başlığında yer alan hızlı periyor seçme butonları, kullanıcı tarafından belirleni hale getirildi. Bı kısma istediğiniz periyodun kısayolunu koyup, istemediklerinizi kaldırabilirsiniz.




http://o1309.hizliresim.com/1f/m/sumnl.png (http://bit.ly/c25MCx)

resimde belirttigim ve kademe analiz referanslı isteklere cevap bulabilir miyiz?tesekkurler


**********************

Merhabalar,

iDeal fiyat penceresi verilerinde sunulan sütunlardan elde edilmiş aşağıdaki sayfa sizin aradığınız veriye ulaşmanızı sağlamaktadır. Bir fiyat penceresine tüm senetleri atıp, Para giriş miktarı, Çıkış miktarı, birbirine oranları, net para giriş/çıkış değeri sütunlarını yerleştirin ve bu sayfayı NET Para Giriş/Çıkış kolonuna göre periyodik sıralayın. Birbirine yakınları da, Alış lotu, satış lotunu (ya da tersini) çokça geçen senetleri de kolayca ayırt edin..

Robot/Sistem formüllerinde YuzeyselVerileriOku fonksiyonu ile bu sütunlara ait bilgiler okunabilmekte ve formüllerinizde de kullanılabilmektedir. (Söz konusu veriler Hisse Düzey 1+ lisans gerektirir)

http://j1309.hizliresim.com/1f/n/svkul.png (http://bit.ly/c25MCx)

thebaboli
11-11-2013, 00:02
sn.idealtrade bir sorum daha olacak.

MA(30) üstü AL
MA(50) alt SAT

bu şekilde mümkün mü ?

bir nevi doubleMA 'da bulutun alt çizgisi SAT, üst çizgisi AL yapmak istiyorum.

şimdiden tşkr

********************


yazılır da

mav 30 geçildi diyelim alım yapıldı,
mav 50 geçemeden geri döndü ve çok fazlada aşağı indi o zaman ne yapacaksınız ?

hem 30 kesişimi
hem de 50 kesişimi kullanmak gerekir.

grafikten kontrol edebilirsin.
http://badgs.webege.com/png/Eylul190.png



Örnek yazılım.
İsim = AnarsistVobcu



var Veriler = Sistem.GrafikFiyatSec("Kapanis"); // Acilis Dusuk Kapanis Ortalama OrtaNokta Yuksek vs..

// hareketli ortalamaları hesapla
var MA1 = Sistem.MA(Veriler, "Simple", 30); //Exp Simple Weighted + vs vs
var MA2 = Sistem.MA(Veriler, "Simple", 50);


Sistem.KesismeTara(Veriler,MA1);
Sistem.KesismeTara(Veriler,MA2);
Sistem.Cizgiler[0].Deger = MA1;
Sistem.Cizgiler[1].Deger = MA2;





Merhabalar ustalar,

MA'nın al-sat sinyalini vermesi için iki koşula bağlayabiliyor muyuz.
Mesele MA(50) ve MA(70) e bağlamak istiyorum. İkisini geçerse AL, ikisini aşağı kırarsa Sat

Tşkr.




Merhabalar
İki hatta sınırsız sayıda mantıksal koşula bağlayabilirsiniz.
Ama verdiğiniz örnekte zaten uzun dönemi keserse kısa dönemi de kesmiş oluyor.
Sistem tanımlarında, örnekleri incelemenizi öneririz;

RSI VE MS için Algo örneği var mesela


// kapanış fiyatlarını oku
var Veriler = Sistem.GrafikFiyatSec("Kapanis");

// hareketli ortalamaları hesapla
var MA1 = Sistem.MA(Veriler, "Simple", 5);
var MA2 = Sistem.MA(Veriler, "Simple", 22);

// RSI hesapla
var RSI = Sistem.RSI (14);
var RSIAVR = Sistem.MA(RSI, "Simple", 9);


// algo ( MA veya RSI )
if (Sistem.YukariKestiyse(MA1, MA2) || Sistem.YukariKestiyse(RSI, RSIAVR)) // alış
Sistem.AlgoIslem = "A";
if (Sistem.AsagiKestiyse(MA1, MA2) || Sistem.AsagiKestiyse(RSI, RSIAVR)) // satış
Sistem.AlgoIslem = "S";

//çizgilerin belirlenmesi.

thebaboli
11-11-2013, 00:07
1-Trendlerin kırılımlarına alarm belirleyebilir miyiz?

2-Grafikler sağ tarafa kaymıyor.Bunla ilgili bir şey yapabilir miyiz?

Teşekkürler...

****************


Merhabalar

Trend kırılımlarında otomatik emir gönderimi yapan Robot kodlarını paylaşmıştık daha önce başka kullanıcılarımızın isteği üzerine. Bu örnek kod size robotu sanal olarak çalıştırırsanız bir alarm olarak da hizmet edecektir.
Real time çalışır. Aşağıdaki kod çalışan bir koddur ve kendinize göre değiştirip kaydedip kullanabilirsiniz;

Kod seçimi, grafik periyodu belirtiliyor
trendin başlangıç noktasının tarih, saat ve değeri veriliyor
bitiş noktasının günü, saati, değeri belirtiliyor.
aşağı veya yukarı yönde kırma olursa otomatik emir gönder fonksiyonlarıyla robot çalışıyor.

Siz robotu yazıp sanal olarak çalıştırdığınızda, Trend kırdığı anlarda sesli uyarıyla birlikte kırılma anına ait bilgileri de ekranda göreceksiniz.




// trend yukari kırılırsa al
if (Sistem.TrendAsagiKirilirsa("VIP'F_XU0301013S0", "60", "13.09.2013 17:00", 87.900, "20.09.2013 14:00", 98.200))
{
var Pozisyon = Sistem.PozisyonKontrolOku("TREND1");
if (Pozisyon == 0)
{
var Miktar = 1;
Sistem.PozisyonKontrolGuncelle("TREND1", Pozisyon-Miktar);
Sistem.EmirSembol = "VIP'F_XU0300813S0";
Sistem.EmirIslem = "Satış";
Sistem.EmirMiktari = Miktar;
Sistem.EmirSuresi = "GUN"; // GUN, SNS, IKG
Sistem.EmirTipi = "KPY"; // KPY, KIE, GIE, SAR
Sistem.EmirFiyatTipi = "PYS"; // PYS, LMT, EIF, KAP
Sistem.EmirGonder();
}
}

// trend aşağı kırılırsa sat
if (Sistem.TrendYukariKirilirsa("VIP'F_XU0300813S0", "60", "16.08.2013 14:00", 91.187, "16.08.2013 16:00", 90.478))
{
var Pozisyon = Sistem.PozisyonKontrolOku("TREND2");
if (Pozisyon == 0)
{
var Miktar = 1;
Sistem.PozisyonKontrolGuncelle("TREND2", Pozisyon+Miktar);
Sistem.EmirSembol = "VIP'F_XU0300813S0";
Sistem.EmirIslem = "Alış";
Sistem.EmirMiktari = Miktar;
Sistem.EmirSuresi = "GUN"; // GUN, SNS, IKG
Sistem.EmirTipi = "KPY"; // KPY, KIE, GIE, SAR
Sistem.EmirFiyatTipi = "PYS"; // PYS, LMT, EIF, KAP
Sistem.EmirGonder();

}



2 numaralı maddeye gelince;aşağıdaki ekran görüntüsünde de görülebileceği üzere bu mümkün.

http://r1309.hizliresim.com/1f/n/svdlp.png (http://bit.ly/c25MCx)

Saygılarımızla

thebaboli
11-11-2013, 00:14
Bu kodlama isini beceremedim ben :-) Isin kotusu hatanin ne oldugunu da anlayamiyorum cikan mesajlardan.

Su asagidaki basit matriks kodunu yazmama yardimci olabilecek var mi acaba?

n1 := input("Time periods 1",5,1000,15);
n2 := input("Time periods 2",3,1000,3);
eco:=(MOV(MOV((C-O),n1,E),n2,E)/MOV(MOV((H-L),n1,E),n2,E))*100;
eco;

ornegin sunu yaziyorum, operator ''-'' cannot be applied (uygulanamaz) diye hata veriyor...

var veri1=Sistem.GrafikFiyatSec("Kapanis")-Sistem.GrafikFiyatSec("Acilis");

*************************


Merhabalar;

Panelde sağ üstteki parametreler alanına 3 ve 15 değerleri girilip kullanılacak şekilde kaydedip çalıştırabilirsiniz.
Ekran çıktısı da aşağıdaki gibi oluyor..




// parametrelerin atanmasi
var n1 = Sistem.Parametreler[0];
var n2 = Sistem.Parametreler[1];

//
var veri = Sistem.GrafikVerileri;
var BarSayisi = veri.Count; // kolaylık olsun diye grafikteki bar sayısını değişkene aktar
var close = Sistem.Liste(BarSayisi , 0); // boş liste oluştur
var open = Sistem.Liste(BarSayisi , 0); // boş liste oluştur
var high = Sistem.Liste(BarSayisi , 0);
var low = Sistem.Liste(BarSayisi , 0);
var veri1 = Sistem.Liste(BarSayisi , 0);
var veri2 = Sistem.Liste(BarSayisi , 0);


for (int i = 1; i < BarSayisi; i++)
{
open[i] = veri[i].Open;
close[i] = veri[i].Close;
high[i] = veri[i].High;
low[i] = veri[i].Low;
veri1[i] = close[i] - open[i];
veri2[i] = high[i] - low[i];
}

var mov1=Sistem.MA(veri1, "Exp", n1);
var mov2=Sistem.MA(mov1, "Exp", n2);
var mov3=Sistem.MA(veri2, "Exp", n1);
var mov4=Sistem.MA(mov3, "Exp", n2);

var eco = Sistem.Liste(BarSayisi , 0);

for (int i = 1; i < BarSayisi; i++)
{
eco[i]=(mov2[i]/mov4[i])*100;
}

Sistem.Cizgiler[0].Deger = eco;


http://t1309.hizliresim.com/1f/r/sycqq.png (http://bit.ly/c25MCx)

Ayrıca sizin ilerlediğiniz yolu kullandık ama aşağıdaki satırları bu şekilde kullanmanıza gerek yok aslında

open[i] = veri[i].Open;
close[i] = veri[i].Close;
high[i] = veri[i].High;
low[i] = veri[i].Low;
veri1[i] = close[i] - open[i];
veri2[i] = high[i] - low[i];


Sistem.GrafikFiyatSec("Kapanis"); gibi hazır fonksiyonları kullanabilirsiniz.
var Veriler = Sistem.GrafikFiyatSec("Kapanis") gibi..

Saygılarımızla


Bu koddaki problemi cozemedim...

Hata mesaji: Cannot implicitly convert type 'System.Collections.Generic.List<float>' to 'float'

var ppr = Sistem.Liste(Sistem.BarSayisi, 0);
var HHV = Sistem.Liste(Sistem.BarSayisi, 0);
var LLV = Sistem.Liste(Sistem.BarSayisi, 0);

for (int i = 3; i < Sistem.BarSayisi; i++)
{
HHV[i]= Sistem.HHV(4, HaHigh[i]);
LLV[i]= Sistem.LLV(4, HaLow[i]);
ppr[i]= (HaOpen[i-3]+HHV[i] +LLV[i]+HaClose[i])/4;

*****************


Düzeltilmiş hali aşağıdaki gibidir;
Kodu boş pencereye yapıştırın, Panelden "0" numaralı çizgi için panel 2 işareletleyin
isim verip kaydedin sadece..

ekran çıktısı da aşağıda..



var veri = Sistem.GrafikVerileri;
var BarSayisi = veri.Count;

var ppr = Sistem.Liste(Sistem.BarSayisi, 0);
var close = Sistem.Liste(BarSayisi , 0);
var open = Sistem.Liste(BarSayisi , 0);

var LLV = Sistem.LLV(4, "Dusuk");
var HHV = Sistem.HHV(4, "Yuksek");

for (int i = 3; i < Sistem.BarSayisi; i++)
{
open[i] = veri[i].Open;
close[i] = veri[i].Close;
ppr[i]= (open[i-3]+HHV[i] +LLV[i]+close[i])/4;

}

Sistem.Cizgiler[0].Deger = ppr;



http://u1309.hizliresim.com/1f/r/sykry.png (http://bit.ly/c25MCx)

thebaboli
11-11-2013, 00:16
Merhaba Sn.iDealTrade

Bir isteğim olacak.
MA(50) ve MA(100) geçildiğinde AL sinyali vermesini istiyorum. Yani birisini geçinçe değil hem 50 hem 100 lükü geçince AL sinyali istiyorum.

aynı şekilde ikisini aşağı kırınca SAT sinyali istiyorum.

bu mümkün mü ?

başka bir anlatımla
DoubleMA 50 ve 100 lük seçtik.
oluşan bulutun üzerine çıktığı zaman AL sinyali istiyorum.
oluşan bulutun altına indiğinde SAT sinyali istiyorum.

*********************************


Sisteme girip boş formül alanına aşağıdaki kodu yapıştırın.
En sol üstteki satırdan sisteme bir isim verin
Grafik üzerinde MA çizgilerini de görmek istiyorsanız, panelde ilk iki çizgiyi aktif edin
stil, renk, kalınlık seçimlerinizi de belirleyip kaydedin..

İyi çalışmalar



// kapanış fiyatlarını oku
var Veriler = Sistem.GrafikFiyatSec("Kapanis");

// hareketli ortalamaları hesapla
var MA1 = Sistem.MA(Veriler, "Simple", 50);
var MA2 = Sistem.MA(Veriler, "Simple", 100);

// hesaplanan verileri çizgilere aktar ve açıklama ekle
Sistem.Cizgiler[0].Deger = MA1;
Sistem.Cizgiler[1].Deger = MA2;


var SonYon = "";

for (int i = 1; i<Sistem.BarSayisi; i++)
{

if (Veriler[i] > MA1[i] && Veriler[i] > MA2[i] )
{
if ( SonYon != "A")
{
Sistem.Yon[i] = "A"; // alış
SonYon = "A";
}
}

else if (Veriler[i] < MA1[i] && Veriler[i] < MA2[i] )
{
if ( SonYon != "S")
{
Sistem.Yon[i] = "S"; // satış
SonYon = "S";
}
}
}


http://k1309.hizliresim.com/1f/u/t10sh.png (http://bit.ly/c25MCx)

thebaboli
11-11-2013, 00:20
var Sembol = Sistem.Sembol;

var K = Sistem.GrafikFiyatSec("Kapanis");

var MA1 = Sistem.MA(K, "Simple", 4);
var MA2 = Sistem.MA(K, "Simple", 9);

Sistem.Cizgiler[0].Deger = MA1;
Sistem.Cizgiler[1].Deger = MA2;

var SonYon = "";

for (int i = 1; i<Sistem.BarSayisi; i++)
{
if (K[i] > MA1[i] && K[i] > MA2[i])
{
if (SonYon != "A")
{
Sistem.Yon[i] = "A"; // alış
SonYon = "A";
}
}
else if (K[i] < MA1[i] && K[i] < MA2[i])
{
if (SonYon != "S")
{
Sistem.Yon[i] = "S"; // satış
SonYon = "S";
}
}
}

var Pozisyon = Sistem.PozisyonKontrolOku(Sembol);

if (SonYon = "A")
{
if (Pozisyon == 0)
{
var Miktar = 1;
Sistem.PozisyonKontrolGuncelle(Sembol, Pozisyon+Miktar);
Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = "Alış";
Sistem.EmirMiktari = Miktar;
Sistem.EmirSuresi = "GUN"; // GUN, SNS, IKG
Sistem.EmirTipi = "KPY"; // KPY, KIE, GIE, SAR
Sistem.EmirFiyatTipi = "PYS"; // PYS, LMT, EIF, KAP
Sistem.EmirGonder();
}
}


sn idealtrade,

yukarıdaki kodu nasıl çalıştırabilirim?


**********************


Merhabalar

Bir Robot (otomatik emir gönderim) formülü yazmışsınız.
Emir gönder fonksiyonlarınız hangi senede emir gönderecek?

Sistem.EmirSembol = Sembol;

satırındaki "Sembol" tanımlı değil.

en başa

var Sembol = "IMKBH'SAHOL" eklerseniz mesela, çalışır.

Kolay gelsin




var Sembol = "VIP'F_XU0301013S0";

var K = Sistem.GrafikFiyatSec("Kapanis");

var MA = Sistem.MA(K, "Simple", 4);

Sistem.Cizgiler[0].Deger = MA;
Sistem.Cizgiler[0].Aciklama = "MA " + 4;
Sistem.Cizgiler[0].Renk = Sistem.Renk(255, 0, 0, 255);

var Trend = "";

for (int i = 1; i < Sistem.BarSayisi; i++)
{
if (K[i] > MA[i])
{
if (Trend != "A")
{
Sistem.Yon[i] = "A"; // alış
Trend = "A";
}
}
else if (K[i] < MA[i])
{
if (Trend != "S")
{
Sistem.Yon[i] = "S"; // satış
Trend = "S";
}
}
}

var Pozisyon = Sistem.PozisyonKontrolOku(Sembol);

if (Trend == "A")
{
if (Pozisyon == 0)
{
var Miktar = 1;
Sistem.PozisyonKontrolGuncelle(Sembol, Pozisyon+Miktar);
Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = "Alış";
Sistem.EmirMiktari = Miktar;
Sistem.EmirFiyati = "Aktif"; // aktif fiyat
Sistem.EmirSuresi = "GUN"; // SEANS, GUN
Sistem.EmirTipi = "NORMAL"; // NORMAL, KIE, KPY, AFE/KAFE
Sistem.EmirGonder();
}
}


sn idealtrade,

yukarıdaki kod hata vermiyor, ancak sanalda işlem yaptıramadım.

"Sistem.Yon" i robot ta nasıl kullanmalıyız?




Merhabalar

Sistem.Yön yazdığınız sistemin/indikatörün grafik üzerinde AL veya SAT okları koyması amacıyla kullanılıyor.
Siz bu al/sat sinyalleri oluştuğu zaman Robot'a otomatik emir göndertecekseniz, "Yon" fonksiyonunu kullanmayacaksınız.
Öncelikle yaptığınız şey "fiyat, 4 günlük MA yı yukarı yönde kırarsa AL, ters yönde kırarsa SAT" mı?
Bu durumu aynı zamanda grafik üzerinden de takip mi etmek istiyorsunuz?
Ve bu görsel doğru mu?

http://p1310.hizliresim.com/1g/1/t5u2d.png (http://bit.ly/c25MCx)



Sayın erdem62;

Çalışan sorunsuz Robot kodu aşağıda.. SANAL ortamda test edildi.
(F_XU0301013S0 sembolü, 1 dk grafik periyodu, MA 4)

Üstteki hatalı kodu içeren mesajları silmenizi rica ederim. (hatalı kodları yanlışlıkla kullanan olmasın diye)

İyi çalışmalar



var Sembol = "VIP'F_XU0301013S0";
var K = Sistem.GrafikFiyatOku(Sembol, "1", "Kapanis");
var MA = Sistem.MA(K, "Simple", 4);

// Sistem.Debug(K[K.Count-1].ToString());
// Sistem.Debug(MA[MA.Count-1].ToString());


// pozisyon tablosundan pozisyon miktarını al
var Pozisyon = Sistem.PozisyonKontrolOku(Sembol);

// alış
if (Sistem.YukariKestiyse(K, MA))
{
if (Pozisyon == 0)
{
var Miktar = 1;
Sistem.PozisyonKontrolGuncelle(Sembol, Pozisyon+Miktar);
Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = "Alış";
Sistem.EmirMiktari = Miktar;
Sistem.EmirSuresi = "GUN"; // GUN, SNS, IKG
Sistem.EmirTipi = "KPY"; // KPY, KIE, GIE, SAR
Sistem.EmirFiyatTipi = "PYS"; // PYS, LMT, EIF, KAP
Sistem.EmirGonder();
}
else if (Pozisyon < 0)
{
var Miktar = -2*Pozisyon;
Sistem.PozisyonKontrolGuncelle(Sembol, Pozisyon+Miktar);
Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = "Alış";
Sistem.EmirMiktari = Miktar;
Sistem.EmirSuresi = "GUN"; // GUN, SNS, IKG
Sistem.EmirTipi = "KPY"; // KPY, KIE, GIE, SAR
Sistem.EmirFiyatTipi = "PYS"; // PYS, LMT, EIF, KAP
Sistem.EmirGonder();
}
}

// satış
if (Sistem.AsagiKestiyse(K, MA))
{
if (Pozisyon == 0)
{
var Miktar = 1;
Sistem.PozisyonKontrolGuncelle(Sembol, Pozisyon-Miktar);
Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = "Satış";
Sistem.EmirMiktari = Miktar;
Sistem.EmirSuresi = "GUN"; // GUN, SNS, IKG
Sistem.EmirTipi = "KPY"; // KPY, KIE, GIE, SAR
Sistem.EmirFiyatTipi = "PYS"; // PYS, LMT, EIF, KAP
Sistem.EmirGonder();
}
else if (Pozisyon > 0)
{
var Miktar = 2*Pozisyon;
Sistem.PozisyonKontrolGuncelle(Sembol, Pozisyon-Miktar);
Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = "Satış";
Sistem.EmirMiktari = Miktar;
Sistem.EmirSuresi = "GUN"; // GUN, SNS, IKG
Sistem.EmirTipi = "KPY"; // KPY, KIE, GIE, SAR
Sistem.EmirFiyatTipi = "PYS"; // PYS, LMT, EIF, KAP
Sistem.EmirGonder();
}
}






http://p1310.hizliresim.com/1g/2/t6lwl.png (http://bit.ly/c25MCx)

thebaboli
11-11-2013, 00:31
Asagidaki idealden ornek bir kod...Kesisme oldugu andaki barin kapanis degerini nasil degisken olarak atayabilirim?
Metastock yada matrikste valuewhen(cross(...),..) gibi yazabilecegimiz degisken

// kapanış fiyatlarını oku
var KapanisListesi = Sistem.GrafikFiyatSec("Kapanis");

// hareketli ortalamayı hesapla
var MA = Sistem.MA(KapanisListesi, "Exp", 20);

// hesaplanan verileri çizgilere aktar
Sistem.Cizgiler[0].Deger = MA;

// strateji
Sistem.KesismeTara(KapanisListesi, MA);

*********************


sistem kesişme noktaları Sistem.Yon adlı bir dizide tutulmaktadır
aşağıdaki örnekte (Visual Basic) hareketli ortalama kesim noktalarının oluştuğu yerin kapanış değeri alınmaktadır
Yon dizisine kullanıcı da değer girebilir
Visual Basic
Sistem.Yon(1000)="A" 1000. bara alış sinyali eklenir
Sistem.Yon(2000)="S" 2000. bara satış sinyali eklenir


sistem kodu

rem parametreleri al
Dim i

rem kapanış fiyatlarını oku
Dim Veriler = Sistem.GrafikFiyatSec("Kapanis")

rem hareketli ortalamaları hesapla
Dim MA1 = Sistem.MA(Veriler, "Simple", 20)
Dim MA2 = sistem.MA(Veriler, "Simple", 50)

rem hesaplanan verileri çizgilere aktar ve açıklama ekle
Sistem.Cizgiler(0).Deger = MA1
Sistem.Cizgiler(1).Deger = MA2

rem strateji
Sistem.KesismeTara(MA1, MA2)

rem al, sat noktalarını bul
dim kapanis = 0
for i = 1 to Sistem.Barsayisi-1
if Sistem.Yon(i)="A" or Sistem.Yon(i)="S" rem alış veya satış sinyali varsa
kapanis = Sistem.GrafikVerileri(i).Close
end if
next



rem ile başlayan cümleler visual basic dilinde açıklama amaçlı kullanılır
kullanıcı bu satırları yazmak zorunda değildir
aynı işlemi C Sharp dilinde // işaretleri yapar




Cok tesekkurler...

Bazi sistemlerde alis satisi daha "teyitli" hale getirmek icin veya sinyal sayisini azaltmak icin sinyalin geldigi bardan sonraki barlarda, sinyal barinin kapanisinin ustunde kapanis (alis icin) ya da altinda kapanis (satim icin) oldugunda islem yapiliyor.

Sizin kodunuzda Sistem.KesismeTara(MA1, MA2) yi kullaninca bir al-sat zaten kullanilmis oluyor. Bir Sistem.KesismeTara ilave edince iki al-sat kosulu oluyor sistemde...

rem parametreleri al
Dim i

rem kapanış fiyatlarını oku
Dim Veriler = Sistem.GrafikFiyatSec("Kapanis")

rem hareketli ortalamaları hesapla
Dim MA1 = Sistem.MA(Veriler, "Simple", 5)
Dim MA2 = sistem.MA(Veriler, "Simple", 21)

rem hesaplanan verileri çizgilere aktar ve açıklama ekle
Sistem.Cizgiler(0).Deger = MA1
Sistem.Cizgiler(1).Deger = MA2

rem strateji
Sistem.KesismeTara(MA1, MA2)

rem al, sat noktalarını bul
dim kapanis = 0
for i = 1 to Sistem.Barsayisi-1
if Sistem.Yon(i)="A" or Sistem.Yon(i)="S" rem alış veya satış sinyali varsa
kapanis = Sistem.GrafikVerileri(i).Close
end if
next

rem strateji
Sistem.KesismeTara(Veriler, kapanis)

rem hesaplanan verileri çizgilere aktar ve açıklama ekle
Sistem.Cizgiler[0].Deger = MA1
Sistem.Cizgiler[1].Deger = MA2

thebaboli
11-11-2013, 00:32
************************


Baboli gece Teamviever kesildi bende tekrar bağlanmadım,
zaten kafada iyice durdu demiştim.

Sakin kafayla yaptım şimdi.
ancak bunun hengi periyotta olursa olsun kullanılmasını tavsiye etmem adamı batırır :yes:


var Sembol = Sistem.Sembol;
var veri = Sistem.GrafikFiyatSec("Kapanis");
var SonYon = "";

//Bollinger band çiz

var sor = Sistem.Parametreler[0]; // 20 veya başka değer gir
var sor2 = Sistem.Parametreler[1]; // 2 veya başka değer gir

var bbalt = Sistem.BollingerDown("Simple", sor, sor2);
var bborta = Sistem.BollingerMid("Simple", sor, sor2);
var bbust = Sistem.BollingerUp("Simple", sor, sor2);


Sistem.Cizgiler[0].Deger = bbust;
Sistem.Cizgiler[1].Deger = bborta ;
Sistem.Cizgiler[2].Deger = bbalt;




//Bollinger band strateji altı keserse sat üstü keserse al ///////////////////
for (int i = 1; i<Sistem.BarSayisi; i++)

{

if (veri[i] > bbust[i])
{
if ( SonYon != "A")
{
Sistem.Yon[i] = "A"; // alış
SonYon = "A";

if (Sistem.SaatAraligi("09:10", "17:45")) // saatleri aralığındaysa VIOP işlemleri // 09:30 -- 17:40 hisse işlemleri
{


if (Sistem.YukariKestiyse(veri, bbust)) // alış
{
Sistem.AlgoIslem = "A";
}
// algo açıklama
if ( Sistem.BarSayisi > 0 )
{
Sistem.AlgoAciklama = veri[Sistem.BarSayisi-1].ToString("0.000") + " yön değişir " + bbalt[Sistem.BarSayisi-1].ToString("0.000");
}
}


}
}

if (veri[i] < bbalt[i])
{
if ( SonYon != "S")
{
Sistem.Yon[i] = "S"; // Satış
SonYon = "S";

if (Sistem.SaatAraligi("09:10", "17:45")) // saatleri aralığındaysa
{

///////// ALGO İLE ŞART KONTROL ET /////////////

if (Sistem.AsagiKestiyse(veri, bbalt)) // alış
{
Sistem.AlgoIslem = "S";
}
// algo açıklama
if ( Sistem.BarSayisi > 0 )
{

Sistem.AlgoAciklama = veri[Sistem.BarSayisi-1].ToString("0.000") + " yön değişir " + bbust[Sistem.BarSayisi-1].ToString("0.000");
}

}
}
}
}


http://badgs.webege.com/png/Ekim49.png


C# da yazılan bir kodu VB.NET e çevirmek için http://converter.telerik.com/ u kullanabilirsiniz.

Yukarıdaki formülün VB si ;




Dim Sembol = Sistem.Sembol
Dim veri = Sistem.GrafikFiyatSec("Kapanis")
Dim SonYon = ""

'Bollinger band çiz

Dim sor = Sistem.Parametreler(0)
' 20 veya başka değer gir
Dim sor2 = Sistem.Parametreler(1)
' 2 veya başka değer gir
Dim bbalt = Sistem.BollingerDown("Simple", sor, sor2)
Dim bborta = Sistem.BollingerMid("Simple", sor, sor2)
Dim bbust = Sistem.BollingerUp("Simple", sor, sor2)


Sistem.Cizgiler(0).Deger = bbust
Sistem.Cizgiler(1).Deger = bborta
Sistem.Cizgiler(2).Deger = bbalt




'Bollinger band strateji altı keserse sat üstü keserse al ///////////////////
For i As Integer = 1 To Sistem.BarSayisi - 1


If veri(i) > bbust(i) Then
If SonYon <> "A" Then
Sistem.Yon(i) = "A"
' alış
SonYon = "A"

If Sistem.SaatAraligi("09:10", "17:45") Then
' saatleri aralığındaysa VIOP işlemleri // 09:30 -- 17:40 hisse işlemleri


If Sistem.YukariKestiyse(veri, bbust) Then
' alış
Sistem.AlgoIslem = "A"
End If
' algo açıklama
If Sistem.BarSayisi > 0 Then
Sistem.AlgoAciklama = veri(Sistem.BarSayisi - 1).ToString("0.000") & " yön değişir " & bbalt(Sistem.BarSayisi - 1).ToString("0.000")
End If


End If
End If
End If

If veri(i) < bbalt(i) Then
If SonYon <> "S" Then
Sistem.Yon(i) = "S"
' Satış
SonYon = "S"

If Sistem.SaatAraligi("09:10", "17:45") Then
' saatleri aralığındaysa

'''////// ALGO İLE ŞART KONTROL ET /////////////

If Sistem.AsagiKestiyse(veri, bbalt) Then
' alış
Sistem.AlgoIslem = "S"
End If
' algo açıklama
If Sistem.BarSayisi > 0 Then

Sistem.AlgoAciklama = veri(Sistem.BarSayisi - 1).ToString("0.000") & " yön değişir " & bbust(Sistem.BarSayisi - 1).ToString("0.000")

End If
End If
End If
End If
Next

thebaboli
11-11-2013, 00:34
http://k1310.hizliresim.com/1g/6/tbysb.png

************************************


beklenti bu ise, VB kod aşağıda


dim YilBar = Sistem.GrafikVerileriniOku(Sistem.Sembol, "Y")
dim YilYuksek = Sistem.GrafikFiyatOku(Sistem.Sembol, "Y", "Yuksek")
dim YilDusuk = Sistem.GrafikFiyatOku(Sistem.Sembol, "Y", "Dusuk")

dim BesYilYuksek = Sistem.HHV(5,YilYuksek)
dim BesYilDusuk = Sistem.LLV(5,YilDusuk)

rem 0 nolu çizgi
Sistem.Cizgiler(0).Deger = Sistem.DonemCevir(Sistem.GrafikVerileri, YilBar , BesYilYuksek)
Sistem.Cizgiler(0).ActiveBool = true
Sistem.Cizgiler(0).Renk = Sistem.Renk(255, 0, 0, 255)
Sistem.Cizgiler(0).Kalinlik = 2

rem 1 nolu çizgi
Sistem.Cizgiler(1).Deger = Sistem.DonemCevir(Sistem.GrafikVerileri, YilBar , BesYilDusuk)
Sistem.Cizgiler(1).ActiveBool = true
Sistem.Cizgiler(1).Renk = Sistem.Renk(255, 255, 0, 0)
Sistem.Cizgiler(1).Kalinlik = 2


rem dolgu tamınla
dim DolguRengi = Sistem.Renk(100, 255, 255, 0)
Sistem.DolguEkle(0, 1, DolguRengi, DolguRengi)

thebaboli
11-11-2013, 00:36
Sayin İdealTrade, dji- dax formulu yazip grafik olarak gosterebilirmiyiz.Abritaj icin diyorum.Dji endeksinden dax endekseni cikararak yeni bir xyz endeksi yapalirmiyiz?Olursa nasil olacagini kisaca yazarmasiniz.

************************


Merhabalar

Elbette bu mümkündür.
Sayın Bear_Bull'un da dediği gibi Ana Menüde bulunan "Kullanıcı Sembol Sistemleri" paneli üzerinden yapabilirsiniz.
Bu panelde kendi kodunuzu kendiniz yaratabilirsiniz.

Aşağıdaki kodu eklemeniz yeterli olacaktır;

http://t1310.hizliresim.com/1g/b/tfq4w.png (http://bit.ly/c25MCx)

Kodu yazıp kaydettikten sonra mevcut sayfanızı yeniden çağırmanız yetecektir. Artık kodunuzu sayfaya yazabilirsiniz..

http://p1310.hizliresim.com/1g/b/tfq51.png (http://bit.ly/c25MCx)

Not: Ana Menü--Özellikler altından "Kullanıcı Sembol Sistemini Aktifleştir" demeniz gerekiyor.

Saygılarımızla




oluturduğunuz sembolun belli bir saat aralığında update etmesini istyorsanız, saat kontrolu kullanabilirsiniz..
yukarıdaki kodu aşağıdaki bloğun içine yerleştirerek bu yapılabilir..

if (Sistem.SaatAraligi("10:00", "22:30")) // saat aralığındaysa
{


}

thebaboli
11-11-2013, 00:48
http://l1311.hizliresim.com/1h/5/u7f6q.png (http://bit.ly/c25MCx)


iki RSI fonksiyonu mevcut

1-) grafik üzerinden gelen verileri hesaplayan RSI
Sistem.RSI(14);

2-) OHLC verileri okutularak farklı bir sembolun RSI ının hesaplanması
var OHLC = GrafikVerileriniOku(Sembol, "G");
var RSI = Sistem.RSI(OHLC, 14)

3-) talepleriniz doğrultusunda yeni ekledik, yeni versiyonda bulacaksınız
herhangi bir fiyat listesinin RSI ının hesaplanması
formul aşağıdadır

// RSI(MACD(26,12,9),14)

var MACD = Sistem.MACD(12, 26);
var MACD_AVR = Sistem.MA(MACD, "Exp", 9);
var RSI_OF_MACD = Sistem.RSI(MACD_AVR, 14);

Sistem.Cizgiler[0].Deger = MACD;
Sistem.Cizgiler[0].Aciklama = "MACD";
Sistem.Cizgiler[1].Deger = MACD_AVR;
Sistem.Cizgiler[1].Aciklama = "MACD_AVR";
Sistem.Cizgiler[1].Deger = MACD_AVR;
Sistem.Cizgiler[1].Aciklama = "MACD_AVR";
Sistem.Cizgiler[2].Deger = RSI_OF_MACD;
Sistem.Cizgiler[2].Aciklama = "RSI_OF_MACD";


Tesekkurler eklenti icin sn. Ideal. Simdi daha iyi anladim RSI komutunun yapisini, diger komutlari anlamak icinde iyi ornek oldu.

Baboli, yukaridaki formul macd in 9 luk ortalamasinin RSI sini hesapliyor. Sadece macd in RSI si icin Sistem.RSI(MACD_AVR, 14); yerine = Sistem.RSI(MACD, 14); seklinde kullanman gerekli.
****************************

thebaboli
11-11-2013, 00:49
Cok soru soruyorum sanirim, kolay konularla ilgili belki, ama cozemedigim su kodla ilgili yardimci olabilecek var mi acaba?

........
var R = Sistem.Liste(0);
var I = Sistem.Liste(0);
var IR = Sistem.Liste(0);
var ArcT = Sistem.Liste(0);

for (int i=.......vs vs...)
{
R[j] = ...
I[j] = ...
IR[j] = I[j] / R[j];
ArcT[j] = 90 / Math.Atan(IR[j]);
}

R, I ve IR listelerinin hesaplari yapildi, dogru calisiyor...90/Arctanjant (IR) yi hesaplamaya geldiginde

ArcT[j] = 90 / Math.Atan(IR[j]); hata veriyor...nasil yazilmasi gerekli? bu arada IR +0.80 ve -0.25 arasi degerlerde.

****************************************


Merhabalar

Sanırız şu kod parçası size yardımcı olacaktır..



var IR = Sistem.GrafikFiyatSec("Kapanis");
var ArcT = Sistem.Liste(0);

for (int i= 1; i<Sistem.BarSayisi; i++)
{
ArcT[i] = 90f / (float)(Math.Atan(IR[i]));
}
Sistem.Cizgiler[0].Deger=ArcT;



http://t1311.hizliresim.com/1h/5/u7ly5.png (http://bit.ly/c25MCx)

thebaboli
11-11-2013, 17:32
Dostum ellerine saglık,platformu kullanan ve bilgisi olanların paylaşması dilegimle
teşekkürler.....

Teşekkürler dostum aynı dilekteyim. Umarım birlikte başarılı oluruz.


10 Dakikalık grafik üzerinde, üst döneme (mesela 15 dakikalık grafiklere) ait verileri de kullanmakla ilgili örnek bir kod..



// 15dklik verileri oku
var Veriler = Sistem.GrafikVerileriniOku(Sistem.Sembol, "15");

Veriler = Sistem.GrafikVerilerindeTarihHizala(Sistem.GrafikV erileri, Veriler );

var Price = Sistem.Liste(0);

// döngü ile 15 dklil verileri hesapla
for (int i = 1; i < Veriler.Count; i++)
{
// 15dklik barlar icin (H+L)/2 değeri hesaplat
Price[i] = (Veriler[i].High + Veriler[i].Low) / 2;
}

Sistem.Cizgiler[0].Deger = Price ;
Sistem.Cizgiler[0].Aciklama =" 15 Dk Grafik H+L/2= " + " ***" ;



http://j1311.hizliresim.com/1h/c/ufrb6.png (http://bit.ly/c25MCx)

thebaboli
12-11-2013, 10:16
optimizasyon modulu eklendi..
sistemlerini bir döngü içerisinde parametre değiştirerek performans hesaplatılabiliyor..
böylece sisteme en iyi oturan parametreler bulunabiliyor..
sütun başlıklarına tıklanınca sıralama yapılıyor..

örnek kod
// kapanış fiyatlarını oku
var Kapanis = Sistem.GrafikFiyatSec("Kapanis");

// hareketli ortalamaları hesapla
for (int KucukPeriyot = 5; KucukPeriyot < 20; KucukPeriyot++)
{
for (int BuyukPeriyot = 20; BuyukPeriyot < 60; BuyukPeriyot ++)
{
if (KucukPeriyot < BuyukPeriyot)
{
var MA1 = Sistem.MA(Kapanis, "Exp", KucukPeriyot);
var MA2 = Sistem.MA(Kapanis, "Exp", BuyukPeriyot);
Sistem.KesismeTara(MA1, MA2);
Sistem.Optimizasyon("MA", KucukPeriyot, BuyukPeriyot);
}
}
}

http://n1311.hizliresim.com/1h/d/ugdcu.png (http://bit.ly/c25MCx)
*********************

thebaboli
13-11-2013, 01:34
sorgu modulu eklendi..
sembolleri taratıp, belli şartları sağlayanları filtreliyebiliyoruz..

örnek kodda RSI 60 ın üstünde veya 40 ın altında ise listeye ekliyoruz


Sistem.SorguBaslik[0] = "Açılış";
Sistem.SorguBaslik[1] = "Yüksek";
Sistem.SorguBaslik[2] = "Düşük";
Sistem.SorguBaslik[3] = "Kapanış";
Sistem.SorguBaslik[4] = "Hacim";
Sistem.SorguBaslik[6] = "RSI 14";
Sistem.SorguBaslik[7] = "MOM 12";


var RSI = Sistem.RSI(14);
var MOM = Sistem.Momentum(12);
var SonRSI = RSI[Sistem.BarSayisi-1];
var SonMOM = MOM[Sistem.BarSayisi-1];


// filtrele
if (SonRSI < 40.0F || SonRSI > 60.0F)
{
Sistem.SorguDeger[0] = Sistem.GrafikVerileri[Sistem.BarSayisi-1].Open;
Sistem.SorguDeger[1] = Sistem.GrafikVerileri[Sistem.BarSayisi-1].High;
Sistem.SorguDeger[2] = Sistem.GrafikVerileri[Sistem.BarSayisi-1].Low;
Sistem.SorguDeger[3] = Sistem.GrafikVerileri[Sistem.BarSayisi-1].Close;
Sistem.SorguDeger[4] = Sistem.GrafikVerileri[Sistem.BarSayisi-1].Vol;
Sistem.SorguDeger[6] = SonRSI;
Sistem.SorguDeger[7] = SonMOM;

if (SonRSI < 30.0F)
Sistem.SorguAciklama = "Aşırı Satım";
else if (SonRSI > 70.0F)
Sistem.SorguAciklama = "Aşırı Alım";
else
Sistem.SorguAciklama = "Normal";

Sistem.SorguEkle();
}

http://o1311.hizliresim.com/1h/f/uh866.png (http://bit.ly/c25MCx)
**********************


Sistem.GrafikVerisiIndir(Sembol, Periyot) fonksiyonu eklendi..
programda bir sembolun grafiği çizdirilirken veriler server dan otomatik tamamlanıyor..
grafiği açmadan da sistem kodunu kullanarak server dan veri indirebilirsiniz

şifreleme kullanıldığında parametre bölümü de gizleniyordu, gizlenmez hale getirildi..
robotları ticari amaçlı kullanan abonelerimiz robot sembolunu parametre olarak kullanıyorlar..

Bear_Bull
14-11-2013, 01:33
hayırlı olsun yeni tükkan
açılışa davet edende olmamış anca haberimiz oldu:)

açılış gece yarısı olunca
BABOLİ kimseyi uykusundan etmek istememiştir :he:

**********************************************
arkadaşlar kodu deneyip
sonuç yazabilirmisiniz?

Ardışık kar rakamını ben hesaplattıramadım


http://badgs.webege.com/png/Kasim63.png



optimizasyon modulu eklendi..
sistemlerini bir döngü içerisinde parametre değiştirerek performans hesaplatılabiliyor..
böylece sisteme en iyi oturan parametreler bulunabiliyor..
sütun başlıklarına tıklanınca sıralama yapılıyor..

örnek kod
// kapanış fiyatlarını oku
var Kapanis = Sistem.GrafikFiyatSec("Kapanis");

// hareketli ortalamaları hesapla
for (int KucukPeriyot = 5; KucukPeriyot < 20; KucukPeriyot++)
{
for (int BuyukPeriyot = 20; BuyukPeriyot < 60; BuyukPeriyot ++)
{
if (KucukPeriyot < BuyukPeriyot)
{
var MA1 = Sistem.MA(Kapanis, "Exp", KucukPeriyot);
var MA2 = Sistem.MA(Kapanis, "Exp", BuyukPeriyot);
Sistem.KesismeTara(MA1, MA2);
Sistem.Optimizasyon("MA", KucukPeriyot, BuyukPeriyot);
}
}
}

http://n1311.hizliresim.com/1h/d/ugdcu.png (http://bit.ly/c25MCx)

Bear_Bull
14-11-2013, 02:26
Düzeltilmiş halini içeren versiyonu aşağıdaki adresten şu an alabilirsiniz.

www.directfn.com.tr/terminal/ideal.exe

Teşekkürler gece gece uğraştırıyoruz sizleride

**************************************************

ilk ve basit bir EXPLORER yazdım bakalım
sırasıyla hepsini yavaş yavaş yazarım artık.




Sistem.SorguBaslik[0] = "Açılış";
Sistem.SorguBaslik[1] = "Yüksek";
Sistem.SorguBaslik[2] = "Düşük";
Sistem.SorguBaslik[3] = "Kapanış";
Sistem.SorguBaslik[4] = "Hacim";
Sistem.SorguBaslik[6] = "mov50";
Sistem.SorguBaslik[7] = "mov200";


var mov50 = Sistem.MA(50, "Simple", "Kapanis");
var mov200 = Sistem.MA(200, "Simple", "Kapanis");
var Son50 = mov50[Sistem.BarSayisi-1];
var Son200 = mov200[Sistem.BarSayisi-1];


{
Sistem.SorguDeger[0] = Sistem.GrafikVerileri[Sistem.BarSayisi-1].Open;
Sistem.SorguDeger[1] = Sistem.GrafikVerileri[Sistem.BarSayisi-1].High;
Sistem.SorguDeger[2] = Sistem.GrafikVerileri[Sistem.BarSayisi-1].Low;
Sistem.SorguDeger[3] = Sistem.GrafikVerileri[Sistem.BarSayisi-1].Close;
Sistem.SorguDeger[4] = Sistem.GrafikVerileri[Sistem.BarSayisi-1].Vol;
Sistem.SorguDeger[6] = Son50;
Sistem.SorguDeger[7] = Son200;

if (Son50 > Son200)
Sistem.SorguAciklama = "Golden Cross";
else if (Son50 < Son200)
Sistem.SorguAciklama = "Death Cross";
else
Sistem.SorguAciklama = "yetersiz data";

Sistem.SorguEkle();
}



İDEAL için EXPLORER leri yazmaya
Başlamak bitirmenin yarısıysa
tüm formüller bitti sayılır :he:

GOLDEN/DEATH CROSS LİSTESİ



No Sembol Açıklama Kapanış mov50 mov200
1 ACSEL Death Cross 30.4 29.46 31.025
2 ADANA Death Cross 4.1 3.8684 4.0135
3 ADBGR Death Cross 2.87 2.7042 2.7549
4 ADEL Golden Cross 58.5 57.6 53.3515
5 ADESE Golden Cross 8.78 9.725 7.9279
6 ADNAC Death Cross 0.66 0.6064 0.6648
7 AEFES Death Cross 25.5 24.612 26.3378
8 AFMAS Death Cross 10.3 10.726 12.248
9 AFYON Death Cross 68.5 47.695 57.8883
10 AGYO Death Cross 1.14 1.111 1.299
11 AKBNK Death Cross 7.06 7.5444 8.3217
12 AKCNS Death Cross 11.15 10.3402 10.8546
13 AKENR Death Cross 1.34 1.2766 1.531
14 AKFEN Death Cross 4.34 4.1604 4.7991
15 AKFGY Death Cross 1.44 1.3652 1.5154
16 AKGRT Golden Cross 2.78 2.5674 2.3736
17 AKGUV Golden Cross 14.65 12.462 11.8332
18 AKMGY Death Cross 15.9 14.9 17.6622
19 AKPAZ Golden Cross 2.27 2.3502
20 AKSA Golden Cross 7.96 8.08 6.4547
21 AKSEL Golden Cross 7.6 5.8878 3.7675
22 AKSEN Death Cross 3.05 2.927 3.9044
23 AKSGY Golden Cross 3.15 2.995 2.9526
24 AKSUE Golden Cross 6.72 6.232 6.1003
25 ALARK Death Cross 5.92 5.4754 5.5261
26 ALBRK Death Cross 1.78 1.6812 1.8687
27 ALCAR Death Cross 33.3 30.168 36.1813
28 ALCTL Death Cross 3.45 3.304 4.0231
29 ALGYO Death Cross 21.35 19.612 20.2748
30 ALKA Death Cross 1.37 1.2866 1.3553
31 ALKIM Death Cross 12.9 11.3984 12.2278
32 ALNTF Golden Cross 2.75 2.846 2.675
33 ALTIN Golden Cross 49.75 50.226 46.8265
34 ALYAG Death Cross 1.05 1.0172 1.176
35 ANACM Death Cross 2.43 2.3764 2.6193
36 ANELE Death Cross 1.38 1.2538 1.6465
37 ANELT Golden Cross 3.13 3.0234 2.2835
38 ANHYT Death Cross 4.91 4.3426 5.0222
39 ANSA Golden Cross 1.18 1.2474 1.2367
40 ANSGR Golden Cross 1.32 1.2778 1.2624
41 ARCLK Death Cross 11.75 11.757 12.1197
42 ARENA Death Cross 2.47 2.3288 2.5691
43 ARFYO Golden Cross 1.87 1.8368 1.4412
44 ARMDA Death Cross 1.77 1.717 1.9721
45 ARSAN Golden Cross 2.55 2.171 2.0229
46 ARTI Golden Cross 2.75 2.4596 2.1168
47 ARTOG Golden Cross 3.14 3.3616 2.6297
48 ASCEL Death Cross 4.6 3.9598 4.9114
49 ASELS Death Cross 8.9 8.5984 9.3493
50 ASLAN Death Cross 37.5 32.798 34.6637
51 ASUZU Death Cross 20.65 18.907 23.776
52 ASYAB Death Cross 1.9 1.9296 2.0396
53 ATAC Death Cross 0.74 0.7156 0.9379
54 ATAGY Golden Cross 1.71 1.575 1.3954
55 ATEKS Death Cross 6.06 6.37 7.6196
56 ATLAS Death Cross 1.01 0.9564 1.0026
57 ATPET Death Cross 2.45 2.7038 3.1821
58 ATSYH Death Cross 2.01 1.9296 2.1694
59 AVGYO Death Cross 0.62 0.5126 0.5285
60 AVIVA Death Cross 3.54 3.3582 4.0859
61 AVOD Golden Cross 1.41 1.3786 1.1761
62 AVTUR Death Cross 1.65 1.4792 1.5429
63 AYCES Death Cross 4.96 5.1118 6.3295
64 AYEN Death Cross 1.51 1.4788 1.8262
65 AYES Golden Cross 1.03 1.1326
66 AYGAZ Death Cross 9.16 8.7484 9.2859
67 BAGFS Death Cross 42.3 38.73 48.5787
68 BAKAB Golden Cross 2.52 2.4144 2.3703
69 BAKAN Golden Cross 9.36 10.4216
70 BALAT Death Cross 1.5 1.6188 2.0627
71 BANVT Death Cross 2.78 2.9972 3.5645
72 BASCM Death Cross 2.5 2.5346 2.5536
73 BAYRD Golden Cross 5.46 6.1404 5.7333
74 BEYAZ Death Cross 1.38 2.5108 3.2073
75 BFREN Death Cross 145 125.28 152.7525
76 BIMAS Death Cross 42.5 41.5 42.7568
77 BISAS Death Cross 0.76 0.7574 0.8406
78 BIZIM Death Cross 27.6 26.66 28.7592
79 BJKAS Golden Cross 2.33 1.7102 1.6724
80 BLCYT Death Cross 1.31 1.283 1.7045
81 BMEKS Golden Cross 1.92 1.7226 1.4438
82 BOLUC Golden Cross 2.24 2.2184 1.91
83 BOSSA Death Cross 1.73 1.6619 1.7145
84 BOYNR Golden Cross 6.66 6.4 5.8414
85 BRISA Death Cross 5.32 5.2416 5.2987
86 BRKO Death Cross 0.5 0.4818 0.5389
87 BRKSN Death Cross 2.32 2.3294 3.1258
88 BRMEN Death Cross 0.76 0.7332 0.8086
89 BROVA Death Cross 0.83 0.8414 0.8508
90 BRSAN Golden Cross 35.3 30.82 30.6828
91 BRYAT Death Cross 13.4 13.16 13.1697
92 BSHEV Golden Cross 151.5 146.23 127.595
93 BSOKE Death Cross 1.44 1.4096 1.4623
94 BTCIM Death Cross 6.06 6.1448 6.9316
95 BUCIM Death Cross 4.22 4.3492 4.8231
96 BURCE Death Cross 4.08 4.056 5.3992
97 BURVA Death Cross 2.21 2.2298 2.9482
98 CARFA Death Cross 14.05 14.889 16.4063
99 CARFB Death Cross 17.7 16.046 17.434
100 CBSBO Death Cross 0.19 0.1934 0.2584
101 CCOLA Golden Cross 51.5 51.751 48.7148
102 CELHA Death Cross 2.12 2.1382 2.7901
103 CEMAS Death Cross 0.82 0.7464 0.9651
104 CEMTS Death Cross 1.15 1.1546 1.1718
105 CIMSA Golden Cross 12.45 11.786 11.1273
106 CLEBI Death Cross 13.25 12.832 17.0937
107 CLKHO Golden Cross 2.36 2.0225 1.9834
108 CMBTN Death Cross 38.7 37.616 43.7705
109 CMENT Death Cross 6 6.2156 7.2916
110 COMDO Death Cross 4.43 4.452 4.6442
111 COSMO Golden Cross 0.91 0.9112 0.8579
112 CRDFA Golden Cross 4.11 4.0982 3.961
113 DAGHL Death Cross 1.27 1.2606 1.3485
114 DAGI Death Cross 1.43 1.459 1.8275
115 DARDL Death Cross 0.79 0.7058 0.7311
116 DENCM Death Cross 7.16 7.1808 8.4839
117 DENGE Death Cross 2.82 2.7822 7.077
118 DENIZ Death Cross 8.88 9.0276 10.2236
119 DENTA Golden Cross 3.85 3.5414 3.2386
120 DERIM Golden Cross 5.48 5.4708 4.9044
121 DESA Death Cross 0.75 0.7706 0.8489
122 DESPC Death Cross 1.51 1.5386 1.8495
123 DEVA Death Cross 2.07 2.0144 2.1653
124 DGATE Death Cross 2.02 2.0062 2.2911
125 DGGYO Golden Cross 3.61 3.6738 2.8542
126 DGZTE Death Cross 1.49 1.3899 1.4157
127 DIRIT Golden Cross 1.72 1.959 1.5197
128 DITAS Death Cross 2.28 2.2458 2.6805
129 DMSAS Golden Cross 1.2 1.2306 1.197
130 DNZYO Golden Cross 2.17 2.1304 2.1259
131 DOAS Death Cross 8.94 9.303 9.8121
132 DOBUR Golden Cross 2.96 2.9294 2.8355
133 DOCO Golden Cross 88.5 88.84 86.1492
134 DOGUB Death Cross 1.26 1.1732 1.35
135 DOHOL Death Cross 0.83 0.874 1.0103
136 DURDO Death Cross 2.35 2.2188 2.6512
137 DYHOL Death Cross 0.7 0.6724 0.7821
138 DYOBY Golden Cross 1.7 1.4326 1.4181
139 ECBYO Death Cross 1.04 0.9906 1.0956
140 ECILC Golden Cross 2.5 2.3342 2.2383
141 ECYAP Death Cross 4.34 4.3242 4.6928
142 ECZYT Death Cross 6.14 6.0908 6.3661
143 EDIP Death Cross 1.23 1.2602 1.3703
144 EGCYH Death Cross 0.62 0.6424 0.727
145 EGCYO Death Cross 0.52 0.5458 0.6449
146 EGEEN Death Cross 52.25 50.093 56.7582
147 EGGUB Death Cross 14.9 14.639 18.6694
148 EGLYO Golden Cross 2.44 2.126 2.0319
149 EGPRO Death Cross 5.06 4.8954 5.1324
150 EGSER Death Cross 2.2 2.1722 2.1852
151 EKGYO Death Cross 2.54 2.694 2.825
152 EKIZ Death Cross 0.34 0.3628 0.6701
153 EMBYO Death Cross 0.68 0.677 0.6888
154 EMKEL Death Cross 0.86 0.8692 0.9039
155 EMNIS Death Cross 1.97 2.0198 2.2506
156 ENKAI Golden Cross 6.58 5.8382 5.1264
157 EPLAS Death Cross 1.03 1.4378 1.4876
158 ERBOS Death Cross 21.45 20.525 22.8185
159 EREGL Golden Cross 2.63 2.4824 2.155
160 ERICO Death Cross 3.27 3.1912 3.4266
161 ERSU Death Cross 0.63 0.6022 0.746
162 ESCOM Death Cross 1.07 1.0734 1.4878
163 ESEMS Death Cross 1.38 2.159 2.886
164 ETILR Golden Cross 4.7 4.864 3.1179
165 ETYAT Golden Cross 0.7 0.723 0.7122
166 EUKYO Death Cross 0.59 0.5864 0.6788
167 EUROM Death Cross 0.84 0.7828 0.8946
168 FENER Death Cross 34.4 27.322 34.7775
169 FENIS Death Cross 0.45 1.1972 1.3126
170 FFKRL Death Cross 4.39 4.46 5.1899
171 FINBN Death Cross 3.02 2.8766 3.1399
172 FLAP Death Cross 1.34 1.262 1.5396
173 FMIZP Death Cross 13.6 12.914 15.587
174 FNSYO Death Cross 0.95 0.9482 1.0383
175 FONFK Death Cross 1.25 1.2532 1.5035
176 FRIGO Death Cross 0.24 0.2316 0.5042
177 FROTO Golden Cross 24.4 27.606 25.4503
178 FVORI Death Cross 0.57 0.5632 0.6993
179 GARAN Death Cross 7.4 7.8448 8.5539
180 GARFA Death Cross 1.82 1.8638 2.041
181 GDKGS Golden Cross 1.52 1.4428 1.4042
182 GDKYO Golden Cross 1.03 1.0338 1.0183
183 GEDIK Golden Cross 2.44 2.4096 2.3752
184 GEDIZ Death Cross 1.5 2.024 2.4695
185 GENTS Death Cross 1.09 1.144 1.2485
186 GEREL Golden Cross 1.38 1.6178 1.5651
187 GLBMD Death Cross 0.6 0.6104 0.6498
188 GLRYH Golden Cross 0.71 0.714 0.6689
189 GLYHO Death Cross 1.35 1.3398 1.4614
190 GOLTS Death Cross 52.5 48.993 58.5344
191 GOODY Death Cross 54 48.277 57.4849
192 GOZDE Death Cross 4.95 4.3824 4.4167
193 GRNYO Golden Cross 0.84 0.8168 0.6807
194 GSDDE Death Cross 0.88 0.871 0.8742
195 GSDHO Golden Cross 1.25 1.265 1.1465
196 GSRAY Death Cross 29.2 27.119 35.0678
197 GUBRF Death Cross 15.05 14.341 15.3478
198 GUSGR Death Cross 1.9 1.9048 2.1628
199 HALKB Death Cross 14.85 15.105 16.866
200 HALKS Golden Cross 1.98 1.9462 1.9358
201 HATEK Death Cross 3.13 3.0834 3.6708
202 HEKTS Death Cross 1.71 1.6508 1.7616
203 HITIT Death Cross 2.55 2.8004 3.2055
204 HLGYO Golden Cross 1.22 1.1814
205 HURGZ Death Cross 0.72 0.71 0.855
206 HZNDR Golden Cross 4.02 4.0664 3.5989
207 ICGYH Golden Cross 1.75 1.5058
208 IDAS Death Cross 0.33 0.373 0.5224
209 IDGYO Death Cross 1.87 1.8452 2.2272
210 IEYHO Death Cross 0.41 0.3716 0.4517
211 IHEVA Death Cross 0.56 0.5046 0.6065
212 IHGZT Death Cross 0.64 0.5874 0.732
213 IHLAS Death Cross 0.74 0.7682 0.8643
214 IHMAD Golden Cross 8.9 8.9312 6.9899
215 IHYAY Death Cross 0.54 0.4972 0.6074
216 INDES Death Cross 3.8 3.5122 4.0621
217 INFO Death Cross 0.74 0.728 0.7982
218 INTEM Death Cross 10.7 8.9472 10.2881
219 IPEKE Golden Cross 4.61 5.0544 4.7162
220 ISATR Death Cross 17600 25361.72 26250.91
221 ISBIR Death Cross 99 118.227 183.9371
222 ISBTR Death Cross 1350 1271.3 1448.368
223 ISCTR Death Cross 5.06 5.2624 5.9737
224 ISFIN Death Cross 0.93 0.9032 0.9288
225 ISGSY Golden Cross 2.89 2.8352 2.4794
226 ISGYO Death Cross 1.33 1.3198 1.4162
227 ISKUR Death Cross 6500 7807.1 8843.313
228 ISMEN Death Cross 1.4 1.4196 1.5695
229 ISYAT Death Cross 0.97 0.964 0.9991
230 ISYHO Death Cross 0.52 0.4706 0.5627
231 ITTFH Death Cross 2.21 2.3242 2.5085
232 IZMDC Death Cross 2.16 1.991 2.7986
233 IZOCM Death Cross 32.4 30.386 35.7827
234 JANTS Golden Cross 31.1 29.102 23.4074
235 KAPLM Death Cross 3.57 3.0708 3.9105
236 KAREL Death Cross 1.69 1.7382 1.9616
237 KARKM Golden Cross 2.28 2.4602 2.1508
238 KARSN Death Cross 1.05 1.0206 1.121
239 KARTN Death Cross 243 226 254.043
240 KATMR Death Cross 3.5 4.1254 4.5429
241 KCHOL Death Cross 9 9.3572 9.6059
242 KENT Death Cross 69 75.945 101.775
243 KERVN Death Cross 0.71 0.786 0.7869
244 KERVT Death Cross 34.1 34.186 39.452
245 KILER Death Cross 1.89 1.967 2.469
246 KIPA Death Cross 5.32 5.236 5.959
247 KLBMO Golden Cross 1.69 1.6972 1.6308
248 KLGYO Death Cross 1.39 1.4044 1.7035
249 KLMSN Golden Cross 3.22 2.9828 2.7797
250 KLNMA Death Cross 6.14 5.9844 6.6322
251 KNFRT Death Cross 8.84 8.8068 10.3878
252 KOMHL Death Cross 3.08 3.3506 4.1675
253 KONYA Death Cross 259 246.47 297.9787
254 KORDS Death Cross 3.53 3.028 3.4912
255 KOZAA Death Cross 3.97 3.9234 4.1149
256 KOZAL Death Cross 29.4 32.082 33.286
257 KPHOL Death Cross 0.62 0.665 0.7411
258 KRATL Death Cross 1.33 1.289 1.6108
259 KRDMA Golden Cross 1.88 1.6034 1.5489
260 KRDMB Golden Cross 4.15 3.4296 2.7803
261 KRDMD Death Cross 1.17 1.1728 1.2981
262 KRONT Death Cross 0.99 0.9964 1.044
263 KRSAN Death Cross 3.6 3.7404 4.8648
264 KRSTL Golden Cross 0.83 0.645 0.618
265 KRTEK Death Cross 0.89 0.8808 1.0565
266 KUTPO Death Cross 2.3 2.0994 2.1638
267 KUYAS Death Cross 81.5 74.21 74.2914
268 LATEK Death Cross 0.71 0.6332 0.7959
269 LINK Death Cross 2.51 2.5028 2.8764
270 LKMNH Golden Cross 6.06 5.8794 4.9871
271 LOGO Death Cross 4.71 4.4774 4.6451
272 LTHOL Death Cross 1.45 1.1594 1.4148
273 LUKSK Death Cross 2.58 2.4698 2.9256
274 MAALT Death Cross 11.65 10.7918 14.4725
275 MAKTK Death Cross 1.11 0.9352 1.0872
276 MANGO Death Cross 0.16 0.1792 0.2914
277 MARTI Death Cross 0.65 0.624 0.7311
278 MATAS Golden Cross 6.5 5.0566 3.4721
279 MCTAS Death Cross 2.63 2.7856 2.8882
280 MEGAP Death Cross 1.15 1.512 1.7379
281 MEMSA Death Cross 0.32 0.2844 0.3282
282 MEPET Death Cross 2.18 2.0846 2.0899
283 MERIT Death Cross 5.12 5.1696 5.8791
284 MERKO Death Cross 0.65 0.6578 0.797
285 METAL Golden Cross 0.75 0.726 0.7177
286 METRO Death Cross 0.55 0.5066 0.5209
287 METUR Death Cross 0.75 0.6796 0.8259
288 MGROS Death Cross 16.7 17.551 20.6265
289 MIPAZ Golden Cross 1.56 1.4712 1.1419
290 MMCAS Golden Cross 8.12 7.9072 4.5994
291 MNDRS Death Cross 0.47 0.472 0.5208
292 MRDIN Death Cross 4.32 4.2122 4.8096
293 MRGYO Death Cross 0.46 0.4504 0.4967
294 MRSHL Death Cross 42.2 36.89 46.8378
295 MRTGG Death Cross 0.62 0.643 0.7874
296 MUTGG yetersiz data 18.3
297 MUTLU Death Cross 5.98 4.7328 6.4726
298 MZHLD Death Cross 0.92 1.116 1.1479
299 NETAS Death Cross 7.56 7.162 8.8902
300 NIBAS Death Cross 0.91 0.696 1.1572
301 NTHOL Golden Cross 2.39 2.429 2.2457
302 NTTUR Golden Cross 0.92 0.8672 0.8546
303 NUGYO Death Cross 5.44 5.5064 6.9446
304 NUHCM Death Cross 10.3 10.8196 10.876
305 ODAS Golden Cross 4.17 4.1136
306 OLMIP Death Cross 5.7 5.5776 6.7346
307 ORGE Death Cross 4.13 4.1442 10.9659
308 ORMA yetersiz data 159
309 OSMEN Golden Cross 1.95 1.7483 1.4772
310 OSTIM Golden Cross 4.17 3.988 3.2179
311 OTKAR Golden Cross 63.5 60.624 58.8337
312 OYAYO Golden Cross 0.74 0.7312 0.6969
313 OYLUM Death Cross 1.51 1.6032 1.8563
314 OZBAL Death Cross 1.52 1.6886 1.7646
315 OZGYO Death Cross 0.91 0.873 1.0144
316 OZKGY Death Cross 2.15 1.8354 1.8556
317 PAGYO Golden Cross 4 4.2654
318 PARSN Death Cross 2.76 2.6516 2.85
319 PEGYO Death Cross 0.48 0.4682 0.5558
320 PENGD Golden Cross 2.22 2.0326 1.9021
321 PETKM Death Cross 2.92 2.8672 2.9736
322 PETUN Golden Cross 7.04 6.7684 6.7573
323 PGSUS Golden Cross 37.5 33.946
324 PIMAS Death Cross 2.97 2.6506 3.4907
325 PINSU Death Cross 4.1 3.4772 3.6252
326 PKART Death Cross 2.25 2.2416 2.2778
327 PKENT Death Cross 42.2 44.24 56.1645
328 PNSUT Golden Cross 17.3 16.091 15.7856
329 POLHO Death Cross 2.21 2.281 2.3595
330 PRKAB Death Cross 1.42 1.385 1.4514
331 PRKME Death Cross 5.54 5.0266 5.8018
332 PRTAS Death Cross 0.19 0.1932 0.2358
333 PRZMA Golden Cross 2.64 2.4228 2.4109
334 PTOFS Death Cross 4.61 4.6396 5.2326
335 RAYSG Death Cross 0.95 0.9428 1.0339
336 RHEAG Death Cross 1.02 1.0788 1.215
337 RODRG yetersiz data 2.69
338 ROYAL Golden Cross 3.68 3.6798
339 RYGYO Death Cross 0.48 0.4862 0.5832
340 RYSAS Death Cross 0.71 0.6748 0.7211
341 SAFGY Death Cross 0.92 0.8884 0.9227
342 SAHOL Death Cross 8.8 9.5812 10.2414
343 SAMAT Death Cross 2.04 2.1808 2.3964
344 SANFM Golden Cross 3.09 2.7464 1.9538
345 SANKO Death Cross 3.7 3.5792 3.8198
346 SARKY Golden Cross 2.9 2.9104 2.8411
347 SASA Death Cross 0.93 0.878 1.0723
348 SAYAS Golden Cross 2.64 2.5212
349 SEKFK Death Cross 0.66 0.6596 0.7343
350 SELEC Death Cross 1.98 1.9134 2.0177
351 SELGD Death Cross 0.38 0.4054 0.427
352 SERVE Golden Cross 0.88 0.8524 0.7938
353 SILVR Death Cross 0.84 0.8476 0.9001
354 SISE Golden Cross 2.68 2.852 2.8378
355 SKBNK Death Cross 1.93 1.8826 1.9333
356 SKPLC Death Cross 0.8 0.858 1.0098
357 SKTAS Death Cross 2.97 2.709 3.3295
358 SNGYO Death Cross 1.07 1.0082 1.2404
359 SNPAM Death Cross 2.11 2.0356 2.2915
360 SODA Golden Cross 2.45 2.377 2.3009
361 SODSN Golden Cross 3.1 3.2988 2.8778
362 SONME Death Cross 3.77 3.4596 3.8493
363 SRVGY Golden Cross 2.65 2.4794
364 TACTR Golden Cross 4.7 4.2002
365 TARAF Golden Cross 12.75 13.653 10.1361
366 TATKS Death Cross 2.49 2.4274 2.4689
367 TAVHL Golden Cross 13.55 13.651 11.9166
368 TBORG Golden Cross 2.92 2.9256 2.5777
369 TCELL Golden Cross 11.65 11.918 11.5728
370 TCHOL yetersiz data 1.05
371 TCRYO Golden Cross 1.08 1.0866 1.0463
372 TEBNK Golden Cross 2.3 2.2308 2.1996
373 TEKST Golden Cross 1.52 1.5746 1.3789
374 TEKTU Death Cross 0.62 0.5866 0.7168
375 TEPAS Golden Cross 3.36 3.4966
376 TGSAS Golden Cross 7.98 5.393 3.8479
377 THYAO Golden Cross 7.12 7.42 7.0175
378 TIRE Death Cross 1.12 1.0994 1.1458
379 TKFEN Death Cross 4.75 5.201 6.4903
380 TKNSA Golden Cross 12.5 12.019 10.9345
381 TKURU Death Cross 8.34 8.1232 8.2575
382 TMSN Golden Cross 5.54 5.0284 4.4135
383 TOASO Golden Cross 12.9 12.4444 12.0971
384 TRCAS Death Cross 2.98 2.9 3.3456
385 TRGYO Death Cross 3.42 3.277 3.486
386 TRKCM Death Cross 2.4 2.41 2.6473
387 TRNSK Death Cross 0.34 0.3618 0.5911
388 TSGYO Golden Cross 0.89 0.8978 0.8753
389 TSKB Death Cross 1.92 1.8592 1.9633
390 TSPOR Death Cross 5.22 5.123 6.5243
391 TTKOM Death Cross 6.38 6.74 7.0285
392 TTRAK Golden Cross 59.5 60.805 58.069
393 TUDDF Death Cross 6.08 6.1568 7.7608
394 TUKAS Death Cross 0.8 0.7554 0.8461
395 TUPRS Death Cross 40.4 43.048 45.9908
396 UCAK Death Cross 1.3 1.927 1.994
397 ULAS Death Cross 0.91 0.9352 1.1413
398 ULKER Golden Cross 14.8 12.649 12.4746
399 UNYEC Death Cross 5.14 4.9848 4.9975
400 USAK Death Cross 1.04 0.9708 1.1772
401 UTPYA Death Cross 1.3 1.3788 1.634
402 UYUM Golden Cross 1.97 2.0676 2.0031
403 UZERB Death Cross 0.98 1.0648 1.6008
404 VAKBN Death Cross 4.5 4.6662 5.1991
405 VAKFN Death Cross 1.26 1.1984 1.3834
406 VAKKO Death Cross 1.12 1.0304 1.2119
407 VANGD Death Cross 1.18 1.2072 1.26
408 VESBE Golden Cross 2.82 2.832 2.7746
409 VESTL Death Cross 1.91 1.9116 2.0879
410 VKBYO Death Cross 1.18 0.9752 1.0294
411 VKGYO Golden Cross 9.12 7.5092 5.4441
412 VKING Death Cross 0.77 0.756 0.88
413 YAPRK Death Cross 2.54 2.3918 2.8276
414 YATAS Death Cross 0.93 0.9276 1.0442
415 YAZIC Death Cross 19.85 20.854 21.0303
416 YBTAS Golden Cross 1650 1976.598
417 YESIL Death Cross 1.03 1.0472 1.0597
418 YGGYO yetersiz data 14.05
419 YGYO Death Cross 0.52 0.5242 0.6113
420 YKBNK Death Cross 4.27 4.5222 4.9117
421 YKBYO Golden Cross 3.65 4.1475 2.5442
422 YKGYO Death Cross 1.47 1.3436 1.3885
423 YKSGR Golden Cross 18.45 18.405 18.345
424 YUNSA Death Cross 5.26 5.05 5.209
425 ZOREN Death Cross 1.32 1.247 1.3739

Bear_Bull
14-11-2013, 02:45
Datası az olan hisselerde "Golden Cross" açıklaması çıkmış :(

50 AOF ve 200 AOF henüz oluşmamış olan hisselerin filtrelenmesi lazım. :yes:

Not listedeki sonuçlar "Açıklama" kısmı ve AOF fiyatlar doğru olmayabilir

Endex30 hisseleri ve Vob datalarım hariç
Grafik datalarını şimdilik güncellemedim
[eksik data tamamlaması yapmadım]


iyi geceler diyeyim ve kaçayım.:wave:

INVENTOR
14-11-2013, 22:54
Düzeltilmiş halini içeren versiyonu aşağıdaki adresten şu an alabilirsiniz.

www.directfn.com.tr/terminal/ideal.exe

Sayın iDealTrade,
Son zamanlarda bi sıkıntım var. Bilginiz varsa yardımcı olabilirseniz.. :)



public string THBFileURL
{
get
{
return "http://www.borsaistanbul.com/data/thb/" + yStr + "/" + mStr + "/" + "thb" + yStr + mStr + dStr + sID + ".zip";
}
}

Bu kod ile aldığım url son zamanlarda yanıt vermiyor, önceden çalışıyordu.

//http://www.borsaistanbul.com/data/thb/2013/11/thb201311141.zip?wsksbtkepceiaywj
şeklinde random (belki de random değildir, browsera adresi yazdığımda bu string otomatik ilave ediliyor..) bir string ilave ettiğimde; bir güne mahsus; cevap alıyorum.



/////////////////////

this.sID = App.IMKB.ResmiTatiller.SiradakiSeansNo.ToString();
this.yStr = App.IMKB.ResmiTatiller.SiradakiSeansTarihi.Year.To String();
this.mStr = App.IMKB.ResmiTatiller.SiradakiSeansTarihi.Month.T oString("00");
this.dStr = App.IMKB.ResmiTatiller.SiradakiSeansTarihi.Day.ToS tring("00");

////////////////////
if (!File.Exists(App.IMKB.DownloadData.THBZipDosya))
{
WebClient webClient = new WebClient();
webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed_DownloadTHB);

this.progressBarDownloadDATA.Value = 0;
webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChange d);
webClient.DownloadFileAsync(new Uri(App.IMKB.DownloadData.THBFileURL), @App.IMKB.DownloadData.THBZipDosya);
}
///////////////////
public string THBFileURL
{
get
{
return "http://www.borsaistanbul.com/data/thb/" + yStr + "/" + mStr + "/" + "thb" + yStr + mStr + dStr + sID + ".zip";
}
}

Bear_Bull
15-11-2013, 01:46
INVENTOR'um senin işten anlasam dükkan senin biliyosun ama o konuda kafa tın tın .



explorer yazılım denemelerine devam

sıralı ortalamalar.




No
Sembol
Açıklama
son
5
10
20
50
100
200


1
AKBNK
7.26 > 7.238 Boğa
7.2600
7.0720
7.2380
7.5950
7.5540
7.4930
8.3075


2
ARCLK
12 < 12.03 Ayı
12.0000
11.8000
12.0300
12.4050
11.8010
12.0204
12.1205


3
ASELS
9.02 < 9.082 Ayı
9.0200
8.9560
9.0820
9.2480
8.6400
8.7086
9.3532


4
ASYAB
1.93 < 1.958 Ayı
1.9300
1.8980
1.9580
1.9890
1.9336
1.8928
2.0366


5
BIMAS
43.3 > 41.49 Boğa
43.3000
42.0400
41.4900
41.7550
41.6140
41.9650
42.7518


6
DOHOL
0.82 < 0.867 Ayı
0.8200
0.8420
0.8670
0.8810
0.8728
0.9150
1.0088


7
EKGYO
2.61 < 2.779 Ayı
2.6100
2.7200
2.7790
2.7760
2.6922
2.7057
2.8235


8
ENKAI
6.64 > 6.298 Boğa
6.6400
6.3920
6.2980
6.2150
5.8730
5.5061
5.1349


9
EREGL
2.68 < 2.683 Ayı
2.6800
2.6800
2.6830
2.6585
2.4926
2.2571
2.1570


10
GARAN
7.62 > 7.564 Boğa
7.6200
7.4240
7.5640
7.8430
7.8592
7.7612
8.5425


11
HALKB
15.25 < 15.33 Ayı
15.2500
14.8700
15.3300
15.7475
15.1520
15.0715
16.8455


12
IHLAS
0.74 < 0.747 Ayı
0.7400
0.7400
0.7470
0.7520
0.7670
0.7965
0.8620


13
ISCTR
5.18 > 5.128 Boğa
5.1800
5.0320
5.1280
5.3330
5.2706
5.2599
5.9634


14
KCHOL
9.18 < 9.358 Ayı
9.1800
9.1520
9.3580
9.6380
9.3820
9.1648
9.6015


15
KOZAA
4.12 < 4.219 Ayı
4.1200
4.0340
4.2190
4.2440
3.9416
3.5784
4.1063


16
KOZAL
32.3 < 32.77 Ayı
32.3000
30.4600
32.7700
33.8350
32.0980
29.5485
33.2192


17
KRDMD
1.21 < 1.212 Ayı
1.2100
1.1780
1.2120
1.2495
1.1772
1.1817
1.2975


18
MGROS
17 < 17.07 Ayı
17.0000
16.7500
17.0700
17.6900
17.5720
18.7335
20.5988


19
PETKM
2.94 < 3.063 Ayı
2.9400
2.9600
3.0630
3.0205
2.8754
2.8331
2.9721


20
PGSUS
37.5 < 37.74 Ayı
37.5000
37.8200
37.7400
38.0550
33.9460
30.4275



21
SAHOL
9 < 9.073999 Ayı
9.0000
8.8520
9.0740
9.4520
9.5876
9.6542
10.2331


22
SISE
2.73 < 2.778 Ayı
2.7300
2.6860
2.7780
2.8900
2.8540
2.7887
2.8352


23
TAVHL
13.7 > 13.65 Boğa
13.7000
13.4800
13.6500
14.1450
13.7110
12.8550
11.9338


24
TCELL
11.9 < 12.1 Ayı
11.9000
11.7900
12.1000
12.3450
11.9420
11.6175
11.5710


25
THYAO
7.36 < 7.53 Ayı
7.3600
7.2800
7.5300
7.8160
7.4384
7.6061
7.0232


26
TOASO
12.95 > 12.825 Boğa
12.9500
12.8000
12.8250
13.2450
12.4930
12.5277
12.1077


27
TTKOM
6.4 < 6.526 Ayı
6.4000
6.3880
6.5260
6.7360
6.7432
6.8404
7.0250


28
TUPRS
42 < 43.43 Ayı
42.0000
41.5800
43.4300
44.3500
43.1400
43.1920
45.9613


29
VAKBN
4.6 > 4.578 Boğa
4.6000
4.4980
4.5780
4.8170
4.6782
4.5648
5.1936


30
YKBNK
4.37 > 4.351 Boğa
4.3700
4.2520
4.3510
4.5420
4.5294
4.4264
4.9053


15.Kasım.2013,Cuma <00:43:04>
Bear_Bull

INVENTOR
15-11-2013, 01:51
Sayın dostum başımın çaresine bakıyorum da kodu derleyip exe yaptım mı eşe dosta mahçup oluyorum. :) Kolay gele. :cool:

Kel alaka bi grafik atayım ben de.. :)
http://inventoranaliz.host22.com/HisseNetImages/2013-11-15_003942.png

Bear_Bull
15-11-2013, 03:03
http://l1311.hizliresim.com/1h/h/uk485.png


grafikte yarın görünecek şekli ile çizgileri.
http://l1311.hizliresim.com/1h/h/uk49x.png

INVENTOR
16-11-2013, 22:06
Bugün cuma gününün bülten dosyasını şu ilave ile sorunsuz indirdim..
uri sonuna; daha önceden kullanılmamış (!!); rastgele bir string ekleyince oldu, pazartesi ve salı ve de çarşamba günü de düdük öterse tamamdır.
Yine sorun çıkarsa türkçe karakterlerin olmadığı custom string oluşturup sona ilave ederek deneme yapacağım.


public string THBFileURL
{
get
{
string extension = DateTime.Now.ToLongDateString().Replace(" ", "");
return "http://www.borsaistanbul.com/data/thb/" + yStr + "/" + mStr + "/" + "thb" + yStr + mStr + dStr + sID + ".zip" + "?" + extension;
}
}

INVENTOR
19-11-2013, 22:49
Biraz uyduruk oldu ama her daim çalışıyor.. :)
Topiğe benden bu kadar. :wink: Takibe geçtim. Güzel C# kodlu algoritmalarınızı bekliyorum.



private static string RandomString(int cCount)
{
string harfler = "abcdefghijkmnopqrstuvwxyz";
char[] rString = new char[cCount];
Random rd = new Random();

for (int i = 0; i < cCount; i++)
{
rString[i] = harfler[rd.Next(0, harfler.Length)];
}
return new string(rString);
}

public string THBFileURL
{
get
{
string extension = RandomString(16);

return "http://www.borsaistanbul.com/data/thb/" + yStr + "/" + mStr + "/" + "thb" + yStr + mStr + dStr + sID + ".zip" + "?" + extension;
}
}

thebaboli
20-11-2013, 01:30
ichimoku indikatör formulu


int tenkansen = 9;
int kijunsen = 26;
int chikouspan = 26;
int senkouspan = 52;
int shift = 26;

var bars = Sistem.GrafikVerileri;
var ListeTENKANSEN = Sistem.Liste(0);
var ListeKIJUNSEN = Sistem.Liste(0);
var ListeCHIKOUSPAN = Sistem.Liste(0);
var ListeSENKOUSPANA = Sistem.Liste(0);
var ListeSENKOUSPANB = Sistem.Liste(0);


// TENKAN SEN
for (int i = tenkansen; i < bars.Count; i++)
{
var hhv = bars[i].High;
var llv = bars[i].Low;
for (int j = 1; j < tenkansen; j++)
{
int pos = i + j - tenkansen;
hhv = Math.Max(hhv, bars[pos].High);
llv = Math.Min(llv, bars[pos].Low);
}
ListeTENKANSEN[i] = (hhv + llv) / 2;
}


// KIJUN SEN
for (int i = kijunsen; i < bars.Count; i++)
{
var hhv = bars[i].High;
var llv = bars[i].Low;
for (int j = 1; j < kijunsen; j++)
{
int pos = i + j - kijunsen;
hhv = Math.Max(hhv, bars[pos].High);
llv = Math.Min(llv, bars[pos].Low);
}
ListeKIJUNSEN[i] = (hhv + llv) / 2;
}


// CHIKOU SPAN
for (int i = chikouspan; i < bars.Count; i++)
{
ListeCHIKOUSPAN[i-chikouspan+1] = bars[i].Close;
}
for (int i = bars.Count-chikouspan+1; i < bars.Count; i++)
{
ListeCHIKOUSPAN[i] = bars[bars.Count-1].Close;
}


// SENKOU SPAN A
for (int i = shift; i < bars.Count - shift; i++)
{
ListeSENKOUSPANA[i+shift] = (ListeTENKANSEN[i] + ListeKIJUNSEN[i]) / 2;
}

// SENKOU SPAN B
for (int i = senkouspan; i < bars.Count; i++)
{
var hhv = bars[i].High;
var llv = bars[i].Low;
for (int j = 1; j < senkouspan; j++)
{
int pos = i + j - senkouspan;
hhv = Math.Max(hhv, bars[pos].High);
llv = Math.Min(llv, bars[pos].Low);
}
ListeSENKOUSPANB[i] = (hhv + llv) / 2;
}
ListeSENKOUSPANB = Sistem.Ref(ListeSENKOUSPANB, -shift);



Sistem.Cizgiler[0].Deger = ListeTENKANSEN;
Sistem.Cizgiler[0].Aciklama = "TENKAN SEN";
Sistem.Cizgiler[1].Deger = ListeKIJUNSEN;
Sistem.Cizgiler[1].Aciklama = "KIJUN SEN";
Sistem.Cizgiler[2].Deger = ListeCHIKOUSPAN;
Sistem.Cizgiler[2].Aciklama = "CHIKOU SPAN";
Sistem.Cizgiler[3].Deger = ListeSENKOUSPANA;
Sistem.Cizgiler[3].Aciklama = "SENKOU SPAN A";
Sistem.Cizgiler[4].Deger = ListeSENKOUSPANB;
Sistem.Cizgiler[4].Aciklama = "SENKOU SPAN B";


// bölge renklendirme
var Renk1 = Sistem.Renk(100,255,0,0);
var Renk2 = Sistem.Renk(100,0,255,0);
Sistem.DolguEkle(3,4,Renk1,Renk2);





http://j1311.hizliresim.com/1h/n/uqb7d.png (http://bit.ly/c25MCx)


Paylaşımda bulunanlara teşekkür ederim :cool:

thebaboli
27-11-2013, 02:13
Merhabalar

iDeal Sistem Modülünde, derinlik verlerini de kullanabildiğinizi, formüllerinizde,indikatörlerinizde, robotlarınız derinlik verilerini doğrudan kodda çağırabildiğinizi (SADECE DERİNLİK LİSANSINA SAHİP OLAN KULLANICILAR) hatırlatıp, bunu nasıl kullanacağım diyenlere, aşağıdaki kod örneğini paylaşmak isteriz;



var Sembol = "IMKBH'GARAN";

var Derinlik = Sistem.DerinlikVerisiOku(Sembol); //Grafik üzerinden çalıştırılan sistemde, mevcut sembol haricinde ir sembolün verileri okutuluyor
var AlisFiyatKademe0 = Derinlik.Bids[0].Price; //Alış/Satış kademelerinin ilki (en iyi fiyat) 0 numaralı satırdır..
var AlisLotKademe0 = Derinlik.Bids[0].Size;

********************************


iDeal 2.64 versiyonunda kullanıcılara aşağıdaki örnekte kullanılan iki yeni fonksiyonu kullanmak imkanı verilmiştir.

Sistem.Ses //İstenilen anlar/koşullar için ses kullanma
Sistem.Mesaj //İstenilen anlar/koşullar için ekrana mesaj çıkarma

Ses fonksiyonu ile (parametre olmaksızın kullanılırsa windows'un "Asterisk.wav" dosyası çalar) \ideal dizininde olmak kaydıyla bir ses dosyasını koddan oynatabilirsiniz. (ekrana bir player vs açılmaz)

1.kullanım şekli: Sistem.Ses();
2.kullanım şekli: Sistem.Ses("Media\\ringout.wav");

Mesaj fonksiyonunun kullanımını da içeren basit bir örnek aşağıda paylaşılmıştır.

GARAN hisse senedi derinliğinin 1.Alış kademesindeki fiyatı ve 1.Alış kademesindeki bekleyen lot miktarı ekrana mesaj olarak çıkarttırılmakta, mesaj çıktığı anda ses dosyası oynatılmaktadır.



var Sembol = "IMKBH'GARAN";

var Derinlik = Sistem.DerinlikVerisiOku(Sembol);
var AlisFiyatKademe0 = Derinlik.Bids[0].Price;
var AlisLotKademe0 = Derinlik.Bids[0].Size;

Sistem.Ses();
Sistem.Mesaj("Alış Fiyatı =" + AlisFiyatKademe0.ToString() + "\r\n" + "Alış Lot = " + AlisLotKademe0.ToString());


http://n1311.hizliresim.com/1h/v/uxhl0.png (http://bit.ly/c25MCx)

2.64 versiyon yayınlanmıştır.

Saygılarımızla

thebaboli
28-11-2013, 14:06
ichimoku strong buy , strong sell


int tenkansen = 9;
int kijunsen = 26;
int chikouspan = 26;
int senkouspan = 52;
int shift = 26;

var bars = Sistem.GrafikVerileri;
var ListeTENKANSEN = Sistem.Liste(0);
var ListeKIJUNSEN = Sistem.Liste(0);
var ListeCHIKOUSPAN = Sistem.Liste(0);
var ListeSENKOUSPANA = Sistem.Liste(0);
var ListeSENKOUSPANB = Sistem.Liste(0);


// TENKAN SEN
for (int i = tenkansen; i < bars.Count; i++)
{
var hhv = bars[i].High;
var llv = bars[i].Low;
for (int j = 1; j < tenkansen; j++)
{
int pos = i + j - tenkansen;
hhv = Math.Max(hhv, bars[pos].High);
llv = Math.Min(llv, bars[pos].Low);
}
ListeTENKANSEN[i] = (hhv + llv) / 2;
}


// KIJUN SEN
for (int i = kijunsen; i < bars.Count; i++)
{
var hhv = bars[i].High;
var llv = bars[i].Low;
for (int j = 1; j < kijunsen; j++)
{
int pos = i + j - kijunsen;
hhv = Math.Max(hhv, bars[pos].High);
llv = Math.Min(llv, bars[pos].Low);
}
ListeKIJUNSEN[i] = (hhv + llv) / 2;
}


// CHIKOU SPAN
for (int i = chikouspan; i < bars.Count; i++)
{
ListeCHIKOUSPAN[i-chikouspan+1] = bars[i].Close;
}
for (int i = bars.Count-chikouspan+1; i < bars.Count; i++)
{
ListeCHIKOUSPAN[i] = bars[bars.Count-1].Close;
}


// SENKOU SPAN A
for (int i = shift; i < bars.Count - shift; i++)
{
ListeSENKOUSPANA[i+shift] = (ListeTENKANSEN[i] + ListeKIJUNSEN[i]) / 2;
}

// SENKOU SPAN B
for (int i = senkouspan; i < bars.Count; i++)
{
var hhv = bars[i].High;
var llv = bars[i].Low;
for (int j = 1; j < senkouspan; j++)
{
int pos = i + j - senkouspan;
hhv = Math.Max(hhv, bars[pos].High);
llv = Math.Min(llv, bars[pos].Low);
}
ListeSENKOUSPANB[i] = (hhv + llv) / 2;
}
ListeSENKOUSPANB = Sistem.Ref(ListeSENKOUSPANB, -shift);


// al sat noktalarını bul
var AlisRenk = Sistem.Renk(255, 0, 0, 255);
var SatisRenk = Sistem.Renk(255,255, 0, 0);
for (int i=1; i<Sistem.BarSayisi-1; i++)
{
if (ListeTENKANSEN[i - 1] < ListeKIJUNSEN[i - 1] && ListeTENKANSEN[i] >= ListeKIJUNSEN[i])
{
Sistem.Yon[i] = "A"; // alış
var bulutseviyesi = Math.Max(ListeSENKOUSPANA[i], ListeSENKOUSPANB[i]);
if (ListeTENKANSEN[i] > bulutseviyesi)
{
var Yazi = "Strong Buy";
Sistem.YaziEkle(Yazi, 1, i, Sistem.GrafikVerileri[i].Close*1.02F, AlisRenk, "Tahoma", 8);


}
}
if (ListeTENKANSEN[i - 1] > ListeKIJUNSEN[i - 1] && ListeTENKANSEN[i] <= ListeKIJUNSEN[i])
{
Sistem.Yon[i] = "S"; // satış
var bulutseviyesi = Math.Min(ListeSENKOUSPANA[i], ListeSENKOUSPANB[i]);
if (ListeTENKANSEN[i] < bulutseviyesi)
{
var Yazi = "Strong Sell";
Sistem.YaziEkle(Yazi, 1, i, Sistem.GrafikVerileri[i].Close*0.98F, SatisRenk, "Tahoma", 8);
}
}
}


Sistem.Cizgiler[0].Deger = ListeTENKANSEN;
Sistem.Cizgiler[0].Aciklama = "TENKAN SEN";
Sistem.Cizgiler[1].Deger = ListeKIJUNSEN;
Sistem.Cizgiler[1].Aciklama = "KIJUN SEN";
Sistem.Cizgiler[2].Deger = ListeCHIKOUSPAN;
Sistem.Cizgiler[2].Aciklama = "CHIKOU SPAN";
Sistem.Cizgiler[3].Deger = ListeSENKOUSPANA;
Sistem.Cizgiler[3].Aciklama = "SENKOU SPAN A";
Sistem.Cizgiler[4].Deger = ListeSENKOUSPANB;
Sistem.Cizgiler[4].Aciklama = "SENKOU SPAN B";


// bölge renklendirme
var Renk1 = Sistem.Renk(50,255,0,0);
var Renk2 = Sistem.Renk(50,0,255,0);
Sistem.DolguEkle(3,4,Renk1,Renk2);

http://k1311.hizliresim.com/1h/w/uyq89.png (http://bit.ly/c25MCx)

***************************************

thebaboli
02-12-2013, 22:07
kazandıran bir sistem
getiri eğrisinin kod ile çizilmesi
take profit, stop uygulaması


var Veriler = Sistem.GrafikVerileri;
var MA1 = Sistem.MA(5, "Exp", "Kapanis");
var MA2 = Sistem.MA(20, "Exp", "Kapanis");

var IslemMiktari = Sistem.Liste(0);
var Pozisyon = Sistem.Liste(0);
var KarZarar = Sistem.Liste(0);


var BaslangicNo = 1;
float SonPozisyon = 0;
float SonFiyat = 0;
float ToplamKarZarar = 0;

if (Sistem.BarSayisi > 1000) BaslangicNo = Sistem.BarSayisi - 1000;
for (int i = BaslangicNo; i < Sistem.BarSayisi; i++)
{
// LONG : Take Profit, Stop
if (SonPozisyon > 0)
{
// Take Profit
if (Veriler[i].High >= SonFiyat * 1.05F)
{
IslemMiktari[i] = -SonPozisyon;
SonFiyat = SonFiyat * 1.05F;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
// Stop
else if (Veriler[i].Low <= SonFiyat * 0.95F)
{
IslemMiktari[i] = -SonPozisyon;
SonFiyat = SonFiyat * 0.95F;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
}

// SHORT : Take Profit, Stop
else if (SonPozisyon < 0)
{
// Take Profit
if (Veriler[i].Low <= SonFiyat * 0.95F)
{
IslemMiktari[i] = -SonPozisyon;
SonFiyat = SonFiyat * 0.95F;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
// Stop
else if (Veriler[i].High >= SonFiyat * 1.05F)
{
IslemMiktari[i] = -SonPozisyon;
SonFiyat = SonFiyat * 1.05F;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
}

// AL
if (MA1[i-1]< MA2[i-1] && MA1[i]>= MA2[i] && SonPozisyon <= 0)
{
if (SonPozisyon == 0)
{
IslemMiktari[i] = 1;
SonFiyat = Veriler[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
else if (SonPozisyon < 0)
{
IslemMiktari[i] = 2;
SonFiyat = Veriler[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
}

// SAT
else if (MA1[i-1]> MA2[i-1] && MA1[i]<= MA2[i] && SonPozisyon >= 0)
{
if (SonPozisyon == 0)
{
IslemMiktari[i] = -1;
SonFiyat = Veriler[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
else if (SonPozisyon > 0)
{
IslemMiktari[i] = -2;
SonFiyat = Veriler[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
}
Pozisyon[i] = SonPozisyon;
KarZarar[i] = ToplamKarZarar + Veriler[i].Close * Pozisyon[i];
}

Sistem.Cizgiler[0].Deger = MA1;
Sistem.Cizgiler[1].Deger = MA2;
Sistem.Cizgiler[2].Deger = IslemMiktari;
Sistem.Cizgiler[3].Deger = Pozisyon;
Sistem.Cizgiler[4].Deger = KarZarar;





http://u1312.hizliresim.com/1j/2/v3td4.png (http://bit.ly/c25MCx)
http://u1312.hizliresim.com/1j/2/v3tdt.png (http://bit.ly/c25MCx)

************************

thebaboli
06-12-2013, 21:36
konuşan ve yorum yapan robot uygulaması :)
robot bölümüne ekleyin ve robotu sanal modda çalıştırın



var Sembol = "FX'EURUSD";
var Periyot = "1";
var Kapanislar = Sistem.GrafikFiyatOku(Sembol, Periyot, "Kapanis");
var MA1 = Sistem.MA(Kapanislar, "Simple", 1);
var MA2 = Sistem.MA(Kapanislar, "Simple", 3);

if (Sistem.YeniBarKontrol(Sistem.Name, Sembol, Periyot, Kapanislar.Count))
{
// alış
if (Sistem.YukariKestiyse(MA1, MA2))
{
Sistem.Mesaj("AL");
Sistem.Ses("\\Media\\AL.Wav");

}

// satış
if (Sistem.AsagiKestiyse(MA1, MA2))
{
Sistem.Ses("\\Media\\SAT.Wav");
}
}


**************************

thebaboli
09-12-2013, 00:18
ÖRNEK ROBOT=(Piramit)

Aşağıdaki resimde tarif edilene göre, fiyat yukarı yönlü olduğu zamanlarda, piramidin sol tarafındaki
Fiyat aşağı yönlü olduğu zamanlarda ise piramidin sağ tarafındaki noktalarda belirtilen işlemleri yapması istenen bir robot istenmiştir.

Buna göre,
robotu kullanacak kişi, her sabah kendince anlam ifade eden ALT SEVİYE ve ÜST SEVİYE değerlerini elle girecek ve robotu çalıştıracaktır.
Bu Robot sanal ortamda defalarca test edilmiş, gerçek ortamda da kullanılmaktadır.
STOPLOSS noktaları hariç her sinyal noktasında, istenen LONG ise LONG, SHORT ise SHORT pozisyon alınır. (LONG yazan yere gelindiğinde pozisyon SHORT ise, bu poziyon kapatılır ve yeni LONG pozisyon açılır.)

Seans ilk açıldığı anda fiyatın piramitin hangi bölgesinde olduğu tespiti ve sonrasında piramidin sol tarafında mı yoksa sağ tarafında mı olduğumuzun tespitinin yapılışı da yine koddan görülebilir.


Robotun tüm kodu aşağıdaki gibidir.
İncelemenizi öneririz.


NOTLAR:
1-Kod içindeki fiyat seviyeleri, formülü yazıp test ettiğimiz günlerde denenmiş rastgele rakamlardır.
2-Kullanıcı ALT, UST ve Sağ StopLoss, Sol Stoploss değerlerini kendine göre girip kaydetmek durumunda.
3-İşlem adedi 1 seçilidir.
4-ALT +300 ve ÜST-300 seviyeleri için kullanılan değişken MARJ değişkenidir.

ÖNEMLİ NOT: Diyelimki seans en alt bölgeden bir puanla açıldı. ALT+300 seviyesi yukarı yönlü geçildi (LONG olundu) ve alttan ikinci bölgeye gelindi. Sonra düşüş başladı ve tekrar en aalt bölgeye inildi (ALT+300 seviyesinin altına): Piramidin sağ tarafına göre bu geçiş noktası LONG olma noktası. Ama zaten pozisyon LONG olduğu için bir işlem yapılmıyor.
Bu yönde pekçok kontrol olduğunu kodu inceleyince göreceksiniz.


http://u1312.hizliresim.com/1j/8/vb7gt.png (http://bit.ly/c25MCx)



dim Sembol = "VIP'F_XU03012013S0"
dim Alt = 91.700
dim SolSL = 93.700
dim Ust = 94.000
dim SagSL = 93.350
dim Marj = 0.300
dim Miktar = 1


rem - robot pozisyon kontrolü için anahtar belirle
dim Anahtar = Sistem.Name + " " + Sembol

rem - pozisyon tablosundan pozisyon miktarını al
dim Pozisyon = Sistem.PozisyonKontrolOku(Anahtar)

rem - sembolün son fiyatını ok
dim SonFiyat = Sistem.SonFiyat(Sembol)

rem - sembolün önceki fiyatını sayı kontrolü tablosundan oku
dim OncekiFiyat = Sistem.SayiTablosunuOku(Anahtar)

rem - emir parametreleri
Sistem.EmirSembol = Sembol
Sistem.EmirSuresi = "GUN" rem - GUN, SNS, IKG
Sistem.EmirTipi = "KPY" rem - KPY, KIE, GIE, SAR
Sistem.EmirFiyatTipi = "PYS" rem - PYS, LMT, EIF, KAP
Sistem.EmirMiktari = 0

rem - fiyat aralığını kontrol et
if OncekiFiyat > 0 and SonFiyat > 0

rem - sol alış
if OncekiFiyat < Alt + Marj and SonFiyat >= Alt + Marj
if Pozisyon < 0
Sistem.EmirMiktari = 2 * Miktar
else if Pozisyon = 0
Sistem.EmirMiktari = Miktar
end if
if Sistem.EmirMiktari > 0
Sistem.EmirIslem = "Alış"
Sistem.EmirGonder()
Sistem.PozisyonKontrolGuncelle(Anahtar, Miktar)
end if

rem - sol alış
else if OncekiFiyat < SolSL and SonFiyat >= SolSL
if Pozisyon < 0
Sistem.EmirMiktari = 2 * Miktar
else if Pozisyon = 0
Sistem.EmirMiktari = Miktar
end if
if Sistem.EmirMiktari > 0
Sistem.EmirIslem = "Alış"
Sistem.EmirGonder()
Sistem.PozisyonKontrolGuncelle(Anahtar, Miktar)
end if

rem - sol satış
else if OncekiFiyat < Ust - Marj and SonFiyat >= Ust - Marj
if Pozisyon > 0
Sistem.EmirMiktari = 2 * Miktar
else if Pozisyon = 0
Sistem.EmirMiktari = Miktar
end if
if Sistem.EmirMiktari > 0
Sistem.EmirIslem = "Satış"
Sistem.EmirGonder()
Sistem.PozisyonKontrolGuncelle(Anahtar, -Miktar)
end if

rem - sol alış
else if OncekiFiyat < Ust and SonFiyat >= Ust
if Pozisyon < 0
Sistem.EmirMiktari = 2 * Miktar
else if Pozisyon = 0
Sistem.EmirMiktari = Miktar
end if
if Sistem.EmirMiktari > 0
Sistem.EmirIslem = "Alış"
Sistem.EmirGonder()
Sistem.PozisyonKontrolGuncelle(Anahtar, Miktar)
end if

rem - sağ satış
else if OncekiFiyat > SagSL and SonFiyat <= SagSL
if Pozisyon > 0
Sistem.EmirMiktari = 2 * Miktar
else if Pozisyon = 0
Sistem.EmirMiktari = Miktar
end if
if Sistem.EmirMiktari > 0
Sistem.EmirIslem = "Satış"
Sistem.EmirGonder()
Sistem.PozisyonKontrolGuncelle(Anahtar, -Miktar)
end if

rem - sağ alış
else if OncekiFiyat > Alt + Marj and SonFiyat <= Alt + Marj
if Pozisyon < 0
Sistem.EmirMiktari = 2 * Miktar
else if Pozisyon = 0
Sistem.EmirMiktari = Miktar
end if
if Sistem.EmirMiktari > 0
Sistem.EmirIslem = "Alış"
Sistem.EmirGonder()
Sistem.PozisyonKontrolGuncelle(Anahtar, Miktar)
end if

rem - sağ satış
else if OncekiFiyat > Alt and SonFiyat <= Alt
if Pozisyon > 0
Sistem.EmirMiktari = 2 * Miktar
else if Pozisyon = 0
Sistem.EmirMiktari = Miktar
end if
if Sistem.EmirMiktari > 0
Sistem.EmirIslem = "Satış"
Sistem.EmirGonder()
Sistem.PozisyonKontrolGuncelle(Anahtar, -Miktar)
end if

end if

end if






Sistem.SayiTablosunuGuncelle(Anahtar, SonFiyat)




***************************


ÖRNEK ROBOT: HALKB / GARAN

Amaç: HALKB hisse fiyatının GARAN hisse fiyatına oranına göre;
HALKB/GARAN < 1.70 ise HALKB AL, GARAN SAT
HALKB/GARAN > 1.70 ise GARAN AL, HALKB SAT



var SembolHALKB = "IMKBH'HALKB";
var SonHALKB = Sistem.SonFiyat(SembolHALKB);
var SembolGARAN = "IMKBH'GARAN";
var SonGARAN = Sistem.SonFiyat(SembolGARAN);

// zaman kontrolu ( bu saat aralıklarında emir gönderilebilsin )
if (Sistem.SaatAraligi("09:30", "12:30") || Sistem.SaatAraligi("14:15", "17:30"))
{
// değerler sıfırdan büyük ise çalışsın
if (SonHALKB > 0 && SonGARAN > 0)
{
var Oran = SonHALKB / SonGARAN;
var Pozisyon = Sistem.PozisyonKontrolOku("Robot002"); // pozisyon kontrolü yap

// HALKB al, GARAN sat
if (Oran <= 1.70f)
{
if (Pozisyon != 1000) // HALKB pozisyon kontrolu yap, 1000 değil ise işlemi gerçekleştir..
{
Sistem.PozisyonKontrolGuncelle("Robot002", 1000);

// HALKB alış emri gönder
Sistem.EmirSembol = SembolHALKB;
Sistem.EmirIslem = "Alış";
Sistem.EmirMiktari = 1000;
Sistem.EmirFiyati = "Aktif"; // aktif fiyat
Sistem.EmirSuresi = "SEANS"; // SEANS, GUN
Sistem.EmirTipi = "NORMAL"; // NORMAL, KIE, KPY, AFE/KAFE
Sistem.EmirGonder();

// GARAN satış emri gönder
Sistem.EmirSembol = SembolGARAN;
Sistem.EmirIslem = "Satış";
Sistem.EmirMiktari = 1875;
Sistem.EmirFiyati = "Aktif"; // aktif fiyat
Sistem.EmirSuresi = "SEANS"; // SEANS, GUN
Sistem.EmirTipi = "NORMAL"; // NORMAL, KIE, KPY, AFE/KAFE
Sistem.EmirSatisTipi = "NORMAL"; // imkb (NORMAL, ACIGA, VIRMANDAN)
Sistem.EmirGonder();
}
}

// HALKB sat, GARAN al
if (Oran >= 1.99f)
{
if (Pozisyon != -1000)
{
Sistem.PozisyonKontrolGuncelle("Robot002", -1000);

// HALKB satış emri gönder
Sistem.EmirSembol = SembolHALKB;
Sistem.EmirIslem = "Satış";
Sistem.EmirMiktari = 1000;
Sistem.EmirFiyati = "Aktif"; // aktif fiyat
Sistem.EmirSuresi = "SEANS"; // SEANS, GUN
Sistem.EmirTipi = "NORMAL"; // NORMAL, KIE, KPY, AFE/KAFE
Sistem.EmirSatisTipi = "NORMAL"; // imkb (NORMAL, ACIGA, VIRMANDAN)
Sistem.EmirGonder();

// GARAN alış emri gönder
Sistem.EmirSembol = SembolGARAN;
Sistem.EmirIslem = "Alış";
Sistem.EmirMiktari = 1875;
Sistem.EmirFiyati = "Aktif"; // aktif fiyat
Sistem.EmirSuresi = "SEANS"; // SEANS, GUN
Sistem.EmirTipi = "NORMAL"; // NORMAL, KIE, KPY, AFE/KAFE
Sistem.EmirGonder();
}
}
}
}






forumda bulduğum bu formülü kaydetmek istediğimde "error BC30203: Tanımlayıcı bekleniyor." hatası alıyorum, acaba neresi hatalı ?

var Sembol = "IMKBH'GARAN";
var SembolDeger = Sistem.SonFiyat(Sistem.Sembol);
var Miktar = 25;

if (SembolDeger <= 9,50)
Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = "Alış";
Sistem.EmirMiktari = Miktar;
Sistem.EmirFiyati = "Aktif"; // aktif fiyat
Sistem.EmirSuresi = "SEANS"; // SEANS, GUN
Sistem.EmirTipi = "NORMAL"; // NORMAL, KIE, KPY, AFE/KAFE
Sistem.EmirGonder();
}


Birkaç hata var;
1-if bloğunun kapa parantezi var ama aç parantezi yok.
2-Sembol tanımı yapmışsınız kod içinde. Sonraki satırda SembolDeger değişkenine son fiyatı okutursen parantez içine Sistem.Sembol değil sadece sembol yazacaksınız, çünkü sembol belli. (sistem.sembol, sembolü uygulanan grafikten kendin al anlamında bir komuttur, robotta değil sistemlerde kullanılır)
3-Bu düzeltmeleri yapıp yollarsanız, yüzlerce kez emir iletir (saniyede 10 kez). Çünkü koşul devam ettiği müddetçe çalışır bu kod. Bir kez işlemi yap ve dur demek için pozisyon kontrolü eklemeniz lazım.

Tam düzgün çalışır hali şöyledir;


var Sembol = "IMKBH'GARAN";
var SembolDeger = Sistem.SonFiyat(Sembol);
var Miktar = 25;

var Pozisyon = Sistem.PozisyonKontrolOku(Sembol);


if (SembolDeger <= 9.65 && Pozisyon ==0)
{
Sistem.PozisyonKontrolGuncelle(Sembol, Pozisyon+Miktar);
Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = "Alış";
Sistem.EmirMiktari = Miktar;
Sistem.EmirFiyati = "Aktif"; // aktif fiyat
Sistem.EmirSuresi = "SEANS"; // SEANS, GUN
Sistem.EmirTipi = "NORMAL"; // NORMAL, KIE, KPY, AFE/KAFE
Sistem.EmirGonder();
}


http://i.hizliresim.com/z20dEB.png (http://hizliresim.com/z20dEB)

thebaboli
10-12-2013, 00:12
Sn.idealtrade ilginiz icin tskr.

Tam ifade edemedigimi biliyordum zaten.
MA'dan bagimzsiz olarak istiyorum sadece PRiCE OS.PERCENT İ baz almak istiyorum.

Simdi dediginiz gibi zaten yukselis dususu kirmizi ve yesil renk ile gosteriyor ben bunu al-sat sinyali olarak istiyorum.

Yani price os. Percent yesile dondugunde viop grafiginde al sinyali yansin
Kirmizi oldugunda sat sinyali istiyorum.

Umarim net ifade edebildim.

http://u1312.hizliresim.com/1j/9/vbqb4.jpg

Yukarida sari renkli daireye aldigim kisimda
Yesilden kirmiziya donmus ya iste o anda sistem SAT sinyali versin istiyorum.

Emekleriniz icin tekrar tskr



****************************************


İstediğinizi yapan kodu aşağıda bulabilirsiniz..
(isterseniz panelden "0" numaralı çizgiyi aktif edip, indikatörü de çizdirebilirsiniz grafiğin altına)

http://u1312.hizliresim.com/1j/9/vc8gh.png (http://bit.ly/c25MCx)



var Veriler = Sistem.GrafikFiyatSec("Kapanis");
var PriceOsc = Sistem.PriceOscPercent(10, 30,"Exp");


var SonYon = "";
for (int i = 1; i < Veriler.Count; i++)
{
if (PriceOsc[i] > PriceOsc [i-1])
if ( SonYon != "A") //Mavi kalınan her barda AL vermemesi için
{
Sistem.Yon[i] = "A"; // alış
SonYon = "A";
}
if (PriceOsc[i] < PriceOsc [i-1])
{
if ( SonYon != "S") //Kırmızı kalınan her bölgede SAT vermemesi için
{
Sistem.Yon[i] = "S"; // alış
SonYon = "S";
}
}
}

Sistem.Cizgiler[0].Deger = PriceOsc;
Sistem.Cizgiler[0].Aciklama = "PriceOsc ";

iDealTrade
13-12-2013, 11:30
peki bunun için gün bazlı otomatik alım satım robotu nasıl yapılır??

yukarıdaki kod üzerinden birkaç düzenlemeye ihtiyacınız olacak.
Birincisi, sistemler grafik üzerinden çağrıldığı için verileri okurken "Sistem.GrafikFiyatSec" fonksiyonu kullanabiliyorsunuz ama Robot kullanırken verileri açılmış bir grafikten almayacağı için aşağıdaki şekilde veri okutacaksınız;

var Sembol = "VIP'F_XU0301213S0";
var Kapanislar = Sistem.GrafikFiyatOku(Sembol, "G", "Kapanis");

Onun dışındaki düzenleme ise, Al ve Sat sinyalleri için kullanılan "Sistem.Yön" noktalarına emir gönderme fonksiyonlarının eklenmesi olmalı..



Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = "Alış";
Sistem.EmirMiktari = Miktar;
Sistem.EmirSuresi = "GUN"; // GUN, SNS, IKG
Sistem.EmirTipi = "KPY"; // KPY, KIE, GIE, SAR
Sistem.EmirFiyatTipi = "PYS"; // PYS, LMT, EIF, KAP
Sistem.EmirGonder();


Programda çok sayıda örnek Robot kodu bulunmaktadır.
Bunları incelemenizi öneririz.
Basit bir şekilde kendi robotunuzu yazmanıza yardım edecektir hazır robot kodları.
Yine de yardıma ihtiyaç duyarsanız bize ulaşabilirsiniz.

Saygılarımızla

iDealTrade
16-12-2013, 10:58
sizin için cok basit bişeydir taminimce bir örneğini yazıp yollarsanız diğer indikatörlere de uygulayabilirim belki c++ anlamıyorum çünkü

aşağıdaki kodu kendi belirleyeceğiniz bir isimle kaydedip kullanabilirsiniz.
(kod normalden biraz daha uzun oldu. bunun sebebi ister sistem olarak grafik üzerinde kullanıp, al sat noktalarını görebilin, isterseniz, otomatik emir gönderecek robot olarak kullanın diyedir.)



var Sembol = "VIP'F_XU0301213S0";

//var Veriler = Sistem.GrafikFiyatSec("Kapanis");
var Veriler = Sistem.GrafikFiyatOku(Sembol, "1", "Kapanis");
var PriceOsc = Sistem.PriceOscPercent(7, 19,"Exp");
var Pozisyon = Sistem.PozisyonKontrolOku(Sembol);


var SonYon = "";
for (int i = 1; i < Veriler.Count; i++)
{
if (PriceOsc[i] > PriceOsc [i-1])
if ( SonYon != "A") //Mavi kalınan her barda AL vermemesi için
{
Sistem.Yon[i] = "A"; // alış
SonYon = "A";
if (i==Veriler.Count-1)
{
Sistem.Debug("ALIS= "+ Veriler[i].ToString() + "-" + i.ToString());

if (Pozisyon == 0)
{
var Miktar = 1;
Sistem.PozisyonKontrolGuncelle(Sembol, Pozisyon+Miktar);
Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = "Alış";
Sistem.EmirMiktari = Miktar;
Sistem.EmirSuresi = "GUN"; // GUN, SNS, IKG
Sistem.EmirTipi = "KPY"; // KPY, KIE, GIE, SAR
Sistem.EmirFiyatTipi = "PYS"; // PYS, LMT, EIF, KAP
Sistem.EmirGonder();
}
else if (Pozisyon < 0)
{
var Miktar = -2*Pozisyon;
Sistem.PozisyonKontrolGuncelle(Sembol, Pozisyon+Miktar);
Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = "Alış";
Sistem.EmirMiktari = Miktar;
Sistem.EmirSuresi = "GUN"; // GUN, SNS, IKG
Sistem.EmirTipi = "KPY"; // KPY, KIE, GIE, SAR
Sistem.EmirFiyatTipi = "PYS"; // PYS, LMT, EIF, KAP
Sistem.EmirGonder();
}
}


}
if (PriceOsc[i] < PriceOsc [i-1])
{
if ( SonYon != "S") //Kırmızı kalınan her bölgede SAT vermemesi için
{
Sistem.Yon[i] = "S"; // alış
SonYon = "S";

if (i==Veriler.Count-1)
{
Sistem.Debug("SATIS= "+ Veriler[i].ToString() + "-" + i.ToString());

if (Pozisyon == 0)
{
var Miktar = 1;
Sistem.PozisyonKontrolGuncelle(Sembol, Pozisyon+Miktar);
Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = "Satış";
Sistem.EmirMiktari = Miktar;
Sistem.EmirSuresi = "GUN"; // GUN, SNS, IKG
Sistem.EmirTipi = "KPY"; // KPY, KIE, GIE, SAR
Sistem.EmirFiyatTipi = "PYS"; // PYS, LMT, EIF, KAP
Sistem.EmirGonder();
}
else if (Pozisyon > 0)
{
var Miktar = 2*Pozisyon;
Sistem.PozisyonKontrolGuncelle(Sembol, Pozisyon+Miktar);
Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = "Satış";
Sistem.EmirMiktari = Miktar;
Sistem.EmirSuresi = "GUN"; // GUN, SNS, IKG
Sistem.EmirTipi = "KPY"; // KPY, KIE, GIE, SAR
Sistem.EmirFiyatTipi = "PYS"; // PYS, LMT, EIF, KAP
Sistem.EmirGonder();
}
}


}
}
}

Sistem.Cizgiler[1].Deger = PriceOsc;
Sistem.Cizgiler[1].Aciklama = "PriceOsc ";


İyi çalışmalar

thebaboli
10-02-2014, 20:44
aslında yaptırmak istediğim şey oldukça basit ve kullanışlı bir sistem herkez kullanabilir diye düşündüm... sonucta bu proğram bize 5-22 gunluk ortalamaları alıyor ve bize al sat sinyali veriyor ben bu şartı xu100 e de baglamak istıyorum yani diyelim ki tyhao alıcam günlükte yukarı kırdığı zaman yani 5gunluk ortalama 22 gunlugun üstüne cıktıgı zaman aldıracagım tam tersınde de sattıracagım ama aynı zamanda xu100 ün de de 5-22 yi kessin istıyorum iki şartta saglansın daha sonra da bu bize al sat sinyalini verirken garanti olsun diye senedin ve xu100 ün de günlükte yada saatlikte sectigim herhangi bir ortalamada 100 gunluk olabilir yukarda olsun istiyorum bilmmem anlatabildim mi...
ğim bir ortalama için atıyorum 100 günlük ortalama da da üstte olsun istıyorum

*****************************************


Sanırız istediğiniz sistem bu..
Kodu istediğiniz ismi vererek sistem olarak kaydedin.
Herhangi bir grafik açıp bu sistemi çağırın...
siz periyot değiştirince geçtiğiniz periyoda göre hesaplama ve çizimler yapılır. Ekstra birşey yapmanıza gerek yok. MA parametreleri 5 ve 22 alındı. Kod içinden istediğiniz gibi değiştirebilirsiniz.
Kodlar ve örnek çıktılar aşağıdadır.

İyi çalışmalar


Günlük periyot - THYAO - Endeks
http://u1312.hizliresim.com/1j/f/vgmkj.png (http://bit.ly/c25MCx)

60 Dk'lık periyot - AKBNK - Endeks
http://u1312.hizliresim.com/1j/f/vgmhr.png (http://bit.ly/c25MCx)



var Sembol1 = Sistem.Sembol;
var Veriler1 = Sistem.GrafikVerileriniOku(Sembol1,Sistem.Periyot) ;
var data1 = Sistem.GrafikFiyatOku(Veriler1 , "Kapanis");

var Sembol2 = "IMKBX'XU100";
var Veriler2 = Sistem.GrafikVerileriniOku(Sembol2, Sistem.Periyot);
Veriler2 = Sistem.GrafikVerilerindeTarihHizala(Veriler1, Veriler2);
var data2 = Sistem.GrafikFiyatOku(Veriler2 , "Kapanis");

var MA1Sembol = Sistem.MA(data1, "Exp", 5);
var MA2Sembol = Sistem.MA(data1, "Exp", 22);

var MA1Endeks = Sistem.MA(data2, "Exp", 5);
var MA2Endeks = Sistem.MA(data2, "Exp", 22);

Sistem.Cizgiler[0].Deger = MA1Sembol ;
Sistem.Cizgiler[0].Aciklama = "MA5(Senet)";

Sistem.Cizgiler[1].Deger = MA2Sembol ;
Sistem.Cizgiler[1].Aciklama = "MA22(senet)";

Sistem.Cizgiler[2].Deger = MA1Endeks;
Sistem.Cizgiler[2].Aciklama = "MA5(endeks)";

Sistem.Cizgiler[3].Deger = MA2Endeks;
Sistem.Cizgiler[3].Aciklama = "MA22(endeks)";

for (int i = 1; i<Sistem.BarSayisi; i++)
{
if (MA1Sembol[i-1] < MA2Sembol[i-1] && MA1Sembol[i] > MA2Sembol[i] && MA1Endeks[i] > MA2Endeks[i] ) // 1.ortalama 2.ortalamanın üstüne çıkarsa
Sistem.Yon[i] = "A"; // alış
if (MA1Sembol[i-1] > MA2Sembol[i-1] && MA1Sembol[i] < MA2Sembol[i] && MA1Endeks[i] < MA2Endeks[i]) // 1.ortalama 2.ortalamanın altına inerse
Sistem.Yon[i] = "S"; // satış

}


panelden ilk 4 çizgiyi aktif etmeniz gerekiyor.
0 ve 1 numaralı çizgiler panel 2 ye
2 ve 3 numaralı çizgiler panel 3 e ayarlı bu görüntülerde..

http://u1312.hizliresim.com/1j/f/vgml1.png (http://bit.ly/c25MCx)

thebaboli
10-02-2014, 20:47
Sn.İdealtrade

Programla yüklü olarak gelen Momentum sisteminin Momentum değerlerinin h.o. alıp avr ile kesişimlerinde sinyal üretebilir miyiz?


Merhabalar

Hali hazırda gelen Momentum sisteminde zaten aşağıdaki satırlar var;

var Momentum = Sistem.Momentum (12);
var AVR = Sistem.MA(Momentum, "Simple", 100);

Yani Momentum'un zaten hareketli ortalaması alınmış ve bunun oratalamayla kesişmesinden siyal üretilmiş.
Başka bir koşul mu söylemek istediniz acaba?



Resim ile örnek veriyim oluşan testereyi minimuma indirebilmek için var Momentum = Sistem.Momentum (12); 12 değerinin tekrar h.o alıp avr ile kesişimini yumuşatmak istiyorum.
http://u1312.hizliresim.com/1j/k/vm5p1.jpg (http://bit.ly/c25MCx)



Bunu yapmanız çok basit.
AVR değişkeninin tekrar MA sını almak için şu satırı ekleyin

var MA = Sistem.MA(AVR, "Simple", 100);

Sonra kodun en altındaki "kesişme tara" satırını şöyle değiştirin;

Sistem.KesismeTara(MA, AVR);

(isterseniz, MA nın MA sını aldığınız yeni çizgiyi de ekrana çizdirtebilirsiniz.
Bunun için
Sistem.Cizgiler[2].Deger = MA; satırını ekleyin ve panelde 3. çizgiyi aktif edip, renk, stil, kalınlık, panel numarası belirlemeniz yeterli.)




Sn.İdealtrade çok teşekkür ederim. İyi çalışmalar



http://u1312.hizliresim.com/1j/k/vm6u5.jpg (http://bit.ly/c25MCx)

// parametreleri al
var PeriyotMomentum = Sistem.Parametreler[0];
var PeriyotAVR = Sistem.Parametreler[1];
var Yontem = Sistem.Parametreler[2];

// Momentum hesapla
var Momentum = Sistem.Momentum (PeriyotMomentum);
// ortalama hesapla
var AVR = Sistem.MA(Momentum, Yontem, PeriyotAVR);
var MA = Sistem.MA(Momentum, "Weighted", 35);

// hesaplanan verileri çizgilere aktar ve açıklama ekle
Sistem.Cizgiler[0].Deger = Momentum;
Sistem.Cizgiler[0].Aciklama = "Momentum " + PeriyotMomentum;
Sistem.Cizgiler[1].Deger = AVR;
Sistem.Cizgiler[1].Aciklama = "AVR " + PeriyotAVR;
Sistem.Cizgiler[2].Deger = MA;

// strateji
Sistem.KesismeTara(MA, AVR);

***************************

thebaboli
10-02-2014, 20:51
Teşekkürler değerli abim, her zaman yardımcı oluyorsunuz. Hakkını helal et..

dediğini yaptım ve netice aldım.
Aşağıda kırmızı ile işaret ettiğim yere RSI yazdığımda RSI kesişmeine göre AL-SAT sinyali veriyor.
Aynı yere MA1 ve MA2 yazdığımda MA!ların kesişimine göre AL-SAT sinyali veriyor.

Benim istediğim AL-SAT sinyalini hem RSI hem MA kesişimine bağlamak.


Kısacası AL sinyali için hem RSI,RSIAVR yukarı kesecek hem MA1,MA2 yi yukarı kesecek
aynı şekilde SAT sinyali için de tersi olacak.


İnsan bilmedikten sonra en basit şey bile o kadar zor geliyor ki, şimdiden teşekkürler.
Saygılar...



http://i.hizliresim.com/w1P5lj.jpg (http://bit.ly/c25MCx)




Merhabalar

Kesişmemin aynı barda olamayacağını düşünerek, "<" ve ">" kontrolleri yapılabilir.
MA1, MA2'yi kesmiş aynı anda RSI da ortalamnın üstünde(altında) ise AL/SAT sinyali oluştur işini aşağıdaki kod yapar.



var veriler = Sistem.GrafikVerileri;

var RSI=Sistem.RSI(14);
var RSIAVR = Sistem.MA(RSI, "Simple", 5);
var MA1 = Sistem.MA(5, "Simple", "Kapanis");
var MA2 = Sistem.MA(22, "Simple", "Kapanis");

Sistem.Cizgiler[0].Deger= MA1;
Sistem.Cizgiler[0].Aciklama = "MA1_5";
Sistem.Cizgiler[1].Deger = MA2;
Sistem.Cizgiler[1].Aciklama = "MA2_22";

Sistem.Cizgiler[2].Deger = RSI;
Sistem.Cizgiler[2].Aciklama = "RSI ";
Sistem.Cizgiler[3].Deger = RSIAVR;
Sistem.Cizgiler[3].Aciklama = "RSIAVR ";

for (int i = 1; i<Sistem.BarSayisi; i++)
{
if (MA1[i-1] < MA2[i-1] && MA1[i] > MA2[i] && RSI[i-1] < RSIAVR[i-1] && RSI[i] > RSIAVR[i])
Sistem.Yon[i] = "A";

if (MA1[i-1] > MA2[i-1] && MA1[i] < MA2[i] && RSI[i-1] > RSIAVR[i-1] && RSI[i] < RSIAVR[i])
Sistem.Yon[i] = "S";

}


http://i.hizliresim.com/K6YGO9.png (http://bit.ly/c25MCx)

**************************

thebaboli
10-02-2014, 20:53
Sn. İdealTrade size bir sistem üzerinden bir kaç farklı strateji soracağım.




// parametreleri al
var PeriyotRSI1 = Sistem.Parametreler[0];
var PeriyotRSI2 = Sistem.Parametreler[1];
var PeriyotRSI3 = Sistem.Parametreler[2];
var Yontem = Sistem.Parametreler[3];

// RSI hesapla
var RSI1 = Sistem.RSI (PeriyotRSI1);
var RSI2 = Sistem.RSI (PeriyotRSI2);
var RSI3 = Sistem.RSI (PeriyotRSI3);

// hesaplanan verileri çizgilere aktar ve açıklama ekle
Sistem.Cizgiler[0].Deger = RSI1;
Sistem.Cizgiler[1].Deger = RSI2;
Sistem.Cizgiler[2].Deger = RSI3;




Strateji 1 ;

AL KOŞULU

RSI1 >= 70.02 && RSI2 >= 65 && RSI3 >= 60

ALDAYKEN FLAT KOŞULU

RSI1 <= 40 || RSI2 <= 45 || RSI3 <= 50

SAT KOŞULU

RSI1 <= 25 && RSI2 <= 30 && RSI3 <= 35

SATTAYKEN FLAT KOŞULU

RSI1 >= 55 && RSI2 >= 50 && RSI3 >= 45

Strateji 2

AL

RSI1 > 50 && RSI1, RSI2 VE RSI3 ü yukarı keserse

ALDAYKEN FLAT KOŞULU

RSI1 > 50 && RSI1, RSI2 VEYA RSI3 ü aşağı keserse

SAT

RSI2 < 50 && RSI1, RSI2 VE RSI3 ü aşağı keserse

SATTAYKEN FLAT KOŞULU

RSI2 < 50 && RSI1, RSI2 VEYA RSI3 ü yukarı keserse

Bu sorularım indikatörlerini sistem yapmak isteyenlerinde işine yarayacaktır herhalde.


Merhabalar

Aslında mevcut örneklerimizden bu iki stratejiyi uygulatabileceğiniz sistem kodlarını yazmanız mümkün.
Yazılacak kodun yazılımsal anlamdaki püf noktası şu döngüyü kurmak aslında
(örneklerin birinden bir parça)



var SonYon = "";

for (int i = 1; i<Sistem.BarSayisi; i++)
{
if (RSI[i] > 54 && SonYon != "A" )
{
Sistem.Yon[i] = "A"; // alış
SonYon = "A";
}
}


Döngünün içindeki koşulların sayısı/sınırı kullanıcı bazlı değişir elbette.
Bu döngüdeki püf nokta, koşulun gerçekleşme anında verilen sinyalin, aynı koşul sürdüğü müddetçe her barda sinyal üretmemesi için SONYON değişkeniyle yapılan kontrol.

Kodlamada üstesinden gelemezseniz, bildirmenizi rica ederiz.

İyi çalışmalar


Sn. İdealTrade

Cevabınız için teşekkür ederim.

Örnekler genelde kesişme üstüne kurulu olarak gördüğüm için sordum. Bilgi az olunca görsem de tanıyamıyorum :)

Sizden ricam müsait olduğunuzda sorduğum kısımları tam olarak yazabilirmisiniz? Bu örnek ve benzer örnekler üzerinden nasıl yapabileceğimi tam olarak anlayamadım. Benim için ilk olmasından ötürü tek tek detaylı bir cevap verirseniz bu bilgiler net olarak kafama yatar ve sonraki örneklerde daha rahat uygulayabilirim.

Anlayışınız ve ilginiz için teşekkür ederim. Kolay gelsin iyi çalışmalar.


Priyotlar kaç olacak, yazabilir misiniz?


14 19 24 olarak düşündüm ama o kısmı optimizeli yapmak isterim. :)


Sayın thebaboli; sizin de diğer üyelerimizin de Örnekler arasında yer alan "karzarar" sisteminin formülünü incelemenizi öneririz.
AL ve SAT koşulları verilen bir durum için, hangi durumda stoploss hangi durumda take profit yapacağının belirtilip, her işlem de kar ve zararın ne olduğunu, o anki pozisyonun kaç olduğunu grafik üzerinde gösteren detaylı güzel bir örnektir.

Bu örnekten hareketle mesela, şu koşul olursa 5 adet al, şu koşul olursa aldıklarının 2 sini sat vs vs gibi kendi detay koşullarınızı kullanıp, işlem sayısını, pozisyonunuzu ve kar/zararınızı grafiksel olarak gözlemleyebilirsiniz.

Sizin strateji1 örneğinizi bu örneğe uyarladığımız kod ve görsel aşağıdaki gibidir.



// parametreleri al
var PeriyotRSI1 = Sistem.Parametreler[0];
var PeriyotRSI2 = Sistem.Parametreler[1];
var PeriyotRSI3 = Sistem.Parametreler[2];

// RSI hesapla
var RSI1 = Sistem.RSI (PeriyotRSI1);
var RSI2 = Sistem.RSI (PeriyotRSI2);
var RSI3 = Sistem.RSI (PeriyotRSI3);

var Veriler = Sistem.GrafikVerileri;
var MA1 = Sistem.MA(5, "Exp", "Kapanis");
var MA2 = Sistem.MA(22, "Exp", "Kapanis");

var IslemMiktari = Sistem.Liste(0);
var Pozisyon = Sistem.Liste(0);
var KarZarar = Sistem.Liste(0);

var BaslangicNo = 1;
float SonPozisyon = 0;
float SonFiyat = 0;
float ToplamKarZarar = 0;

var SonYon = "";

if (Sistem.BarSayisi > 5000) BaslangicNo = Sistem.BarSayisi - 5000;
for (int i = BaslangicNo; i < Sistem.BarSayisi; i++)
{
// LONG : Take Profit, Stop
if (SonPozisyon > 0)
{
// Flat
if (RSI1[i] <= 40 || RSI2[i] <= 45 || RSI3[i] <= 50 )
{
IslemMiktari[i] = -SonPozisyon;
SonFiyat = SonFiyat * 1.05F;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}

}

// SHORT : Take Profit, Stop
else if (SonPozisyon < 0)
{
// Flat
if (RSI1[i] >= 55 && RSI2[i] >= 50 && RSI3[i] >= 45)
{
IslemMiktari[i] = -SonPozisyon;
SonFiyat = SonFiyat * 0.95F;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}

}

// AL
if (RSI1[i] >= 70 && RSI2[i] >=65 && RSI3[i] >=60 && SonYon != "A" )
{
Sistem.Yon[i] = "A"; // alış
SonYon = "A";
if (SonPozisyon == 0)
{
IslemMiktari[i] = 1;
SonFiyat = Veriler[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
else if (SonPozisyon < 0)
{
IslemMiktari[i] = 2;
SonFiyat = Veriler[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
}

// SAT
else if (RSI1[i] <= 25 && RSI2[i] <=30 && RSI3[i] <=45 && SonYon != "S" )
{
Sistem.Yon[i] = "S"; // Satış
SonYon = "S";
if (SonPozisyon == 0)
{
IslemMiktari[i] = -1;
SonFiyat = Veriler[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
else if (SonPozisyon > 0)
{
IslemMiktari[i] = -2;
SonFiyat = Veriler[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
}
Pozisyon[i] = SonPozisyon;
KarZarar[i] = ToplamKarZarar + Veriler[i].Close * Pozisyon[i];
}

Sistem.Cizgiler[0].Deger = MA1;
Sistem.Cizgiler[1].Deger = MA2;
Sistem.Cizgiler[2].Deger = IslemMiktari;
Sistem.Cizgiler[3].Deger = Pozisyon;
Sistem.Cizgiler[4].Deger = KarZarar;
Sistem.Cizgiler[5].Deger = RSI1;
Sistem.Cizgiler[6].Deger = RSI2;
Sistem.Cizgiler[7].Deger = RSI3;


http://i.hizliresim.com/x8EjX1.png (http://bit.ly/c25MCx)

******************

thebaboli
10-02-2014, 21:04
Herkese İyi akşamlar ve Hayırlı kandiller

PolarizedFractalEfficiency indikatörü ile sistem yapmak istiyorum fakat aşağıdaki uyarıyı alıyorum.Fikri olan var mı?Tşkler

No overload for method 'PolarizedFractalEfficiency' takes '1' arguments

// parametreleri al
var PeriyotPolarizedFractalEfficiency = Sistem.Parametreler[0];
var PeriyotAVR = Sistem.Parametreler[1];
var Yontem = Sistem.Parametreler[2];

// PolarizedFractalEfficiency hesapla
var PolarizedFractalEfficiency = Sistem.PolarizedFractalEfficiency (PeriyotPolarizedFractalEfficiency);
// ortalama hesapla
var AVR = Sistem.MA(PolarizedFractalEfficiency, Yontem, PeriyotAVR);

// hesaplanan verileri çizgilere aktar ve açıklama ekle
Sistem.Cizgiler[0].Deger = PolarizedFractalEfficiency;
Sistem.Cizgiler[0].Aciklama = "PolarizedFractalEfficiency " + PeriyotPolarizedFractalEfficiency;
Sistem.Cizgiler[1].Deger = AVR;
Sistem.Cizgiler[1].Aciklama = "AVR " + PeriyotAVR;


// strateji
Sistem.KesismeTara(PolarizedFractalEfficiency, AVR);




Sv. Dostum


"PolarizedFractalEfficiency" indikatörü "MACD" gibi iki parametreye sahip olduğu için formülünü yazarken onu esas alarak yazmak lazım diye düşündüm ve şöyle yazdım oldu mu bilemedim. Bir dene istersen.




// parametreleri al
var Param1 = Sistem.Parametreler[0];
var Param2 = Sistem.Parametreler[1];
var PeriyotAVR = Sistem.Parametreler[2];
var Yontem = Sistem.Parametreler[3];

// hesapla
var PolarizedFractalEfficiency = Sistem.PolarizedFractalEfficiency (Param1, Param2);
// ortalama
var AVR = Sistem.MA(PolarizedFractalEfficiency, Yontem, PeriyotAVR);

// hesaplanan verileri çizgilere aktar ve açıklama ekle
Sistem.Cizgiler[0].Deger = PolarizedFractalEfficiency;
Sistem.Cizgiler[0].Aciklama = "PolarizedFractalEfficiency";
Sistem.Cizgiler[1].Deger = AVR;
Sistem.Cizgiler[1].Aciklama = "AVR" + PeriyotAVR;

// strateji
Sistem.KesismeTara(PolarizedFractalEfficiency, AVR);




http://i.imgur.com/rPcbzUL.png

************************

thebaboli
10-02-2014, 21:07
Sn.İdealTrade, Hareketli ortamaların farkını gösteren bir sembol yapabiliyor muyuz. Aşağıda daha önce djı ve dax arasındaki farkı gösteren bir sembol yapmıştınız. Bunun üzerinden uğraştım ama bilgi olmayınca yapacak bir şey olmuyor.

Şunu istiyorum. MA(5) ve MA(7) arasındaki farkı gösteren bir sembol.

Şimdiden teşekkürler.



Estağfurullah. Dili öğrenmem lazım. O yüzden talep lazım. Talep olmalı ki yapmaya çalışırken öğrenelim :)

Böyle yaptım işini görür mü? İlla Sembol mu olması lazım? Öyleyse onu da deneriz :)

http://i.imgur.com/Rj4nGrh.png


var Veriler = Sistem.GrafikVerileri;
var Kapanis = Sistem.GrafikFiyatOku(Sistem.GrafikVerileri, "Kapanis");
var MA21 = Sistem.MA(Kapanis, "Exp", 21);
var MA34 = Sistem.MA(Kapanis, "Exp", 34);

// fark - boş liste oluştur
var fark = Sistem.Liste(0);
// X3 - hesapla
for (int i = 0; i < Sistem.BarSayisi; i++)
fark[i] = (MA34[i]-MA21[i]);

// çizligeri göster
Sistem.Cizgiler[0].Deger = fark;
Sistem.Cizgiler[1].Deger = MA21;
Sistem.Cizgiler[2].Deger = MA34;



Estağfurullah dostum. Birde yaşlı değilim o kadar 26 bitti 27 deyim :)

Tüm ideal kullanıcılarından ricam aklınıza takılanı burada da sorun. Birbirimize biz çözüm bulabiliriz. Böylece kendimizi de ideal formül dili konusunda geliştirebiliriz. :cool:

*****************************

thebaboli
10-02-2014, 23:21
thebaboli Abi Directional Indikatöründen nasıl al sat programı yapabiliriz fikrin var mı? ben yapamadım :düsün:

*****************************


Böyle olur mu?


//DI-
var DM = Sistem.DirectionalIndicatorMinus(14);

//DI+
var DP = Sistem.DirectionalIndicatorPlus(14);


Sistem.Cizgiler[0].Deger = DM;

Sistem.Cizgiler[1].Deger = DP;

//strateji

Sistem.KesismeTara(DP,DM);

http://i.imgur.com/eNWPAoW.png

thebaboli
18-02-2014, 00:52
Soru soran yok ordan burdan bulduklarımı çevireyim bende :)


AL BÖLÜMÜNE: Cross(WillR(14),-75)

SAT BÖLÜMÜNE:Cross(-25,WillR(14))

http://i.imgur.com/LAJ6X99.png



//periyot belirle
var Periyot = Sistem.Parametreler[0];

// kapanış fiyatlarını oku
var Veriler = Sistem.GrafikFiyatSec("Kapanis");

//william's
var william = Sistem.WilliamsR(14);

Sistem.Cizgiler[0].Deger = william;

//strateji


var SonYon = "";
for (int i = 1; i < Veriler.Count; i++)
{
if (william[i] > -25 )
if ( SonYon != "A") //-75
{
Sistem.Yon[i] = "A"; // alış
SonYon = "A";
}
if (william[i] < -75 )
{
if ( SonYon != "S") //Kırmızı kalınan her bölgede SAT vermemesi için
{
Sistem.Yon[i] = "S"; // alış
SonYon = "S";
}
}
}

thebaboli
05-03-2014, 01:21
İdeal çalışanları sağolsun ilgilendiler ve yukarıdaki kullanım için yeni sürüm hazırladılar. Kendilerine teşekkür ederim.


var TSF1 = Sistem.Parametreler[0];
var Kairi2 = Sistem.Parametreler[1];
var Mov3 = Sistem.Parametreler[2];

//kapanış fiyatlarını oku
var Veriler = Sistem.GrafikVerileri;
var TSF = Sistem.TimeSeriesForecast(Veriler, TSF1);


var Kairi = Sistem.Kairi(TSF, Kairi2);

var Gaussian = Sistem.MA(Kairi, "Exp", Mov3);

Sistem.Cizgiler[0].Deger = Gaussian;
Sistem.Cizgiler[0].Aciklama = "Gaussian ";
Sistem.Cizgiler[1].Deger = Kairi;
Sistem.Cizgiler[1].Aciklama = "Kairi ";

//strateji

Sistem.KesismeTara(Kairi, Gaussian);

Bu şekilde yeni sürümde kullanılabilecektir.

http://i.imgur.com/6369nJE.png

thebaboli
05-03-2014, 20:18
DI+ DI- yı yukarı kestiğinde ve aynı zamanda Rainbow Oscillator 0 çizgisini yukarı geçen hisseleri bulmak istiyorum.
Böyle bir formül rica ediyorum. Tabi buna RSI veya MACD ekliye bilirsiniz.

Öncelikle hisselerle ilgilenmediğim için explorer tarzı bir yazılım yazmayı bilmiyorum.

Ayrıca İdealde Rainbow Oscillator diye bir indikatör göremedim. Çalışma mantığını biliyorsanız belki formülünü yazabilirim.

DI+ DI- kesişiminin formülü ;


//DI-
var DM = Sistem.DirectionalIndicatorMinus(Sistem.Parametrel er[0]);

//DI+
var DP = Sistem.DirectionalIndicatorPlus(Sistem.Parametrele r[1]);


Sistem.Cizgiler[0].Deger = DM;

Sistem.Cizgiler[1].Deger = DP;

//strateji

Sistem.KesismeTara(DP,DM);

iDealTrade
17-03-2014, 12:00
Rainbow Oscillator Metastock proğramında var idalde olurmu acaba dedim. İdalden metastock verisi elde etmek istesek nasıl bir yol izlememiz lazım.

Rainbow Oscilator formülünün iDeal Sistemde uyarlanmış hali aşağıdadır.
(sistem panelinde, "indikatör penceresinde göster" kutusunu tıklarsanız, ana indikatör listenize de eklenecektir ve diğer indikatörlerle birlikte kullanılabilir.)



var Veriler = Sistem.GrafikFiyatSec("Kapanis");
var MA1 = Sistem.MA(Veriler, "Simple", 2);
var MA2 = Sistem.MA(MA1, "Simple", 2);
var MA3 = Sistem.MA(MA2, "Simple", 2);
var MA4 = Sistem.MA(MA3, "Simple", 2);
var MA5 = Sistem.MA(MA4, "Simple", 2);
var MA6 = Sistem.MA(MA5, "Simple", 2);
var MA7 = Sistem.MA(MA6, "Simple", 2);
var MA8 = Sistem.MA(MA7, "Simple", 2);
var MA9 = Sistem.MA(MA8, "Simple", 2);
var MA10 = Sistem.MA(MA9, "Simple", 2);
var HHV = Sistem.HHV(10, "Kapanis");
var LLV = Sistem.LLV(10, "Kapanis");
var Rainbow_Osc = Sistem.Liste(0);

for (int i = 1; i<Sistem.BarSayisi; i++)
{
Rainbow_Osc[i] = 100 * (Veriler[i] - ((MA1[i] + MA2[i] + MA3[i] + MA4[i] + MA5[i] + MA6[i] + MA7[i] + MA8[i] + MA9[i] + MA10[i]) / 10)) / (HHV[i] - LLV[i]);
}
Sistem.Cizgiler[0].Deger = Rainbow_Osc;


http://hizliresimyukle.com/images/2014/03/17/Rainbow.png

thebaboli
17-03-2014, 21:54
Daha dün gece bir arkadaşın ricası üzerine bu formülü yazmıştım. Bileydim yazdığımın Rainbow olduğunu burada cevaplardım :) :)


// parametreleri al
var Yontem = Sistem.Parametreler[0];
var Periyot1 = Sistem.Parametreler[1];
var DD = Sistem.Parametreler[2];
var Yontem2 = Sistem.Parametreler[3];
var Periyot2 = Sistem.Parametreler[4];
var Periyot3 = Sistem.Parametreler[5];

// kapanış fiyatlarını oku
var Veriler = Sistem.GrafikFiyatSec("Kapanis");

// hareketli ortalamaları hesapla
var MA1 = Sistem.MA(Veriler, Yontem, Periyot1);
var MA2 = Sistem.MA(MA1, Yontem, Periyot1);
var MA3 = Sistem.MA(MA2, Yontem, Periyot1);
var MA4 = Sistem.MA(MA3, Yontem, Periyot1);
var MA5 = Sistem.MA(MA4, Yontem, Periyot1);
var MA6 = Sistem.MA(MA5, Yontem, Periyot1);
var MA7 = Sistem.MA(MA6, Yontem, Periyot1);
var MA8 = Sistem.MA(MA7, Yontem, Periyot1);
var MA9 = Sistem.MA(MA8, Yontem, Periyot1);
var MA10 = Sistem.MA(MA9, Yontem, Periyot1);

var Tepe = Sistem.HHV(DD, "Kapanis");
var Dip = Sistem.LLV(DD, "Kapanis");

var ST1 = Sistem.Liste(0);
var MA = Sistem.Liste(0);
var TD = Sistem.Liste(0);

for (int i = 1; i < Sistem.BarSayisi; i++)
{
MA[i] = Veriler[i] - ((MA1[i] + MA2[i] + MA3[i] + MA4[i] + MA5[i] + MA6[i] + MA7[i] + MA8[i] + MA9[i] + MA10[i])/10);
TD[i] = (Tepe[i] - Dip[i]) ;
}
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if (TD[i]!=0)
ST1[i] = 100 * (MA[i] / TD[i]) ;
}

var ST2 = Sistem.MA(ST1, Yontem2, Periyot2);
var ST3 = Sistem.MA(ST2, Yontem2, Periyot2);

var RMO = Sistem.MA(ST1, Yontem2, Periyot3);


// hesaplanan verileri çizgilere aktar ve açıklama ekle
Sistem.Cizgiler[0].Deger = ST1;
Sistem.Cizgiler[1].Deger = ST2;
Sistem.Cizgiler[2].Deger = ST3;
Sistem.Cizgiler[3].Deger = RMO;
// strateji
Sistem.KesismeTara(ST2, ST3);

thebaboli
25-03-2014, 22:39
Sayın thebaboli

bu sistem de sağ tarafda parametreler kısmına yazılacak veriler nelerdir?

Bu haliyle sinyal üretmiyor.

syg

Buyrun ;

http://i.imgur.com/Gm9Ei3V.png

Bear_Bull
16-06-2014, 21:23
Kolay Gelsin, XU100 'u X30YVADE 'ye bölüp sonuçlarından yeni bir grafik oluşturmaya çalıştım, ama olmadı, bakabilecek varmı ?



var 1 = "IMKBX'XU100";
var 2 = "VIP'VIP-X030";

// kapanış fiyatlarını oku
var Veriler = Sistem.GrafikFiyatSec("Kapanis");

// X3 - boş liste oluştur
var X3 = Sistem.Liste(0);

// X3 - hesapla
for (int i = 0; i < Sistem.BarSayisi; i++)
X3[i] = 1[i]/2[i];

// çizligeri göster
Sistem.Cizgiler[0].Deger = X3;


formüle gerek yok onuniçin

vıp-xu030 grafiğini aç yan tarafta ORJ ye tıkla xu100 olarak değiştir tamamdır

yada xu100 grafiği aç ORJ ye tıkla "/" işaretine gel vıp-xu030 seç gibi yapılabilir. :yes:

http://badgs.webege.com/2014/6/Haziran2014-144.png

thebaboli
22-06-2014, 21:28
Basit bir formül ;



var Veriler = Sistem.GrafikFiyatSec("Kapanis");
var Yontem = Sistem.Parametreler[0];
var EMA1P = Sistem.Parametreler[1];
var EMA2P = Sistem.Parametreler[2];

var EMA1 = Sistem.MA(Veriler, Yontem, EMA1P);
var EMA2 = Sistem.MA(EMA1, Yontem, EMA2P);

Sistem.Cizgiler[0].Deger = EMA1;
Sistem.Cizgiler[1].Deger = EMA2;

// strateji
Sistem.KesismeTara(EMA1, EMA2);


http://i.imgur.com/GZKGZxv.png

thebaboli
22-06-2014, 22:48
Bu da başka bir formül ;



var P = Sistem.DirectionalIndicatorPlus(7);
var M = Sistem.DirectionalIndicatorMinus(7);

Sistem.Cizgiler[0].Deger = P;
Sistem.Cizgiler[1].Deger = M;

var Veriler = Sistem.GrafikFiyatSec("Kapanis");


var SonYon = "";
for (int f = 1; f < Veriler.Count; f++)
{
if ( P[f] > 30 && P[f] > M[f] )
if ( SonYon != "A") //Mavi kalınan her barda AL vermemesi için
{
Sistem.Yon[f] = "A"; // alış
SonYon = "A";
}
if ( M[f] > 30 && P[f] < M[f] )
{
if ( SonYon != "S") //Kırmızı kalınan her bölgede SAT vermemesi için
{
Sistem.Yon[f] = "S"; // alış
SonYon = "S";
}
}
}

iDealTrade
12-08-2014, 17:44
Merhabalar

Örrnekler arasında MA2 diye bir sistem var. MA sisteminde KESİŞME TARA hazır fonksiyonu yerine açık hali örneklenmiştir.
O kısmı kullanarak "değdiği anda"yı yapabilirsiniz. (önceki bar'da KÜÇÜK iken, sonraki (şimdiki) bar'da büyük VEYA eşit.

"iDeal de SON BAR = (i-1)'dir."



for (int i = 1; i<Sistem.BarSayisi; i++)
{
if (MA1[i-1] < MA2[i-1] && MA1[i] >= MA2[i]) // 1.ortalama 2.ortalamanın üstüne çıkarsa
Sistem.Yon[i] = "A"; // alış
if (MA1[i-1] > MA2[i-1] && MA1[i] <= MA2[i]) // 1.ortalama 2.ortalamanın altına inerse
Sistem.Yon[i] = "S"; // satış
}



Ayrıca değdi aşağı geldi, tekrar değdi durumlarında her seferinde al/sat vermez şuna benzer bir kontrol yaparsanız. (bir kere al vermişse, yeniden al gelirse al verme gibi..)



var SonYon = "";
for (int i = 1; i<Sistem.BarSayisi; i++)
{
// AL KOŞULUNUZ//
{
if ( SonYon != "A")
{
Sistem.Yon[i] = "A"; // alış
SonYon = "A";
}
}
// SATY KOŞULUNUZ
if ( SonYon != "S")
{
Sistem.Yon[i] = "S"; // Satış
SonYon = "S";
}
}
}



for (int i = 1; i<Sistem.BarSayisi; i++)
{
if (MA1[i-1] < MA2[i-1] && MA1[i] > MA2[i]) // 1.ortalama 2.ortalamanın üstüne çıkarsa
Sistem.Yon[i] = "A"; // alış
if (MA1[i-1] > MA2[i-1] && MA1[i] < MA2[i]) // 1.ortalama 2.ortalamanın altına inerse
Sistem.Yon[i] = "S"; // satış
}



Merhaba Sn baboli aşağıdaki formülde işleme girmek için barın kapanışını bekliyor..Bunu temas ettiği anda işleme açmak için kapanış yerine yazmalıyız veya mümkün mü ? selamlar :)

// parametreleri al
var Periyot = Sistem.Parametreler[0];
var Yuzde = Sistem.Parametreler[1];

// TOMA hesapla
var TOMA = Sistem.TOMA(Periyot, Yuzde);
// EMA hesapla
var Veriler = Sistem.GrafikFiyatSec("Kapanis");
var EMA = Sistem.MA(Veriler, "Exp", Periyot);

// hesaplanan verileri çizgilere aktar ve açıklama ekle
Sistem.Cizgiler[0].Deger = TOMA;
Sistem.Cizgiler[1].Deger = EMA;

// strateji
Sistem.KesismeTara(EMA, TOMA);

thebaboli
01-09-2014, 21:13
// BarsSince Örnek
var MACD = Sistem.MACD(12, 26);
var MACDAVR = Sistem.MA(MACD, "Exp", 9);
var RSI = Sistem.RSI(14);
var BarsSinceListem = Sistem.Liste(0);


//macd (26,12,9) < 0 and RSI<30
var BarNo = 0;
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if (MACDAVR[i-1] < 0 && RSI[i-1] < 30)
BarNo = i-1;
if (BarNo > 0)
BarsSinceListem[i] = i - BarNo;
}

// hesaplanan verileri çizgilere aktar ve açıklama ekle
Sistem.Cizgiler[0].Deger = MACDAVR;
Sistem.Cizgiler[0].Aciklama = "MACDAVR";
Sistem.Cizgiler[1].Deger = RSI;
Sistem.Cizgiler[1].Aciklama = "RSI";
Sistem.Cizgiler[2].Deger = BarsSinceListem;
Sistem.Cizgiler[2].Aciklama = "BarsSinceListem";

http://i.hizliresim.com/gjgX8Z.png

thebaboli
04-09-2014, 20:12
var C = Sistem.GrafikFiyatSec("Kapanis");


var a = Sistem.Liste(0);
var b = Sistem.Liste(0);

for (int i = 1; i < Sistem.BarSayisi; i++)
a[i] = C[i]-C[i-1];

for (int i = 1; i < Sistem.BarSayisi; i++)
b[i] = C[i-1]-C[i];

var CMO11 = Sistem.Liste(0);
var CMO22 = Sistem.Liste(0);

for (int i = 1; i < Sistem.BarSayisi; i++)
{
if ( C[i] > C[i-1] )
CMO11[i] = a[i];
else
CMO11[i] = 0 ;
}

for (int i = 1; i < Sistem.BarSayisi; i++)
{
if ( C[i-1] > C[i] )
CMO22[i] = b[i];
else
CMO22[i] = 0 ;
}



var CMOO1 = Sistem.MA(CMO11, "Variable", 55);
var CMOO2 = Sistem.MA(CMO22, "Variable", 89);

var CMO1 = Sistem.Liste(0);
var CMO2 = Sistem.Liste(0);

for (int i = 0; i < Sistem.BarSayisi; i++)
CMO1[i] = CMOO1[i]/89;

for (int i = 0; i < Sistem.BarSayisi; i++)
CMO2[i] = CMOO2[i]/89;


var CMO = Sistem.Liste(0);

for (int i = 0; i < Sistem.BarSayisi; i++)
CMO[i] = Math.Abs((CMO1[i]-CMO2[i]) / (CMO1[i]+CMO2[i])) * 1/2 ;



//ama(c,cmo)


var Chaloke = Sistem.Liste(0);
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if (CMO[i] < 0 || CMO[i] > 0)
Chaloke[i] = CMO[i] * C[i] + (1-CMO[i]) * Chaloke[i-1];
else
Chaloke[i] = Chaloke[i-1];
}



var STC = Sistem.StDev(Chaloke, 89);


var UST = Sistem.Liste(0);
var ALT = Sistem.Liste(0);

for (int i = 0; i < Sistem.BarSayisi; i++)
UST[i] = Chaloke[i] + STC[i];

for (int i = 0; i < Sistem.BarSayisi; i++)
ALT[i] = Chaloke[i] - STC[i];

Sistem.Cizgiler[0].Deger = Chaloke;
Sistem.Cizgiler[1].Deger = UST;
Sistem.Cizgiler[2].Deger = ALT;

//strateji

var SonYon = "";
for (int i = 1; i < C.Count; i++)
{
if (C[i] > UST[i] && C[i] > C[i-1])
{
if ( SonYon != "A") //Mavi kalınan her barda AL vermemesi için
{
Sistem.Yon[i] = "A"; // alış
SonYon = "A";
}
}
if (C[i] < ALT[i] && C[i] < C[i-1])
{
if ( SonYon != "S") //Kırmızı kalınan her bölgede SAT vermemesi için
{
Sistem.Yon[i] = "S"; // alış
SonYon = "S";
}
}
}


http://i.imgur.com/GFTZaXu.png

http://i.imgur.com/vbaYL72.png

thebaboli
04-09-2014, 20:29
var P1 = Sistem.Parametreler[0];
var P2 = Sistem.Parametreler[1];
var P3 = Sistem.Parametreler[2];
var P4 = Sistem.Parametreler[3];
var P5 = Sistem.Parametreler[4];
var Yontem = Sistem.Parametreler[5];

var H = Sistem.HHV(3,"Kapanis");

var C = Sistem.GrafikFiyatSec("Kapanis");

var ATRX = Sistem.AverageTrueRange(P4);

var SH = Sistem.MA(C, Yontem, P1);
var MH = Sistem.MA(C, Yontem, P2);
var lgh = Sistem.MA(C, Yontem, P3);


var S = Sistem.Liste(0);
var M = Sistem.Liste(0);
var lg = Sistem.Liste(0);
var S2 = Sistem.Liste(0);
var M2 = Sistem.Liste(0);
var lg2 = Sistem.Liste(0);

for (int i = 1; i < Sistem.BarSayisi; i++)
S[i] = SH[i]-ATRX[i];

for (int i = 2; i < Sistem.BarSayisi; i++)
S2[i] = SH[i-1]-ATRX[i];

for (int i = 1; i < Sistem.BarSayisi; i++)
M[i] = MH[i]-ATRX[i];

for (int i = 2; i < Sistem.BarSayisi; i++)
M2[i] = MH[i-1]-ATRX[i];

for (int i = 1; i < Sistem.BarSayisi; i++)
lg[i] = lgh[i]-ATRX[i];

for (int i = 2; i < Sistem.BarSayisi; i++)
lg2[i] = lgh[i-1]-ATRX[i];


var Sht = Sistem.Liste(0);
var Mid = Sistem.Liste(0);
var Lng = Sistem.Liste(0);

for (int i = 1; i < Sistem.BarSayisi; i++)
{
if ( C[i] > H[i] )
Sht[i] = S[i];
else
Sht[i] = S2[i] ;
}

for (int i = 1; i < Sistem.BarSayisi; i++)
{
if ( C[i] > H[i] )
Mid[i] = M[i];
else
Mid[i] = M2[i] ;
}

for (int i = 1; i < Sistem.BarSayisi; i++)
{
if ( C[i] > H[i] )
Lng[i] = lg[i];
else
Lng[i] = lg2[i] ;
}

Sistem.Cizgiler[0].Deger = S;
Sistem.Cizgiler[1].Deger = M;
Sistem.Cizgiler[2].Deger = lg;
Sistem.Cizgiler[3].Deger = S2;
Sistem.Cizgiler[4].Deger = M2;
Sistem.Cizgiler[5].Deger = lg2;
Sistem.Cizgiler[6].Deger = Sht;
Sistem.Cizgiler[7].Deger = Mid;
Sistem.Cizgiler[8].Deger = Lng;

var SonYon = "";
for (int i = 1; i < C.Count; i++)
{
if (Sht[i] > Mid[i] && C[i] > Sht[i])
{
if ( SonYon != "A") //Mavi kalınan her barda AL vermemesi için
{
Sistem.Yon[i] = "A"; // alış
SonYon = "A";
}
}
if (C[i] < Lng[i] && Sht[i] < Lng[i])
{
if ( SonYon != "S") //Kırmızı kalınan her bölgede SAT vermemesi için
{
Sistem.Yon[i] = "S"; // alış
SonYon = "S";
}
}
}


http://i.imgur.com/x9MaAZa.png

http://i.imgur.com/NCCNBp8.png

thebaboli
05-09-2014, 19:06
var f = Sistem.Parametreler[0];
var s = Sistem.Parametreler[1];
var t = Sistem.Parametreler[2];
var Yontem = Sistem.Parametreler[3];
var C = Sistem.GrafikFiyatSec("Kapanis");
var H = Sistem.GrafikFiyatSec("Yuksek");
var L = Sistem.GrafikFiyatSec("Dusuk");

var a11 = Sistem.MA(C, Yontem, f);
var a12 = Sistem.MA(C, Yontem, s);

var a1 = Sistem.Liste(0);

for (int i = 0; i < Sistem.BarSayisi; i++)
a1[i] = a11[i]-a12[i];

var a2 = Sistem.MA(a1, Yontem, t);

var Hist = Sistem.Liste(0);

for (int i = 0; i < Sistem.BarSayisi; i++)
Hist[i] = a1[i]-a2[i];


Sistem.Cizgiler[0].Deger = a1;
Sistem.Cizgiler[1].Deger = a2;
Sistem.Cizgiler[2].Deger = Hist;

var SonYon = "";
for (int i = 1; i < C.Count; i++)
{
if (H[i] > H[i-1] && Hist[i] > Hist[i-1] && a1[i] > a2[i])
{
if ( SonYon != "A") //Mavi kalınan her barda AL vermemesi için
{
Sistem.Yon[i] = "A"; // alış
SonYon = "A";
}
}
if (L[i] > L[i-1] && Hist[i] < Hist[i-1] && a1[i] < a2[i])
{
if ( SonYon != "S") //Kırmızı kalınan her bölgede SAT vermemesi için
{
Sistem.Yon[i] = "S"; // alış
SonYon = "S";
}
}
}


http://i.imgur.com/2vCF11A.png

http://i.imgur.com/nKvJAZC.png

anonimm
06-09-2014, 21:52
metastock to ideal .....

ms code :

SuperSmoother filter:
a1:= Exp(-1.414 * 3.14159 / 10);
b1:= 2*a1 * Cos(1.414*180 /10);
c2:= b1;
c3:= -a1 * a1;
c1:= 1 - c2 - c3;
c1 * (C + Ref(C, -1))/2 + c2*PREV + c3*Ref(PREV,-1)
Roofing filter:
alpha1:= (Cos(.707*360/48) + Sin(.707*360/48) -1)/Cos(.707*360/48);
HP:= (1-alpha1/2)*(1-alpha1/2)*(C - Ref(2*C,-1) + Ref(C,-2)) +
2*(1-alpha1)*PREV - (1-alpha1)*(1-alpha1)*Ref(PREV,-1);
a1:= Exp(-1.414 * 3.14159 / 10);
b1:= 2*a1 * Cos(1.414*180 /10);
c2:= b1;
c3:= -a1 * a1;
c1:= 1 - c2 - c3;
c1 * (HP + Ref(HP, -1))/2 + c2*PREV + c3*Ref(PREV,-1)
MESA Stochastic:
alpha1:= (Cos(.707*360/48) + Sin(.707*360/48) -1)/Cos(.707*360/48);
HP:= (1-alpha1/2)*(1-alpha1/2)*(C - Ref(2*C,-1) + Ref(C,-2)) +
2*(1-alpha1)*PREV - (1-alpha1)*(1-alpha1)*Ref(PREV,-1);
a1:= Exp(-1.414 * 3.14159 / 10);
b1:= 2*a1 * Cos(1.414*180 /10);
c2:= b1;
c3:= -a1 * a1;
c1:= 1 - c2 - c3;
filt:= c1 * (HP + Ref(HP, -1))/2 + c2*PREV + c3*Ref(PREV,-1);
stoc:= (filt-LLV(filt,20))/(HHV(filt,20)-LLV(filt,20));


ideal code :


// SuperSmoother filter:

var V = Sistem.GrafikVerileri;

var PI = (float) 3.1415926;
var a11 = (float) (0.707 * 2 * PI / 10);
var a21 = (float) (0.707 * 2 * PI / 48);

var a1 = (float) (Math.Exp(-1.414 * 3.14159 / 10));
var b1 = (float) (2*a1 * Math.Cos(a11));
var c2 = (float) (b1);
var c3 = (float) ( -a1 * a1);
var c1 = (float) (1 - c2 - c3);
var SSF = new List<float>(new float[Sistem.BarSayisi]);
SSF[0] =0;
SSF[1] =0;

for(int i = 2 ; i < V.Count; i++ )
{
SSF[i] =c1 * (V[i].Close + V[i-1].Close )/2 + c2*SSF[i-1] + c3*SSF[i-2] ;
}

Sistem.Cizgiler[0].Deger = SSF;


// Roofing filter:

var alpha1= (float) ((Math.Cos(a21) + Math.Sin(a21) -1)/Math.Cos(a21));
var x = (float) (1-alpha1);
var y = (float) (1-alpha1/2);

var HP = new List<float>(new float[Sistem.BarSayisi]);
var RF = new List<float>(new float[Sistem.BarSayisi]);
HP[0] =0;
HP[1] =0;
RF[0] =0;
RF[1] =0;

for(int i = 2 ; i < V.Count; i++ )
{
HP[i] = (y*y*(V[i].Close - 2*V[i-1].Close ) + 2*x*HP[i-1] - x*x*HP[i-2])/100;

RF[i] = (c1*(HP[i]+HP[i-1])/2+c2*RF[i-1]+c3*RF[i-2]);

}

Sistem.Cizgiler[1].Deger = HP;
Sistem.Cizgiler[2].Deger = RF;

// Stochastic:

var Filt = new List<float>(new float[Sistem.BarSayisi]);
var Stoc = new List<float>(new float[Sistem.BarSayisi]);
var MStoc = new List<float>(new float[Sistem.BarSayisi]);


Filt[0] =0;
Filt[1] =0;
Stoc[0] =0;
Stoc[1] =0;
MStoc[0] =0;
MStoc[1] =0;

for(int i = 2 ; i < V.Count; i++ )
{
Filt[i] = c1 * (HP[i] + HP[i-1])/2 + c2*Filt[i-1] + c3*Filt[i-2] ;
}

var p = Sistem.LLV(20,Filt);
var r = Sistem.HHV(20,Filt);

for(int i = 2 ; i < V.Count; i++ )
{
Stoc[i] = (Filt[i]-p[i])/(r[i]-p[i]);
}



Sistem.Cizgiler[3].Deger = Filt;
Sistem.Cizgiler[4].Deger = Stoc;

thebaboli
22-09-2014, 21:15
ValueWhen ;

http://i.hizliresim.com/1nk3Np.png


//Sistem , Valuewhen(2,c=h,c)

var Bars = Sistem.GrafikVerileri;

var Listem = Sistem.Liste(0);

for (int i = 1; i < Bars.Count; i++)
{
var Sayac = 0;
for (int j = i-1; j > 0; j--)
{
if (Bars[j].Close == Bars[j].High)
Sayac++;
if (Sayac >= 2)
{
Listem[i] = Bars[j].Close;
break;
}
}
}

Sistem.Cizgiler[0].Deger = Listem;

thebaboli
23-09-2014, 17:28
Cumulate:

Yazım: cum(data)
Grafikte ilk datadan itibaren data düzeninin toplamını kümülatif olarak hesaplar.
Örnek: Cum (1) grafiğin başından itibaren her bar için 1 değeri ekleyerek artar.
Cum (C) ise grafiğin başından itibaren bütün kapanışların toplamını hesaplar.
Bu sayede farklı tarzda ortalama hesaplaması yapabiliriz.

Sistem Bar Sayısı Bulma ile halledilebilir ama onu çizgiye dökemedim float uyarısı nedeniyle.


http://i.hizliresim.com/lzy6kg.png (http://hizliresim.com/lzy6kg)

thebaboli
23-09-2014, 17:29
Peak

Input Dizisinin n. peak(tepe noktası) önceki değerini verir. Fonksiyon peakleri tanımlamak için ZigZag fonksiyonunu kullanır. n=1 değeri için fonksiyon en son peak anının değerini verir. n=2 değeri sondan 2. peak anının değerini verir.

EXAMPLE peak(close,5,1)

PeakBars

Sondan n. peak ten geçen bar (çubuk) ların sayısını verir. Fonksiyon peakleri belirlemek için ZigZag fonksiyonunu kullanır.
n = 1 , en son peak noktasından geçen bar ların sayısını verir.
n = 2 , sondan 2. peak noktasından geçen bar ların sayısını verir.

EXAMPLE peakbars(close,5,1)


teşekkür bizden..
http://i.hizliresim.com/DkRj8z.png (http://hizliresim.com/DkRj8z)

TROUGH

İki dalga arasındaki dip. Dizinin "n" trough önceki değerini verir. Fonksiyon trough ları belirlemek için ZigZag fonksiyonu kullanır.

EXAMPLE trough(close,5,1)

TROUGHBARS

Sondan "n." trough dan geçen bar sayısını çizdirir. Fonksiyon trough ları belirlemek için ZigZag fonksiyonunu kullanır.

Kullanimi troughbars(close,5,1)

// Sistem, Trough(close,5,1)
var Bars = Sistem.GrafikVerileri;
var ZigZagListe = Sistem.ZigZagPercent(5);
var TroughListe = Sistem.Liste(0);
var TroughBarsListe = Sistem.Liste(0);

for (int i = 3; i < Bars.Count; i++)
{
var Sayac = 0;
for (int j = i; j > 2; j--)
{
if (ZigZagListe[j-1] <= ZigZagListe[j] && ZigZagListe[j-1] <= ZigZagListe[j-2])
Sayac++;
if(Sayac >= 1)
{
TroughListe[i] = Bars[j-1].Close;
TroughBarsListe[i] = i-(j-1);
break;
}
}
}

Sistem.Cizgiler[0].Deger = ZigZagListe;
Sistem.Cizgiler[0].Aciklama = "ZigZag 5";
Sistem.Cizgiler[1].Deger = TroughListe;
Sistem.Cizgiler[1].Aciklama = "TroughListe";
Sistem.Cizgiler[2].Deger = TroughBarsListe;
Sistem.Cizgiler[2].Aciklama = "TroughBarsListe";

thebaboli
23-09-2014, 17:31
Kodunuzun hızını, kalitesini ölçmek


kodunuzun en üst ve en alt satırına mavi satırları ekleyin..

tüyolar,
sistem ilk çalıştıktan sonra hızlanır, bunun nedeni veriler bilgisayarın cash belleğine alınır ve hız artar..
iDeal grafik sisteminde default bar sayısı 20000 dir.. Kullanıcı bu sayıyı azaltırsa sistem daha da hızlanır, artırırsa yavaşlar..
Benim notebook umda aşağıdaki örnek MA sistemi 1 milisaniyede hesaplanmaktadır..


var Time1 = DateTime.Now;

// parametreleri al
var Yontem = Sistem.Parametreler[0];
var Periyot1 = Sistem.Parametreler[1];
var Periyot2 = Sistem.Parametreler[2];

// kapanış fiyatlarını oku
var Veriler = Sistem.GrafikFiyatSec("Kapanis");

// hareketli ortalamaları hesapla
var MA1 = Sistem.MA(Veriler, Yontem, Periyot1);
var MA2 = Sistem.MA(Veriler, Yontem, Periyot2);

// hesaplanan verileri çizgilere aktar ve açıklama ekle
Sistem.Cizgiler[0].Deger = MA1;
Sistem.Cizgiler[0].Aciklama = "MA " + Periyot1;
Sistem.Cizgiler[1].Deger = MA2;
Sistem.Cizgiler[1].Aciklama = "MA " + Periyot2;

// strateji
Sistem.KesismeTara(MA1, MA2);

Sistem.Mesaj((DateTime.Now-Time1).Milliseconds.ToString());








http://i.hizliresim.com/dq29Lr.png (http://hizliresim.com/dq29Lr)


ipucu : Csharp tür dönüşümleri

Microsoft strateji olarak CSharp'da tüm güvenliğini maksimum seviyede tutmuştur.. Örnegin bir tamsayıya ondalık sayı atanmasına izin vermez.. (VisualBasic'de ise bu güvenlik çok gevşektir)

iDeal Sistem altyapısında oluşturulan listelerdeki sayıların büyük bölümü ONDALIK dır.. Bu sayıları TAMSAYI ya atamaya çalışırsanız aşağıdaki hata oluşur.. Yeri gelmişken, hata mesajlarını biz tanımlamıyoruz, doğrudan Microsoft framework'den geliyor..


http://i.hizliresim.com/gLAaOQ.png (http://hizliresim.com/gLAaOQ)

Hatalı Kod:
var Bars = Sistem.GrafikVerileri;
var Kapanis = 0; // değişken TAMSAYI olarak tanımlanır
for (int i = 0; i < Bars.Count; i++)
Kapanis = Bars[i].Close;
Sistem.Mesaj(Kapanis.ToString());



Kapanis değişkeni tamsayı olarak tanımlandığı için Bars[i].Close ondalık sayısına eşitlenirken hata oluşur..
Bu sorunu aşmanın yolu Kapanis sayısını da ondalık olarak tanımlamak gerekir..
Aşağıdaki iki yöntemden biri sorunu çözer..

var Kapanis = 0f; // 1. yöntem
float Kapanis = 0; // 2.yöntem


Düzgün Kod:
var Bars = Sistem.GrafikVerileri;
var Kapanis = 0f; // veya float Kapanis = 0;
for (int i = 0; i < Bars.Count; i++)
Kapanis = Bars[i].Close;
Sistem.Mesaj(Kapanis.ToString());


email fonksiyonu eklendi..
örnekte her 10 dakikada bir 60 dk grafiğin son barını mail atan bir rutin bulunuyor..
maillerinize attachments , CC, Bcc yapabilirsiniz..
Birden çok kişiye gönderim olanağı mevcuttur..
yeni versiyonu Sezai Bey'den temin edebilirsiniz..

formulu Robot olarak çalıştırmak gerekir (Sanal ya da Gerçek modda)

http://i.hizliresim.com/rdVWA1.png (http://hizliresim.com/rdVWA1)

Teşekkürler IdealTrade

thebaboli
11-10-2014, 21:23
Robotları sanalda test ederken veya canlı da alım satım yaparken log tutması için aşağıdaki gibi bir kod kullanıyorum, kod dakikada bir kez belirlediğiniz değişkenleri robot_log.txt dosyasına kaydeder, sistem hata verdiyse yada sistemin alım yaptığı yerde robotunuz alım yapmadıysa vb o dakikayı biliyorsanız kodunuzu tekrar gözden geçirebilirsiniz :

if (Sistem.ZamanKontrolDakika("dosyaya_yazdir") >= 1)
{
Sistem.ZamanKontrolGuncelle( "dosyaya_yazdir" );
using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"D:\robot_log.txt", true))
{
file.WriteLine(DateTime.Now.ToString() + " | " + Bar_Verisi[Bar_Verisi.Count-2].Date + " | " + Bar_Verisi[Bar_Verisi.Count-1].Date + " | " + Bar_Verisi[Bar_Verisi.Count-2].Close + " | " + Degisken_1 + " | " + Degisken_2 + " | " + Pozisyon );

}
}


Merhaba Arkadaşlar,

Ben İdeal veri terminalinde kod yazmaya yeni başladım ve bir şeyi merak ediyorum.
Dışarıdan veri okutabiliyormuyuz, yani bir dosyadaki veriyi okuyup bir değişkene atayabilir miyiz?
Bu konuda bilgisi olan birisi varmı acaba? yardımcı olabilir misiniz?

Teşekkürler...


string degisken = "";
using (System.IO.StreamReader dosyaoku = new System.IO.StreamReader("C:\\demo.txt"))
{
degisken = dosyaoku.ReadLine();
}
Sistem.Debug(degisken);


Eyvalah teşekkür ederim, bende şimdi okuma yazma olayını test ediyordum :) sayende bu adımı yaptık,
Kendi kodlarımı da paylaşıyorum, başkaları da arıyor olabilir

tekrar teşekkürler, Exface kardeşim.


// Bilgisayardaki dosyadan veri okuma ve dosyaya veri yazma örneği

var VIP30 = Sistem.SonFiyat("VIP'VIP-X030");
var XU100 = Sistem.SonFiyat("IMKBX'XU100");
var XU030 = Sistem.SonFiyat("IMKBX'XU030");
var EURUSD = Sistem.SonFiyat("FX'EURUSD");
var GARAN = Sistem.SonFiyat("IMKBH'GARAN");

var Tarih = Sistem.Tarih;
var BarSayisi = Sistem.BarSayisi; // Sistemdeki bar sayısını değişkene aktar
var Veriler = Sistem.GrafikVerileri; // Açık olan grafikte ki kapanış verileri değişkene aktar

//Dosyaya veri aktarma
string DosyaVerisi = "Veri Yazma Testi";
using (System.IO.StreamWriter DosyaYaz = new System.IO.StreamWriter("C:\\idealveri.txt"))
{
DosyaYaz.WriteLine(DosyaVerisi);//Değişkendeki Değer Dosyaya yazılır.
DosyaYaz.WriteLine(VIP30);//Değişkendeki Değer Dosyaya yazılır.
DosyaYaz.WriteLine(XU100);//Değişkendeki Değer Dosyaya yazılır.
DosyaYaz.WriteLine(XU030);//Değişkendeki Değer Dosyaya yazılır.
DosyaYaz.WriteLine(EURUSD);//Değişkendeki Değer Dosyaya yazılır.

}

//Dosyadan veri okuma
DosyaVerisi = "";
using (System.IO.StreamReader DosyaOku = new System.IO.StreamReader("C:\\idealveri.txt"))
{
DosyaVerisi = DosyaOku.ReadLine();
}
Sistem.Debug(DosyaVerisi.ToString()); //Okunan Veriyi Yazdır.

----------------

thebaboli
11-10-2014, 21:26
Merhabalar, 5 dk'lıktaki 4 MA'nın 15 dk'lıktaki 60 MA'yı kesişmesine göre al-sat sinyali ürretebilir miyiz.
4'lük MA 5 dk'lık grafikte
60'lık MA 15 dk'lık grafikte
ikisini aynı potaya nasıl sokarız. Teşekkürler.


Sistem.DonemCevir
fonksiyonu ile farklı periyotları birbirine giydirebiliyoruz

// SİSTEM
var Sembol = Sistem.Sembol;

// verileri oku
var Bars1 = Sistem.GrafikVerileriniOku(Sembol, "5");
var Kapanislar1 = Sistem.GrafikFiyatOku(Bars1, "Kapanis");
var MA1 = Sistem.MA(Kapanislar1, "Simple", 4);

var Bars2 = Sistem.GrafikVerileriniOku(Sembol, "15");
var Kapanislar2 = Sistem.GrafikFiyatOku(Bars2, "Kapanis");
var MA2 = Sistem.MA(Kapanislar2, "Simple", 60);

// 15 dakikalık verileri 5 dakikalık verilere hizala
MA2 = Sistem.DonemCevir(Bars1, Bars2, MA2);

// hesaplanan verileri çizgilere aktar ve açıklama ekle
Sistem.Cizgiler[0].Deger = MA1;
Sistem.Cizgiler[0].Aciklama = "MA1";

Sistem.Cizgiler[1].Deger = MA2;
Sistem.Cizgiler[1].Aciklama = "MA2";


// strateji
Sistem.KesismeTara(MA1, MA2);






http://i.hizliresim.com/voEz0z.png (http://hizliresim.com/voEz0z)


Sn.İdealtrade 5 dklık grafik üzerinde,
5 dklık grafiğe ait 3 tane MA(MA1=4 MA5=180 MA6=200)
15 dklık grafiğe ait 3 tane MA(MA2=60 MA4=180 MA7=200) aşağıdaki formülde çalışıyor bu konuda bir sıkıntım yok.

Daha önce MA1 in MA2'yi kesmesine göre al-sat sinyali veriyordu. Bunu biraz değiştirmek istedim ama hata veriyor.

istediğim. AL sinyali için ( MA1 > MA5 ) && ( MA1 > MA6 ) && ( MA1 > MA 4 )
_______SAT sinyali için ( MA1 < MA5 ) && ( MA1 < MA6 ) && ( MA1 < MA 4 )


verdiği hata
c:\Users\ad.soyad\AppData\Local\Temp\o1wrwezj.0.cs (63,21) : error CS0103: 'Veriler' adı geçerli içerikte yok

Kendi başımıza en ufak şeyi bile hal edemedik:(



// SİSTEM
var Sembol = Sistem.Sembol;

// verileri oku
var Bars1 = Sistem.GrafikVerileriniOku(Sembol, "5");
var Kapanislar1 = Sistem.GrafikFiyatOku(Bars1, "Kapanis");
var MA1 = Sistem.MA(Kapanislar1, "Simple", 4);
var MA5 = Sistem.MA(Kapanislar1, "Simple", 180);
var MA6 = Sistem.MA(Kapanislar1, "Simple", 200);

var Bars2 = Sistem.GrafikVerileriniOku(Sembol, "15");
var Kapanislar2 = Sistem.GrafikFiyatOku(Bars2, "Kapanis");
var MA2 = Sistem.MA(Kapanislar2, "Simple", 60);

var Bars4 = Sistem.GrafikVerileriniOku(Sembol, "15");
var Kapanislar4 = Sistem.GrafikFiyatOku(Bars4, "Kapanis");
var MA4 = Sistem.MA(Kapanislar4, "Simple", 180);

var Bars5 = Sistem.GrafikVerileriniOku(Sembol, "15");
var Kapanislar5 = Sistem.GrafikFiyatOku(Bars5, "Kapanis");
var MA7 = Sistem.MA(Kapanislar5, "Simple", 200);

// 15 dakikalık verileri 5 dakikalık verilere hizala
MA2 = Sistem.DonemCevir(Bars1, Bars2, MA2);
MA4 = Sistem.DonemCevir(Bars1, Bars4, MA4);
MA7 = Sistem.DonemCevir(Bars1, Bars5, MA7);

// hesaplanan verileri çizgilere aktar ve açıklama ekle
Sistem.Cizgiler[0].Deger = MA1;
Sistem.Cizgiler[0].Aciklama = "MA1";

Sistem.Cizgiler[1].Deger = MA2;
Sistem.Cizgiler[1].Aciklama = "MA2";

Sistem.Cizgiler[3].Deger = MA4;
Sistem.Cizgiler[3].Aciklama = "MA4";

Sistem.Cizgiler[4].Deger = MA5;
Sistem.Cizgiler[4].Aciklama = "MA5";

Sistem.Cizgiler[5].Deger = MA6;
Sistem.Cizgiler[5].Aciklama = "MA6";

Sistem.Cizgiler[6].Deger = MA7;
Sistem.Cizgiler[6].Aciklama = "MA7";

// strateji
var SonYon = "";
for (int f = 1; f < Veriler.Count; f++)
{
if ( MA1[f] > MA2[f] && MA1[f] > MA5[f] && MA1[f] > MA6[f] )
if ( SonYon != "A") //Mavi kalınan her barda AL vermemesi için
{
Sistem.Yon[f] = "A"; // alış
SonYon = "A";
}
if ( MA1[f] < MA2[f] && MA1[f] < MA5[f] && MA1[f] < MA6[f] )
{
if ( SonYon != "S") //Kırmızı kalınan her bölgede SAT vermemesi için
{
Sistem.Yon[f] = "S"; // alış
SonYon = "S";
}
}
}


for (int f = 1; f < Veriler.Count; f++) da yer alan "Veriler" bölümünü "Bars1" ile değiştirip denermisin lütfen


// ROBOTU ÖNCE SANAL MODDA TEST EDİN !!!


var Sembol = "VIP'F_XU0301014S0";

// verileri oku
var Bars1 = Sistem.GrafikVerileriniOku(Sembol, "5");
var Kapanislar1 = Sistem.GrafikFiyatOku(Bars1, "Kapanis");
var MA1 = Sistem.MA(Kapanislar1, "Simple", 4);

var Bars2 = Sistem.GrafikVerileriniOku(Sembol, "15");
var Kapanislar2 = Sistem.GrafikFiyatOku(Bars2, "Kapanis");
var MA2 = Sistem.MA(Kapanislar2, "Simple", 60);

// 15 dakikalık verileri 5 dakikalık verilere hizala
MA2 = Sistem.DonemCevir(Bars1, Bars2, MA2);

// pozisyon tablosundan pozisyon miktarını al
var Pozisyon = Sistem.PozisyonKontrolOku(Sembol);


// ROBOT !!!!!!!!!!!!!!!!!!!!!!!
var SonBarNo = Bars1.Count - 1;
var Islem = "";
var Miktar = 0;
var SonFiyat = Sistem.SonFiyat(Sembol);

if (SonFiyat > 0 && (Sistem.SaatAraligi("09:10", "12:30") || Sistem.SaatAraligi("13:50", "17:45")) && DateTime.Now.DayOfWeek != DayOfWeek.Saturday && DateTime.Now.DayOfWeek != DayOfWeek.Sunday)
{
var SartAl = MA1[SonBarNo] < MA2[SonBarNo-1] && MA1[SonBarNo] >= MA2[SonBarNo-1]; // kısa MA uzun MA yı yukarı kestiyse
var SartSat = MA1[SonBarNo] > MA2[SonBarNo-1] && MA1[SonBarNo] <= MA2[SonBarNo-1]; // kısa MA uzun MA yı aşağı kestiyse

if (SartAl && Pozisyon <= 0) // alış
{
Islem = "ALIS";
if (Pozisyon == 0) // pozisyonum yoksa 1 lot al
Miktar = 1;
else if (Pozisyon < 0) // short isem stop and reverse , 2 lot al
Miktar = 2;
}
else if (SartSat && Pozisyon >= 0) // satış
{
Islem = "SATIS";
if (Pozisyon == 0) // pozisyonum yoksa 1 lot sat
Miktar = 1;
else if (Pozisyon > 0) // long isem stop and reverse , 2 lot sat
Miktar = 2;
}
}


// Emir Gönder !!!
if (Islem != "")
{
if (Islem == "ALIS")
Sistem.PozisyonKontrolGuncelle(Sembol, Pozisyon+Miktar);
else if (Islem == "SATIS")
Sistem.PozisyonKontrolGuncelle(Sembol, Pozisyon-Miktar);

Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = Islem;
Sistem.EmirMiktari = Miktar;
Sistem.EmirSuresi = "GUN"; // GUN, SNS, IKG
Sistem.EmirTipi = "KPY"; // KPY, KIE, GIE, SAR
Sistem.EmirFiyatTipi = "PYS"; // PYS, LMT, EIF, KAP
Sistem.EmirGonder();
}

-----------------

thebaboli
11-10-2014, 23:00
Sayın İdeal ilgilileri, biliyorum çok yoğunsunuz, müsait olduğunuzda aşağıdaki robotu gözden geçirebilirseniz sevinirim. Hata vermiyor ama çalışmıyorda. (aşağıkesti, yukarı kesti fonksiyonlarını kullanmak istemiyorum)



var Sembol = "FX'EURUSD";

var V1 = Sistem.GrafikVerileriniOku(Sembol, "1");

var K1 =Sistem.GrafikFiyatOku(V1, "Kapanis");
var MA1 = Sistem.MA(K1, "Simple",1);
var MA2 = Sistem.MA(K1, "Simple",2);

var Pozisyon = Sistem.PozisyonKontrolOku(Sistem.Name +" "+ Sembol);
var SonYon = "";

for (int i = 1; i<V1.Count; i++)
{
if ( MA1[i] > MA2[i] )
{
if ( SonYon != "A")
{
Sistem.Yon[i] = "A";
SonYon = "A";


if (Pozisyon == 0)
{
var Miktar = 1;
Sistem.PozisyonKontrolGuncelle(Sistem.Name +" "+ Sembol, Pozisyon+Miktar);
Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = "Alış";
Sistem.EmirMiktari = Miktar;
Sistem.EmirFiyati ="Aktif";
Sistem.EmirSuresi = "GUN"; // GUN, SNS, IKG
Sistem.EmirTipi = "KPY"; // KPY, KIE, GIE, SAR
Sistem.EmirFiyatTipi = "PYS"; // PYS, LMT, EIF, KAP
Sistem.EmirGonder();
}

else if (Pozisyon < 0)
{
var Miktar = -2*Pozisyon;
Sistem.PozisyonKontrolGuncelle(Sistem.Name +" "+ Sembol, Pozisyon+Miktar);
Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = "Alış";
Sistem.EmirMiktari = Miktar;
Sistem.EmirFiyati ="Aktif";
Sistem.EmirSuresi = "GUN"; // GUN, SNS, IKG
Sistem.EmirTipi = "KPY"; // KPY, KIE, GIE, SAR
Sistem.EmirFiyatTipi = "PYS"; // PYS, LMT, EIF, KAP
Sistem.EmirGonder();
}

}
}

if ( MA1[i] < MA2[i] )
{
if ( SonYon != "S")
{
Sistem.Yon[i] = "S";
SonYon = "S";

if (Pozisyon == 0)
{
var Miktar = 1;
Sistem.PozisyonKontrolGuncelle(Sistem.Name +" "+ Sembol, Pozisyon-Miktar);
Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = "Satış";
Sistem.EmirMiktari = Miktar;
Sistem.EmirFiyati ="Aktif";
Sistem.EmirSuresi = "GUN"; // GUN, SNS, IKG
Sistem.EmirTipi = "KPY"; // KPY, KIE, GIE, SAR
Sistem.EmirFiyatTipi = "PYS"; // PYS, LMT, EIF, KAP
Sistem.EmirGonder();
}

else if (Pozisyon > 0)
{
var Miktar = 2*Pozisyon;
Sistem.PozisyonKontrolGuncelle(Sistem.Name +" "+ Sembol, Pozisyon-Miktar);
Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = "Satış";
Sistem.EmirMiktari = Miktar;
Sistem.EmirFiyati ="Aktif";
Sistem.EmirSuresi = "GUN"; // GUN, SNS, IKG
Sistem.EmirTipi = "KPY"; // KPY, KIE, GIE, SAR
Sistem.EmirFiyatTipi = "PYS"; // PYS, LMT, EIF, KAP
Sistem.EmirGonder();
}

}
}
}


sayın anonim,
robotlarda tüm barları tarayan döngüler içine emir gönder fonksiyonu koymayın..
aksi taktirde, eski barlarda oluşan şartlar için yüzlerce emri aynı anda gönderme gibi bir durum oluşabilir..
aşağıdaki örnekte kısa MA uzun MA yı yukarı kırarsa ve RSI 40 ın altındaysa alış yapıyor,
benzer şeklide kısa MA uzun MA yı aşağı kırarsa ve RSI 60 ın üstündeyse satış yapıyor..

sanal modda test etme vaktim olmadı,
ufak kodlama hataları olabilir, lütfen siz test edin




// ROBOTU ÖNCE SANAL MODDA TEST EDİN !!!


// verileri oku
var Sembol = "FX'EURUSD";
var Periyot = "1";
var Bars = Sistem.GrafikVerileriniOku(Sembol, Periyot);
var Kapanislar = Sistem.GrafikFiyatOku(Bars, "Kapanis");


// indikatör hesapla
var KisaMA = Sistem.MA(Kapanislar, "Simple",5);
var UzunMA = Sistem.MA(Kapanislar, "Simple",22);
var RSI = Sistem.RSI(Kapanislar, 14);


// pozisyon tablosundan pozisyon miktarını al
var Pozisyon = Sistem.PozisyonKontrolOku(Sembol);


// yön bul
var SonBarNo = Bars.Count - 1;
var Islem = "";
var Miktar = 0;
var SonFiyat = Sistem.SonFiyat(Sembol);

if (SonFiyat > 0 && (Sistem.SaatAraligi("09:10", "12:30") || Sistem.SaatAraligi("13:50", "17:45")))
{
var SartAl1 = KisaMA[SonBarNo] < UzunMA[SonBarNo-1] && KisaMA[SonBarNo] >= UzunMA[SonBarNo-1]; // kısa MA uzun MA yı yukarı kestiyse
var SartAl2 = RSI[SonBarNo] < 40; // RSI 40 ın altındaysa
var SartSat1 = KisaMA[SonBarNo] > UzunMA[SonBarNo-1] && KisaMA[SonBarNo] <= UzunMA[SonBarNo-1]; // kısa MA uzun MA yı aşağı kestiyse
var SartSat2 = RSI[SonBarNo] > 60; // RSI 60 ın üstündeyse

if (SartAl1 && SartAl2 && Pozisyon <= 0) // alış
{
Islem = "ALIS";
if (Pozisyon == 0) // pozisyonum yoksa 1 lot al
Miktar = 1;
else if (Pozisyon < 0) // short isem stop and reverse , 2 lot al
Miktar = 2;
}
else if (SartSat1 && SartSat2 && Pozisyon >= 0) // satış
{
Islem = "SATIS";
if (Pozisyon == 0) // pozisyonum yoksa 1 lot sat
Miktar = 1;
else if (Pozisyon > 0) // long isem stop and reverse , 2 lot sat
Miktar = 2;
}
}


// emri gönder
if (Islem != "")
{
if (Islem == "ALIS")
Sistem.PozisyonKontrolGuncelle(Sembol, Pozisyon+Miktar);
else if (Islem == "SATIS")
Sistem.PozisyonKontrolGuncelle(Sembol, Pozisyon-Miktar);

Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = Islem;
Sistem.EmirMiktari = Miktar;
Sistem.EmirSuresi = "GUN"; // GUN, SNS, IKG
Sistem.EmirTipi = "KPY"; // KPY, KIE, GIE, SAR
Sistem.EmirFiyatTipi = "PYS"; // PYS, LMT, EIF, KAP
Sistem.EmirGonder();
}




Test ettim, çalışıyor


var Sembol = "FX'EURUSD";
var Periyot = "1";
var V = Sistem.GrafikVerileriniOku(Sembol, Periyot);
var K = Sistem.GrafikFiyatOku(V, "Kapanis");

var MA1 = Sistem.MA(K, "Simple",2);
var MA2 = Sistem.MA(K, "Simple",4);

var Pozisyon = Sistem.PozisyonKontrolOku(Sistem.Name +" "+ Sembol);

var SonBarNo = V.Count - 2;
// (V.Count - 2) ise son barın kapanışını bekler,
// (V.Count - 1) ise son barın kapanışını beklemeden bar içinde, koşulun gerçekleştiği "tick" de işlem yapar

var Islem = "";
var Miktar = 0;
var SonFiyat = Sistem.SonFiyat(Sembol);

if (SonFiyat > 0 )
{
var SartAl1 = MA1[SonBarNo-1] < MA2[SonBarNo-1] && MA1[SonBarNo] > MA2[SonBarNo]; // kısa MA uzun MA yı yukarı kestiyse
var SartSat1 = MA1[SonBarNo-1] > MA2[SonBarNo-1] && MA1[SonBarNo] < MA2[SonBarNo]; // kısa MA uzun MA yı aşağı kestiyse

if (SartAl1 && Pozisyon <= 0) // alış
{
Islem = "ALIS";

if (Pozisyon == 0) // pozisyonum yoksa 1 lot al
{
Miktar = 1;
}

else if (Pozisyon < 0) // short isem stop and reverse , 2 lot al
{
Miktar = 2;
}
}

else if (SartSat1 && Pozisyon >= 0) // satış
{
Islem = "SATIS";

if (Pozisyon == 0) // pozisyonum yoksa 1 lot sat
{
Miktar = 1;
}

else if (Pozisyon > 0) // long isem stop and reverse , 2 lot sat
{
Miktar = 2;
}
}
}

// emri gönder
if (Islem != "")
{
if (Islem == "ALIS")
{
Sistem.PozisyonKontrolGuncelle(Sistem.Name +" "+ Sembol, Pozisyon+Miktar);
}

else if (Islem == "SATIS")
{
Sistem.PozisyonKontrolGuncelle(Sistem.Name +" "+ Sembol, Pozisyon-Miktar);
}

Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = Islem;
Sistem.EmirMiktari = Miktar;
Sistem.EmirFiyati ="Aktif";
Sistem.EmirSuresi = "GUN"; // GUN, SNS, IKG
Sistem.EmirTipi = "KPY"; // KPY, KIE, GIE, SAR
Sistem.EmirFiyatTipi = "PYS"; // PYS, LMT, EIF, KAP
Sistem.EmirGonder();
}


---------------------------

thebaboli
11-10-2014, 23:09
Merhabalar birkaç robot yazma deneyimim oldu, ve çalıştırıyorum. Ama Sistem yazma konusuna yeni başlıyorum size sorum şu :

Örneklerin hepsinde Sistem.Yon fonksiyonu "A" ve "S" parametreleri ile kullanılmış, acaba flat olma şansımız yok mu ? benim gerçek hayatta kullandığım sistemlerde zamanın en az 1/3 ü Flat olarak geçer.

yardımlarınız için teeşekkürler.

--------------------------

Merhabalar,
FLAT statusu fonksiyon olarak yok ama kod içerisinde bunu yapmanız, backtestini de yapmanız mümkün. Test için Sistem Modülündeki Performans tablosunu kullanırsanız, orası Sistem.Yon listesini baz aldığı için her durumda LONG yada SHORT olma halini test eder. Aşağıdaki örnekte, İki farklı RSI için alt ve üst seviyeler verilmiş, LONG, SHORT yada FLAT olma koşulları girilmiş ve sinyal üretip işlem yapması istenmiştir.
Sistemin Performans Testi direk grafik üzerinde çizgilerle gösterilmiştir.Ne zaman işlem yaptı, kaç adet işlem yaptı (pembe çizgi) (1 olan işlem miktarları flat'a geçişlerde dikkat ederseniz), herhangi bir anda pozisyonunuz neydi(siyah çizgi) ve kar zararınız tüm bu işlemlerle ne durumda (mavi çizgi), hepsini grafik üzerinde görebiliyorsunuz.

Kodu ve (VIP-X030 1 dk için) örnek görseli aşağıdadır.;



// parametreleri al
var UstSeviye135 = Sistem.Liste(Sistem.Parametreler[0]);
var AltSeviye135 = Sistem.Liste(Sistem.Parametreler[1]);
var UstSeviye200 = Sistem.Liste(Sistem.Parametreler[2]);
var AltSeviye200 = Sistem.Liste(Sistem.Parametreler[3]);

var Sembol = "VIP'VIP-X030";
var Veriler = Sistem.GrafikVerileriniOku(Sembol , "1");
var RSI135 = Sistem.RSI(Veriler, 135);
var RSI200 = Sistem.RSI(Veriler, 200);

Sistem.Cizgiler[0].Deger = RSI135;
Sistem.Cizgiler[1].Deger = RSI200;
Sistem.Cizgiler[2].Deger = UstSeviye135;
Sistem.Cizgiler[3].Deger = AltSeviye135;
Sistem.Cizgiler[4].Deger = UstSeviye200;
Sistem.Cizgiler[5].Deger = AltSeviye200;

//pozizyon kontrol başlangıç

var IslemMiktari = Sistem.Liste(0);
var Pozisyon = Sistem.Liste(0);
var KarZarar = Sistem.Liste(0);


var BaslangicNo = 1;
float SonPozisyon = 0;
float SonFiyat = 0;
float ToplamKarZarar = 0;



var SonYon = "";
for (int i = 200; i<Sistem.BarSayisi; i++)
{




if (RSI135[i] > UstSeviye135[i])

{
if(RSI200[i] > UstSeviye200[i] && SonYon != "A")
{
Sistem.Yon[i] = "A";
SonYon = "A";
if (SonPozisyon == 0 )
{
IslemMiktari[i] = 1;
SonFiyat = Veriler[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
else if (SonPozisyon < 0 )
{
IslemMiktari[i] = 2;
SonFiyat = Veriler[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
else{}


}
else if (RSI200[i] < UstSeviye200[i] )
{
if (SonPozisyon < 0 )
{
IslemMiktari[i] = 1;
SonFiyat = Veriler[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}

}

else{}

}

else{}


if (RSI135[i] < AltSeviye135[i])
{
if(RSI200[i] < AltSeviye200[i] && SonYon != "S")
{
Sistem.Yon[i] = "S";
SonYon = "S";
if (SonPozisyon == 0)
{
IslemMiktari[i] = -1;
SonFiyat = Veriler[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
else if (SonPozisyon > 0)
{
IslemMiktari[i] = -2;
SonFiyat = Veriler[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}

}
else if( RSI200[i] > AltSeviye200[i])

{
if ( SonPozisyon > 0 )
{
IslemMiktari[i] = -1;
SonFiyat = Veriler[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}


}
else {}

}
else{}

Pozisyon[i] = SonPozisyon;
KarZarar[i] = ToplamKarZarar + Veriler[i].Close * Pozisyon[i];
}

Sistem.Cizgiler[6].Deger = IslemMiktari;
Sistem.Cizgiler[7].Deger = Pozisyon;
Sistem.Cizgiler[8].Deger = KarZarar;


Örnek Görsel (VIP-030 1 Dk periyot için)

http://i.hizliresim.com/y2vGyy.png (http://hizliresim.com/y2vGyy)

thebaboli
11-10-2014, 23:34
profesyonel kullanıcılar için sistem altyapısı ile ilgili bazı bilgileri paylaşmayı uygun gördük..
umarız faydalı olur..
konuyla ilgili bize 24 saat ulaşabilirsiniz..
iyi çalışmalar..



public class cxBar
{
public DateTime Date;
public float Open = 0;
public float High = 0;
public float Low = 0;
public float Close = 0;
public float Size = 0;
public float Vol = 0;
public float Opint = 0;
public float AveragePrice()
public float TypicalPrice()

public static void Read(string symbolX, string periodX, List<cxBar> dataListX)
public static List<float> PeriodAdjust(List<cxBar> lowbarsX, List<cxBar> highbarsX, List<float> dataX)
}

public enum exSistemObjectTypes : int
{
BackgroundText,
NormalText
}

public class RobotOrderClass
{
public string SistemName = "";
public string EmirNo = "";
public string EmirHesapAdi = "";
public string EmirAltHesap = "";
public string EmirSembol = "";
public string EmirFiyati = "";
public string EmirMiktari = "";
public string EmirSuresi = ""; // imkb (SEANS, GUN) // vob (Seans, Gün, İptal Edilene Kadar, Tarihli)
public string EmirTipi = ""; // imkb (NORMAL, KIE, KPY, AFE/KAFE) // vob (Kalanı Pasife Yaz, Kalanı İptal Et, Gerçekleşmezse İptal Et, Şartlı)
public string EmirIslem = ""; // Alış, Satış
public string EmirSatisTipi = ""; // imkb (NORMAL, ACIGA, VIRMANDAN)
public string EmirAcigaSatisKapama = ""; // imkb (NORMAL, ASK)
public string EmirFiyatTipi = "Aktif"; // Aktif, Limitli, En İyi Fiyat, Kapanış
public string EmirStop = "";
public string EmirBitisTarih = "";
public string EmirAksiyon = "";
}

[Serializable]
public class cxSistemLineRecord
{
public string Aciklama = "";
public bool ActiveBool = false;
public int Panel = 1;
public int FrameNo = 1; // sonradan silinecek, deserialize için bıraktım
public Color Renk = Color.Red;
public Color Color = Color.Red; // sonradan silinecek, deserialize için bıraktım
public int Kalinlik = 1;
public int Stil = 1;

[field: NonSerialized]
public List<float> Deger = new List<float>();
}

public class SistemObjectClass
{
public exSistemObjectTypes ObjectType = exSistemObjectTypes.BackgroundText;
public int Panel = 1;
public Color BackColor = Color.Yellow;
public Color ForeColor = Color.Black;
public Color FrameColor = Color.Black;
public int Kalinlik = 1;
public int Stil = 1;
public string FontName = "Tahoma";
public int FontSizeX = 12;
public string Text = "";
public int PosX1 = 0;
public int PosY1 = 0;
public int BarNo = 0;
public float PriceLevel = 0;
}

public class SistemDolguClass
{
public int LineNo1 = 0;
public int LineNo2 = 0;
public Color UpColor = Color.Blue;
public Color DownColor = Color.Red;
}

public class OptimizerClass
{
public int No = 0;
public string Aciklama = "";
public decimal KarZarar = 0;
public decimal ToplamKar = 0;
public decimal ToplamZarar = 0;
public int ToplamIslemSayisi = 0;
public int KarEdenIslemSayisi = 0;
public int ZararEdenIslemSayisi = 0;
public decimal EnBuyukKar = 0;
public decimal EnBuyukZarar = 0;
public decimal ArdisikKar = 0;
public decimal ArdisikZarar = 0;
}

public class TradeClass
{
public string Direction = "";
public decimal Lot = 0;
public DateTime BuyDate;
public decimal BuyPrice = 0;
public DateTime SellDate;
public decimal SellPrice = 0;
public decimal Profit = 0;
public decimal Cash = 0;
}

[Serializable]
public class cxSistem
{
public int ClassVersion = 2;
public string Name = "";
public int DecimalPoint = 2;
public bool IndicatorBool = false;
public byte IndicatorRegion = 0;
public List<cxSistemLineRecord> Cizgiler = new List<cxSistemLineRecord>();
public List<string> Parametreler = new List<string>();
public Font Font = cxFont.SegoeT10;
public byte Compiler = 0;


[field: NonSerialized]
public object ObjectInstance;
[field: NonSerialized]
public List<string> Yon = new List<string>();
[field: NonSerialized]
public string Sembol = "";
[field: NonSerialized]
public string Periyot = "";
[field: NonSerialized]
public int BarSayisi = 0;
[field: NonSerialized]
public List<cxBar> GrafikVerileri = new List<cxBar>();
[field: NonSerialized]
public cxBasic YuzeyselVeri = new cxBasic();
[field: NonSerialized]
public cxDepth DerinlikVeri = new cxDepth();
[field: NonSerialized]
public int FrameCount = 1;
[field: NonSerialized]
public string AlgoIslem = "";
[field: NonSerialized]
public string AlgoAciklama = "";
[field: NonSerialized]
public List<SistemObjectClass> ObjectList = new List<SistemObjectClass>();
[field: NonSerialized]
public List<SistemDolguClass> DolguList = new List<SistemDolguClass>();
[field: NonSerialized]
public float[] SorguDeger = new float[50];
[field: NonSerialized]
public int[] SorguOndalik = new int[50];
[field: NonSerialized]
public string[] SorguBaslik = new string[50];
[field: NonSerialized]
public string SorguAciklama = "";
[field: NonSerialized]
public bool SorguEklendi = false;

[field: NonSerialized]
public bool RobotEnabled = false;
[field: NonSerialized]
public string EmirHesapAdi = "";
[field: NonSerialized]
public string EmirAltHesap = "";
[field: NonSerialized]
public string EmirSembol = "";
[field: NonSerialized]
public object EmirFiyati = 0;
[field: NonSerialized]
public double EmirMiktari = 0;
[field: NonSerialized]
public string EmirSuresi = ""; // imkb (SEANS, GUN) // vob (Seans, Gün, İptal Edilene Kadar, Tarihli)
[field: NonSerialized]
public string EmirTipi = ""; // imkb (NORMAL, KIE, KPY, AFE/KAFE) // vob (Kalanı Pasife Yaz, Kalanı İptal Et, Gerçekleşmezse İptal Et, Şartlı)
[field: NonSerialized]
public string EmirIslem = ""; // Alış, Satış
[field: NonSerialized]
public string EmirSatisTipi = ""; // imkb (NORMAL, ACIGA, VIRMANDAN)
[field: NonSerialized]
public string EmirAcigaSatisKapama = ""; // imkb (NORMAL, ASK)
[field: NonSerialized]
public string EmirFiyatTipi = "Aktif"; // Aktif, Limitli, En İyi Fiyat, Kapanış
[field: NonSerialized]
public object EmirStop = 0;
[field: NonSerialized]
public string EmirBitisTarih = "";
[field: NonSerialized]
public DateTime EmirEndDate = DateTime.Now;

public void EmirGonder()
public void PozisyonKontrolGuncelle(string strX, object lotX)
public double PozisyonKontrolOku(string strX)
public void ZamanKontrolGuncelle(string strX)
public long ZamanKontrolSaniye(string strX)
public long ZamanKontrolDakika(string strX)
public bool YeniBarKontrol(string anahtarX, string symbolX, string periodX, int barcountX)


public bool AsagiKestiyse(List<float> list1X, List<float> list2X)
public bool AsagiKestiyse(List<float> list1X, object sabitX)
public enAvrMethods ConvertAverageMethod(string strX)
public cxDepth DerinlikVerisiOku(string symbolX)
public void DolguEkle(int line1X, int line2X, Color upcolorX, Color downcolorX)
public List<float> DonemCevir(List<cxBar> lowbarsX, List<cxBar> highbarsX, List<float> dataX)
public void Debug(string strX)
public Font YaziTipi(string fontnameX, int fontsizeX)
public int GetLastYonNo()
public List<float> GrafikFiyatSec(string fieldX)
public List<float> GrafikFiyatOku(List<cxBar> barsX, string fieldX)
public List<float> GrafikFiyatOku(string symbolX, string periodX, string fieldX)
public void GrafikGuncelle(cxBasic itemX)
public List<cxBar> GrafikVerilerindeTarihHizala(List<cxBar> list1X, List<cxBar> list2X)
public List<cxBar> GrafikVerileriniOku(string symbolX, string periyotX)
public void GrafikVerisiIndir(object symbolX, object periodX)
public void KesismeTara(List<float> list1X, List<float> list2X)
public void KesismeTara(List<float> listX, object sabitX)
public bool LisansKontrol(params string[] userlistX)
public List<float> Liste(object sabitX)
public List<float> Liste(int barsayisiX, object sabitX)
public void Mesaj(string mesajX)
public cxIndicator NewIndicator()
public cxIndicator NewIndicator(int barcount)
public void Optimizasyon(params object[] aciklamaX)
public Color Renk(int opakX, int redX, int greenX, int blueX)
public string Saat
public bool SaatAraligi(string hour1X, string hour2X)
public void SayiTablosunuGuncelle(string strX, object sayiX)
public decimal SayiTablosunuOku(string strX)
public float SayiYuvarla(object sayiX, object stepX)
public cxBasic SembolTanimla(string symbolX, int decpointX)
public void Ses()
public void Ses(string filenameX)
public void SetErrorMessage(string errorcodeX)
public void SorguEkle()
public void SozcukTablosunuGuncelle(string strX, object dataX)
public string SozcukTablosunuOku(string strX)
public List<float> StDev(List<float> dataListX, int periodX)
public string Tarih
public bool TarihAraligi(string date1X, string date2X)
public bool TrendAsagiKirilirsa(string symbolX, string periodX, string date1X, object value1X, string date2X, object value2X)
public bool TrendYukariKirilirsa(string symbolX, string periodX, string date1X, object value1X, string date2X, object value2X)
public bool YukariKestiyse(List<float> list1X, List<float> list2X)
public bool YukariKestiyse(List<float> list1X, object sabitX)
public void YuzeyselGuncelle(cxBasic itemX)
public cxBasic YuzeyselVeriOku(string symbolX)
public void YaziEkle(string strX, int panelX, int barnoX, float pricelevelX, Color forecolorX, string fontnameX, int fontsizeX)
public void ZeminYazisiEkle(string strX, int panelX, int horizontalX, int verticalX, Color colorX, string fontnameX, int fontsizeX)

public List<float> MA(object periodX, object methodX, object pricetypeX)
public List<float> MA(List<float> datalistX, object methodX, object periodX)
public List<float> HHV(object periodX, List<float> listX)
public List<float> HHV(object periodX, object pricetypeX)
public List<float> HHV(List<cxBar> barsX, object periodX, object pricetypeX)
public List<float> LLV(object periodX, List<float> listX)
public List<float> LLV(object periodX, object pricetypeX)
public List<float> LLV(List<cxBar> barsX, object periodX, object pricetypeX)

public List<float> Ref(List<float> listX, int shiftX)
public float Sum(List<float> listX, object periodX)
public float Sum(List<cxBar> barsX, object periodX, object pricetypeX)


public List<float> Alligator1()
public List<float> Alligator1(List<cxBar> barsX)
public List<float> Alligator2()
public List<float> Alligator2(List<cxBar> barsX)
public List<float> Alligator3()
public List<float> Alligator3(List<cxBar> barsX)
public List<float> BollingerMid(object methodX, object periodX, object deviationX)
public List<float> BollingerMid(List<cxBar> barsX, object methodX, object periodX, object deviationX)
public List<float> BollingerUp(object methodX, object periodX, object deviationX)
public List<float> BollingerUp(List<cxBar> barsX, object methodX, object periodX, object deviationX)
public List<float> BollingerDown(object methodX, object periodX, object deviationX)
public List<float> BollingerDown(List<cxBar> barsX, object methodX, object periodX, object deviationX)
public List<float> DEMA(object periodX)
public List<float> DEMA(List<cxBar> barsX, object periodX)
public List<float> DEMA(List<float> datalistX, object periodX)
public List<float> EhlersFilter()
public List<float> EhlersFilter(List<cxBar> barsX)
public List<float> EnvelopeMid(object methodX, object periodX, object deviationX)
public List<float> EnvelopeMid(List<cxBar> barsX, object methodX, object periodX, object deviationX)
public List<float> EnvelopeUp(object methodX, object periodX, object deviationX)
public List<float> EnvelopeUp(List<cxBar> barsX, object methodX, object periodX, object deviationX)
public List<float> EnvelopeDown(object methodX, object periodX, object deviationX)
public List<float> EnvelopeDown(List<cxBar> barsX, object methodX, object periodX, object deviationX)
public List<float> FibonacciMid(object ratioX)
public List<float> FibonacciMid(List<cxBar> barsX, object ratioX)
public List<float> FibonacciUp(object ratioX)
public List<float> FibonacciUp(List<cxBar> barsX, object ratioX)
public List<float> FibonacciDown(object ratioX)
public List<float> FibonacciDown(List<cxBar> barsX, object ratioX)
public List<float> KeltnerUp(object periodX)
public List<float> KeltnerUp(List<cxBar> barsX, object periodX)
public List<float> KeltnerDown(object periodX)
public List<float> KeltnerDown(List<cxBar> barsX, object periodX)
public List<float> LinearReg(object periodX)
public List<float> LinearReg(List<cxBar> barsX, object periodX)
public List<float> Parabolic(object stepX, object maksimumX)
public List<float> Parabolic(List<cxBar> barsX, object stepX, object maksimumX)
public List<float> PivotMid()
public List<float> PivotMid(List<cxBar> barsX)
public List<float> PivotUp()
public List<float> PivotUp(List<cxBar> barsX)
public List<float> PivotDown()
public List<float> PivotDown(List<cxBar> barsX)
public List<float> PH01(object donemX)
public List<float> PH01(List<cxBar> barsX, object donemX)
public List<float> PL01(object donemX)
public List<float> PL01(List<cxBar> barsX, object donemX)
public List<float> PVT01(object donemX)
public List<float> PVT01(List<cxBar> barsX, object donemX)
public List<float> PriceChannelUp(object periodX)
public List<float> PriceChannelUp(List<cxBar> barsX, object periodX)
public List<float> PriceChannelDown(object periodX)
public List<float> PriceChannelDown(List<cxBar> barsX, object periodX)
public List<float> ProjectionUp(object periodX)
public List<float> ProjectionUp(List<cxBar> barsX, object periodX)
public List<float> ProjectionDown(object periodX)
public List<float> ProjectionDown(List<cxBar> barsX, object periodX)
public List<float> StErMid(object periodX, object deviationX, object avrmethodX, object avrperiodX)
public List<float> StErMid(List<cxBar> barsX, object periodX, object deviationX, object avrmethodX, object avrperiodX)
public List<float> StErUp(object periodX, object deviationX, object avrmethodX, object avrperiodX)
public List<float> StErUp(List<cxBar> barsX, object periodX, object deviationX, object avrmethodX, object avrperiodX)
public List<float> StErDown(object periodX, object deviationX, object avrmethodX, object avrperiodX)
public List<float> StErDown(List<cxBar> barsX, object periodX, object deviationX, object avrmethodX, object avrperiodX)
public List<float> TEMA(object periodX)
public List<float> TEMA(List<cxBar> barsX, object periodX)
public List<float> TimeSeriesForecast(object periodX)
public List<float> TimeSeriesForecast(List<cxBar> barsX, object periodX)
public List<float> TOMA(object periodX, object percentX)
public List<float> TOMA(List<cxBar> barsX, object periodX, object percentX)
public List<float> TypicalPrice()
public List<float> TypicalPrice(List<cxBar> barsX)
public List<float> WeightedClose()
public List<float> WeightedClose(List<cxBar> barsX)
public List<float> ZigZagPercent(object periodX)
public List<float> ZigZagPercent(List<cxBar> barsX, object periodX)
public List<float> ZigZagPoint(object periodX)
public List<float> ZigZagPoint(List<cxBar> barsX, object periodX)

public List<float> AccumulationSwingIndex(object periodX)
public List<float> AccumulationSwingIndex(List<cxBar> barsX, object periodX)
public List<float> AccumulationDistribution()
public List<float> AccumulationDistribution(List<cxBar> barsX)
public List<float> ADX(object periodX)
public List<float> ADX(List<cxBar> barsX, object periodX)
public List<float> ADR(object periodX)
public List<float> ADR(List<cxBar> barsX, object periodX)
public List<float> AroonUp(object periodX)
public List<float> AroonUp(List<cxBar> barsX, object periodX)
public List<float> AroonDown(object periodX)
public List<float> AroonDown(List<cxBar> barsX, object periodX)
public List<float> AroonOsc(object periodX)
public List<float> AroonOsc(List<cxBar> barsX, object periodX)
public List<float> AverageTrueRange(object periodX)
public List<float> AverageTrueRange(List<cxBar> barsX, object periodX)
public List<float> AverageTrueRange(List<float> datalistX, object periodX)
public List<float> AwesomeOsc(object period1X, object period2X)
public List<float> AwesomeOsc(List<cxBar> barsX, object period1X, object period2X)
public List<float> BollingerWidth(object period1X, object period2X)
public List<float> BollingerWidth(List<cxBar> barsX, object period1X, object period2X)
public List<float> ChandeMomentum(object periodX)
public List<float> ChandeMomentum(List<cxBar> barsX, object periodX)
public List<float> ChandeMomentum(List<float> datalistX, object periodX)
public List<float> CommodityChannelIndex(object periodX)
public List<float> CommodityChannelIndex(List<cxBar> barsX, object periodX)
public List<float> ChaikinMoneyFlow(object periodX)
public List<float> ChaikinMoneyFlow(List<cxBar> barsX, object periodX)
public List<float> ChaikinOsc()
public List<float> ChaikinOsc(List<cxBar> barsX)
public List<float> ChaikinVolatility(object period1X, object period2X)
public List<float> ChaikinVolatility(List<cxBar> barsX, object period1X, object period2X)
public List<float> DemandIndex()
public List<float> DemandIndex(List<cxBar> barsX)
public List<float> DirectionalIndicatorPlus(object periodX)
public List<float> DirectionalIndicatorPlus(List<cxBar> barsX, object periodX)
public List<float> DirectionalIndicatorMinus(object periodX)
public List<float> DirectionalIndicatorMinus(List<cxBar> barsX, object periodX)
public List<float> DirectionalMovement(object periodX)
public List<float> DirectionalMovement(List<cxBar> barsX, object periodX)
public List<float> EaseOfMovement(object periodX)
public List<float> EaseOfMovement(List<cxBar> barsX, object periodX)
public List<float> ForecastOsc(object periodX)
public List<float> ForecastOsc(List<cxBar> barsX, object periodX)
public List<float> IMI(object periodX)
public List<float> IMI(List<cxBar> barsX, object periodX)
public List<float> Kairi(object periodX)
public List<float> Kairi(List<cxBar> barsX, object periodX)
public List<float> Kairi(List<float> datalistX, object periodX)
public List<float> KlingerOsc(object periodX)
public List<float> KlingerOsc(List<cxBar> barsX, object periodX)
public List<float> LinearRegIndicator(object periodX)
public List<float> LinearRegIndicator(List<cxBar> barsX, object periodX)
public List<float> LinearRegSlope(object periodX)
public List<float> LinearRegSlope(List<cxBar> barsX, object periodX)
public List<float> LinearRegSlope(List<float> datalistX, object periodX)
public List<float> Lot()
public List<float> Lot(List<cxBar> barsX)
public List<float> MACD(object period1X, object period2X)
public List<float> MACD(List<cxBar> barsX, object period1X, object period2X)
public List<float> MassIndex(object periodX)
public List<float> MassIndex(List<cxBar> barsX, object periodX)
public List<float> Momentum(object periodX)
public List<float> Momentum(List<cxBar> barsX, object periodX)
public List<float> MoneyFlowIndex(object periodX)
public List<float> MoneyFlowIndex(List<cxBar> barsX, object periodX)
public List<float> NegativeVolumeIndex()
public List<float> NegativeVolumeIndex(List<cxBar> barsX)
public List<float> OnBalanceVolume()
public List<float> OnBalanceVolume(List<cxBar> barsX)
public List<float> OpenInterest()
public List<float> OpenInterest(List<cxBar> barsX)
public List<float> PolarizedFractalEfficiency(object period1X, object period2X)
public List<float> PolarizedFractalEfficiency(List<cxBar> barsX, object period1X, object period2X)
public List<float> PositiveVolumeIndex()
public List<float> PositiveVolumeIndex(List<cxBar> barsX)
public List<float> PriceOscPercent(object period1X, object period2X, object avrmethodX)
public List<float> PriceOscPercent(List<cxBar> barsX, object period1X, object period2X, object avrmethodX)
public List<float> PriceOscPoint(object period1X, object period2X, object avrmethodX)
public List<float> PriceOscPoint(List<cxBar> barsX, object period1X, object period2X, object avrmethodX)
public List<float> PriceRocPercent(object periodX)
public List<float> PriceRocPercent(List<cxBar> barsX, object periodX)
public List<float> PriceRocPercent(List<float> datalistX, object periodX)
public List<float> PriceRocPoint(object periodX)
public List<float> PriceRocPoint(List<cxBar> barsX, object periodX)
public List<float> PriceVolumeTrend()
public List<float> PriceVolumeTrend(List<cxBar> barsX)
public List<float> ProjectionBandwidth(object periodX)
public List<float> ProjectionBandwidth(List<cxBar> barsX, object periodX)
public List<float> ProjectionOsc(object period1X, object period2X)
public List<float> ProjectionOsc(List<cxBar> barsX, object period1X, object period2X)
public List<float> Qstick(object periodX)
public List<float> Qstick(List<cxBar> barsX, object periodX)
public List<float> RangeIndicator(object period1X, object period2X)
public List<float> RangeIndicator(List<cxBar> barsX, object period1X, object period2X)
public List<float> RAVI(object period1X, object period2X, object avrmethodX)
public List<float> RAVI(List<cxBar> barsX, object period1X, object period2X, object avrmethodX)
public List<float> RelativeMomIndex(object period1X, object period2X)
public List<float> RelativeMomIndex(List<cxBar> barsX, object period1X, object period2X)
public List<float> RSI(object periodX)
public List<float> RSI(List<cxBar> barsX, object periodX)
public List<float> RSI(List<float> datalistX, object periodX)
public List<float> RelativeVolatilityIndex(object period1X, object period2X)
public List<float> RelativeVolatilityIndex(List<cxBar> barsX, object period1X, object period2X)
public List<float> RSIDenvelopeMid(object methodX, object periodX, object deviationX)
public List<float> RSIDenvelopeMid(List<cxBar> barsX, object methodX, object periodX, object deviationX)
public List<float> RSIDenvelopeUp(object methodX, object periodX, object deviationX)
public List<float> RSIDenvelopeUp(List<cxBar> barsX, object methodX, object periodX, object deviationX)
public List<float> RSIDenvelopeDown(object methodX, object periodX, object deviationX)
public List<float> RSIDenvelopeDown(List<cxBar> barsX, object methodX, object periodX, object deviationX)
public List<float> Rsquared(object periodX)
public List<float> Rsquared(List<cxBar> barsX, object periodX)
public List<float> StDev(object periodX, object deviationX)
public List<float> StDev(List<cxBar> barsX, object periodX, object deviationX)
public List<float> StEr(object periodX)
public List<float> StEr(List<cxBar> barsX, object periodX)
public List<float> StochasticMomIndex(object period1X, object period2X, object period3X)
public List<float> StochasticMomIndex(List<cxBar> barsX, object period1X, object period2X, object period3X)
public List<float> StochasticOsc(object period1X, object period2X)
public List<float> StochasticOsc(List<cxBar> barsX, object period1X, object period2X)
public List<float> StochasticRSI(object period1X)
public List<float> StochasticRSI(List<cxBar> barsX, object periodX)
public List<float> SwingIndex(object periodX)
public List<float> SwingIndex(List<cxBar> barsX, object periodX)
public List<float> TKE()
public List<float> TKE(List<cxBar> barsX)
public List<float> TRIX(object periodX)
public List<float> TRIX(List<cxBar> barsX, object periodX)
public List<float> UltimateOsc(object period1X, object period2X, object period3X)
public List<float> UltimateOsc(List<cxBar> barsX, object period1X, object period2X, object period3X)
public List<float> VerticalHorizontalFilter(object periodX)
public List<float> VerticalHorizontalFilter(List<cxBar> barsX, object periodX)
public List<float> Volume()
public List<float> Volume(List<cxBar> barsX)
public List<float> VolumeOscPercent(object period1X, object period2X, object avrmethodX)
public List<float> VolumeOscPercent(List<cxBar> barsX, object period1X, object period2X, object avrmethodX)
public List<float> VolumeOscPoint(object period1X, object period2X, object avrmethodX)
public List<float> VolumeOscPoint(List<cxBar> barsX, object period1X, object period2X, object avrmethodX)
public List<float> WilliamsAccDist()
public List<float> WilliamsAccDist(List<cxBar> barsX)
public List<float> WilliamsR(object periodX)
public List<float> WilliamsR(List<cxBar> barsX, object periodX)
public List<float> WilliamsR(List<float> datalistX, object periodX)

// yuzeysel
public float SonFiyat(string symbolX)
public float SonLot(string symbolX)
public float SonHacim(string symbolX)
public float AlisFiyat(string symbolX)
public float AlisLot(string symbolX)
public float SatisFiyat(string symbolX)
public float SatisLot(string symbolX)
public float Tavan(string symbolX)
public float Taban(string symbolX)

public float YuksekSeans(string symbolX)
public float YuksekGun(string symbolX)
public float YuksekBuHafta(string symbolX)
public float YuksekBirHafta(string symbolX)
public float YuksekBuAy(string symbolX)
public float YuksekBirAy(string symbolX)
public float YuksekUcAy(string symbolX)
public float YuksekAltiAy(string symbolX)
public float YuksekBuYil(string symbolX)
public float YuksekBirYil(string symbolX)

public float DusukSeans(string symbolX)
public float DusukGun(string symbolX)
public float DusukBuHafta(string symbolX)
public float DusukBirHafta(string symbolX)
public float DusukBuAy(string symbolX)
public float DusukBirAy(string symbolX)
public float DusukUcAy(string symbolX)
public float DusukAltiAy(string symbolX)
public float DusukBuYil(string symbolX)
public float DusukBirYil(string symbolX)

public float OncekiKapanisSeans(string symbolX)
public float OncekiKapanisGun(string symbolX)
public float OncekiKapanisBuHafta(string symbolX)
public float OncekiKapanisBirHafta(string symbolX)
public float OncekiKapanisBuAy(string symbolX)
public float OncekiKapanisBirAy(string symbolX)
public float OncekiKapanisUcAy(string symbolX)
public float OncekiKapanisAltiAy(string symbolX)
public float OncekiKapanisBuYil(string symbolX)
public float OncekiKapanisBirYil(string symbolX)

public float FarkSeans(string symbolX)
public float FarkGun(string symbolX)
public float FarkBuHafta(string symbolX)
public float FarkBirHafta(string symbolX)
public float FarkBuAy(string symbolX)
public float FarkBirAy(string symbolX)
public float FarkUcAy(string symbolX)
public float FarkAltiAy(string symbolX)
public float FarkBuYil(string symbolX)
public float FarkBirYil(string symbolX)

public float YuzdeSeans(string symbolX)
public float YuzdeGun(string symbolX)
public float YuzdeBuHafta(string symbolX)
public float YuzdeBirHafta(string symbolX)
public float YuzdeBuAy(string symbolX)
public float YuzdeBirAy(string symbolX)
public float YuzdeUcAy(string symbolX)
public float YuzdeAltiAy(string symbolX)
public float YuzdeBuYil(string symbolX)
public float YuzdeBirYil(string symbolX)

public double LotSeans(string symbolX)
public double LotGun(string symbolX)
public double LotBuHafta(string symbolX)
public double LotBirHafta(string symbolX)
public double LotBuAy(string symbolX)
public double LotBirAy(string symbolX)
public double LotUcAy(string symbolX)
public double LotAltiAy(string symbolX)
public double LotBuYil(string symbolX)
public double LotBirYil(string symbolX)

public double HacimSeans(string symbolX)
public double HacimGun(string symbolX)
public double HacimBuHafta(string symbolX)
public double HacimBirHafta(string symbolX)
public double HacimBuAy(string symbolX)
public double HacimBirAy(string symbolX)
public double HacimUcAy(string symbolX)
public double HacimAltiAy(string symbolX)
public double HacimBuYil(string symbolX)
public double HacimBirYil(string symbolX)

public float OrtalamaSeans(string symbolX)
public float OrtalamaGun(string symbolX)
public float OrtalamaBuHafta(string symbolX)
public float OrtalamaBirHafta(string symbolX)
public float OrtalamaBuAy(string symbolX)
public float OrtalamaBirAy(string symbolX)
public float OrtalamaUcAy(string symbolX)
public float OrtalamaAltiAy(string symbolX)
public float OrtalamaBuYil(string symbolX)
public float OrtalamaBirYil(string symbolX)



public static List<RobotOrderClass> RobotOrderList = new List<RobotOrderClass>();
public static Dictionary<string, DateTime> RobotTimeDictionary = new Dictionary<string, DateTime>();
public static Dictionary<string, int> NewBarDictionary = new Dictionary<string, int>();
public static Dictionary<string, decimal> SayiDictionary = new Dictionary<string, decimal>();
public static Dictionary<string, string> SozcukDictionary = new Dictionary<string, string>();
public static List<TradeClass> TradeList = new List<TradeClass>();
public static List<OptimizerClass> OptimizerList = new List<OptimizerClass>();
public static string[] SorguBaslikList = new string[50];
public static int[] SorguOndalikList = new int[50];


}
----------------

thebaboli
11-10-2014, 23:41
Optimizasyon için; önce optimizasyon kodu yazılır sonra S ikonundan “Optimizasyon” ve buradada ilgili kod seçilerek sonuçlar görülür . İç içe for döngülerini kullanmayı iyi öğrenelim :)

Örnek : ma1 , ma2 kesişmesinde optimizasyon kodu (programın içerisinde mevcut)

// kapanış fiyatlarını oku
var Kapanis = Sistem.GrafikFiyatSec("Kapanis");

// hareketli ortalamaları hesapla
for (int KucukPeriyot = 5; KucukPeriyot < 20; KucukPeriyot++)
{
for (int BuyukPeriyot = 20; BuyukPeriyot < 60; BuyukPeriyot ++)
{
if (KucukPeriyot < BuyukPeriyot)
{
var MA1 = Sistem.MA(Kapanis, "Exp", KucukPeriyot);
var MA2 = Sistem.MA(Kapanis, "Exp", BuyukPeriyot);
Sistem.KesismeTara(MA1, MA2);
Sistem.Optimizasyon("MA", KucukPeriyot, BuyukPeriyot);
}
}
}


--------------------


If fonksiyonu kullanılarak indikatör nasıl tanımlayabiliriz?

Örneğin Matrikste

X:=If(RSI>30,1,0) dediğimizde X eğer RSI 30'un üzerindeyse 1, değilse 0 değerini alıyor.

Bunun aynısını nasıl yazabiliriz?




1 ve -1 değerlerini alması :


var Veriler = Sistem.GrafikFiyatSec("Kapanis");

var RSIPeriyot = Sistem.Parametreler[0];
var RSI = Sistem.RSI(RSIPeriyot);
Sistem.Cizgiler[0].Deger = RSI;
Sistem.Cizgiler[0].Panel = 2;

for (int i = 1; i < Veriler.Count; i++)
{
if (RSI[i] > 30.0)
Sistem.Cizgiler[2].Deger[i] = 1.0f;
else if (RSI[i] < 30.0)
Sistem.Cizgiler[2].Deger[i] = -1.0f;
else
Sistem.Cizgiler[2].Deger[i] = 0.0f;
}
Sistem.Cizgiler[2].Panel = 3;
Sistem.Cizgiler[2].ActiveBool = true;


ekran görüntüsü :

http://i57.tinypic.com/2h6t6xv.jpg

http://i61.tinypic.com/egpjwz.png




1 ve 0 değerlerini alması :

var Veriler = Sistem.GrafikFiyatSec("Kapanis");

var RSIPeriyot = Sistem.Parametreler[0];
var RSI = Sistem.RSI(RSIPeriyot);
Sistem.Cizgiler[0].Deger = RSI;
Sistem.Cizgiler[0].Panel = 2;

for (int i = 1; i < Veriler.Count; i++)
{
if (RSI[i] > 30.0)
Sistem.Cizgiler[2].Deger[i] = 1.0f;
else
Sistem.Cizgiler[2].Deger[i] = 0.0f;
}
Sistem.Cizgiler[2].Panel = 3;
Sistem.Cizgiler[2].ActiveBool = true;

thebaboli
11-10-2014, 23:53
İdeal Ekibi yaklaşık 5 aydır foruma yazmamış, sistem ile ilgili kendilerine de mail attım cevap alamadım şimdilik, şansımı bir de buradan deniyim...

Aşağıda verdiğim kod parçası ile ilgili bir sorum olacak:


// Saatlik Veriler
var KapanislarH = Sistem.GrafikVerileriniOku(Sembol, "60");
var MAH26 = Sistem.MA(KapanislarH, "Simple", 26);
var MAH9 = Sistem.MA(KapanislarH, "Simple", 9);

// 5 Dakikalık Veriler

var Kapanislarm = Sistem.GrafikVerileriniOku(Sembol, "5");
var MAM26 = Sistem.MA(Kapanislarm, "Simple", 26);
var MAM9 = Sistem.MA(Kapanislarm, "Simple", 9);



// alış
if (Sistem.YukariKestiyse( MAH26 , MAH9) && Sistem.YukariKestiyse( MAM26 , MAM9) )




Yukarıdaki Kod parçasında 26 ve 9 hareketli ortalamaları hesaplatıyorum (saatlik ve 5 dakikalık için), sonrasında alış koşulu olarak örnekte olduğu gibi "Sistem.YukariKestiyse" sistem fonksiyonunu kullandığımda saatlik ve 5 dakikalık barların aynı zaman diliminde yukarı kesmesi gerekiyor. Yani saatlik hareketli ortalama 15:00 da yukarı kesti ama 5 dakikalık grafik 15:35 de yukarı kestiyse koşul çalışmıyor.

Benim istediğim herhangi biri yukarı kestikten sonra diğeri de yukarı keserse sistemin alım yapması.

Söz konusu koşulu aşağıdaki gibi değiştirdim ama yine sonuç alamadım bu sefer çok fazla alım satım yapıyor ( pozisyon şartı koysam bile)

if (MAH26[MAH26.count-1] > MAH9[MAH9.count-1] && MAM26[MAM26.count-1] > MAM9[MAM9.count-1] )




Merhabalar

iDeal Sistem modülünde farklı periyotlara ait verileri kullanarak sistem kodları yazabiliyorsunuz. Bunun için özel olarak DÖNEM ÇEVİR isimli bir hazır fonksiyonumuz vardır.
Talep ettiğiniz kodlamayı aşağıda bulabilirsiniz. Aşağıda örnek bir uygulamasının görseli yer almaktadır.
Biz bu kodlamada küçük periyodu baz aldık.
Koşulları şöyle kurduk;

AL KOŞULU: 5 Dakikalık MA yukarı kestiyse VE 60 dakikalık MA(9) MA(26)dan üstteyse (daha önce kesmiş)
AL KOŞULU: 5 Dakikalık MA aşağı kestiyse VE 60 dakikalık MA(9) MA(26)dan alttaysa (daha önce kesmiş)

Siz isterseniz kod üzerinde oynama yaparak, kolayca bunun tersi stratejiyi de uygulayabiliriniz.



var SaatlikVeriler = Sistem.GrafikVerileriniOku(Sistem.Sembol, "60");
var SaatlikClose = Sistem.GrafikFiyatOku(Sistem.Sembol, "60", "Kapanis");
var BesDakikaVeriler = Sistem.GrafikVerileriniOku(Sistem.Sembol, "5");
var BesDakikaClose = Sistem.GrafikFiyatOku(Sistem.Sembol, "5", "Kapanis");

var SaatlikMA26 = Sistem.MA(SaatlikClose, "Simple", 14);
var SaatlikMA9 = Sistem.MA(SaatlikClose, "Simple", 9);
var BesDakikaMA26 = Sistem.MA(BesDakikaClose,"Simple",26);
var BesDakikaMA9 = Sistem.MA(BesDakikaClose,"Simple",9);

SaatlikMA9 = Sistem.DonemCevir(Sistem.GrafikVerileri, SaatlikVeriler, SaatlikMA9);
SaatlikMA26 = Sistem.DonemCevir(Sistem.GrafikVerileri, SaatlikVeriler, SaatlikMA26);


Sistem.Cizgiler[0].Deger = SaatlikMA9;
Sistem.Cizgiler[0].Aciklama = "Saatlik MA9";
Sistem.Cizgiler[1].Deger = SaatlikMA26;
Sistem.Cizgiler[1].Aciklama = "Saatlik MA26";
Sistem.Cizgiler[2].Deger = BesDakikaMA9;
Sistem.Cizgiler[2].Aciklama = "5 Dakika MA9";
Sistem.Cizgiler[3].Deger = BesDakikaMA26;
Sistem.Cizgiler[3].Aciklama = "5 Dakika MA26";


// strateji
var SonYon = "";
for (int i = 1; i<Sistem.BarSayisi; i++)
{
// alış koşulu
var MA5Dk_YukariKestiyse = (BesDakikaMA9[i-1] < BesDakikaMA26[i-1] && BesDakikaMA9[i] >= BesDakikaMA26[i]);
var MA60Dk_Yukaridaysa = (SaatlikMA9[i] > SaatlikMA26[i]);
if (MA5Dk_YukariKestiyse && MA60Dk_Yukaridaysa)
{
if ( SonYon != "A")
{
Sistem.Yon[i] = "A"; // alış
SonYon = "A";
}
}
// satış koşulu
var MA5Dk_AsagiKestiyse = (BesDakikaMA9[i-1] > BesDakikaMA26[i-1] && BesDakikaMA9[i] <= BesDakikaMA26[i]);
var MA60Dk_Asagidaysa = (SaatlikMA9[i] < SaatlikMA26[i]);
if (MA5Dk_AsagiKestiyse && MA60Dk_Asagidaysa)
{
if ( SonYon != "S")
{
Sistem.Yon[i] = "S"; // Satış
SonYon = "S";
}
}
}


http://i.hizliresim.com/NYO19a.png (http://hizliresim.com/NYO19a)

Saygılarımızla

----------------------------

Sezai KILIÇ
18-11-2014, 15:27
Merhaba Arkadaşlar,
Ben veri ekranı olmadan çeşitli periyotlarda bar sayısı almaya çalışıyorum ama veri ekranı açıkken rakamı doğru veriyor. Robot olarak çalıştırdığımda veya "Formül Test" butonuna bastığımda bar sayısını 0 olarak veriyor.

Mesela İndikatör MA'nın "VIP-X030" için
Hem 1Dk lık hemde 5 dk lık periyotda son bardaki MA değerlerini almak istiyorum.

Bana bu konuda yardımcı olabilir misiniz?
Teşekkürler...

http://i.hizliresim.com/780koL.png (http://hizliresim.com/780koL)



var Sembol = "VIP'VIP-X030";
var Veriler1 = Sistem.GrafikVerileriniOku(Sembol, "1");
var Veriler2 = Sistem.GrafikVerileriniOku(Sembol, "5");
var kapanislar_1dk = Sistem.GrafikFiyatOku(Veriler1 , "Kapanis");
var kapanislar_5dk = Sistem.GrafikFiyatOku(Veriler2 , "Kapanis");

var MA1 = Sistem.MA(kapanislar_1dk, "Simple", 10);
var MA5 = Sistem.MA(kapanislar_5dk, "Simple", 10);
var SonMA1 = MA1[MA1.Count-1];
var SonMA5 = MA5[MA5.Count-1];

Sistem.Mesaj("1 DK MA Son Bar Değeri =" + SonMA1.ToString() + "\r\n" + "5 DK MA Son Bar Değeri =" + SonMA5.ToString() );

thebaboli
04-12-2014, 01:33
Arkadaşlar "örnek kapanış crossMA" nın altına macd nasıl ilave edilir?



// kapanış fiyatlarını oku
var KapanisListesi = Sistem.GrafikFiyatSec("Kapanis");

// hareketli ortalamayı hesapla
var MA = Sistem.MA(KapanisListesi, "Exp", 20);

// hesapla
var MACD = Sistem.MACD (26, 12);
// ortalama
var AVR = Sistem.MA(MACD, "Exp", 9);

// hesaplanan verileri çizgilere aktar
Sistem.Cizgiler[0].Deger = MA;
Sistem.Cizgiler[1].Deger = MACD;
Sistem.Cizgiler[1].Aciklama = "MACD";
Sistem.Cizgiler[2].Deger = AVR;
Sistem.Cizgiler[2].Aciklama = "AVR";

// strateji
Sistem.KesismeTara(KapanisListesi, MA);

thebaboli
04-12-2014, 19:01
hocam saol ama yukardaki formülü kopyalayıp sisteme yapıştırdım olmadı error verdi

http://i.imgur.com/yCxBU8L.png

Kodu yapıştırdıktan sonra üstteki ayarları böyle yaparsanız görüntü alttaki gibi olur ;

http://snag.gy/9m0Fx.jpg

thebaboli
17-12-2014, 19:03
Selamlar, bir turlu ogrenemedik su formul isini, o yuzden her seferinde siz abilerden dostlarda istiyoruz. Hakkinizi helal edin.

Soyle bir sey istiyorum mumkunmudur acaba Misal, 50MA ya gore paralel MA istiyorum (anlatmasi ne zormus)

Ornek 50 lik MA 102.000 den geciyor.
50lik MA ya paralel olarak
800 puan yukarisi
1600 puan yukarisi
800 puan asagisi
1600 puan asagisindan gecen paralel MA istiyorum.

Asagida matrikse ait bi goruntu var muhtemelen baska bir seydir o ama benim istedigim de ona benzer goruntu ben sadece puan bazli ayarlama istiyorum. Umarim derdimi anlatmisimdir.

İyi aksamlar.

http://i.hizliresim.com/999o2N.jpg (http://hizliresim.com/999o2N)


hisse.net uygulaması ile gönderilmiştir.





var a = Sistem.MA(50, "Simple", "Kapanis");


var ah2 = Sistem.Liste(0);
var ah = Sistem.Liste(0);
var al2 = Sistem.Liste(0);
var al = Sistem.Liste(0);

for (int i = 0; i < Sistem.BarSayisi; i++)
ah2[i] = a[i] + 1.6f ;

for (int i = 0; i < Sistem.BarSayisi; i++)
ah[i] = a[i] + 0.8f ;

for (int i = 0; i < Sistem.BarSayisi; i++)
al[i] = a[i] - 0.8f ;

for (int i = 0; i < Sistem.BarSayisi; i++)
al2[i] = a[i] - 1.6f ;


Sistem.Cizgiler[0].Deger = a;
Sistem.Cizgiler[1].Deger = ah2;
Sistem.Cizgiler[2].Deger = ah;
Sistem.Cizgiler[3].Deger = al;
Sistem.Cizgiler[4].Deger = al2;




http://snag.gy/v05IQ.jpg



hepsini ayrı ayrı döngüye sokup kastırmayın bilgisayarı

for (int i = 0; i < Sistem.BarSayisi; i++)
{
ah2[i] = a[i] + 1.6f ;


ah[i] = a[i] + 0.8f ;

al[i] = a[i] - 0.8f ;

al2[i] = a[i] - 1.6f ;
}


yeterli. :wink:

************************

thebaboli
22-12-2014, 18:52
ATR trailing system



var V = Sistem.GrafikVerileri ;
var period = 5 ;
var atrfact = 3.5f ;

var H = Sistem.GrafikFiyatOku(V, "Yuksek" ) ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk" ) ;
var C = Sistem.GrafikFiyatOku(V, "Kapanis" ) ;

var HLF = Sistem.Liste(V.Count, 0) ;

for (int i = 1; i < V.Count; i++)
{
HLF[i] = H[i] - L[i] ;
}

var MA1 = Sistem.MA(HLF, "Simple", period ) ;

var a = Sistem.Liste(V.Count, 0) ;
var HiLo = Sistem.Liste(V.Count, 0) ;
var Href = Sistem.Liste(V.Count, 0) ;
var Lref = Sistem.Liste(V.Count, 0) ;
var diff1 = Sistem.Liste(V.Count, 0) ;
var diff2 = Sistem.Liste(V.Count, 0) ;
var atrmod = Sistem.Liste(V.Count, 0) ;

for (int i = 1; i < V.Count; i++)
{
a[i] = 1.5f * MA1[i] ;

if ( HLF[i] < a[i] )
HiLo[i] = HLF[i] ;
else
HiLo[i] = a[i] ;


if ( L[i] <= H[i-1] )
Href[i] = H[i] - C[i-1] ;
else
Href[i] = ( H[i]-C[i-1] )-( L[i]-H[i-1] )/2 ;


if ( H[i] <= L[i-1] )
Lref[i] = C[i-1] - L[i] ;
else
Lref[i] = ( C[i-1] - L[i] )-( L[i-1]-H[i] )/2 ;


if ( H[i] <= L[i-1] )
Lref[i] = C[i-1] - L[i] ;
else
Lref[i] = ( C[i-1] - L[i] )-( L[i-1]-H[i] )/2 ;

if ( HiLo[i] > Href[i] )
diff1[i] = HiLo[i] ;
else
diff1[i] = Href[i] ;


if ( diff1[i] > Lref[i] )
diff2[i] = diff1[i] ;
else
diff1[i] = Lref[i] ;

}

atrmod = Sistem.MA(diff2, "Wilder", period ) ;

var loss= Sistem.Liste(V.Count, 0) ;
var trail= Sistem.Liste(V.Count, 0) ;


for (int i = 1; i < V.Count; i++)
{
loss[i] = atrfact * atrmod[i];

if ( C[i] > trail[i-1] && C[i-1] > trail[i-1] )
{
if ( trail[i-1] > (C[i] - loss[i]) )
trail[i] = trail[i-1] ;
else
trail[i] = (C[i] - loss[i]) ;

}

if ( C[i] < trail[i-1] && C[i-1] < trail[i-1] )
{
if ( trail[i-1] < (C[i] + loss[i]) )
trail[i] = trail[i-1] ;
else
trail[i] = (C[i] + loss[i]) ;

}

{
if ( C[i] > trail[i-1] )
trail[i] = C[i] - loss[i] ;

else
trail[i] = (C[i] + loss[i]) ;
}

}

var SonYon = "";
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if ( C[i] > trail[i] &&
SonYon != "A" )
{
Sistem.Yon[i] = "A";
SonYon = Sistem.Yon[i] ;
}

if ( C[i] < trail[i] &&
SonYon != "S" )


{
Sistem.Yon[i] = "S";
SonYon = Sistem.Yon[i] ;
}

}

Sistem.Cizgiler[0].Deger = trail ;






*************************

thebaboli
23-12-2014, 18:49
Şimdi her şeyi karıştırınca (her şey bir arada olsun deyince) böyle sorunlar oluyor.

Normalda formül viop için ve sorunsuz.
Formülde 60'lık ve 15' lık veriler 5 'dakikalığa çevriliyor.

Bende dedim bu grafiğin alt panellerine GARAN-HALB-XU100 atayım ki viop al-sat verdiğinde tek grafik üzerinde, o anki sinyalde tüm bu hisselerin fiyatını göreyim.

var Sembol1 = Sistem.Sembol;
var Veriler1 = Sistem.GrafikVerileri;

var Sembol2 = "IMKBX'XU100";
var Veriler2 = Sistem.GrafikVerileriniOku(Sembol2, Sistem.Periyot);
Veriler2 = Sistem.GrafikVerilerindeTarihHizala(Veriler1, Veriler2);
var data2 = Sistem.GrafikFiyatOku(Veriler2 , "Kapanis");

var Sembol3 = "IMKBH'GARAN";
var Veriler3 = Sistem.GrafikVerileriniOku(Sembol3, Sistem.Periyot);
Veriler3 = Sistem.GrafikVerilerindeTarihHizala(Veriler1, Veriler3);
var data3 = Sistem.GrafikFiyatOku(Veriler3 , "Kapanis");

var Sembol4 = "IMKBH'HALKB";
var Veriler4 = Sistem.GrafikVerileriniOku(Sembol4, Sistem.Periyot);
Veriler4 = Sistem.GrafikVerilerindeTarihHizala(Veriler1, Veriler4);
var data4 = Sistem.GrafikFiyatOku(Veriler4 , "Kapanis");

// hesaplanan verileri çizgilere aktar
Sistem.Cizgiler[0].Deger = data2;
Sistem.Cizgiler[0].Aciklama = Sembol2;

Sistem.Cizgiler[1].Deger = data3;
Sistem.Cizgiler[1].Aciklama = Sembol3;

Sistem.Cizgiler[2].Deger = data4;
Sistem.Cizgiler[2].Aciklama = Sembol4;

// SİSTEM
var Sembol = Sistem.Sembol;

// verileri oku
var Bars1 = Sistem.GrafikVerileriniOku(Sembol1, "5");
var Kapanislar1 = Sistem.GrafikFiyatOku(Bars1, "Kapanis");
var MA1 = Sistem.MA(Kapanislar1, "Simple", 4);

var Bars6 = Sistem.GrafikVerileriniOku(Sembol1, "15");
var Kapanislar6 = Sistem.GrafikFiyatOku(Bars6, "Kapanis");
var MA5 = Sistem.MA(Kapanislar6, "Simple", 160);

var Bars7 = Sistem.GrafikVerileriniOku(Sembol1, "15");
var Kapanislar7 = Sistem.GrafikFiyatOku(Bars7, "Kapanis");
var MA6 = Sistem.MA(Kapanislar7, "Simple", 200);

var Bars2 = Sistem.GrafikVerileriniOku(Sembol1, "60");
var Kapanislar2 = Sistem.GrafikFiyatOku(Bars2, "Kapanis");
var MA2 = Sistem.MA(Kapanislar2, "Simple", 40);

var Bars4 = Sistem.GrafikVerileriniOku(Sembol1, "60");
var Kapanislar4 = Sistem.GrafikFiyatOku(Bars4, "Kapanis");
var MA4 = Sistem.MA(Kapanislar4, "Simple", 42);

var Bars5 = Sistem.GrafikVerileriniOku(Sembol1, "60");
var Kapanislar5 = Sistem.GrafikFiyatOku(Bars5, "Kapanis");
var MA7 = Sistem.MA(Kapanislar5, "Simple", 38);

// 60 dakikalık verileri 5 dakikalık verilere hizala
MA2 = Sistem.DonemCevir(Bars1, Bars2, MA2);
MA4 = Sistem.DonemCevir(Bars1, Bars4, MA4);
MA7 = Sistem.DonemCevir(Bars1, Bars5, MA7);

// 15 dakikalık verileri 5 dakikalık verilere hizala
MA5 = Sistem.DonemCevir(Bars1, Bars6, MA5);
MA6 = Sistem.DonemCevir(Bars1, Bars7, MA6);

// hesaplanan verileri çizgilere aktar ve açıklama ekle
Sistem.Cizgiler[3].Deger = MA1;
Sistem.Cizgiler[3].Aciklama = "MA1";

Sistem.Cizgiler[4].Deger = MA2;
Sistem.Cizgiler[4].Aciklama = "MA2";

Sistem.Cizgiler[5].Deger = MA4;
Sistem.Cizgiler[5].Aciklama = "MA4";

Sistem.Cizgiler[6].Deger = MA5;
Sistem.Cizgiler[6].Aciklama = "MA5";

Sistem.Cizgiler[7].Deger = MA6;
Sistem.Cizgiler[7].Aciklama = "MA6";

Sistem.Cizgiler[8].Deger = MA7;
Sistem.Cizgiler[8].Aciklama = "MA7";

// strateji
var SonYon = "";
for (int f = 1; f < Bars1.Count; f++)
{
if ( MA1[f] > MA2[f] && MA1[f] > MA4[f] && MA1[f] > MA7[f] )
if ( SonYon != "A") //Mavi kalınan her barda AL vermemesi için
{
Sistem.Yon[f] = "A"; // alış
SonYon = "A";
}
if ( MA1[f] < MA2[f] && MA1[f] < MA4[f] && MA1[f] < MA7[f] )
{
if ( SonYon != "S") //Kırmızı kalınan her bölgede SAT vermemesi için
{
Sistem.Yon[f] = "S"; // alış
SonYon = "S";
}
}
}


http://i.hizliresim.com/N9W2WQ.jpg (http://hizliresim.com/N9W2WQ)

http://i.hizliresim.com/A0gX6z.png (http://hizliresim.com/A0gX6z)

Paylaşım için teşekkürler Korsan :)

thebaboli
23-12-2014, 18:50
p0.2 -p0.8 system 1 minute/5 minute




var V = Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V, "Kapanis" ) ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek" ) ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk" ) ;


var Q1 = 3 ;
var Q21 = 0.2f ;
var Q22 = 0.5f ;
var Q23 = 0.8f ;

var Q31 = Q21/100 ;
var Q32 = Q22/100 ;
var Q33 = Q23/100 ;




var x = Sistem.Liste(V.Count, 0) ;

for (int i = 1; i < V.Count; i++)
{
x[i] = ( H[i] + L[i] + C[i] ) / 3;
}

var Q4 = Sistem.MA (x, "Exp", Q1 ) ;

var Q51 = Sistem.Liste(V.Count, 0) ;
var Q52 = Sistem.Liste(V.Count, 0) ;
var Q53 = Sistem.Liste(V.Count, 0) ;

for (int i = 1; i < V.Count; i++)
{
{
if ( ( Q4[i] * (1-Q31) ) > Q51[i-1] )
Q51[i] = Q4[i] * (1-Q31);

else if ( ( Q4[i] * (1+Q31) )< Q51[i-1] )
Q51[i] = Q4[i] * (1+Q31) ;

else
Q51[i] = Q51[i-1] ;
}

{
if ( ( Q4[i] * (1-Q32) ) > Q52[i-1] )
Q52[i] = Q4[i] * (1-Q32);

else if ( ( Q4[i] * (1+Q32) )< Q52[i-1] )
Q52[i] = Q4[i] * (1+Q32) ;

else
Q52[i] = Q52[i-1] ;
}

{
if ( ( Q4[i] * (1-Q33) ) > Q53[i-1] )
Q53[i] = Q4[i] * (1-Q33);

else if ( ( Q4[i] * (1+Q33) )< Q53[i-1] )
Q53[i] = Q4[i] * (1+Q33) ;

else
Q53[i] = Q53[i-1] ;
}
}

var Q61 = Sistem.Liste(V.Count, 0) ;
var Q62 = Sistem.Liste(V.Count, 0) ;
var Q63 = Sistem.Liste(V.Count, 0) ;

for (int i = 1; i < V.Count; i++)
{
Q61[i] = Sistem.SayiYuvarla(Q51[i], 0.025) ;
Q62[i] = Sistem.SayiYuvarla(Q52[i], 0.025) ;
Q63[i] = Sistem.SayiYuvarla(Q53[i], 0.025) ;

}

Sistem.Cizgiler[0].Deger = Q61 ;
Sistem.Cizgiler[1].Deger = Q62 ;
Sistem.Cizgiler[2].Deger = Q63 ;


var SonYon = "";
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if ( Q61[i] > Q63[i] &&
SonYon != "A" )
{
Sistem.Yon[i] = "A";
SonYon = Sistem.Yon[i] ;
}

if ( Q61[i] < Q63[i] &&
SonYon != "S" )


{
Sistem.Yon[i] = "S";
SonYon = Sistem.Yon[i] ;
}

}






Güzel bir pivot göstergesi, 1 dk, 5 dk deneyebilirsiniz , Q23 = 0.8f değerini 0.2 ve/veya 0.5 yapabilirsiniz.




var V = Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V, "Kapanis" ) ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek" ) ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk" ) ;

var Q1 = 3 ;

var Q23 = 0.8f ;


var Q33 = Q23/100 ;




var x = Sistem.Liste(V.Count, 0) ;

for (int i = 1; i < V.Count; i++)
{
x[i] = ( H[i] + L[i] + C[i] ) / 3;
}

var Q4 = Sistem.MA (x, "Exp", Q1 ) ;


var Q53 = Sistem.Liste(V.Count, 0) ;

for (int i = 1; i < V.Count; i++)
{
if ( ( Q4[i] * (1-Q33) ) > Q53[i-1] )
Q53[i] = Q4[i] * (1-Q33);

else if ( ( Q4[i] * (1+Q33) )< Q53[i-1] )
Q53[i] = Q4[i] * (1+Q33) ;

else
Q53[i] = Q53[i-1] ;
}



var Q63 = Sistem.Liste(V.Count, 0) ;

for (int i = 1; i < V.Count; i++)
{

Q63[i] = Sistem.SayiYuvarla(Q53[i], 0.025) ;

}


Sistem.Cizgiler[0].Deger = Q63 ;



Paylaşımlar için teşekkürler Sn. Anonimm

anonimm
24-12-2014, 22:00
Saraylı hocama saygılar ,
http://www.hisse.net/forum/showthread.php?t=27732&page=59




var V = Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V, "Kapanis") ;

var CCI21 = Sistem.CommodityChannelIndex(V, 21) ;
var CCI13 = Sistem.CommodityChannelIndex(V, 13) ;
var CCI8 = Sistem.CommodityChannelIndex(V, 8) ;
var MACD = Sistem.MACD(V, 12, 26) ;

var MA = Sistem.MA(MACD, "Simple", 9) ;
var SAR = Sistem.Parabolic(V, 0.02, 0.2) ;

var Q1 = Sistem.Liste(V.Count, 0);
var Q2 = Sistem.Liste(V.Count, 0);
var Q3 = Sistem.Liste(V.Count, 0);
var Q4 = Sistem.Liste(V.Count, 0);
var Q5 = Sistem.Liste(V.Count, 0);

for (int i = 1; i < V.Count; i++)
{
if (CCI21[i] > 0 ) Q1[i] = 1 ; else Q1[i] = 0 ;
if (MACD[i] > MA[i] ) Q2[i] = Q1[i] + 1 ; else Q2[i] = Q1[i] ;
if (C[i] > SAR[i] ) Q3[i] = Q2[i] + 1 ; else Q3[i] = Q2[i] ;
if (CCI13[i] > 0 ) Q4[i] = Q3[i] + 1 ; else Q4[i] = Q3[i] ;
if (CCI8[i] > 0 ) Q5[i] = Q4[i] + 1 ; else Q5[i] = Q4[i] ;
}

Sistem.Cizgiler[0].Deger = Q5 ;

var SonYon = "";
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if ( Q5[i] > 4 &&
SonYon != "A" )
{
Sistem.Yon[i] = "A";
SonYon = Sistem.Yon[i] ;
}

if ( Q5[i] < 4 &&
SonYon != "S" )
{
Sistem.Yon[i] = "S";
SonYon = Sistem.Yon[i] ;
}

}

anonimm
24-12-2014, 22:41
http://www.hisse.net/forum/showthread.php?t=27732&page=78

10 minutes chart için, Aralık ayında neredeyse 10 bin puan almış (kayma ve komisyon hariç)




var V = Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V, "Kapanis") ;

var RS = Sistem.Rsquared(V, 30) ;

var P1 = Sistem.Liste(V.Count, 0);
var P2 = Sistem.Liste(V.Count, 0);
var P3 = Sistem.Liste(V.Count, 0);
var P4 = Sistem.Liste(V.Count, 0);

var Q1 = Sistem.Liste(V.Count, 0);
var Q2 = Sistem.Liste(V.Count, 0);
var Q3 = Sistem.Liste(V.Count, 0);
var Q4 = Sistem.Liste(V.Count, 0);


for (int i = 1; i < V.Count; i++)
{

P1[i] = 5 + 6 * RS[i] ;
P2[i] = 2 / ( P1[i] + 1 ) ;
P3[i] = 1 - P2[i] ;
P4[i] = C[i] * P2[i] + P3[i] * P4[i-1] ;

Q1[i] = 5 + 32 * RS[i] ;
Q2[i] = 2 / ( Q1[i] + 1 ) ;
Q3[i] = 1 - Q2[i] ;
Q4[i] = C[i] * Q2[i] + Q3[i] * Q4[i-1] ;

}

Sistem.Cizgiler[0].Deger = Q4 ;
Sistem.Cizgiler[1].Deger = P4 ;

var SonYon = "";
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if ( P4[i] > Q4[i] &&
SonYon != "A" )
{
Sistem.Yon[i] = "A";
SonYon = Sistem.Yon[i] ;
}

if ( P4[i] < Q4[i] &&
SonYon != "S" )
{
Sistem.Yon[i] = "S";
SonYon = Sistem.Yon[i] ;
}

}

thebaboli
26-12-2014, 12:05
Aktif vade açık poz: VIP-X030-APOZ
İleriki vadelerin açık poz. sayısına kodda nasıl erişebilirim?

fiyat penceresinde var:
http://snag.gy/ByJbe.jpg


Fiyat penceresi sütunlarındaki verilerin neredeyse tamamını YuzeyselVeriOku fonksiyonu ile çekebilirsiniz.

http://i.hizliresim.com/dWZ9gD.png (http://hizliresim.com/dWZ9gD)


Bir sembolün yüzeysel verilerini (fiyat penceresinde başlık olarak izlenebilen verileri) Sistem.YuzeyselVeriOku fonkisyonu ile okutabilirsiniz.

Okutulan bu veri listesi içinden istediğiniz bilgiyi (aşağıdaki listedeki gibi yazarak) formüllerinizde kullanılabilirsiniz..

Tüm yüzeysel veri seti şunlardır.



public string Symbol = "";
public string Root = "";
public string Prefix = "";
public string Description = "";
public string Exchange = "";
public int ExchangeID = 0;
public string MarketCode = "";
public string SubMarket = "";
public string Sector = "";
public int DecimalPoint = 2;
public string IndexType = "";
public string Grup = "";
public string Seri = "";
public string Yontem = "";
public string Durum = "";
public float LastPrice = 0;
public int LastSize = 0;
public int LastSize2 = 0;
public float LastVol = 0;
public float LastVol2 = 0;
public string Direction = " ";
public decimal BidPriceDec = 0;
public float BidPrice = 0;
public int BidSize = 0;
public float BidVol = 0;
public decimal AskPriceDec = 0;
public float AskPrice = 0;
public int AskSize = 0;
public float AskVol = 0;
public float ClosePrice = 0;
public float OpenSession = 0;
public float OpenDay = 0;
public float LimitUp = 0;
public float LimitDown = 0;
public float BazPrice = 0;
public string MarketMakerCode = "";
public float MarketMakerBid = 0;
public float MarketMakerAsk = 0;
public float PriceStep = 0;
public int TickSession = 0;
public int TickDay = 0;
public float IzafiSession = 0;
public float IzafiDay = 0;
public string Date = "";
public string Time = "";

public float WaitingBidWavr = 0;
public float WaitingAskWavr = 0;
public float WaitingBidSize = 0;
public float WaitingAskSize = 0;
public float WaitingBidRate = 0;
public float WaitingAskRate = 0;
public float CanceledBidWavr = 0;
public float CanceledAskWavr = 0;

public float HighSession = 0;
public float HighSession1 = 0;
public float HighDay = 0;
public float HighWeek = 0;
public float HighWeek1 = 0;
public float HighMonth = 0;
public float HighMonth1 = 0;
public float HighMonth3 = 0;
public float HighMonth6 = 0;
public float HighYear = 0;
public float HighYear1 = 0;

public float LowSession = 0;
public float LowSession1 = 0;
public float LowDay = 0;
public float LowWeek = 0;
public float LowWeek1 = 0;
public float LowMonth = 0;
public float LowMonth1 = 0;
public float LowMonth3 = 0;
public float LowMonth6 = 0;
public float LowYear = 0;
public float LowYear1 = 0;

public float PrevCloseSession = 0;
public float PrevCloseDay = 0;
public float PrevCloseWeek = 0;
public float PrevCloseWeek1 = 0;
public float PrevCloseMonth = 0;
public float PrevCloseMonth1 = 0;
public float PrevCloseMonth3 = 0;
public float PrevCloseMonth6 = 0;
public float PrevCloseYear = 0;
public float PrevCloseYear1 = 0;

public float NetDifSession = 0;
public float NetDifDay = 0;
public float NetDifWeek = 0;
public float NetDifWeek1 = 0;
public float NetDifMonth = 0;
public float NetDifMonth1 = 0;
public float NetDifMonth3 = 0;
public float NetDifMonth6 = 0;
public float NetDifYear = 0;
public float NetDifYear1 = 0;

public float NetPerSession = 0;
public float NetPerDay = 0;
public float NetPerWeek = 0;
public float NetPerWeek1 = 0;
public float NetPerMonth = 0;
public float NetPerMonth1 = 0;
public float NetPerMonth3 = 0;
public float NetPerMonth6 = 0;
public float NetPerYear = 0;
public float NetPerYear1 = 0;

public double SizeSession = 0;
public double SizeSession1 = 0;
public double SizeDay = 0;
public double SizeWeek = 0;
public double SizeWeek1 = 0;
public double SizeMonth = 0;
public double SizeMonth1 = 0;
public double SizeMonth3 = 0;
public double SizeMonth6 = 0;
public double SizeYear = 0;
public double SizeYear1 = 0;

public double VolSession = 0;
public double VolSession1 = 0;
public double VolDay = 0;
public double VolWeek = 0;
public double VolWeek1 = 0;
public double VolMonth = 0;
public double VolMonth1 = 0;
public double VolMonth3 = 0;
public double VolMonth6 = 0;
public double VolYear = 0;
public double VolYear1 = 0;

public float WavrSession = 0;
public float WavrSession1 = 0;
public float WavrDay = 0;
public float WavrPeriodic = 0;

public float Wavr2Session = 0;
public float Wavr2Session1 = 0;
public float Wavr2Day = 0;
public float Wavr2Week = 0;
public float Wavr2Week1 = 0;
public float Wavr2Month = 0;
public float Wavr2Month1 = 0;
public float Wavr2Month3 = 0;
public float Wavr2Month6 = 0;
public float Wavr2Year = 0;
public float Wavr2Year1 = 0;

public float MoneyflowInput = 0;
public float MoneyflowOutput = 0;
public float MoneyflowTotal = 0;
public float MoneyflowNetDif = 0;
public float MoneyflowNetPer = 0;
public float MoneyflowGraph = 0;

public float GraphSession = 0;
public float GraphDay = 0;
public float GraphWeek = 0;
public float GraphWeek1 = 0;
public float GraphMonth = 0;
public float GraphMonth1 = 0;
public float GraphMonth3 = 0;
public float GraphMonth6 = 0;
public float GraphYear = 0;
public float GraphYear1 = 0;

public string BalanceSheetPeriod = "";
public double Capital = 0;
public double OzCapital = 0;
public double PiyDegDefDeg = 0;
public double NetProfit = 0;
public double PublicRatio = 0;
public double NumberOfShares = 0;
public double PriceEarningRatio = 0;
public double PriceEarningValue = 0;
public double MarketValue = 0;
public double BookValue = 0;


public float BorrowBid = 0;
public float BorrowAsk = 0;
public float BorrowLast = 0;

public float PrevSettlement = 0;
public float SettlementPrice = 0;
public float FixingPrice = 0;
public string ExpiryDate = "";
public int DaysToExpiry = 0;
public int OpenInterest = 0;
public int OpenInterestDif = 0;

// bond
public float AI = 0;
public float BSP = 0;
public float BidRate = 0;
public float AskRate = 0;
public float ASP = 0;
public float LastRate = 0;
public float LastTakas = 0;
public float CY = 0;
public int DTM = 0;
public int DTC = 0;
public float RYLD = 0;
public float PrevRate = 0;
public float PrevPrice = 0;
public string PrevDate = "";
public float AV = 0;
public float SY = 0;
public float AVSP = 0;
public float MinRate = 0;
public float MaxRate = 0;
public float AvrRate = 0;
public string BidTime = "";
public string AskTime = "";
public string Vade = "";
public string Valor = "";
public int Day = 0;
public string Isin = "";
public string Risk = "";
public int Line = 0;
public float FI91 = 0;
public float FI182 = 0;
public float FI273 = 0;
public float FI365 = 0;
public float FI456 = 0;
public float FIGENEL = 0;

// eurobond
public string Maturity = "";
public string Currency = "";
public float Coupon = 0;
public float Spread = 0;
public float Duration = 0;

// vip
public double OptionPremiumDay = 0;
public string BaseSymbol = "";
public string OptionType = "";
public string OptionKind = "";
public float StrikePrice = 0;
public string GrupName = "";
public string GrupNo = "";
public string StartDate = "";
public float Multiplier = 0;
public string DeliveryType = "";
public string PrevSymbol = "";
public string Action = "";
public string SessionName = "";

public string Broker = "";
public float Barrier = 0;

public float TeorikVal = 0;
public float TeorikDif = 0;
public float TeorikPer = 0;




**********************

thebaboli
26-12-2014, 12:06
Merhaba arkadaşlar,
Ben ideal de mail gönderme işlemi yaptırıyorum fakat mail içeriğini oluştururken bir türlü enter tuşunun görevini yapıcak kodu bulamadım yani şatır satır mail içeriği oluşturamadım.

Mail geliyor sorun yok ama mail içeriğinde alt satıra geçemiyorum.

iyi geceler...

// \n\n
// (char)13
//Mail Mesajı oluşturulur.
string Mesaj = ("Bu bir test mesajıdır (char)13 buradan sonra yazılanlar" + "\n\n" + "alt satırda olmalı ama olmuyor.");

// Yahoo! smtp.mail.yahoo.com 587 - GMail smtp.gmail.com 587 - Hotmail smtp.live.com 587
Sistem.MailServerAdres = "smtp.live.com";
Sistem.MailServerPort = 587;
Sistem.MailKonu = "iDeal Borsa Durum Bilgisi / " + Sistem.Tarih + " / " + Sistem.Saat;
Sistem.MailMetin = Mesaj;
Sistem.MailGonderenAdres = "****@msn.com";
Sistem.MailGonderenSifre = "******";
Sistem.MailAliciEkle("******@msn.com");
Sistem.MailGonder();



"<br />" stringini eklerseniz çalışacaktır..

***********************

thebaboli
26-12-2014, 12:08
Teşekkür ederim Sezai bey,

toplam -tüm- açık poz.ları gösteren bir grafik yapmak istiyorum ama ileriki vadeler için şu imkan yok galiba? :


var veriAPOZ = Sistem.GrafikVerileriniOku("VIP'VIP-X030-APOZ", Sistem.Periyot);



Yüzeysel Veri Oku yerine Grafik Verisi Oku derseniz, O veri setinde Apoz tarihsel olarak var. (sadece günlük periyot)
İleriki vadeli VIP sözleşmelerinin açık pozisyon sayısı grafiğine aşağıdaki örnek koddaki gibi erişebilirsiniz.

Kolay gelsin

NOT: Sistem.GrafikVerisiOku(Sembol,"G") fonksiyonuyla, F_XXXXXXXXX kodunun verilerini okutup hesaplama veya formüllerinizde kullanabilirsiniz. Grafiğe uygulamanız gerekmez. (Doğrudan grafiğe uygulayacaksanız (sembol, g) ifadelerine gerek yoktur.)

http://i.hizliresim.com/n5mZX0.png (http://hizliresim.com/n5mZX0)



yine de vade geçişlerinde işe yarayabilir,
kullanmak isteyen olursa:

AKTİF VADELER AÇIK POZ SAYILARI TOPLAMI

güncel paramatreler:
-VIP'F_XU0301214S0
-VIP'F_XU0300215S0
-VIP'F_XU0300415S0



var vade1_sembol = Sistem.Parametreler[0];
var vade2_sembol = Sistem.Parametreler[1];
var vade3_sembol = Sistem.Parametreler[2];

var GrafiktenGelen = Sistem.GrafikVerileri;
// vadeler, hizasız
var graf1 = Sistem.GrafikVerileriniOku(vade1_sembol, "G");
var graf2 = Sistem.GrafikVerileriniOku(vade2_sembol, "G");
var graf3 = Sistem.GrafikVerileriniOku(vade3_sembol, "G");

// hizala
var vade1 = Sistem.GrafikVerilerindeTarihHizala(GrafiktenGelen , graf1);
var vade2 = Sistem.GrafikVerilerindeTarihHizala(GrafiktenGelen , graf2);
var vade3 = Sistem.GrafikVerilerindeTarihHizala(GrafiktenGelen , graf3);

var apoz = Sistem.Liste(0);
for (int i = 0; i < GrafiktenGelen.Count; i++)
{
apoz[i] = vade1[i].Opint + vade2[i].Opint + vade3[i].Opint;
}

Sistem.Cizgiler[0].Deger = apoz;




sn will


güniçinde grafik üzerinde takip ettiğim yazdığım bişey vardı

http://badgs.webege.com/2014/12/20141225231947.png



2 sinin ortasını bulup düzenlemek gerekiyor.

http://badgs.webege.com/2014/12/20141225233538.png

sizdeki kodla sadece günlük grafikte izlenebiliyor

5-15-30-60 vb grafiklerde işlevsiz.

geçmişe dönük grafikte her periyotta izlemek için
sembol olarak APS ler toplamını yeni 1 kod üreterek/kayıt yaptırarak denemek lazım.

idealtradeden ilk APS istediğimizde örnek gelen yazılım kodu aşağıda

http://badgs.webege.com/2014/12/20141225232949.png


vadelerin APS lerini birleştirmek için uğraştım bu gece ama aldığım sonuç başarısız. :(

çok fırın ekmek yemem lazım.

****************************


Herhangi bir vadenin Açık Pozisyon Sayısını, kendi tanımladığınız bir KOD olarak sayfanızda takip edebiliyor olabilme imkanını kullanarak, tüm vadelerin açık pozisyon sayıları toplamını da bu kendi tanımladığınız bu kodda gösterebilirsiniz.

Sistem.SembolTanimla = programa içeriği sizin tarafınızdan belirlenen yeni bir sembol eklemek için
Sistem.YuzeyselGuncelle = kendi formülünüzle oluşturduğunuz sembole ait verinin sürekli güncellenmesi (saniyede bir) için
Sistem.GrafikGuncelle = Tanımladığınız kodun güncellenen verilerinin grafiğinin de çizdirilmesi ve tarihsel olarak verinin saklanması (her saniye aynı veriyi atar veri değişmediği zaman ve kodu yarattığınız andan itibaren data tutulmaya başlanır) için kullanılır.

Kullanıcı sembol sistemini kullanarak, kendinize özel döviz sepetleri veya özel endeksler tanımlayabilir ve anlık takip edebilirsiniz.

http://i.hizliresim.com/4ZbkWQ.png (http://hizliresim.com/4ZbkWQ)




harika. teşekkürler Sezai bey,

o zaman bu kaydedilen veriyi de VIOP grafiğine indikatör olarak ekleyebiliriz:



var sembol = "DFN'POZTOPLAM";
//var veriler = Sistem.YuzeyselVeriOku(sembol);
var graf1 = Sistem.GrafikVerileriniOku(sembol, Sistem.Periyot);

var GrafiktenGelen = Sistem.GrafikVerileri;
// hizala
var apoz = Sistem.GrafikVerilerindeTarihHizala(GrafiktenGelen , graf1);

var liste = Sistem.Liste(0);
for (int i = 0; i < GrafiktenGelen.Count; i++)
{
liste[i] = apoz[i].Close;
}

Sistem.Cizgiler[0].Deger = liste;


1-5-10-15 vs grafiklerde bende çalışıyor gözüküyor , veri biriktikçe saatlikte vs. de çalışır.
kod daha düzgün yazılabilir,
liste[i] = apoz[i].Close;
gerek var mı emin değilim,
Sistem.Cizgiler[0].Deger = apoz
yazınca List<cxbar> , List<float> uyumsuzluğu hatası veriyor.

iDealTrade
28-12-2014, 17:00
bir hissenin fiyatının belirleyeceğim bir değere geldiğinde satılmasını istersem "bilgisayarı açık bırakarak" ne yapmam gerekir? Teşekkürler.

Aşağıdaki Robot kodu örneği, EREGL fiyatı 4,30'u görür veya altına inerse ALIŞ,
4.50'yi görür veya üstüne çıkarsa SATIŞ yapan bir robot örneğidir;



var Sembol = "IMKBH'EREGL";
var SembolDeger = Sistem.SonFiyat(Sembol);
var Pozisyon = Sistem.PozisyonKontrolOku(Sembol);
var Islem = "";
var Miktar = 1;

if (SembolDeger <= 4.30)
{
if (Pozisyon == 0)
Islem = "ALIS";
}

if (SembolDeger >= 4.50)
{
if (Pozisyon > 0)
Islem = "SATIS";
}

// emri gönder
if (Islem != "")
{
if (Islem == "ALIS")
Sistem.PozisyonKontrolGuncelle(Sembol, Pozisyon+Miktar);
else if (Islem == "SATIS")
Sistem.PozisyonKontrolGuncelle(Sembol, Pozisyon-Miktar);

Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = Islem;
Sistem.EmirMiktari = Miktar;
Sistem.EmirSuresi = "GUN"; // GUN, SNS, IKG
Sistem.EmirTipi = "KPY"; // KPY, KIE, GIE, SAR
Sistem.EmirFiyatTipi = "PYS"; // PYS, LMT, EIF, KAP
Sistem.EmirGonder();
}




derdim aşağı inişte bir stop los noktasında satılmasıydı alışların bilgisini iptal etsem olur dimi? Bide ekran sürekli açık portföy ekranı açıkmı olmalıydı bilemediğim başka durumlar nelerdir teşekkür ederim ilgi için

Bu sadece bir örnek, tek taraflı bir AL yada SAT olarak kullanabilir, koşulun diğer tarafını kaldırabilirsiniz.
iDeal de Robotun çalışması için, iDeal'in açık (bağlı) olması ve Robotun çalıştırılmış olması yeterli.
Ne grafik, ne portföy penceresinin ekranda açık durumda olmasına gerek yoktur.

anonimm
29-12-2014, 15:05
Trend Quality Indicator
http://www.metastock.com/Customer/Resources/TASC/Article.aspx?Id=61






var m = 4 ; // 1-25 aralığında
var n = 250 ; // 1-500 aralığında
var cf = 2 ; // 1-250 aralığında
var p1 = 7 ; // 1-200 aralığında
var p2 = 15 ; // 1-200 aralığında

var V = Sistem.GrafikVerileri ;

var C = Sistem.GrafikFiyatOku(V, "Kapanis") ;


var MA1 = Sistem.MA( C, "Exp", p1 ) ;
var MA2 = Sistem.MA( C, "Exp", p2 ) ;
var dc = Sistem.PriceRocPoint( V, 1) ;


var rev = Sistem.Liste(V.Count, 0);
var pds = Sistem.Liste(V.Count, 0);
var cpc = Sistem.Liste(V.Count, 0);
var trend = Sistem.Liste(V.Count, 0);
var dt = Sistem.Liste(V.Count, 0);
var noise = Sistem.Liste(V.Count, 0);
var x = Sistem.Liste(V.Count, 0);
var dt2 = Sistem.Liste(V.Count, 0);
var x1 = Sistem.Liste(V.Count, 0);
var temp = Sistem.Liste(V.Count, 0);
var x2 = Sistem.Liste(V.Count, 0);

for (int i = 1; i < V.Count; i++)
{
rev[i] = ( MA1[i] - MA2[i]) ;
if ( rev[i] > 0 ) pds[i] = 1 ; else pds[i] = -1 ;
if ( pds[i] != pds[i-1] ) cpc[i] = 0 ; else cpc[i] = (dc[i] * pds[i] + cpc[i-1]) ;
if ( pds[i] != pds[i-1] ) trend[i] = 0 ; else trend[i] = (cpc[i] * 1/ m + trend[i-1] * ( 1 - 1/ m)) ;
dt[i] = (cpc[i] - trend[i]) ;
dt2[i] = (dt[i] * dt[i]) ;
}

var MA3 = Sistem.MA( dt2, "Simple", n ) ;

for (int i = 1; i < V.Count; i++)
{
x[i] = (float) Math.Sqrt(MA2[i]) ;
noise[i] = (cf*x[i]) ;
if ( ( (float) Math.Abs( trend[i] ) + (float) Math.Abs( noise[i] ) ) == 0 ) temp[i] = 1 ; else temp[i] = (float) Math.Abs(trend[i]) + (float) Math.Abs(noise[i]) ;
x1[i] = (trend[i]/noise[i]) ;
x2[i] = (float) Math.Abs( trend[i] / temp[i] ) * 100 ;

}
Sistem.Cizgiler[0].Deger = x1 ;
Sistem.Cizgiler[1].Deger = x2 ;





http://i.hizliresim.com/mr6ZWR.png (http://hizliresim.com/mr6ZWR)

Sezai KILIÇ
30-12-2014, 16:33
arkadaşlar burada paylaşılanları; sistem tanımları içerisinde yer alan sol alttaki geniş bölüme kopyalayıp, devamında sol üstten sistem adı verip, kaydet demek yeterli midir?

Merhabalar,
İlave olarak, Eğer kodda Çizgi kullanılmışsa (Sistem.Cizgiler) kullanılan sayı kadar çizgiyi aktif etmek, panel numaralarını ve renklerini de girmek gerekir.
Sisteme isim verirken, ismin rakamla başlamaması ve "-" (tire) işareti içermemesi gerektiğini de hatırlatırım.

http://i.hizliresim.com/8919Er.png (http://hizliresim.com/8919Er)

thebaboli
30-12-2014, 23:44
İyi akşamlar tekrar, kusura bakmayın zamanınızı alacağım biraz, arada bilmediğim bir fark mı var ? Artışlarda ilaveten küsürat gibi birşey olabilir mi

http://i.imgur.com/aB2mMRB.png

http://i.imgur.com/lcjhHjV.png




float sayı tipi 4 byte içinde tutulur..
bu sayı tiplerinde aritmetik işlemler sonrasında 7.ondalık basamaktan küçük basamaklarda hassasiyet bozulur..
resimde yuvarlak içindeki sayıya bakın..
0.05 değil 0.05000019..
dolayısyla eşit şartı sağlanmıyor..


http://i.hizliresim.com/12vz8N.png (http://hizliresim.com/12vz8N)




CÖZÜM 1
sayıyı 16 byte içinde depolanan decimal tipine çevirin..
hassasiyet neredeyse sonsuzdur..


http://i.hizliresim.com/bgDnj0.png (http://hizliresim.com/bgDnj0)




CÖZÜM 2
Math.Round() fonksiyonu ile sayıdaki ondalık basamağı yuvarlayın..
örnekte ben noktadan sonra 6 basamaka yuvarlamayı kullandım..


var C = Sistem.GrafikFiyatSec("Kapanis");
var a = Sistem.Liste(0);


for (int i=2; i<Sistem.BarSayisi; i++)
{
var fark = C[i]-C[i-1];
if (Math.Round(fark , 6) == 0.05)
a[i] = fark;
}
Sistem.Cizgiler[0].Deger = a;

***************************

anonimm
31-12-2014, 10:18
SARSI (Self-Adjusting RSI) or Dynamic RSI

David Sepiashvilis article, The Self-Adjusting RSI, describes two methods
of adjusting the width of the overbought and oversold bands for the RSI. This
formula will prompt for the length of the RSI, the constants used to calculate the bands, and the method to calculate the bands.




var V = Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V, "Kapanis" ) ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek" ) ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk" ) ;

var x= 14 ;// 1 -2000 aralığında
var k1 = 1.8f ; // 0.1 - 5 aralığında

var c1 = 2.0f ; // 0.1 - 5 aralığında
var m1 = 2 ; // 1=SD 2=SMA

var RSI = Sistem.RSI( V, x ) ;
var Stdev = Sistem.StDev( RSI , x) ;
var M1 = Sistem.MA( RSI, "Simple", x ) ;
var top = Sistem.Liste(V.Count, 0) ;
var bottom = Sistem.Liste(V.Count, 0) ;
var yy = Sistem.Liste(V.Count, 0) ;

for (int i = 1; i < V.Count; i++)
{
yy[i] = (float) Math.Abs( RSI[i] - M1[i] ) ;
}


var M2 = Sistem.MA( yy, "Simple", x ) ;

for (int i = 1; i < V.Count; i++)
{
if ( m1 == 1 ) top[i] = 50 + k1*Stdev[i] ; else top[i] = 50 + c1 * M2[i] ;
if ( m1 == 1 ) bottom[i] = 50 - k1*Stdev[i] ; else bottom[i] = 50 - c1 * M2[i] ;
}


Sistem.Cizgiler[0].Deger = top ; //panel 2
Sistem.Cizgiler[1].Deger = bottom ; // panel 2
Sistem.Cizgiler[2].Deger = RSI ; // panel 2

var SonYon = "";
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if ( RSI[i] > top[i] &&
SonYon != "A" )
{
Sistem.Yon[i] = "A";
SonYon = Sistem.Yon[i] ;
}

if ( RSI[i] < bottom[i] &&
SonYon != "S" )


{
Sistem.Yon[i] = "S";
SonYon = Sistem.Yon[i] ;
}

}

anonimm
31-12-2014, 11:16
1 minute system with Trend Quality Indicator

Son iki aylıktaki performansı net yaklaşık 4000 puan/ay. 6 aylık backtestindeki sonuçlar nasıldır acaba .




var m = 4 ; // 1-25 aralığında
var n = 250 ; // 1-500 aralığında
var cf = 2 ; // 1-250 aralığında
var p1 = 7 ; // 1-200 aralığında
var p2 = 15 ; // 1-200 aralığında

var V = Sistem.GrafikVerileri ;

var C = Sistem.GrafikFiyatOku(V, "Kapanis") ;


var MA1 = Sistem.MA( C, "Exp", p1 ) ;
var MA2 = Sistem.MA( C, "Exp", p2 ) ;
var dc = Sistem.PriceRocPoint( V, 1) ;


var rev = Sistem.Liste(V.Count, 0);
var pds = Sistem.Liste(V.Count, 0);
var cpc = Sistem.Liste(V.Count, 0);
var trend = Sistem.Liste(V.Count, 0);
var dt = Sistem.Liste(V.Count, 0);
var noise = Sistem.Liste(V.Count, 0);
var x = Sistem.Liste(V.Count, 0);
var dt2 = Sistem.Liste(V.Count, 0);
var x1 = Sistem.Liste(V.Count, 0);
var temp = Sistem.Liste(V.Count, 0);

for (int i = 1; i < V.Count; i++)
{
rev[i] = ( MA1[i] - MA2[i]) ;
if ( rev[i] > 0 ) pds[i] = 1 ; else pds[i] = -1 ;
if ( pds[i] != pds[i-1] ) cpc[i] = 0 ; else cpc[i] = (dc[i] * pds[i] + cpc[i-1]) ;
if ( pds[i] != pds[i-1] ) trend[i] = 0 ; else trend[i] = (cpc[i] * 1/ m + trend[i-1] * ( 1 - 1/ m)) ;
dt[i] = (cpc[i] - trend[i]) ;
dt2[i] = (dt[i] * dt[i]) ;
}

var fark1 = Sistem.Liste(V.Count, 0);
var fark2 = Sistem.Liste(V.Count, 0);
var fark3 = Sistem.Liste(V.Count, 0);

var MA3 = Sistem.MA( dt2, "Simple", n ) ;

for (int i = 1; i < V.Count; i++)
{
x[i] = (float) Math.Sqrt(MA2[i]) ;
noise[i] = (cf*x[i]) ;
if ( ( (float) Math.Abs( trend[i] ) + (float) Math.Abs( noise[i] ) ) == 0 ) temp[i] = 1 ; else temp[i] = (float) Math.Abs(trend[i]) + (float) Math.Abs(noise[i]) ;
x1[i] = (float) Math.Abs( trend[i] / temp[i] ) * 100 ;

}
Sistem.Cizgiler[0].Deger = x1 ;

for (int i = 3; i < V.Count; i++)
{
fark1[i] = x1[i] - x1[i-1] ;
fark2[i] = x1[i] - x1[i-2] ;
fark3[i] = x1[i] - x1[i-3] ;
}

var fark = -35 ;
var SonYon = "";
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if ( fark2[i] > fark &&
SonYon != "A" )
{
Sistem.Yon[i] = "A";
SonYon = Sistem.Yon[i] ;
}

if ( fark2[i] < fark &&
SonYon != "S" )


{
Sistem.Yon[i] = "S";
SonYon = Sistem.Yon[i] ;
}

}

thebaboli
31-12-2014, 12:03
Trend Score
BilancoFK
BilancoNetKar
BilancoOzSerömaye
BilancoOdenmişSermaye
BilancoPiyasaDegeri
BilancoPD/DD

indikatörleri iDeal yeni versiyonda indikatörler listesine eklenmiştir.
Bilanço kalemleri indikatörleri Gün İçi grafik periyotlarında da çizdirilebilir.
NetKar indikatörü, şirketin son 4 çeyrek net kar bilgisini vermektedir.

Yeni versiyonu aşağıdaki adresten alabilirsiniz. (eski tarihli bilanço verilerinizi Bilanço penceresinde ilgili dönemleri ekranda açıp Güncelle diyerek tamamlayabilirsiniz.)
www.directfn.com.tr/terminal/ideal.exe

http://i.hizliresim.com/2YZJ90.png (http://hizliresim.com/2YZJ90)

http://i.hizliresim.com/Rb3nOG.png (http://hizliresim.com/Rb3nOG)


Yerli Yabancı Saklama Oranlarının Grafik üzerine indikatör olarak eklenip izlenilmesi
Ayrıca bu sistem Grafik Verilerini Hizala Metodunada örnek olarakda kullanılabilir.

buyrun

http://i.hizliresim.com/l01Oqb.png (http://hizliresim.com/l01Oqb)



var Sembol="DFN'TKSYBN";
var Sembol2="DFN'TKSYRL";
var YbVeriler = Sistem.GrafikVerileriniOku(Sembol, "G");
var YrlVeriler = Sistem.GrafikVerileriniOku(Sembol2, "G");
var Veriler = Sistem.GrafikVerileriniOku(Sistem.Sembol,Sistem.Pe riyot);
var YbCizgi = Sistem.Liste(Veriler.Count,0);
var YrlCizgi = Sistem.Liste(Veriler.Count,0);
YbVeriler=Sistem.GrafikVerilerindeTarihHizala(Veri ler,YbVeriler);
YrlVeriler=Sistem.GrafikVerilerindeTarihHizala(Ver iler,YrlVeriler);
for (int i=0;i<Veriler.Count;i++)
YbCizgi[i]=YbVeriler[i].Close;

for (int i=0;i<Veriler.Count;i++)
YrlCizgi[i]=YrlVeriler[i].Close;

Sistem.Cizgiler[0].Deger=YbCizgi;
Sistem.Cizgiler[1].Deger=YrlCizgi;


http://i.hizliresim.com/bgbBvd.png (http://hizliresim.com/bgbBvd)

**********************

thebaboli
31-12-2014, 12:07
baboli modum; diğer tarafta verdiğin cevabı yaptım yine olmadı. :notr:

bir de arkadaşlar elimde MA için optimizasyon var.

bunu mosta nasıl çevirebilirim.

veya most için elinde optimizasyonu olan var mıdır?


http://i.hizliresim.com/A0J1bv.png (http://hizliresim.com/A0J1bv)



var Veriler = Sistem.GrafikFiyatSec("Kapanis");

for (int Periyot = 3; Periyot < 33; Periyot++)
{
var EMA = Sistem.MA(Veriler, "Exp", Periyot);
for (int Yuzde = 2; Yuzde < 20; Yuzde ++)
{
var TOMA = Sistem.TOMA(Periyot, Yuzde);
Sistem.KesismeTara(EMA, TOMA);
Sistem.Optimizasyon("EMATOMA", Periyot, Yuzde);
}
}





arkadaşlar bir de optimizasyon sonucu ile performans sonucu niye farklı çıkar?

optimizasyonda misal 20 dakikalık periyotta 6/49 ortalamaların sonucu ile MA sistem performans sonuçları epey farklı.



Sayın MesutK
Optimizasyon kodunuzun içinde, Sinyal noktalarını hesaplattığınız kısmın hemen üstüne aşağıdaki kod parçasını ekleyerek Sistem.YÖN dizisini temizletin.



for (int i = 1; i < Veriler.Count; i++)
Sistem.Yon[i] = "";


Kolay gelsin



Sezai bey cevap için teşekkürler.

bende ki mevcut budur.
işin epey de acemisiyim.
aşağıdan neyi değiştirmem lazım acaba?

// kapanış fiyatlarını oku
var Kapanis = Sistem.GrafikFiyatSec("Kapanis");

// hareketli ortalamaları hesapla
for (int KucukPeriyot = 5; KucukPeriyot < 20; KucukPeriyot++)
{
for (int BuyukPeriyot = 20; BuyukPeriyot < 60; BuyukPeriyot ++)
{
for (int i = 1; i < Kapanis.Count; i++)
Sistem.Yon[i] = "";
if (KucukPeriyot < BuyukPeriyot)
{
var MA1 = Sistem.MA(Kapanis, "Exp", KucukPeriyot);
var MA2 = Sistem.MA(Kapanis, "Exp", BuyukPeriyot);
Sistem.KesismeTara(MA1, MA2);
Sistem.Optimizasyon("MA", KucukPeriyot, BuyukPeriyot);
}
}
}

Merhaba sadece kırmızı ile yazdığım kısmı ekledim
Kolay gelsin


http://i.hizliresim.com/6lnJz9.png (http://hizliresim.com/6lnJz9)

*****************************

Sezai KILIÇ
02-01-2015, 00:55
Bende bugun itibari ile ideal ile tanıştım. tabi biraz zor geldi bana da yıllardır metastock kullanan biri olarrak haliyle sistem bir ricam olacak ben bir onceki barın HHV(40) i gectiginde vebu barın en yukseginin 300 üzerinde oldugu zaman al. bir onceki barın LLV(40) i aşağı kırdıgında ve bu barın en düşügünün 300 altında oldugu zaman sat olacak sekilde bir sistem düşünüyorum. ve grafigin üzerinde de al sat şeklinde olsun istiyorum. ne yapmam gerekir

Merhabalar
Anlatmak istediğinizi doğru mu anladım bilemedim;
SON BAR > ÖNCEKİ BARIN HHV40'I VE SON BAR >= (ÖNCEKİ BARIN YÜKSEĞİ + 300) ise AL
SON BAR < ÖNCEKİ BARIN LLV40'I VE SON BAR <= (ÖNCEKİ BARIN DÜŞÜĞÜ - 300) ise SAT

Eğer bahsettiğiniz strateji yukarıdaki ise iDeal Kodu ve VIP-X030 grafiği üzerindeki görüntüsü aşağıdaki gibidir.

Kolay gelsin,

http://i.hizliresim.com/99Gq25.png (http://hizliresim.com/99Gq25)



var C = Sistem.GrafikFiyatSec("Kapanis");
var Y = Sistem.GrafikFiyatSec("Yuksek");
var D = Sistem.GrafikFiyatSec("Dusuk");
var HHV = Sistem.HHV(40, "Yuksek");
var LLV = Sistem.LLV(40, "Dusuk");
var SonYon="";

Sistem.Cizgiler[0].Deger = HHV;
Sistem.Cizgiler[1].Deger = LLV;

// strateji
for (int i = 1; i<Sistem.BarSayisi; i++)
{
if (C[i] >= HHV[i-1] && (C[i]>= Y[i-1]+0.300f) && SonYon!="A")
{
Sistem.Yon[i] = "A"; // alış
SonYon="A";
}
else if (C[i] < LLV[i-1] && (C[i] <= D[i-1]-0.300f) && SonYon!="S")
{
Sistem.Yon[i] = "S"; // alış
SonYon="S";
}
}

Sezai KILIÇ
02-01-2015, 01:25
Yukarıdaki sistem için Optimizasyon kodu ve Optimizasyon/SistemPerformans sonuçlarına ait görüntü aşağıdaki gibidir.
VİP-X030 kodu için 60 Dk periyodunda sistemin Periyot=30 için, 5000 barda getirisi 72.450 puan.

http://i.hizliresim.com/8982pn.png (http://hizliresim.com/8982pn)

Optimizasyon Kodu:


var C = Sistem.GrafikFiyatSec("Kapanis");
var Y = Sistem.GrafikFiyatSec("Yuksek");
var D = Sistem.GrafikFiyatSec("Dusuk");
var SonYon="";

for (int periyot = 20; periyot<50; periyot++)
{
var HHV = Sistem.HHV(periyot, "Yuksek");
var LLV = Sistem.LLV(periyot, "Dusuk");

for (int i=1; i<Sistem.BarSayisi; i++)
Sistem.Yon[i]="";

for(int i=1; i<Sistem.BarSayisi; i++)
{
if (C[i] >= HHV[i-1] && (C[i]>= Y[i-1]+0.300f) && SonYon!="A")
{
Sistem.Yon[i] = "A"; // alış
SonYon="A";
}
else if (C[i] < LLV[i-1] && (C[i] <= D[i-1]-0.300f) && SonYon!="S")
{
Sistem.Yon[i] = "S"; // alış
SonYon="S";
}
}
Sistem.Optimizasyon(periyot,"Periyot");
}



Sezai bey aynı kodda 300 puan yerine %sel bir değer kullanabilirmiydik. 100.000 için binde 3 = 300 puan yani %0.3 gibi bir değer vererek ve bu değeri optimize edecek şekilde kullanabilirmiyiz?

Bu mesaj işi bitince silinecektir.


a > b+300 yerine
a > b * 1.03 demeniz yeter sanırım.



Onu bir değişken olarak tanımlayıp o değeri optimize edebilirmiyiz diye sormuştum. Dediğiniz gibi 1.03 ile çarpmak yeterli ama bu değeri optimize etmek istesek nasıl yaparız? 1.01 - 1.20 arası 0.01 adım arttırarak gibi.



Sayın thebaboli,

FOR döngüsü içinde (for int=1; .... i++) formatı, integer (TAMSAYI) i değişkenini 1'er arttırarak döngüdeki işi yap demek. (for int i=1; i<BarSayısı; i+=5) 5'er 5'er arttır demek mesela..

Bunun yerine mesela
for(float i=0.1; i<10; i+=0.1) kullanabilirsiniz.
0.1'den başlar ve 0.1 adımlarla arttırarak 10'a kadar gider.

anonimm
02-01-2015, 20:49
trendscore system - 60 minutes

http://i.hizliresim.com/vQZlED.png (http://hizliresim.com/vQZlED)



var V = Sistem.GrafikVerileri ;


var TS1 = Sistem.TrendScore(V, 22 ) ;

var a = 20 ;


var SonYon = "";
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if ( TS1[i] > a &&
SonYon != "A" )
{
Sistem.Yon[i] = "A";
SonYon = Sistem.Yon[i] ;
}

if ( TS1[i] < -a &&
SonYon != "S" )


{
Sistem.Yon[i] = "S";
SonYon = Sistem.Yon[i] ;
}

}

anonimm
03-01-2015, 22:45
Heikin ashi TEMA average crossing system - 240 minutes
http://stocata.org/metastock/ha_tema.html

http://i.hizliresim.com/Q4vZ0k.png (http://hizliresim.com/Q4vZ0k)




var V = Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V, "Kapanis" ) ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek" ) ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk" ) ;
var O = Sistem.GrafikFiyatOku(V, "Acilis" ) ;


var avg = 53 ; // 1 -200

var hao = Sistem.Liste(V.Count, 0) ;
var hac = Sistem.Liste(V.Count, 0) ;
var max = Sistem.Liste(V.Count, 0) ;
var min = Sistem.Liste(V.Count, 0) ;
var diff1 = Sistem.Liste(V.Count, 0) ;
var diff2 = Sistem.Liste(V.Count, 0) ;
var x1 = Sistem.Liste(V.Count, 0) ;
var x2 = Sistem.Liste(V.Count, 0) ;
var x = Sistem.Liste(V.Count, 0) ;
var tipik = Sistem.Liste(V.Count, 0) ;

for (int i = 1; i < V.Count; i++)
{
x[i] = ( H[i] + L[i] + O[i] + C[i] ) / 4 ;
tipik[i] = ( H[i] + L[i] + C[i] ) / 3 ;
hao[i] = ( x[i-1] + hao[i-1] ) / 2 ;

if( H[i] > hao[i] ) max[i] = H[i] ; else max[i] = hao[i] ;
if( L[i] < hao[i] ) min[i] = L[i] ; else min[i] = hao[i] ;

hac[i] = ( x[i] + hao[i] + max[i] + min[i] ) / 4 ;

}

var M11 = Sistem.MA(hac, "Exp", avg) ; var M12 = Sistem.MA(M11, "Exp", avg) ; var M13 = Sistem.MA(M12, "Exp", avg) ;


var tema1 = Sistem.Liste(V.Count, 0) ;
var tema2 = Sistem.Liste(V.Count, 0) ;
var tema3 = Sistem.Liste(V.Count, 0) ;
var tema4 = Sistem.Liste(V.Count, 0) ;

for (int i = 1; i < V.Count; i++)
{
tema1[i] = 3 * M11[i] - 3 * M12[i] + M13[i] ;
}

var M21 = Sistem.MA(tema1, "Exp", avg) ; var M22 = Sistem.MA(M21, "Exp", avg) ; var M23 = Sistem.MA(M22, "Exp", avg) ;

for (int i = 1; i < V.Count; i++)
{
tema2[i] = 3 * M21[i] - 3 * M22[i] + M23[i] ;
}

var M31 = Sistem.MA(tipik, "Exp", avg) ; var M32 = Sistem.MA(M31, "Exp", avg) ; var M33 = Sistem.MA(M32, "Exp", avg) ;

for (int i = 1; i < V.Count; i++)
{
tema3[i] = 3 * M31[i] - 3 * M32[i] + M33[i] ;
}

var M41 = Sistem.MA(tema3, "Exp", avg) ; var M42 = Sistem.MA(M41, "Exp", avg) ; var M43 = Sistem.MA(M42, "Exp", avg) ;

for (int i = 1; i < V.Count; i++)
{
tema4[i] = 3 * M41[i] - 3 * M42[i] + M43[i] ;

diff1[i] = tema1[i] - tema2[i] ;
diff2[i] = tema3[i] - tema4[i] ;
x1[i] = tema1[i] + diff1[i] ;
x2[i] = tema3[i] + diff2[i] ;

}


Sistem.Cizgiler[0].Deger = x1 ; //panel 1
Sistem.Cizgiler[1].Deger = x2 ; // panel 1


var SonYon = "";
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if ( x2[i] > x1[i] &&
SonYon != "A" )
{
Sistem.Yon[i] = "A";
SonYon = Sistem.Yon[i] ;
}

if ( x2[i] < x1[i] &&
SonYon != "S" )
{
Sistem.Yon[i] = "S";
SonYon = Sistem.Yon[i] ;
}

}

iDealTrade
03-01-2015, 23:40
Sayın idealtrade,
tema'yı liste halinde doğrudan hesaplatamadım. Sistem.TEMA(Liste, period) gibi bir fonksiyon yok sanırım.

arkadaşlar,
soruları diğer bölümde sorabilirmiyiz..
bu bölümün moderatörü sayın thebaboli beyefendi buraya sadece finalize olmuş formullerin konmasını amaçlıyor..
açıkçası ben de bu bölüme çok az giriyorum..

teşekkürler

anonimm
04-01-2015, 17:15
Trend Intensity Index System - 240 minutes

http://www.traders.com/documentation/FEEDbk_docs/2002/06/TradersTips/TradersTips.html#meta1

http://i.hizliresim.com/7V7Zbl.png (http://hizliresim.com/7V7Zbl)





var V = Sistem.GrafikVerileri ;

var C = Sistem.GrafikFiyatOku(V, "Kapanis") ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek") ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk") ;



var p1 = 2 ;
var p2 = 2 * p1 ;
var a2= 95 ;
var a3 = 3 ;

var MA = Sistem.MA( C, "Wilder", p2 ) ;


var x1 = Sistem.Liste(V.Count, 0);
var x2 = Sistem.Liste(V.Count, 0);

for (int i = 1; i < V.Count; i++)
{

if ( ( C[i] - MA[i] ) > 0 ) x1[i] = C[i] - MA[i] ; else x1[i] = 0 ;
if ( ( -C[i] + MA[i] ) > 0 ) x2[i] = -C[i] + MA[i] ; else x2[i] = 0 ;
}

var sdp = Sistem.Sum( x1,p1) ;
var sdm = Sistem.Sum( x2,p1) ;

var tii= Sistem.Liste(V.Count, 0);

for (int i = 1; i < V.Count; i++)
{

tii[i] = ( sdp[i] / ( sdp[i] + sdm[i] )) * 100 ;
}

Sistem.Cizgiler[0].Deger = tii ;


var SonYon = "";
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if ( tii[i] > a2 &&
SonYon != "A" )
{
Sistem.Yon[i] = "A";
SonYon = Sistem.Yon[i] ;
}

if ( tii[i] < a3 &&
SonYon != "S" )


{
Sistem.Yon[i] = "S";
SonYon = Sistem.Yon[i] ;
}

}

thebaboli
09-01-2015, 17:33
Günlük K/Z Dilimleme




var Veriler = Sistem.GrafikVerileri;
var MA1 = Sistem.MA(10, "Exp", "Kapanis");
var MA2 = Sistem.MA(50, "Exp", "Kapanis");

var IslemMiktari = Sistem.Liste(0);
var Pozisyon = Sistem.Liste(0);
var KarZarar = Sistem.Liste(0);

float SonPozisyon = 0;
float SonFiyat = 0;
float ToplamKarZarar = 0;


for (int i = 1; i < Sistem.BarSayisi; i++)
{
// AL
if (MA1[i-1]< MA2[i-1] && MA1[i]>= MA2[i] && SonPozisyon <= 0)
{
if (SonPozisyon == 0)
{
IslemMiktari[i] = 1;
SonFiyat = Veriler[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
else if (SonPozisyon < 0)
{
IslemMiktari[i] = 2;
SonFiyat = Veriler[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
Sistem.Yon[i] = "A";
}

// SAT
else if (MA1[i-1]> MA2[i-1] && MA1[i]<= MA2[i] && SonPozisyon >= 0)
{
if (SonPozisyon == 0)
{
IslemMiktari[i] = -1;
SonFiyat = Veriler[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
else if (SonPozisyon > 0)
{
IslemMiktari[i] = -2;
SonFiyat = Veriler[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
Sistem.Yon[i] = "S";
}
Pozisyon[i] = SonPozisyon;
KarZarar[i] = ToplamKarZarar + Veriler[i].Close * Pozisyon[i];
}

var KarZararAy = Sistem.Liste(0);
float KarZarar1 = 0;
int BarNo1 = 1;
float Fark = 0;
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if (Veriler[i].Date.Day != Veriler[i-1].Date.Day)
{
Fark = KarZarar[i-1] - KarZarar1;
for (int j = BarNo1; j < i; j++)
KarZararAy[j] = Fark;
KarZarar1 = KarZarar[i-1];
BarNo1 = i;
}
if (i == Sistem.BarSayisi-1)
{
Fark = KarZarar[i] - KarZarar1;
for (int j = BarNo1; j < Sistem.BarSayisi; j++)
KarZararAy[j] = Fark;
}
}
var KarList = Sistem.Liste(0);
var ZararList = Sistem.Liste(0);
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if (KarZararAy[i] > 0)
KarList[i] = KarZararAy[i];
else if (KarZararAy[i] < 0)
ZararList[i] = KarZararAy[i];
}


Sistem.Cizgiler[0].Deger = KarZarar;
Sistem.Cizgiler[1].Deger = KarList; Sistem.Cizgiler[1].Renk = Sistem.Renk(150, 0, 255, 0);
Sistem.Cizgiler[2].Deger = ZararList; Sistem.Cizgiler[2].Renk = Sistem.Renk(150, 255, 0, 0);
Sistem.Cizgiler[3].Deger = KarZararAy;
Sistem.Cizgiler[4].Deger = Sistem.Liste(0);
















Haftalık K/Z Diimleme




var Veriler = Sistem.GrafikVerileri;
var MA1 = Sistem.MA(10, "Exp", "Kapanis");
var MA2 = Sistem.MA(50, "Exp", "Kapanis");

var IslemMiktari = Sistem.Liste(0);
var Pozisyon = Sistem.Liste(0);
var KarZarar = Sistem.Liste(0);

float SonPozisyon = 0;
float SonFiyat = 0;
float ToplamKarZarar = 0;


for (int i = 1; i < Sistem.BarSayisi; i++)
{
// AL
if (MA1[i-1]< MA2[i-1] && MA1[i]>= MA2[i] && SonPozisyon <= 0)
{
if (SonPozisyon == 0)
{
IslemMiktari[i] = 1;
SonFiyat = Veriler[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
else if (SonPozisyon < 0)
{
IslemMiktari[i] = 2;
SonFiyat = Veriler[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
Sistem.Yon[i] = "A";
}

// SAT
else if (MA1[i-1]> MA2[i-1] && MA1[i]<= MA2[i] && SonPozisyon >= 0)
{
if (SonPozisyon == 0)
{
IslemMiktari[i] = -1;
SonFiyat = Veriler[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
else if (SonPozisyon > 0)
{
IslemMiktari[i] = -2;
SonFiyat = Veriler[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
Sistem.Yon[i] = "S";
}
Pozisyon[i] = SonPozisyon;
KarZarar[i] = ToplamKarZarar + Veriler[i].Close * Pozisyon[i];
}

var KarZararAy = Sistem.Liste(0);
float KarZarar1 = 0;
int BarNo1 = 1;
float Fark = 0;
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if (Veriler[i].Date.DayOfWeek == DayOfWeek.Monday && Veriler[i-1].Date.DayOfWeek != DayOfWeek.Monday)
{
Fark = KarZarar[i-1] - KarZarar1;
for (int j = BarNo1; j < i; j++)
KarZararAy[j] = Fark;
KarZarar1 = KarZarar[i-1];
BarNo1 = i;
}
if (i == Sistem.BarSayisi-1)
{
Fark = KarZarar[i] - KarZarar1;
for (int j = BarNo1; j < Sistem.BarSayisi; j++)
KarZararAy[j] = Fark;
}
}
var KarList = Sistem.Liste(0);
var ZararList = Sistem.Liste(0);
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if (KarZararAy[i] > 0)
KarList[i] = KarZararAy[i];
else if (KarZararAy[i] < 0)
ZararList[i] = KarZararAy[i];
}


Sistem.Cizgiler[0].Deger = KarZarar;
Sistem.Cizgiler[1].Deger = KarList; Sistem.Cizgiler[1].Renk = Sistem.Renk(150, 0, 255, 0);
Sistem.Cizgiler[2].Deger = ZararList; Sistem.Cizgiler[2].Renk = Sistem.Renk(150, 255, 0, 0);
Sistem.Cizgiler[3].Deger = KarZararAy;
Sistem.Cizgiler[4].Deger = Sistem.Liste(0);


















Aylık K/Z Dilimleme




var Veriler = Sistem.GrafikVerileri;
var MA1 = Sistem.MA(10, "Exp", "Kapanis");
var MA2 = Sistem.MA(50, "Exp", "Kapanis");

var IslemMiktari = Sistem.Liste(0);
var Pozisyon = Sistem.Liste(0);
var KarZarar = Sistem.Liste(0);

float SonPozisyon = 0;
float SonFiyat = 0;
float ToplamKarZarar = 0;


for (int i = 1; i < Sistem.BarSayisi; i++)
{
// AL
if (MA1[i-1]< MA2[i-1] && MA1[i]>= MA2[i] && SonPozisyon <= 0)
{
if (SonPozisyon == 0)
{
IslemMiktari[i] = 1;
SonFiyat = Veriler[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
else if (SonPozisyon < 0)
{
IslemMiktari[i] = 2;
SonFiyat = Veriler[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
Sistem.Yon[i] = "A";
}

// SAT
else if (MA1[i-1]> MA2[i-1] && MA1[i]<= MA2[i] && SonPozisyon >= 0)
{
if (SonPozisyon == 0)
{
IslemMiktari[i] = -1;
SonFiyat = Veriler[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
else if (SonPozisyon > 0)
{
IslemMiktari[i] = -2;
SonFiyat = Veriler[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
Sistem.Yon[i] = "S";
}
Pozisyon[i] = SonPozisyon;
KarZarar[i] = ToplamKarZarar + Veriler[i].Close * Pozisyon[i];
}

var KarZararAy = Sistem.Liste(0);
float KarZarar1 = 0;
int BarNo1 = 1;
float Fark = 0;
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if (Veriler[i].Date.Month != Veriler[i-1].Date.Month)
{
Fark = KarZarar[i-1] - KarZarar1;
for (int j = BarNo1; j < i; j++)
KarZararAy[j] = Fark;
KarZarar1 = KarZarar[i-1];
BarNo1 = i;
}
if (i == Sistem.BarSayisi-1)
{
Fark = KarZarar[i] - KarZarar1;
for (int j = BarNo1; j < Sistem.BarSayisi; j++)
KarZararAy[j] = Fark;
}
}
var KarList = Sistem.Liste(0);
var ZararList = Sistem.Liste(0);
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if (KarZararAy[i] > 0)
KarList[i] = KarZararAy[i];
else if (KarZararAy[i] < 0)
ZararList[i] = KarZararAy[i];
}


Sistem.Cizgiler[0].Deger = KarZarar;
Sistem.Cizgiler[1].Deger = KarList; Sistem.Cizgiler[1].Renk = Sistem.Renk(150, 0, 255, 0);
Sistem.Cizgiler[2].Deger = ZararList; Sistem.Cizgiler[2].Renk = Sistem.Renk(150, 255, 0, 0);
Sistem.Cizgiler[3].Deger = KarZararAy;
Sistem.Cizgiler[4].Deger = Sistem.Liste(0);











**************************

thebaboli
09-01-2015, 17:38
5lik 60lık bir grafikte ,
o güne veya bir önceki güne ait verilere nasıl ulaşabilirim?

örnek: günlük yüzde farkını 5lik/60lıkta anlık izlemek

var veriler = Sistem.GrafikFiyatOku(sembol, Sistem.Periyot, "Kapanis");
for (int i = 1; i < veriler.Count; i++)
{
kapanis = veriler[i];

float dunkuKapanis = ??
// burada dünkü kapanış fiyatı olacak; bugün = o anki verinin ait olduğu tarih
// bu değil : public float OncekiKapanisGun(string symbolX) --> güncel tek bir tarihe ait veri

yuzde[i] = 100 * ((kapanis - dunkuKapanis) / dunkuKapanis);
}

---

ilave:

bir liste çektikten sonra filtreleme yapabiliyor muyuz? mesela tek bir tarih için veya tarih aralığı..
LINQ kullanabiliyor muyuz?




ördek yeşilimsi çizgi --> gün kapanışı
morumsu çizgi --> önceki gün kapanışı
sarı çizgi ise --> yüzde farkı
göstermektedir



http://i.hizliresim.com/Q472EG.png (http://hizliresim.com/Q472EG)






Üst Periyodu Alt Periyoda Giydirme
http://i.hizliresim.com/l0WZ0l.png (http://hizliresim.com/l0WZ0l)








Parametreler
http://i.hizliresim.com/RbPDJj.png (http://hizliresim.com/RbPDJj)

************************

thebaboli
09-01-2015, 17:40
Selamlar

Idealdeki chart verisini .txt olarak alabiliyormuyuz?

Sag tik
Veri
Dosyaya Veri Yazdir


calismiyor. Calistirabilen oldu mu?




Sayın Lyrklaunavan,

Ara periyotların verilerini de text dosyaya yazdırabileceğiniz güncellemeyi yeni versiyonumuza ekledik.
Aslında 2-3 satırlık kod işinizi görüyor ama kullanabileceğiniz bazı ekstra yararlı özellikleri de görmeniz için aşağıdaki örnek kodu hazırladık.

Bu kodu sistem olarak bir sembolün grafiğine uyguladığınızda, hangi periyot açık durumdaysa, üstelik isterseniz ekli indikatörlerin de verileriyle birlikte, tüm veriler txt dosyaya yazdırılır.
Kod içinde zaman kontrolü, işlemin ne kadar sürdüğü(milisaniye), hangi dosyaya yazıldığı gibi bilgiler içeren mesaj çıkarma ve hatta açık grafiğin periyodunu veya seçili sembolü değiştirdiğiniz zaman, bu grafiğin de verileri aktarılsın mı sorusu gibi ekstra özellikler kullanılmıştır.

Bu yolla, istediğiniz formatta, istediğiniz kodun istediğiniz periyoduna ait verileri kolayca temin edebilirsiniz.

Yeni versiyonu buradan alabilirsiniz; www.directfn.com.tr/terminal/ideal.exe

Saygılarımızla


http://i.hizliresim.com/04BVlD.png (http://hizliresim.com/04BVlD)

http://i.hizliresim.com/6lXRXW.png (http://hizliresim.com/6lXRXW)




// sürekli aynı sembol ve periyot verisi kopyalanmasın diye sözcük kontrol mekanizması kullanıldı..
// benzer şekilde sayı kontrol, pozisyon kontrol veya zaman kontrol mekanizmaları da kullanılabilir..
var Aktarildimi = Sistem.SozcukTablosunuOku(Sistem.Sembol + Sistem.Periyot + "DosyayVeriAktar");
if (Aktarildimi != "OK")
{
Sistem.SozcukTablosunuGuncelle(Sistem.Sembol + Sistem.Periyot + "DosyayVeriAktar" , "OK");
if (MessageBox.Show("Dosyaya Veri Aktarılsın mı (?)", "Veri Aktarım", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
var Time1 = DateTime.Now; // süre ölçümü için
var Bars = Sistem.GrafikVerileri;
var Liste = new List<string>();
for (var i=0; i<Bars.Count; i++)
{
Liste.Add(Bars[i].Date.ToString("dd.MM.yyyy")
+ ";" + Bars[i].Date.ToString("HH:mm")
+ ";" + Bars[i].Open.ToString()
+ ";" + Bars[i].High.ToString()
+ ";" + Bars[i].Low.ToString()
+ ";" + Bars[i].Close.ToString()
+ ";" + Bars[i].Size.ToString("0"));
}
var DosyaAdi = "\\Ideal\\Rapor\\" + Sistem.Sembol + "_" + Sistem.Periyot + ".Txt";
File.WriteAllLines(DosyaAdi, Liste);
Sistem.Mesaj(Sistem.Sembol + "\r\nPeriyot = " + Sistem.Periyot + "\r\n DOsya Adı = " + DosyaAdi + "\r\nSüre = " + (DateTime.Now-Time1).Milliseconds.ToString());
}
}



****************************

anonimm
10-01-2015, 19:44
In Whiter Is Brighter, author John Ehlers presents a new indicator he calls the "universal oscillator". It is based on his theory that market data resembles pink noise, or as he puts it, noise with memory.

http://i.hizliresim.com/Vg37Yj.png (http://hizliresim.com/Vg37Yj)




var V = Sistem.GrafikVerileri ;

var C = Sistem.GrafikFiyatOku(V, "Kapanis") ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek") ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk") ;

var bandedge = 13 ;
var a11 = 0.9f ;
var a22 = -0.9f ;

var pi = 3.1415926f ;
var r2 = (float) Math.Sqrt(2) ;




var whitenoise = Sistem.Liste(V.Count, 0);
var a1 = Sistem.Liste(V.Count, 0);
var b1 = Sistem.Liste(V.Count, 0);
var c1 = Sistem.Liste(V.Count, 0);
var c2 = Sistem.Liste(V.Count, 0);
var c3 = Sistem.Liste(V.Count, 0);
var filt = Sistem.Liste(V.Count, 0);
var filt1 = Sistem.Liste(V.Count, 0);
var pk = Sistem.Liste(V.Count, 0);
var universal = Sistem.Liste(V.Count, 0);

for (int i = 2; i < V.Count; i++)
{
if( i < 3 ) whitenoise[i] = 0 ; else whitenoise[i] = ( C[i] - C[i-2] ) / 2 ;
if( i == 1 ) a1[i] = 0 ; else a1[i] = (float) Math.Exp( -r2 * pi / bandedge ) ;
if( i == 1 ) b1[i] = 0 ; else b1[i] = 2 * a1[i] * (float) Math.Cos( r2 * pi / bandedge ) ;
if( i == 1 ) c2[i] = 0 ; else c2[i] = b1[i] ;
if( i == 1 ) c3[i] = 0 ; else c3[i] = -a1[i] * a1[i] ;
if( i == 1 ) c1[i] = 0 ; else c1[i] = 1 - c2[i] - c3[i] ;

if( i == 1 ) filt[i] = 0 ;
if( i == 2 ) filt[i] = c1[i] * 0 * ( C[i] + C[i-1] ) / 2 + c2[i] * filt[i-1] ;
if( i == 3 ) filt[i] = c1[i] * 0 * ( C[i] + C[i-1] ) / 2 + c2[i] * filt[i-1] + c3[i] * filt[i-2] ;
else filt[i] = c1[i] * ( whitenoise[i] + whitenoise[i-1] ) / 2 + c2[i] * filt[i-1] + c3[i] * filt[i-2] ;

if( i == 1 ) pk[i] = 0.0000001f ;
if ( (float) Math.Abs(filt[i]) > pk[i-1] ) pk[i] = (float) Math.Abs(filt[i]) ; else pk[i] = 0.991f * pk[i-1] ;
universal[i] = filt[i] / pk[i] ;

}



var IslemMiktari = Sistem.Liste(0);
var Pozisyon = Sistem.Liste(0);
var KarZarar = Sistem.Liste(0);

float SonPozisyon = 0;
float SonFiyat = 0;
float ToplamKarZarar = 0;


for (int i = 1; i < Sistem.BarSayisi; i++)
{
// AL
if ( universal[i] > a11 &&
SonPozisyon <= 0 )
{
if (SonPozisyon == 0)
{
IslemMiktari[i] = 1;
SonFiyat = V[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
else if (SonPozisyon < 0)
{
IslemMiktari[i] = 2;
SonFiyat = V[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
Sistem.Yon[i] = "A";
}

// SAT
else if ( universal[i] < a22 &&
SonPozisyon >= 0 )
{
if (SonPozisyon == 0)
{
IslemMiktari[i] = -1;
SonFiyat = V[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
else if (SonPozisyon > 0)
{
IslemMiktari[i] = -2;
SonFiyat = V[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
Sistem.Yon[i] = "S";
}
Pozisyon[i] = SonPozisyon;
KarZarar[i] = ToplamKarZarar + V[i].Close * Pozisyon[i];
}


Sistem.Cizgiler[0].Deger = KarZarar; // panel 2

thebaboli
17-01-2015, 02:50
Günaydın,
Sayın idealtrade, bildiğiniz üzere vip-x030 grafiğine dolar bazlı bakabiliyoruz. Mümkünse bu grafiğin h, l, c, o değerlerini gösteren (ya da buna benzer) bir kod paylaşabilirmisiniz? Teşekkürler...


5 Dk grafik üzerinde gösterim
http://i.hizliresim.com/VgDJdZ.png (http://hizliresim.com/VgDJdZ)







var Bars = Sistem.GrafikVerileri;
var DolarBars = Sistem.GrafikVerileriniOku("FX'USDTRY", Sistem.Periyot);
var AlignedBars = Sistem.GrafikVerilerindeTarihHizala(Bars, DolarBars);


var HighList = Sistem.Liste(0);
var LowList = Sistem.Liste(0);
var CloseList = Sistem.Liste(0);
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if (AlignedBars[i].Close > 0 )
{
HighList[i] = Bars[i].High / AlignedBars[i].Close;
LowList[i] = Bars[i].Low / AlignedBars[i].Close;
CloseList[i] = Bars[i].Close / AlignedBars[i].Close;
}
}

Sistem.Cizgiler[0].Deger = HighList;
Sistem.Cizgiler[1].Deger = LowList;
Sistem.Cizgiler[2].Deger = CloseList;




**********************

thebaboli
17-01-2015, 02:51
kar /zararı bir tarihten başlatmak
not : al-sat noktaları fiktiftir





var StartBarNo = 1;
var StartDate = new DateTime(2014, 3, 13, 0, 0, 0);
for (int i = Sistem.BarSayisi-1; i > 0; i--)
{
if (Veriler[i].Date < StartDate)
{
StartBarNo = i;
break;
}
}
for (int i = StartBarNo ; i < Sistem.BarSayisi; i++)
{







http://i.hizliresim.com/LYlR5z.png (http://hizliresim.com/LYlR5z)

****************************

thebaboli
17-01-2015, 19:26
optimizasyon süre hesaplatma
ürün ile birlikte gelen örneği editleyerek tahmini kalan süreyi hesaplattım.
anlaşılmayan bir yer varsa açıklayabilirim.





// kapanış fiyatlarını oku
var Kapanis = Sistem.GrafikFiyatSec("Kapanis");


// döngü parametreleri
var BaslangicNo1 = 10;
var BitisNo1 = 200;
var Adim1 = 2;
var BaslangicNo2 = 60;
var BitisNo2 = 600;
var Adim2 = 3;

double DonguSayisi = ((BitisNo1 - BaslangicNo1) / Adim1) * ((BitisNo2 - BaslangicNo2) / Adim2);
double Sayac = 0;
double BaslangicAni = Environment.TickCount;


// hareketli ortalamaları hesapla
for (int P1 = BaslangicNo1; P1 < BitisNo1; P1 += Adim1)
{
var A1 = Sistem.MA(Kapanis, "Exp", P1);
for (int P2 = BaslangicNo2; P2 < BitisNo2; P2 += Adim2)
{
if (P2 <= P1) continue;
var A2 = Sistem.MA(Kapanis, "Exp", P2);

// önceki taramadaki pozisyonları temizle
for (int i = 1; i < Kapanis.Count; i++)
Sistem.Yon[i] = "";

// strateji
var SonYon = "";
for (int i = 1; i < Kapanis.Count; i++)
{
if ((A1[i-1] < A2[i-1] && A1[i] >= A2[i]) && SonYon != "A") // alış
{
Sistem.Yon[i] = "A";
SonYon = Sistem.Yon[i];
}
if ((A1[i-1] > A2[i-1] && A1[i] <= A2[i]) && SonYon != "S") // satış
{
Sistem.Yon[i] = "S";
SonYon = Sistem.Yon[i];
}
}

// süre hesapla
Sayac++;
double GecenSure = (Environment.TickCount - BaslangicAni) / 1000;
double KalanSure = (GecenSure * (DonguSayisi-Sayac)) / Sayac;
var Sure = TimeSpan.FromSeconds(KalanSure);
string SureStr = string.Format("{0:D2}:{1:D2}:{2:D2}", Sure.Hours, Sure.Minutes, Sure.Seconds);

Sistem.Optimizasyon(P1 , P2, "Kalan Süre = " + SureStr, "Döngü = " + (DonguSayisi-Sayac));
}
}





************************************

thebaboli
17-01-2015, 22:19
Trend yön ve güç göstergesi..Sihhatlı çalışır...
Kod:
per1:=21;
MMA:=Mov(C,per1,E); SMMA:=Mov(MMA,per1,E);
IMPETMMA:=MMA - Ref(MMA,-2); IMPETSMMA:=SMMA - Ref(SMMA,-2);
DIVMA:= Abs(MMA - SMMA); AVERIMPET:= (IMPETMMA+IMPETSMMA)/2;
TDF:=DIVMA*Power(AVERIMPET,3); TDF/HHV(Abs(TDF),per1*3):-0.05:0.05
http://trader-online.tk/MSZ/e-w-Tren...rce_Index.html

Aşagıdaki grafikde saatlık gösterge 5 dakikalık grafa uygulanmış hali 21 peryotlukdur.Bunu idela uyarlayın .
Saatlık gösterge sağlıklı bilgi verir.

grafik linki; http://www.hisse.net/forum/showthread.php?t=140369&page=11

sayın uufuk tarafından yapılmış bir tavsiyedir.

böyle bir tren güç indikatörü konusunda yardımcı olursanız teşekkürler.


Trend yön ve güç göstergesi..Sihhatlı çalışır...

per1:=21;
MMA:=Mov(C,per1,E); SMMA:=Mov(MMA,per1,E);
IMPETMMA:=MMA - Ref(MMA,-2); IMPETSMMA:=SMMA - Ref(SMMA,-2);
DIVMA:= Abs(MMA - SMMA); AVERIMPET:= (IMPETMMA+IMPETSMMA)/2;
TDF:=DIVMA*Power(AVERIMPET,3); TDF/HHV(Abs(TDF),per1*3):-0.05:0.05

http://trader-online.tk/MSZ/e-w-Trend_Direction_Force_Index.html

Aşagıdaki grafikde saatlık gösterge 5 dakikalık grafa uygulanmış hali 21 peryotlukdur.Bunu idela uyarlayın .
Saatlık gösterge sağlıklı bilgi verir.

http://i.hizliresim.com/Q4LmMA.png

Aynı talebi ben de İDEAL yetkililerine ve forumdaşlara arz ederim:)

Bir el atıverin valla pala ümüğümüzü sıkmış bırakmıyor, bir daha aynı duruma düşmeyelim belki bir faydası olur. Saygılar.

Eline sağlık Sv. Anonimm


Trend Direction & Force Index (TDF Index) by Piotr Wojdyo
http://trader-online.tk/MSZ/e-w-Trend_Direction_Force_Index.html

http://i.hizliresim.com/n5Q800.png (http://hizliresim.com/n5Q800)




var V = Sistem.GrafikVerileri ;

var C = Sistem.GrafikFiyatOku(V, "Kapanis") ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek") ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk") ;


var per1 = 17 ; // Input("Major MA",1,200,17);

var MMA = Sistem.MA(C, "Exp", per1 ) ;
var SMMA = Sistem.MA(MMA, "Exp", per1) ;

var IMPETMMA = Sistem.Liste(V.Count, 0);
var IMPETSMMA = Sistem.Liste(V.Count, 0);
var DIVMA = Sistem.Liste(V.Count, 0);
var AVERIMPET = Sistem.Liste(V.Count, 0);
var TDF = Sistem.Liste(V.Count, 0);
var NTDF = Sistem.Liste(V.Count, 0);
var x2 = Sistem.Liste(V.Count, 0);

for (int i = 1; i < V.Count; i++)
{

IMPETMMA[i] = MMA[i] - MMA[i-1] ;
IMPETSMMA[i] = SMMA[i] - SMMA[i-1] ;
DIVMA[i] = (float) Math.Abs(MMA[i] - SMMA[i]);
AVERIMPET[i] = (IMPETMMA[i]+IMPETSMMA[i]) / 2.0f ;
TDF[i] = (float) Math.Pow(DIVMA[i],1)*(float) Math.Pow(AVERIMPET[i],3);
x2[i] = (float) Math.Abs(TDF[i]) ;
}

var x1 = 3 * per1 ;
var HHV = Sistem.HHV(x1, x2) ;

for (int i = 1; i < V.Count; i++)
{
NTDF[i] = TDF[i]/HHV[i] ;
}

var x3 = Sistem.Liste(V.Count, 0.5f);
var x4 = Sistem.Liste(V.Count, -0.5f);

Sistem.Cizgiler[0].Deger = NTDF ; // panel 2
Sistem.Cizgiler[1].Deger = x3 ; // panel 2
Sistem.Cizgiler[2].Deger = x4 ; // panel 2





Dostlar,indikatoru oluşturmuşsunuz ama gözden kaçırdığınız nokta şu;
saatlık datayla oluşturup,1_5_10_15_20_30 dakikalık grafda izleyip işleyeceksiniz.
Statik ortalama gibi...

http://i.hizliresim.com/Ezmvyz.png




60 minutes time frame versiyonu (herhangi bir sistemde kullanılması durumunda repainti önlemek için "önceki bar" kullanıldı )

http://i.hizliresim.com/n5QXyM.png (http://hizliresim.com/n5QXyM)



var V = Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V, "Kapanis") ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek") ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk") ;

var V1 = Sistem.GrafikVerileriniOku(Sistem.Sembol, "60") ;
var C1 = Sistem.GrafikFiyatOku(V1, "Kapanis") ;

var per1 = 21 ;

var MMA = Sistem.MA(C1, "Exp", per1 ) ;
var SMMA = Sistem.MA(MMA, "Exp", per1) ;

var IMPETMMA = Sistem.Liste(V1.Count, 0);
var IMPETSMMA = Sistem.Liste(V1.Count, 0);
var DIVMA = Sistem.Liste(V1.Count, 0);
var AVERIMPET = Sistem.Liste(V1.Count, 0);
var TDF = Sistem.Liste(V1.Count, 0);
var NTDF = Sistem.Liste(V1.Count, 0);
var x2 = Sistem.Liste(V1.Count, 0);

for (int i = 1; i < V1.Count; i++)
{

IMPETMMA[i] = MMA[i] - MMA[i-1] ;
IMPETSMMA[i] = SMMA[i] - SMMA[i-1] ;
DIVMA[i] = (float) Math.Abs(MMA[i] - SMMA[i]);
AVERIMPET[i] = (IMPETMMA[i]+IMPETSMMA[i]) / 2.0f ;
TDF[i] = (float) Math.Pow(DIVMA[i],1)*(float) Math.Pow(AVERIMPET[i],3);
x2[i] = (float) Math.Abs(TDF[i]) ;
}

var x1 = 3 * per1 ;
var HHV = Sistem.HHV(x1, x2) ;

var ontdf = Sistem.Liste(V1.Count, 0);

for (int i = 1; i < V1.Count; i++)
{
NTDF[i] = TDF[i]/HHV[i] ;
ontdf[i] = NTDF[i-1] ;
}

var x5 = Sistem.DonemCevir(Sistem.GrafikVerileri, V1, ontdf);

Sistem.Cizgiler[0].Deger = x5 ;


Dostlar,indikatoru oluşturmuşsunuz ama gözden kaçırdığınız nokta şu;
saatlık datayla oluşturup,1_5_10_15_20_30 dakikalık grafda izleyip işleyeceksiniz.
Statik ortalama gibi...






Örneğin bu sistemde, 60 dk lığın mevcut barı kullanılmış olsaydı repaint yapardı. Ama önceki (biten) barı kullanıldığından repaint olmayacaktır.

http://i.hizliresim.com/316rlA.png (http://hizliresim.com/316rlA)



var V = Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V, "Kapanis") ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek") ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk") ;

var V1 = Sistem.GrafikVerileriniOku(Sistem.Sembol, "60") ;
var C1 = Sistem.GrafikFiyatOku(V1, "Kapanis") ;

var per1 = 21 ;

var MMA = Sistem.MA(C1, "Exp", per1 ) ;
var SMMA = Sistem.MA(MMA, "Exp", per1) ;

var IMPETMMA = Sistem.Liste(V1.Count, 0);
var IMPETSMMA = Sistem.Liste(V1.Count, 0);
var DIVMA = Sistem.Liste(V1.Count, 0);
var AVERIMPET = Sistem.Liste(V1.Count, 0);
var TDF = Sistem.Liste(V1.Count, 0);
var NTDF = Sistem.Liste(V1.Count, 0);
var x2 = Sistem.Liste(V1.Count, 0);

for (int i = 1; i < V1.Count; i++)
{

IMPETMMA[i] = MMA[i] - MMA[i-1] ;
IMPETSMMA[i] = SMMA[i] - SMMA[i-1] ;
DIVMA[i] = (float) Math.Abs(MMA[i] - SMMA[i]);
AVERIMPET[i] = (IMPETMMA[i]+IMPETSMMA[i]) / 2.0f ;
TDF[i] = (float) Math.Pow(DIVMA[i],1)*(float) Math.Pow(AVERIMPET[i],3);
x2[i] = (float) Math.Abs(TDF[i]) ;
}

var x1 = 3 * per1 ;
var HHV = Sistem.HHV(x1, x2) ;

var ontdf = Sistem.Liste(V1.Count, 0);

for (int i = 1; i < V1.Count; i++)
{
NTDF[i] = TDF[i]/HHV[i] ;
ontdf[i] = NTDF[i-1] ;
}

var x5 = Sistem.DonemCevir(Sistem.GrafikVerileri, V1, ontdf);

Sistem.Cizgiler[0].Deger = x5 ;



var SonYon = "";
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if ( x5[i] > 0 &&

SonYon != "A" )
{
Sistem.Yon[i] = "A";
SonYon = Sistem.Yon[i] ;
}


if ( x5[i] < 0 &&
SonYon != "S" )
{
Sistem.Yon[i] = "S";
SonYon = Sistem.Yon[i] ;
}

}

thebaboli
18-01-2015, 00:24
5 dk grafikte kar / zarar eğrisini günlük kapanışına göre step formunda göstermek
not : al-sat noktaları fiktiftir





// gün K/Z
var KarZararGun = Sistem.Liste(0);
KarZararGun[Sistem.BarSayisi-1] = KarZarar[Sistem.BarSayisi-1];
for (int i = Sistem.BarSayisi-2; i>0; i--)
{
if (Veriler[i].Date.Day != Veriler[i-1].Date.Day)
KarZararGun[i] = KarZarar[i];
else
KarZararGun[i] = KarZararGun[i+1];
}
var KarZararGunAvr = Sistem.MA(KarZararGun,"Simple",1000);




http://i.hizliresim.com/jvg0Rm.png (http://hizliresim.com/jvg0Rm)


Sn.Tiberius sizin de emeklerinize sağlık. Katılımcıların çoğalmasıyla İDEAL daha da güzel bir hal aldı.

Günlük değil de al-sat sinyaline göre step formunda gösterme imkanı var mı. Şimdiden teşekkürler.


aynı kodda tek satırı değiştirmeniz yeterli






var KarZararGun = Sistem.Liste(0);
KarZararGun[Sistem.BarSayisi-1] = KarZarar[Sistem.BarSayisi-1];
for (int i = Sistem.BarSayisi-2; i>0; i--)
{
if (Sistem.Yon[i] != "")
KarZararGun[i] = KarZarar[i];
else
KarZararGun[i] = KarZararGun[i+1];
}







http://i.hizliresim.com/W6qlqE.png (http://hizliresim.com/W6qlqE)

*****************************


Belki basit olabilir ama bilmeyince o basitlik o kadar zor bir durum ki. Sistemin içine atamadım bir türlü.

Zahmet olmazsa şu sistemin içine nasıl monte edebilirim.:(

// parametreleri al
var Yontem = Sistem.Parametreler[0];
var Periyot1 = Sistem.Parametreler[1];
var Periyot2 = Sistem.Parametreler[2];


// hareketli ortalamaları hesapla
var MA1 = Sistem.MA(Periyot1, Yontem, "Kapanis");
var MA2 = Sistem.MA(Periyot2, Yontem, "Kapanis");

// hesaplanan verileri çizgilere aktar ve açıklama ekle
Sistem.Cizgiler[0].Deger = MA1;
Sistem.Cizgiler[0].Aciklama = "MA " + Periyot1;
Sistem.Cizgiler[1].Deger = MA2;
Sistem.Cizgiler[1].Aciklama = "MA " + Periyot2;

// strateji
Sistem.KesismeTara(MA1, MA2);




tam kod MA sistemi ( profit STEP formunda )


var Veriler = Sistem.GrafikVerileri;
var MA1 = Sistem.MA(50, "Exp", "Kapanis");
var MA2 = Sistem.MA(200, "Exp", "Kapanis");

var IslemMiktari = Sistem.Liste(0);
var Pozisyon = Sistem.Liste(0);
var KarZarar = Sistem.Liste(0);

float SonPozisyon = 0;
float SonFiyat = 0;
float ToplamKarZarar = 0;
var SonYon = "";

for (int i = 1; i < Sistem.BarSayisi; i++)
{
// AL
if (MA1[i-1]< MA2[i-1] && MA1[i]>= MA2[i] && SonYon != "A")
{
if (SonPozisyon == 0)
{
IslemMiktari[i] = 1;
SonFiyat = Veriler[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
else if (SonPozisyon < 0)
{
IslemMiktari[i] = 2;
SonFiyat = Veriler[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
SonYon = "A";
Sistem.Yon[i] = "A";
}

// SAT
else if (MA1[i-1]> MA2[i-1] && MA1[i]<= MA2[i] && SonPozisyon >= 0)
{
if (SonPozisyon == 0)
{
IslemMiktari[i] = -1;
SonFiyat = Veriler[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
else if (SonPozisyon > 0)
{
IslemMiktari[i] = -2;
SonFiyat = Veriler[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
SonYon = "S";
Sistem.Yon[i] = "S";
}
Pozisyon[i] = SonPozisyon;
KarZarar[i] = ToplamKarZarar + Veriler[i].Close * Pozisyon[i];
}

var KarZararAy = Sistem.Liste(0);
float KarZarar1 = 0;
int BarNo1 = 1;
float Fark = 0;
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if (Veriler[i].Date.Month != Veriler[i-1].Date.Month )
{
Fark = KarZarar[i-1] - KarZarar1;
for (int j = BarNo1; j < i; j++)
KarZararAy[j] = Fark;
KarZarar1 = KarZarar[i-1];
BarNo1 = i;
}
if (i == Sistem.BarSayisi-1)
{
Fark = KarZarar[i] - KarZarar1;
for (int j = BarNo1; j < Sistem.BarSayisi; j++)
KarZararAy[j] = Fark;
}
}
var KarList = Sistem.Liste(0);
var ZararList = Sistem.Liste(0);
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if (KarZararAy[i] > 0)
KarList[i] = KarZararAy[i];
else if (KarZararAy[i] < 0)
ZararList[i] = KarZararAy[i];
}


// gün K/Z
var KarZararGun = Sistem.Liste(0);
KarZararGun[Sistem.BarSayisi-1] = KarZarar[Sistem.BarSayisi-1];
for (int i = Sistem.BarSayisi-2; i>0; i--)
{
if (Sistem.Yon[i] != "")
KarZararGun[i] = KarZarar[i];
else
KarZararGun[i] = KarZararGun[i+1];
}
Sistem.Cizgiler[0].Deger = KarZarar;
Sistem.Cizgiler[1].Deger = KarZararGun;






http://i.hizliresim.com/aynPNz.png (http://hizliresim.com/aynPNz)

thebaboli
19-01-2015, 23:45
Topik'te ve ideal'de yeni olan kullanıcılarımız için Örnek bir Robot;

1 Dk VIP-X030 verilerini oku
MACD (5,26) hesapla
MACD'nin ortalamasını (exp,9) al
MACD, ortalamasını kestiğinde AL/SAT
İlave olarak VIOP seansı kapalıyken kodun çalışmaması koşulu var.



var Sembol = "VIP'F_XU0300215S0"; //Orjinal Koda Emir yolla
var Periyot = "1";

var Veriler = Sistem.GrafikVerileriniOku(Sembol,Periyot);
var MACD = Sistem.MACD(Veriler, 5, 26);
var AVR = Sistem.MA(MACD, "Exp", 9);


var Pozisyon = Sistem.PozisyonKontrolOku(Sembol);
var Islem = "";
var Miktar = 0;

if (Sistem.YukariKestiyse(MACD,AVR) && Pozisyon <= 0 && (Sistem.SaatAraligi("09:10", "12:30") || Sistem.SaatAraligi("13:50", "17:45")) && Sistem.HaftaSonu == false) // alış
{
Islem = "ALIS";
if (Pozisyon == 0) // pozisyonum yoksa 1 lot al
Miktar = 1;
else if (Pozisyon < 0) // short isem stop and reverse , 2 lot al
Miktar = 2;
}
else if (Sistem.AsagiKestiyse(MACD,AVR) && Pozisyon >= 0 && (Sistem.SaatAraligi("09:10", "12:30") || Sistem.SaatAraligi("13:50", "17:45")) && Sistem.HaftaSonu == false) // satış
{
Islem = "SATIS";
if (Pozisyon == 0) // pozisyonum yoksa 1 lot sat
Miktar = 1;
else if (Pozisyon > 0) // long isem stop and reverse , 2 lot sat
Miktar = 2;
}

// emri gönder
if (Islem != "")
{
if (Islem == "ALIS")
Sistem.PozisyonKontrolGuncelle(Sembol, Pozisyon+Miktar);
else if (Islem == "SATIS")
Sistem.PozisyonKontrolGuncelle(Sembol, Pozisyon-Miktar);

Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = Islem;
Sistem.EmirMiktari = Miktar;
Sistem.EmirSuresi = "GUN"; // GUN, SNS, IKG
Sistem.EmirTipi = "KPY"; // KPY, KIE, GIE, SAR
Sistem.EmirFiyatTipi = "PYS"; // PYS, LMT, EIF, KAP
Sistem.EmirGonder();
}


****************************************

anonimm
20-01-2015, 11:42
SuperTrend indicator

http://i.hizliresim.com/g4bAR5.png (http://hizliresim.com/g4bAR5)




var V = Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V, "Kapanis" ) ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek" ) ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk" ) ;
var O = Sistem.GrafikFiyatOku(V, "Acilis" ) ;


var Length = 10 ;
var mult = 3.0f ;

var avgTR = Sistem.AverageTrueRange(V, Length) ;

var newshortband = Sistem.Liste(V.Count, 0) ;
var newlongband = Sistem.Liste(V.Count, 0) ;
var shortband = Sistem.Liste(V.Count, 0) ;
var longband = Sistem.Liste(V.Count, 0) ;
var trend = Sistem.Liste(V.Count, 0) ;
var supt = Sistem.Liste(V.Count, 0) ;

for (int i = 1; i < V.Count; i++)
{
newshortband[i] = ( H[i] + L[i] ) / 2 + avgTR[i] * mult ;
newlongband[i] = ( H[i] + L[i] ) / 2 - avgTR[i] * mult ;

if( C[i-1] > longband[i-1] ) longband[i] = Math.Max(newlongband[i], longband[i-1]) ; else longband[i] = newlongband[i] ;
if( C[i-1] < shortband[i-1] ) shortband[i] = Math.Min(newshortband[i], shortband[i-1]) ; else shortband[i] = newshortband[i] ;
{
if( C[i] > shortband[i-1] ) trend[i] = 1 ; else if ( C[i] < longband[i-1] ) trend[i] = -1 ; else trend[i]= trend[i-1] ;
}
if( trend[i] == 1 ) supt[i] = longband[i] ; else supt[i] = shortband[i] ;
}

Sistem.Cizgiler[0].Deger = supt; // panel 1

anonimm
20-01-2015, 22:49
"Variable Moving Average", often abbreviated as VMA, is an Exponential Moving Average developed by Tushar S. Chande. VMA automatically adjusts its smoothing constant on the basis of Market Volatility.

Aşağıdaki versiyon, 30 dk time framede önceki bar alınarak (olası sistemlerde repainti önlemek için) düzenlenmiştir. Daha düşük periyotlara uygulanabilir.

http://i.hizliresim.com/Q4yPNA.png (http://hizliresim.com/Q4yPNA)



var V1 =Sistem.GrafikVerileri ;
var C1 = Sistem.GrafikFiyatOku(V1, "Kapanis") ;
var H1= Sistem.GrafikFiyatOku(V1, "Yuksek") ;
var L1 = Sistem.GrafikFiyatOku(V1, "Dusuk") ;
var O1 = Sistem.GrafikFiyatOku(V1, "Acilis") ;

var V =Sistem.GrafikVerileriniOku(Sistem.Sembol, "30") ;
var C = Sistem.GrafikFiyatOku(V, "Kapanis") ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek") ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk") ;
var O = Sistem.GrafikFiyatOku(V, "Acilis") ;

var l = 10 ;
var k = 1.0f/l ;


var pdm = Sistem.Liste(V.Count, 0);
var mdm = Sistem.Liste(V.Count, 0);
var pdmS = Sistem.Liste(V.Count, 0);
var mdmS = Sistem.Liste(V.Count, 0);
var s = Sistem.Liste(V.Count, 0);
var pdi = Sistem.Liste(V.Count, 0);
var mdi = Sistem.Liste(V.Count, 0);
var pdiS = Sistem.Liste(V.Count, 0);
var mdiS = Sistem.Liste(V.Count, 0);
var d = Sistem.Liste(V.Count, 0);
var s1 = Sistem.Liste(V.Count, 0);
var iS = Sistem.Liste(V.Count, 0);

for (int i = 1; i < V.Count; i++)
{
pdm[i] = (float) Math.Max((C[i] - C[i-1]), 0) ;
mdm[i] = (float) Math.Max((C[i-1] - C[i]), 0) ;
pdmS[i] = ((1 - k)*pdmS[i-1] + k*pdm[i]) ;
mdmS[i] = ((1 - k)*mdmS[i-1] + k*mdm[i]) ;
s[i] = pdmS[i] + mdmS[i] ;
pdi[i] = pdmS[i]/s[i] ;
mdi[i] = mdmS[i]/s[i] ;
pdiS[i] = ((1 - k)*pdiS[i-1] + k*pdi[i]) ;
mdiS[i] = ((1 - k)*mdiS[i-1] + k*mdi[i]) ;
d[i] = (float) Math.Abs(pdiS[i] - mdiS[i]) ;
s1[i] = pdiS[i] + mdiS[i] ;
iS[i] = ((1 - k)*iS[i-1] + k*d[i]/s1[i]) ;
}

var hhv = Sistem.HHV(l, iS) ;
var llv = Sistem.LLV(l, iS) ;

var d1 = Sistem.Liste(V.Count, 0);
var vI = Sistem.Liste(V.Count, 0);
var vma = Sistem.Liste(V.Count, 0);
var vmao = Sistem.Liste(V.Count, 0);

for (int i = l; i < V.Count; i++)
{
d1[i] = hhv[i] - llv[i] ;
vI[i] = (iS[i] - llv[i])/d1[i] ;
vma[i] = (1 - k * vI[i] ) * vma[i-1] + k * vI[i]*C[i] ;
vmao[i] = vma[i-1] ;
}

var x1 = Sistem.DonemCevir(V1, V, vmao) ;

Sistem.Cizgiler[0].Deger = x1 ; // panel 1

thebaboli
21-01-2015, 01:12
ipucu - ileri teknik - süre kısaltma
herkes için gerekmeyebilir

arkadaşlar ben fazla veri tutup (50K) ağır hesaplamalar yaptırıyorum.
biz sistemde ve robotta hesaplama yaptıran fonksiyon çağırdığımızda tüm data için yapılıyor.
özellikle robotta ve hatta bazen sistemde tüm veriyi hesaplamaya gerek yok.
robotta son duruma göre emir üretiyoruz, eski barlar için hesaplama yaptırmaya gerek yok.
kendim için aşağıdaki kodu yazdım, size de faydası olabilir.
dramatik şekilde süre kısaltabilirsiniz.


http://i.hizliresim.com/4Z9WEY.png (http://hizliresim.com/4Z9WEY)

**************************

anonimm
22-01-2015, 11:14
"Flex" Renko Charting (özelden gelen bir talebi de karşılamak üzere herkesin faydalanması ümidiyle)


http://i.hizliresim.com/n5NmDM.png (http://hizliresim.com/n5NmDM)



var V = Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V, "Kapanis" ) ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek" ) ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk" ) ;
var O = Sistem.GrafikFiyatOku(V, "Acilis" ) ;

var p1 = 14 ;

var xATR = Sistem.AverageTrueRange(V, p1) ;

var BrickSize = Sistem.Liste(V.Count, 0) ;
var Brick1 = Sistem.Liste(V.Count, 0) ;
var Brick2 = Sistem.Liste(V.Count, 0) ;

for (int i = 1; i < V.Count; i++)
{

BrickSize[i] = xATR[i] ;
if ( C[i] > Brick1[i-1] + BrickSize[i] ) Brick1[i] = Brick1[i-1] + BrickSize[i] ; else if ( C[i] < Brick1[i-1] - BrickSize[i] ) Brick1[i] = Brick1[i-1] - BrickSize[i] ; else Brick1[i] = Brick1[i-1] ;
if ( Brick1[i] != Brick1[i-1] ) Brick2[i] = Brick1[i-1] ; else Brick2[i] = Brick2[i-1] ;

}


Sistem.Cizgiler[0].Deger = Brick1 ;
Sistem.Cizgiler[1].Deger = Brick2 ;

anonimm
22-01-2015, 11:50
Renko v2 ( yukarıdaki kodda bricksize atr ile hesaplanıyordu. Burda ise bricksize = 100 point. Siz değiştirebilirsiniz dilerseniz. )

http://i.hizliresim.com/W6p1Z8.png (http://hizliresim.com/W6p1Z8)




var V = Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V, "Kapanis" ) ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek" ) ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk" ) ;
var O = Sistem.GrafikFiyatOku(V, "Acilis" ) ;

var p1 = 14 ;


var BrickSize = Sistem.Liste(V.Count, 0) ;
var Brick1 = Sistem.Liste(V.Count, 0) ;
var Brick2 = Sistem.Liste(V.Count, 0) ;

for (int i = 1; i < V.Count; i++)
{

BrickSize[i] = 0.100f ;
if ( C[i] > Brick1[i-1] + BrickSize[i] ) Brick1[i] = Brick1[i-1] + BrickSize[i] ; else if ( C[i] < Brick1[i-1] - BrickSize[i] ) Brick1[i] = Brick1[i-1] - BrickSize[i] ; else Brick1[i] = Brick1[i-1] ;
if ( Brick1[i] != Brick1[i-1] ) Brick2[i] = Brick1[i-1] ; else Brick2[i] = Brick2[i-1] ;

}


Sistem.Cizgiler[0].Deger = Brick1 ;
Sistem.Cizgiler[1].Deger = Brick2 ;

thebaboli
24-01-2015, 18:11
En güvenli robot kodu :)


Merhaba,
Şöyle bir şeyler karaladım belki diğer arkadaşlarda bir şeyler eklemek isteyebilir.


var Sembol = "VIP'VIP-X030";
var Periyot = "5";
var V = Sistem.GrafikVerileriniOku(Sembol, Periyot);
var K = Sistem.GrafikFiyatOku(V, "Kapanis");
var MA1 = Sistem.MA(K, "Simple", 5);
var MA2 = Sistem.MA(K, "Simple", 100);

var Pozisyon = Sistem.PozisyonKontrolOku(Sembol);
var SonFiyat = Sistem.SonFiyat(Sembol);
var Islem = "";
var Miktar = 1;

if (SonFiyat > 0 && V.Count > 2500 && V[V.Count-1].Date.Day == DateTime.Now.Day && (Sistem.SaatAraligi("09:11", "12:29") || Sistem.SaatAraligi("13:56", "23:44")) && Sistem.HaftaSonu == false && Sistem.BaglantiVar == true)
{
if (Sistem.YukariKestiyse(MA1,MA2) && Pozisyon <= 0)
{
Islem = "Alış";
if (Pozisyon == 0) Miktar = 1; else if (Pozisyon < 0) Miktar = -2*Pozisyon;
}
else if (Sistem.AsagiKestiyse(MA1,MA2) && Pozisyon >= 0)
{
Islem = "Satış";
if (Pozisyon == 0) Miktar = 1; else if (Pozisyon > 0) Miktar = 2*Pozisyon;
}
}

if (Islem != "")
{
if (Islem == "Alış") Sistem.PozisyonKontrolGuncelle(Sembol, Pozisyon+Miktar);
else if (Islem == "Satış") Sistem.PozisyonKontrolGuncelle(Sembol, Pozisyon-Miktar);
Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = Islem;
Sistem.EmirMiktari = Miktar;
Sistem.EmirSuresi = "GUN";
Sistem.EmirTipi = "KPY";
Sistem.EmirFiyatTipi = "PYS";
Sistem.EmirGonder();
/////// dakika
if (Sistem.ZamanKontrolDakika(Sembol) >= 5) //// aynı barda tekrar al sat yapmasını engeller.
Sistem.ZamanKontrolGuncelle(Sembol);
}

SonFiyat > 0
Sembolün son fiyatı 0 iken emir göndermeyi engeller.

V.Count > 2500
Sembolün veri sayısı gerekli olan bar sayısının altında ise emir göndermeyi engeller.

V[V.Count-1].Date.Day == DateTime.Now.Day
Son bar bugünün barı değilse emir göndermeyi engeller.

(Sistem.SaatAraligi("09:11", "12:29") || Sistem.SaatAraligi("13:56", "23:44"))
Seans saatleri dışında emir göndermeyi engeller.

Sistem.HaftaSonu == false
Haftasonu emir göndermeyi engeller.

Sistem.BaglantiVar == true
İnternet bağlantısı yoksa emir göndermeyi engeller.

/////// dakika
if (Sistem.ZamanKontrolDakika(Sembol) >= 5) //// aynı barda tekrar al sat yapmasını engeller.
Sistem.ZamanKontrolGuncelle(Sembol);

/////// saniye
if (Sistem.ZamanKontrolSaniye(Sembol) >= 30)
Sistem.ZamanKontrolGuncelle(Sembol);




Top sende theBaboli :clown:

Emeği geçen herkese teşekkürler :cool:

thebaboli
25-01-2015, 05:13
Selam dostlar,

genel istek üzerine Sistem.Yon listesinde FLAT durumuna geçme olanağı ekledik.
alış : Sistem.Yon[i] = "A"
satış : Sistem.Yon[i] = "S"
flat : Sistem.Yon[i] = "F"

etkilenecek moduller;
1 - Grafik
2 - Performans Tablosu
3 - Optimizasyon


http://i.hizliresim.com/ay8b37.png (http://hizliresim.com/ay8b37)




FLAT Sistem Örneği

Hareketli Ortalama Sistemi;
kısa ortalama uzun ortalamayı kesince işlem yapılır,
% 5 kar durumunda TAKE PROFIT, % 2 zarar durumunda STOP uygulanır






// kapanış fiyatlarını oku
var C = Sistem.GrafikFiyatSec("Kapanis");

// hareketli ortalamaları hesapla
var MA1 = Sistem.MA(C, "Exp", 50);
var MA2 = Sistem.MA(C, "Exp", 100);


// strateji
var SonYon = "";
double Fiyat = 0;
for (int i = 1; i<Sistem.BarSayisi; i++)
{
if (MA1[i-1] < MA2[i-1] && MA1[i] >= MA2[i] && SonYon != "A") // AL
{
Sistem.Yon[i] = "A"; // alış
SonYon = Sistem.Yon[i];
Fiyat = C[i];
}
else if (MA1[i-1] > MA2[i-1] && MA1[i] <= MA2[i] && SonYon != "S") // SAT
{
Sistem.Yon[i] = "S"; // satış
SonYon = Sistem.Yon[i];
Fiyat = C[i];
}
else if (SonYon == "A" && C[i] > Fiyat * 1.05) // % 5 kar realizasyonu
{
Sistem.Yon[i] = "F"; // flat
SonYon = Sistem.Yon[i];
}
else if (SonYon == "A" && C[i] < Fiyat * 0.98) // % 2 stop
{
Sistem.Yon[i] = "F"; // flat
SonYon = Sistem.Yon[i];
}
else if (SonYon == "S" && C[i] < Fiyat * 0.95) // % 5 kar realizasyonu
{
Sistem.Yon[i] = "F"; // flat
SonYon = Sistem.Yon[i];
}
else if (SonYon == "S" && C[i] > Fiyat * 1.02) // % 2 stop
{
Sistem.Yon[i] = "F"; // flat
SonYon = Sistem.Yon[i];
}
}



// hesaplanan verileri çizgilere aktar ve açıklama ekle
Sistem.Cizgiler[0].Deger = MA1;
Sistem.Cizgiler[1].Deger = MA2;







FLAT Optimizasyon Örneği

Hareketli Ortalama Sistemi.
Take Profit ve Stop Uygulaması






// kapanış fiyatlarını oku
var C = Sistem.GrafikFiyatSec("Kapanis");

// hareketli ortalamaları hesapla
for (int KucukPeriyot = 50; KucukPeriyot < 101; KucukPeriyot++)
{
for (int BuyukPeriyot = 200; BuyukPeriyot < 251; BuyukPeriyot ++)
{
if (KucukPeriyot >= BuyukPeriyot) continue;
var MA1 = Sistem.MA(C, "Exp", KucukPeriyot);
var MA2 = Sistem.MA(C, "Exp", BuyukPeriyot);

// önceki taramadaki pozisyonları temizle
for (int i = 1; i < C.Count; i++)
Sistem.Yon[i] = "";

// strateji
var SonYon = "";
double Fiyat = 0;
for (int i = 1; i<Sistem.BarSayisi; i++)
{
if (MA1[i-1] < MA2[i-1] && MA1[i] >= MA2[i] && SonYon != "A") // AL
{
Sistem.Yon[i] = "A"; // alış
SonYon = Sistem.Yon[i];
Fiyat = C[i];
}
else if (MA1[i-1] > MA2[i-1] && MA1[i] <= MA2[i] && SonYon != "S") // SAT
{
Sistem.Yon[i] = "S"; // satış
SonYon = Sistem.Yon[i];
Fiyat = C[i];
}
else if (SonYon == "A" && C[i] > Fiyat * 1.05) // % 5 kar realizasyonu
{
Sistem.Yon[i] = "F"; // flat
SonYon = Sistem.Yon[i];
}
else if (SonYon == "A" && C[i] < Fiyat * 0.98) // % 2 stop
{
Sistem.Yon[i] = "F"; // flat
SonYon = Sistem.Yon[i];
}
else if (SonYon == "S" && C[i] < Fiyat * 0.95) // % 5 kar realizasyonu
{
Sistem.Yon[i] = "F"; // flat
SonYon = Sistem.Yon[i];
}
else if (SonYon == "S" && C[i] > Fiyat * 1.02) // % 2 stop
{
Sistem.Yon[i] = "F"; // flat
SonYon = Sistem.Yon[i];
}
}

Sistem.Optimizasyon("MA", KucukPeriyot, BuyukPeriyot);

}
}







Not :
Biz take profit ve stop noktalarını bulurken kapanış fiyatını kullandık,
sizler high ve low değerlerini kullanabilirsiniz.

iyi çalışmalar

************************************************** *********

erhanacikgoz1
26-01-2015, 00:56
Dünya çapında isim yapmış ürünlere de baktığımızda tamamına yakını sistem modullerini C# veya C# sentaksı ile aynı olan compilerlar üzerinde çalıştırıyorlar. SCRIPT artık pre-historic konuma geldi ve ihtiyaçları karşılıyamıyor. Çok yavaş olması da diğer bir sıkıntısı. Dolayısıyla biraz C# öğrenmenin zararı olmaz. iDeal'de rahat sistem yazabilmeniz için 500 sayfalık kitabin 20-30 sayfasını anlamanız yeterli. Bu 2-3 gününüzü alır, pekişmesi ise 2-3 haftanızı.

aşağıdaki temel kavramları anlamak işinizi görecektir.

veri tipleri
float, double, int, string

değişken tanımlama
var X=0;
double X=0;
string X="Hello";

matematik, mantıksal ifadeler
X=X+1;
X++;

şartlar
if else switch

döngü
for foreach

liste yapısını anlamak

method tanımlamak


Şunu da belirtmeden geçemeyeceğim
Şu ana kadar gördüğünüz örnekler, çalışmalar buzdağının görünen kısmı.
Size sunulan kısım bir method ve onun içini doldurmak.
Şu an altyapıda bunun çok ötesi var fakat biz bunu kullanıcıya açmadık.
Bunun iki nedeni var
1 - ) Kitle daha ilerisi için hazır değil ve kafa karışıklığı yaratmayalım dedik
2 - ) Bu bende kalsın :)


Kullanım biraz daha olgunlaşınca tüm imkanları açabiliriz.
base class tanımla, kendi veri depolama alanlarınızı oluşturma, kendinize ait kütüphane hazırlama, aranızda chatleşme, SMS gönderme , etc gibi tüm programlama nimetlerinden yararlanabileceksiniz.
Bu durumda daha ileri C# bilgisi olaranlar enteresan uygulamalar da yapabilecek.

Saygılarımızla
IdealTrade


arkadaşlar,

bugün kulanıcılaramıza full kontrollu bir class açacağız.
bu class ile birlikte kendi library lerinizi yazabilecek,
depolama alanları yaratabilecek,
kendi base class larınızı oluşturabileceksiniz.

çok fazla kişinin bu olanakları kullanacağını düşünmemekle birlikte umarız faydalanlar da olur.
ilgilenecek kişilere önerim;
piyasa da bedava sunulan C# compilerlar var, bu compilerlardan birini indirip kodlarını orada yazması.
Bizim size sistem modulunde sunduğumuz text editor çok primitif.
Gerçek compiler ile çok daha rahat kod yazabilirsiniz.


wellcome to the real world
alice harikalar diyarına hoş geldiniz
birazdan kullanıcıya tam açık class versiyonu yayında olacaktır.
aklınıza gelen çoğu şeyi burada yapabileceksiniz.
Excel, word, etc erişim,
SMS,
socket uygulamaları
web service lerden veri çekme,
mail gönderme,
kendi base class larınızı oluşturma,
hesap kütüphaneleri oluşturma,
veri depolama alanları oluşturma,
bu verileri dosyaya yazdırma,
aklınıza ne gelirse


örnek görüntü .NET editorundan alınmıştır.
bu alana ilgi duyan kişilerin bir editor edinmesi iyi olur.
notepadde kullanabilirsiniz ama zahmetli olur.
editor ile hataları çok kolay ayıklarsınız.

resimde
faktoriyel hesaplama
ve sayı depolama örnekleri verilmiştir




http://i.hizliresim.com/ZApQRa.png (http://hizliresim.com/ZApQRa)




Kullanıcaya Açık Class

dosya adı : Lib.cs
yeri : ideal anadizini






using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ideal
{
public class Lib
{
public static Dictionary<string, double> SayiDict = new Dictionary<string, double>();

public int Fak(int sayi)
{
int val = 1;
for (int i = 1; i <= sayi; i++)
val = val * i;
return val;
}
public void SetSayi(string anahtar, double sayi)
{
SayiDict[anahtar] = sayi;
}
public double GetSayi(string anahtar)
{
if (SayiDict.ContainsKey(anahtar))
return SayiDict[anahtar];
return 0;
}

}
}






örnek;

Test3 sistemimde 10 sayısının faktoriyelini Lib (kütüphane) kullanarak hesaplatıyorum.
Çıkan sayıyı class içinde bulunan depolama alanına bir anahtar sözcük değeriyle birlikte SetSayı metodunu kullanarak depoluyorum

http://i.hizliresim.com/ayp20z.png (http://hizliresim.com/ayp20z)




Test3'de kaydettiğim değeri
Test4 sisteminde bir anahtar değeri kullanarak Lib.GetSayi metodu ile çekiyorum ve ekranda gösteriyorum.


http://i.hizliresim.com/g4pZoO.png (http://hizliresim.com/g4pZoO)


Lib.cs

compiler kullanacak olan arkadaşlar
projeyi Sezai Bey'den temin edebilirler,
ya da editorden classlibrary açıp Lib.cs'yi açılan class'ın içine yapıştırabilirler.


ileri teknik - Lib.cs

SayiDict'deki static ibaresi kaldırıldı,
böylece sistem modulunden doğrudan nesneye erişim imkanı verildi




using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ideal
{
public class Lib
{
// sayı depolamak için sözlük
public Dictionary<string, double> SayiDict = new Dictionary<string, double>();


// faktoriyel hesapla
public int Fak(int sayi)
{
int val = 1;
for (int i = 1; i <= sayi; i++)
val = val * i;
return val;
}


}
}







ileri teknik - örnek
doğrudan nesneye erişim



var sayi1 = Lib.Fak(8);

Lib.SayiDict["hello"] = sayi1;

if (Lib.SayiDict.ContainsKey("hello"))
{
var sayi2 = Lib.SayiDict["hello"];
Sistem.Mesaj(sayi2.ToString());
}



ileri düzey - User.DLL

arkadaşlar,
kodunun görünmesini istemeyen bir abonemizden gelen bir talep üzerine;

aşağıdaki formatta DLL oluşturanların çalışmaları da programa entegre olacaktır.

iyi çalışmalar




using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ideal
{
public class User
{
// sayı depolamak için sözlük
public Dictionary<string, double> SayiDict = new Dictionary<string, double>();


// faktoriyel hesapla
public int Fak(int sayi)
{
int val = 1;
for (int i = 1; i <= sayi; i++)
val = val * i;
return val;
}


}
}






User.DLL in sistem içinde kullanım örneği

http://i.hizliresim.com/31MEj0.png (http://hizliresim.com/31MEj0)



Yeni versiyon: www.directfn.com.tr/terminal/ideal.exe
Lib.Cs: www.directfn.com.tr/terminal/Lib.Rar




kendi dll mi yazıp kullanabiliyorum, artık herşey daha kolay olacak , kendi kütüphanemizi oluşturabiliriz.

işte bir deneme :)

http://i.hizliresim.com/GpNm2v.png (http://hizliresim.com/GpNm2v)


Sayın iDealTrade,
Varsayalım ki, kütüphanede oluşturduğum fonksiyon sistemden veriye ihtiyaç duyuyor. Örneğin, fonksiyonum şimdiki ve önceki kapanış farkının bir sayı ile çarpımı olsun. Muhtemelen hata verecek bir taslak aşağıda yer almakta. Son haline yardımcı olabilirmisiniz?



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ideal
{
public class User
{
// sayı depolamak için sözlük
public Dictionary<string, double> SayiDict = new Dictionary<string, double>();


// Fonksiyon hesapla
public int Fonk(int sayi)
{

for (int i = 1; i <= Sistem.Barsayisi; i++)
val[i] = sayi * ( C[i] - C[i-1] ) ;
return val;
}


}
}




using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ideal
{
public class Lib
{
// sayı depolamak için sözlük
public Dictionary<string, double> SayiDict = new Dictionary<string, double>();


// liste olarak dönüş yapar
public List<float> Fonk(int sayiX, List<float> listX)
{
var list = new List<float>(new float[listX.Count]); // boş liste yarat
try
{
for (int i = 1; i < listX.Count; i++)
list[i] = sayiX * (listX[i] - listX[i - 1]);
return list;
}
catch { return list; }
}


}
}




// sistem içinden çağırma
var C = Sistem.GrafikFiyatSec("Kapanis");
var YeniListe = Lib.Fonk(5, C);
Sistem.Cizgiler[0].Deger = C;
Sistem.Cizgiler[1].Deger = YeniListe;






BURADA BULUNMASI GEREKİR DİYE DÜŞÜNDÜM. TÜM BU KODLARI BİRLEŞTİRİRKEN İNSNALARIN MANTIGI ANLAMASINI KOLAYLAŞTIRIR.

baboli uygun görmezsen silebilirsin bu mesajı.

thebaboli
27-01-2015, 10:38
Selamlar

Alim ya da satim sinyali geldigi zaman sinyalin alindigi barin baslangic zamanini (saatini dakikasini) bir degiskene kaydetmenin yolu var midir?


sistemde mi, robotta mı ?

kodun başına değişken tanımlayıp sonra atama yapabilirsinzi.

DateTime saat; // değişkeni tamınla
.
.
.
.
if ...
saat = Bars[i].Date; // atamayı yap



sagolun robotta sormustum soylemeyi unutmusum. Sizin bu yazdiginiz sistem icin olani galiba.



her bar DateTime tipinde Date fieldı içerir.

var time = Bars[i].Date dedikten sonra bu değişkeni kullanabilirsiniz..

var hour = time.Hour;
var min = time.Minute;
var day = time.Day;

şeklinde kullanabilirsiniz

********************

Exfake
28-01-2015, 20:46
User.dll ve Lib.cs için C# kodları..
Uyarı: Amatörce yazılmış kodlardır. Diğer platformlardaki hesaplamalardan farklılık gösterebilir. Lütfen iyice inceleyip emin olmadan sistemlerinizde kullanmayınız.

Simple Moving Average:


public List<float> MA(int sayiX, List<float> listX)
{
var list = new List<float>(new float[listX.Count]);
try
{
if (listX.Count > sayiX)
{
list[0] = listX[0];
for (int i = 1; i < listX.Count; i++)
{
if (i >= sayiX)
{
float ort = 0f;
for (int j = i - sayiX + 1; j <= i; j++)
ort += listX[j];
list[i] = ort / sayiX;
}
else if (i > 0)
{
float ort = 0f;
for (int j = 0; j <= i; j++)
ort += listX[j];
list[i] = ort / (i + 1);
}
}
}
return list;
}
catch { return list; }
}


Exponential Moving Average:


public List<float> EMA(int sayiX, List<float> listX)
{
var list = new List<float>(new float[listX.Count]);
try
{
if (listX.Count > sayiX)
{
list[0] = listX[0];
float carpan = 2f / (sayiX + 1f);
for (int i = 1; i < listX.Count; i++)
{
if (i >= sayiX)
list[i] = list[i - 1] + carpan * (listX[i] - list[i - 1]);
else if (i > 0)
for (int j = 1; j <= i; j++)
list[i] = list[j - 1] + carpan * (listX[j] - list[j - 1]);
}
}
return list;
}
catch { return list; }
}


Double Exponential Moving Average:


public List<float> DEMA(int sayiX, List<float> listX)
{
var list = new List<float>(new float[listX.Count]);
try
{
if (listX.Count > sayiX)
{
List<float> ema = new List<float>(EMA(sayiX, listX));
List<float> ema2 = new List<float>(EMA(sayiX, ema));
list[0] = listX[0];
for (int i = 1; i < listX.Count; i++)
list[i] = 2f * ema[i] - ema2[i];
}
return list;
}
catch { return list; }
}


Triple Exponential Moving Average:


public List<float> TEMA(int sayiX, List<float> listX)
{
var list = new List<float>(new float[listX.Count]);
try
{
if (listX.Count > sayiX)
{
List<float> ema = new List<float>(EMA(sayiX, listX));
List<float> ema2 = new List<float>(EMA(sayiX, ema));
List<float> ema3 = new List<float>(EMA(sayiX, ema2));
list[0] = listX[0];
for (int i = 1; i < listX.Count; i++)
list[i] = (3f * ema[i] - 3f * ema2[i]) + ema3[i];
}
return list;
}
catch { return list; }
}


Highest:


public List<float> EnYuksek(List<float> listX)
{
var list = new List<float>(new float[listX.Count]);
try
{
if (listX.Count > 0)
{
list[0] = listX[0];
for (int i = 1; i < listX.Count; i++)
{
if (listX[i] > list[i - 1]) list[i] = listX[i]; else list[i] = list[i - 1];
}
}
return list;
}
catch { return list; }
}


Lowest:


public List<float> EnDusuk(List<float> listX)
{
var list = new List<float>(new float[listX.Count]);
try
{
if (listX.Count > 0)
{
list[0] = listX[0];
for (int i = 1; i < listX.Count; i++)
{
if (listX[i] < list[i - 1]) list[i] = listX[i]; else list[i] = list[i - 1];
}
}
return list;
}
catch { return list; }
}


Highest High Value:


public List<float> XBarEnYuksek(int sayiX, List<float> listX)
{
var list = new List<float>(new float[listX.Count]);
try
{
if (listX.Count > sayiX)
{
list[0] = listX[0];
for (int i = 0; i < listX.Count; i++)
{
float maks = listX[i];
if (i >= sayiX)
{
for (int j = i - sayiX; j < i; j++)
if (listX[j] > maks) maks = listX[j];
}
else if (i > 0)
{
for (int j = 0; j <= i; j++)
if (listX[j] > maks) maks = listX[j];
}
list[i] = maks;
}
}
return list;
}
catch { return list; }
}


Lowest Low Value:


public List<float> XBarEnDusuk(int sayiX, List<float> listX)
{
var list = new List<float>(new float[listX.Count]);
try
{
if (listX.Count > sayiX)
{
list[0] = listX[0];
for (int i = 0; i < listX.Count; i++)
{
float min = listX[i];
if (i >= sayiX)
{
for (int j = i - sayiX; j < i; j++)
if (listX[j] < min) min = listX[j];
}
else if (i > 0)
{
for (int j = 0; j <= i; j++)
if (listX[j] < min) min = listX[j];
}
list[i] = min;
}
}
return list;
}
catch { return list; }
}


Uyarı: Amatörce yazılmış kodlardır. Diğer platformlardaki hesaplamalardan farklılık gösterebilir. Lütfen iyice inceleyip emin olmadan sistemlerinizde kullanmayınız.

thebaboli
28-01-2015, 20:49
Sistemi, grafik üzerinde t1 başlangıç tarihi ve t2 bitiş tarihi arasında uygulamak




// kapanış fiyatlarını oku
var V = Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V, "Kapanis");

// başlangıç ve bitiş tarihlerini gir
var t1 = new DateTime(2015, 1, 1);
var t2 = new DateTime(2015, 1, 28);

// hareketli ortalamaları hesapla
var MA1 = Sistem.MA(C, "Exp", 50);
var MA2 = Sistem.MA(C, "Exp", 100);


// strateji
var SonYon = "";
double Fiyat = 0;
for (int i = 1; i<Sistem.BarSayisi; i++)
{
if ( V[i].Date >= t1 && V[i].Date <= t2 )

{
if (MA1[i-1] < MA2[i-1] && MA1[i] >= MA2[i] && SonYon != "A") // AL
{
Sistem.Yon[i] = "A"; // alış
SonYon = Sistem.Yon[i];
Fiyat = C[i];
}
else if (MA1[i-1] > MA2[i-1] && MA1[i] <= MA2[i] && SonYon != "S") // SAT
{
Sistem.Yon[i] = "S"; // satış
SonYon = Sistem.Yon[i];
Fiyat = C[i];
}
else if (SonYon == "A" && C[i] > Fiyat * 1.05) // % 5 kar realizasyonu
{
Sistem.Yon[i] = "F"; // flat
SonYon = Sistem.Yon[i];
}
else if (SonYon == "A" && C[i] < Fiyat * 0.98) // % 2 stop
{
Sistem.Yon[i] = "F"; // flat
SonYon = Sistem.Yon[i];
}
else if (SonYon == "S" && C[i] < Fiyat * 0.95) // % 5 kar realizasyonu
{
Sistem.Yon[i] = "F"; // flat
SonYon = Sistem.Yon[i];
}
else if (SonYon == "S" && C[i] > Fiyat * 1.02) // % 2 stop
{
Sistem.Yon[i] = "F"; // flat
SonYon = Sistem.Yon[i];
}
}
}





**************************


t1 başlangıç tarihi ve t2 bitiş tarihi arasında optimizasyon



// kapanış fiyatlarını oku
var V = Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V, "Kapanis");

// başlangıç ve bitiş tarihlerini gir
var t1 = new DateTime(2014, 6, 1);
var t2 = new DateTime(2015, 1, 28);

// hareketli ortalamaları hesapla
for (int KucukPeriyot = 1; KucukPeriyot < 10; KucukPeriyot++)
{
for (int BuyukPeriyot = 1; BuyukPeriyot < 100; BuyukPeriyot ++)
{
if (KucukPeriyot >= BuyukPeriyot) continue;
var MA1 = Sistem.MA(C, "Exp", KucukPeriyot);
var MA2 = Sistem.MA(C, "Exp", BuyukPeriyot);


// önceki taramadaki pozisyonları temizle
for (int i = 1; i < C.Count; i++)
Sistem.Yon[i] = "";

// strateji
var SonYon = "";
float Fiyat = 0;
for (int i = 1; i<Sistem.BarSayisi; i++)

{
if ( V[i].Date >= t1 && V[i].Date <= t2 )

{
if (MA1[i-1] < MA2[i-1] && MA1[i] >= MA2[i] && SonYon != "A") // AL
{
Sistem.Yon[i] = "A"; // alış
SonYon = Sistem.Yon[i];
Fiyat = C[i];
}
else if (MA1[i-1] > MA2[i-1] && MA1[i] <= MA2[i] && SonYon != "S") // SAT
{
Sistem.Yon[i] = "S"; // satış
SonYon = Sistem.Yon[i];
Fiyat = C[i];
}
else if (SonYon == "A" && C[i] > Fiyat * 1.05) // % 5 kar realizasyonu
{
Sistem.Yon[i] = "F"; // flat
SonYon = Sistem.Yon[i];
}
else if (SonYon == "A" && C[i] < Fiyat * 0.98) // % 2 stop
{
Sistem.Yon[i] = "F"; // flat
SonYon = Sistem.Yon[i];
}
else if (SonYon == "S" && C[i] < Fiyat * 0.95) // % 5 kar realizasyonu
{
Sistem.Yon[i] = "F"; // flat
SonYon = Sistem.Yon[i];
}
else if (SonYon == "S" && C[i] > Fiyat * 1.02) // % 2 stop
{
Sistem.Yon[i] = "F"; // flat
SonYon = Sistem.Yon[i];
}
}
}
Sistem.Optimizasyon("MA", KucukPeriyot, BuyukPeriyot);

}

thebaboli
29-01-2015, 02:19
Merhabalar...
MA1=4 (5 dklık)
MA2=50 (60 dklık)
MA3=200 (15 dklık)

Al koşulu MA1 > MA2 && MA1 > MA3
SAT koşulu MA1 < MA2 && MA1 < MA3


Bu şekilde uyarlamaya çalıştım kendimce ama iş çığrından çıktı:( formül öğrenme yetisi sıfır bende anlaşıldı:)



yine yardımlarınızı bekliyorum. Şimdiden ellerinize sağlık ve tşkr.




// kapanış fiyatlarını oku
var V5 = Sistem.GrafikVerileriniOku(Sistem.Sembol, "5") ;
var C5 = Sistem.GrafikFiyatOku(V5, "Kapanis");

var V15 = Sistem.GrafikVerileriniOku(Sistem.Sembol, "15") ;
var C15 = Sistem.GrafikFiyatOku(V15, "Kapanis");

var V60 = Sistem.GrafikVerileriniOku(Sistem.Sembol, "60") ;
var C60 = Sistem.GrafikFiyatOku(V60, "Kapanis");



// hareketli ortalamaları hesapla
var MA5 = Sistem.MA(C5, "Exp", 4);
var MA15 = Sistem.MA(C15, "Exp", 200);
var MA60 = Sistem.MA(C60, "Exp", 50);

var MAx15= Sistem.DonemCevir(V5, V15, MA15) ;
var MAx60= Sistem.DonemCevir(V5, V60, MA60) ;

// strateji
var SonYon = "";

for (int i = 1; i<Sistem.BarSayisi; i++)

{
if (MA5[i] >= MAx15[i] && MA5[i] >= MAx60[i] && SonYon != "A") // AL
{
Sistem.Yon[i] = "A"; // alış
SonYon = Sistem.Yon[i];

}
else if ( MA5[i] <= MAx15[i] && MA5[i] <= MAx60[i] && SonYon != "S") // SAT
{
Sistem.Yon[i] = "S"; // satış
SonYon = Sistem.Yon[i];

}
}

Sistem.Cizgiler[0].Deger = MA5;
Sistem.Cizgiler[1].Deger = MAx15;
Sistem.Cizgiler[2].Deger = MAx60;






************************

Exfake
29-01-2015, 14:53
Simple Moving Average:


public List<float> MA(int sayiX, List<float> listX)
{
var list = new List<float>(new float[listX.Count]);
try
{
if (listX.Count > sayiX)
{
list[0] = listX[0];
for (int i = 1; i < listX.Count; i++)
{
if (i >= sayiX)
{
float ort = 0f;
for (int j = i - sayiX + 1; j <= i; j++)
ort += listX[j];
list[i] = ort / sayiX;
}
else if (i > 0)
{
float ort = 0f;
for (int j = 0; j <= i; j++)
ort += listX[j];
list[i] = ort / (i + 1);
}
}
}
return list;
}
catch { return list; }
}



Önceki MA'yı aşağıdaki şekilde değiştirdim..


public List<float> MA(int sayiX, List<float> listX)
{
var list = new List<float>(new float[listX.Count]);
try
{
if (listX.Count > sayiX)
{
list[0] = listX[0];
for (int i = 1; i < listX.Count; i++)
{
if (i > sayiX)
{
list[i] = listX.Skip(i - sayiX + 1).Take(sayiX).Average();
}
else if (i > 0)
{
list[i] = listX.Take(i + 1).Average();
}
}
}
return list;
}
catch { return list; }
}

Exfake
29-01-2015, 14:59
User.dll ve Lib.cs için C# kodları..

Relative Strength Index (Wilder'ın formülü)


public List<float> RSI(int sayiX, List<float> listX)
{
var list = new List<float>(new float[listX.Count]);
try
{
if (listX.Count > sayiX)
{
var kazanclar = new List<float>(new float[listX.Count]);
var kayiplar = new List<float>(new float[listX.Count]);
var ortkazanclar = new List<float>(new float[listX.Count]);
var ortkayiplar = new List<float>(new float[listX.Count]);
var RS = new List<float>(new float[listX.Count]);
for (int i = 1; i < listX.Count; i++)
{
float fark = listX[i] - listX[i - 1];
if (fark >= 0) kazanclar[i] = fark; else kayiplar[i] = Math.Abs(fark);
if (i == sayiX)
{
ortkazanclar[i] = kazanclar.Take(sayiX).Average();
ortkayiplar[i] = kayiplar.Take(sayiX).Average();
}
else if (i > sayiX)
{
ortkazanclar[i] = ((ortkazanclar[i - 1] * (sayiX - 1)) + kazanclar[i]) / sayiX;
ortkayiplar[i] = ((ortkayiplar[i - 1] * (sayiX - 1)) + kayiplar[i]) / sayiX;
}
RS[i] = ortkazanclar[i] / ortkayiplar[i];
if (float.IsNaN(RS[i])) RS[i] = 0;
if (RS[i] == 0) list[i] = 0f; else list[i] = 100f - (100f / (1f + RS[i]));
}
}
return list;
}
catch { return list; }
}

thebaboli
29-01-2015, 21:36
robot veya sistem kodu ile Porfoye login olma özelliği eklendi



Sistem.PortfoyLogin(IdealHesapAdi, Sifre, Parola);

**************

Bear_Bull
31-01-2015, 00:22
http://mertkanelpeze.com/2012/07/10/c-matematik-kutuphanesi/

Math.PI : Bize Pi sayısını veren fonksiyondur. Double türünde değer alır.

double PiSayisi = Math.PI;
this.Text = PiSayisi.ToString();

Math.Abs : Parametre olarak verilen sayının mutlak değerini bize verir. Decimal türünde değer alır.
Kullanımı ;

decimal d = Math.Abs(-123.42M);
this.Text = d.ToString();

Math.Ceiling: Parametre olarak verilen sayıyı bir üst tam sayıya yuvarlar. Double türünde değer alır.
Kullanımı ;

double d = Math.Ceiling(23.26);
this.Text = d.ToString();
Çıktısı : 24 Olur

Math.Floor: Parametre olarak verilen sayıyı bir ALT tam sayıya yuvarlar. Double türünde değer alır.
Kullanımı ;

double d = Math.Floor(23.26);
this.Text = d.ToString();
Çıktısı : 23 olur

Math.Max: Parametre olarak verilen iki sayının en büyüğünü verir.
Kullanımı ;

int sayi = Math.Max(3, 43);
this.Text = "En Büyük Sayı: " + sayi;

Math.Min: Parametre olarak verilen iki sayının en küçüğünü verir.
Kullanımı ;

int sayi = Math.Min(24, 12);
this.Text = "En Küçük Sayı: " + sayi ;

Math.Pow: Bir sayının üstünü almak için kullanılır. İlk paremetrede sayıyı ikincisinde ise kaçıncı kuvveti alınacağı bilgisi verilir. Kısaca ; X sayısının Y'inci kuvvetini verir.
Kullanımı ;

double Kup = Math.Pow(2, 3);
this.Text = Kup.ToString();

Math.Sqrt: Parametre olarak verilen sayının karekökünü verir.
Kullanımı ;

double KareKok = Math.Sqrt(16);
this.Text = KareKok.ToString();

Math.Round: Parametre olarak verilen sayının virgülden sonraki kısmına göre aşağı ya da yukarı yuvarlar.
Kullanımı ;

double yuvarlanacakSayi = Math.Round(14.99);
this.Text = yuvarlanacakSayi.ToString();

Math.Truncate: Decimal veya Double türünden sayıların, virgülden sonraki kısmını atarak bize tam sayısını döndürür.
Kullanımı ;

double sayi = Math.Truncate(34.6541);
this.Text = sayi.ToString();


Günaydın,
C# için çeşitli kodlar ( küçük değişkliklerle .dll ve .cs lerde kullanılabilir sanırım)

http://www.garagebandhedgefund.com/formulas




Bu yararlı bilgilerin de "ideal formülleri" başlığına taşınmasını öneririm. Emeğinize sağlık sayın anonimm.

........................

thebaboli
31-01-2015, 19:35
Sistem görüntüsü ve aylık kar-zarar tablosu ile toplam getiri grafiği

http://i.hizliresim.com/MXEEXa.png (http://hizliresim.com/MXEEXa)


__________________________________________________ _______



Formülü (İDEAL içindir)



// SİSTEM
var Sembol = Sistem.Sembol;

var Veriler = Sistem.GrafikVerileri;

// verileri oku
var Bars1 = Sistem.GrafikVerileriniOku(Sembol, "5");
var Kapanislar1 = Sistem.GrafikFiyatOku(Bars1, "Kapanis");
var MA1 = Sistem.MA(Kapanislar1, "Exp", 4);

var Bars2 = Sistem.GrafikVerileriniOku(Sembol, "60");
var Kapanislar2 = Sistem.GrafikFiyatOku(Bars2, "Kapanis");
var MA2 = Sistem.MA(Kapanislar2, "Exp", 40);

var Bars4 = Sistem.GrafikVerileriniOku(Sembol, "60");
var Kapanislar4 = Sistem.GrafikFiyatOku(Bars4, "Kapanis");
var MA4 = Sistem.MA(Kapanislar4, "Exp", 42);

var Bars5 = Sistem.GrafikVerileriniOku(Sembol, "60");
var Kapanislar5 = Sistem.GrafikFiyatOku(Bars5, "Kapanis");
var MA7 = Sistem.MA(Kapanislar5, "Exp", 38);

var Bars6 = Sistem.GrafikVerileriniOku(Sembol, "15");
var Kapanislar6 = Sistem.GrafikFiyatOku(Bars6, "Kapanis");
var MA5 = Sistem.MA(Kapanislar6, "Exp", 160);

var Bars7 = Sistem.GrafikVerileriniOku(Sembol, "15");
var Kapanislar7 = Sistem.GrafikFiyatOku(Bars7, "Kapanis");
var MA6 = Sistem.MA(Kapanislar7, "Exp", 200);

// 60 dakikalık verileri 5 dakikalık verilere hizala
MA2 = Sistem.DonemCevir(Bars1, Bars2, MA2);
MA4 = Sistem.DonemCevir(Bars1, Bars4, MA4);
MA7 = Sistem.DonemCevir(Bars1, Bars5, MA7);

// 15 dakikalık verileri 5 dakikalık verilere hizala
MA5 = Sistem.DonemCevir(Bars1, Bars6, MA5);
MA6 = Sistem.DonemCevir(Bars1, Bars7, MA6);

var IslemMiktari = Sistem.Liste(0);
var Pozisyon = Sistem.Liste(0);
var KarZarar = Sistem.Liste(0);

float SonPozisyon = 0;
float SonFiyat = 0;
float ToplamKarZarar = 0;


// strateji
var SonYon = "";
for (int i = 1; i < Sistem.BarSayisi; i++)
{
// AL
if (MA1 > MA2 && MA1[i] > MA4[i] && MA1[i] > MA7[i] && MA1[i] > MA5[i] && MA1[i] > MA6[i] && SonPozisyon <= 0)
{
if (SonPozisyon == 0)
{
IslemMiktari[i] = 1;
SonFiyat = Veriler[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
else if (SonPozisyon < 0)
{
IslemMiktari[i] = 2;
SonFiyat = Veriler[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
Sistem.Yon[i] = "A";
}

// SAT
else if (MA1[i] < MA2[i] && MA1[i] < MA4[i] && MA1[i] < MA7[i] && MA1[i] < MA5[i] && MA1[i] < MA6[i] && SonPozisyon >= 0)
{
if (SonPozisyon == 0)
{
IslemMiktari[i] = -1;
SonFiyat = Veriler[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
else if (SonPozisyon > 0)
{
IslemMiktari[i] = -2;
SonFiyat = Veriler[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
Sistem.Yon[i] = "S";
}
Pozisyon[i] = SonPozisyon;
KarZarar[i] = ToplamKarZarar + Veriler[i].Close * Pozisyon[i];
}

var KarZararAy = Sistem.Liste(0);
float KarZarar1 = 0;
int BarNo1 = 1;
float Fark = 0;
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if (Veriler[i].Date.Month != Veriler[i-1].Date.Month)
{
Fark = KarZarar[i-1] - KarZarar1;
for (int j = BarNo1; j < i; j++)
KarZararAy[j] = Fark;
KarZarar1 = KarZarar[i-1];
BarNo1 = i;
}
if (i == Sistem.BarSayisi-1)
{
Fark = KarZarar[i] - KarZarar1;
for (int j = BarNo1; j < Sistem.BarSayisi; j++)
KarZararAy[j] = Fark;
}
}
var KarList = Sistem.Liste(0);
var ZararList = Sistem.Liste(0);
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if (KarZararAy[i] > 0)
KarList[i] = KarZararAy[i];
else if (KarZararAy[i] < 0)
ZararList[i] = KarZararAy[i];
}


Sistem.Cizgiler[0].Deger = KarZarar;
Sistem.Cizgiler[1].Deger = KarList; Sistem.Cizgiler[1].Renk = Sistem.Renk(150, 0, 255, 0);
Sistem.Cizgiler[2].Deger = ZararList; Sistem.Cizgiler[2].Renk = Sistem.Renk(150, 255, 0, 0);
Sistem.Cizgiler[3].Deger = KarZararAy;
Sistem.Cizgiler[4].Deger = Sistem.Liste(0);

// hesaplanan verileri çizgilere aktar ve açıklama ekle
Sistem.Cizgiler[5].Deger = MA1;
Sistem.Cizgiler[5].Aciklama = "MA1";

Sistem.Cizgiler[6].Deger = MA2;
Sistem.Cizgiler[6].Aciklama = "MA2";

Sistem.Cizgiler[7].Deger = MA4;
Sistem.Cizgiler[7].Aciklama = "MA4";

Sistem.Cizgiler[8].Deger = MA7;
Sistem.Cizgiler[8].Aciklama = "MA7";

Sistem.Cizgiler[9].Deger = MA5;
Sistem.Cizgiler[9].Aciklama = "MA5";

Sistem.Cizgiler[10].Deger = MA6;
Sistem.Cizgiler[10].Aciklama = "MA6";


____________________________________

[I]Panel kısmı


http://i.hizliresim.com/GEYYZV.jpg (http://hizliresim.com/GEYYZV)


__________________________________________________ __________





[I]EKLEME: SİSTEM SADECE 5 DKLIK GRAFİKTE ÇALIŞIR DİĞER PERYOTLARDA ÇALIŞMAZ VE HATA VERİR.

AYRICA SİSTEMDE 5DKLIK-15DKLIK VE 60DKLIK HAREKETLİ ORTLAMALAR OLDUĞUNDAN SİSTEM UYGULANMADAN ÖNCE. BOŞ BİR viop GRAFİKTE ÖNCE 60 DKLIK-15DKLIK-5DKLIK GRAFİĞİ AÇMAMIZ LAZIMKI O PERYOTLARDAKİ VERİLEN YÜKLENSİN. SONRA SİSTEMİ AÇABİLİRİZ VERİLER TAM OLDUĞU İÇİN HATA VERMEZ.

senetlerde deneme


Trend göstergesi Sn.ufuk'a aittit. Evet dostum 111.925 ten KISA ya dönmüş trend.

http://i.hizliresim.com/XDmooj.png (http://hizliresim.com/XDmooj)




geçen yıl marttan bu yana 20 işlemde toplam 38.000 puan getiri

http://i.hizliresim.com/9905qO.jpg (http://hizliresim.com/9905qO)


formülü(İDEAL içindir)

var Sembol1 = Sistem.Sembol;
var Veriler1 = Sistem.GrafikVerileri;

// SİSTEM
var Sembol = Sistem.Sembol;

// verileri oku
var Bars1 = Sistem.GrafikVerileriniOku(Sembol1, "5");
var Kapanislar1 = Sistem.GrafikFiyatOku(Bars1, "Kapanis");
var MA1 = Sistem.MA(Kapanislar1, "Exp", 4);

var Bars6 = Sistem.GrafikVerileriniOku(Sembol1, "15");
var Kapanislar6 = Sistem.GrafikFiyatOku(Bars6, "Kapanis");
var MA5 = Sistem.MA(Kapanislar6, "Exp", 160);

var Bars7 = Sistem.GrafikVerileriniOku(Sembol1, "15");
var Kapanislar7 = Sistem.GrafikFiyatOku(Bars7, "Kapanis");
var MA6 = Sistem.MA(Kapanislar7, "Exp", 200);

var Bars2 = Sistem.GrafikVerileriniOku(Sembol1, "60");
var Kapanislar2 = Sistem.GrafikFiyatOku(Bars2, "Kapanis");
var MA2 = Sistem.MA(Kapanislar2, "Exp", 40);

var Bars4 = Sistem.GrafikVerileriniOku(Sembol1, "60");
var Kapanislar4 = Sistem.GrafikFiyatOku(Bars4, "Kapanis");
var MA4 = Sistem.MA(Kapanislar4, "Exp", 42);

var Bars5 = Sistem.GrafikVerileriniOku(Sembol1, "60");
var Kapanislar5 = Sistem.GrafikFiyatOku(Bars5, "Kapanis");
var MA7 = Sistem.MA(Kapanislar5, "Exp", 38);

// 60 dakikalık verileri 5 dakikalık verilere hizala
MA2 = Sistem.DonemCevir(Bars1, Bars2, MA2);
MA4 = Sistem.DonemCevir(Bars1, Bars4, MA4);
MA7 = Sistem.DonemCevir(Bars1, Bars5, MA7);

// 15 dakikalık verileri 5 dakikalık verilere hizala
MA5 = Sistem.DonemCevir(Bars1, Bars6, MA5);
MA6 = Sistem.DonemCevir(Bars1, Bars7, MA6);

// hesaplanan verileri çizgilere aktar ve açıklama ekle
Sistem.Cizgiler[3].Deger = MA1;
Sistem.Cizgiler[3].Aciklama = "MA1";

Sistem.Cizgiler[4].Deger = MA2;
Sistem.Cizgiler[4].Aciklama = "MA2";

Sistem.Cizgiler[5].Deger = MA4;
Sistem.Cizgiler[5].Aciklama = "MA4";

Sistem.Cizgiler[8].Deger = MA7;
Sistem.Cizgiler[8].Aciklama = "MA7";

Sistem.Cizgiler[9].Deger = MA5;
Sistem.Cizgiler[9].Aciklama = "MA5";

Sistem.Cizgiler[10].Deger = MA6;
Sistem.Cizgiler[10].Aciklama = "MA6";

var al = Sistem.Liste(0);

for (int i = 0; i < Sistem.BarSayisi; i++)
al = MA7[i] + 0.5f ;

Sistem.Cizgiler[19].Deger = al;

var V = Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V, "Kapanis") ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek") ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk") ;

var V1 = Sistem.GrafikVerileriniOku(Sistem.Sembol, "60") ;
var C1 = Sistem.GrafikFiyatOku(V1, "Kapanis") ;

var per1 = 21 ;

var MMA = Sistem.MA(C1, "Exp", per1 ) ;
var SMMA = Sistem.MA(MMA, "Exp", per1) ;

var IMPETMMA = Sistem.Liste(V1.Count, 0);
var IMPETSMMA = Sistem.Liste(V1.Count, 0);
var DIVMA = Sistem.Liste(V1.Count, 0);
var AVERIMPET = Sistem.Liste(V1.Count, 0);
var TDF = Sistem.Liste(V1.Count, 0);
var NTDF = Sistem.Liste(V1.Count, 0);
var x2 = Sistem.Liste(V1.Count, 0);

for (int i = 1; i < V1.Count; i++)
{

IMPETMMA[i] = MMA[i] - MMA[i-1] ;
IMPETSMMA[i] = SMMA[i] - SMMA[i-1] ;
DIVMA[i] = (float) Math.Abs(MMA[i] - SMMA[i]);
AVERIMPET[i] = (IMPETMMA[i]+IMPETSMMA[i]) / 2.0f ;
TDF[i] = (float) Math.Pow(DIVMA[i],1)*(float) Math.Pow(AVERIMPET[i],3);
x2[i] = (float) Math.Abs(TDF[i]) ;
}

var x1 = 3 * per1 ;
var HHV = Sistem.HHV(x1, x2) ;

var ontdf = Sistem.Liste(V1.Count, 0);

for (int i = 1; i < V1.Count; i++)
{
NTDF[i] = TDF[i]/HHV[i] ;
ontdf[i] = NTDF[i-1] ;
}

var x5 = Sistem.DonemCevir(Sistem.GrafikVerileri, V1, ontdf);

Sistem.Cizgiler[14].Deger = x5 ;
Sistem.Cizgiler[15].Deger = Sistem.Liste(0.05F);
Sistem.Cizgiler[18].Deger = Sistem.Liste(-0.05F);

// strateji
var SonYon = "";
for (int f = 1; f < Bars1.Count; f++)
{
if ( MA1[f] > MA2[f] && MA1[f] > MA4[f] && MA1[f] > MA7[f] && MA1[f] > MA5[f] && MA1[f] > MA6[f] && x5[f] > 0.050F )
if ( SonYon != "A") //Mavi kalınan her barda AL vermemesi için
{
Sistem.Yon[f] = "A"; // alış
SonYon = "A";
}
if ( MA1[f] < MA2[f] && MA1[f] < MA4[f] && MA1[f] < MA7[f] && MA1[f] < MA5[f] && MA1[f] < MA6[f] && x5[f] < -0.050F )
{
if ( SonYon != "S") //Kırmızı kalınan her bölgede SAT vermemesi için
{
Sistem.Yon[f] = "S"; // alış
SonYon = "S";
}
}
}


[I]formül (İDEAL içindir)
_________________________
var Sembol1 = Sistem.Sembol;
var Veriler1 = Sistem.GrafikVerileri;

// SİSTEM
var Sembol = Sistem.Sembol;

var Veriler = Sistem.GrafikVerileri;
var Bars1 = Sistem.GrafikVerileriniOku(Sembol1, "5");
var Kapanislar1 = Sistem.GrafikFiyatOku(Bars1, "Kapanis");
var MA1 = Sistem.MA(Kapanislar1, "Exp", 4);

var Bars2 = Sistem.GrafikVerileriniOku(Sembol1, "60");
var Kapanislar2 = Sistem.GrafikFiyatOku(Bars2, "Kapanis");
var MA2 = Sistem.MA(Kapanislar2, "Exp", 38);

var Bars3 = Sistem.GrafikVerileriniOku(Sembol1, "60");
var Kapanislar3 = Sistem.GrafikFiyatOku(Bars3, "Kapanis");
var MA3 = Sistem.MA(Kapanislar3, "Exp", 40);

var Bars4 = Sistem.GrafikVerileriniOku(Sembol1, "60");
var Kapanislar4 = Sistem.GrafikFiyatOku(Bars4, "Kapanis");
var MA4 = Sistem.MA(Kapanislar4, "Exp", 42);

var Bars5 = Sistem.GrafikVerileriniOku(Sembol1, "15");
var Kapanislar5 = Sistem.GrafikFiyatOku(Bars5, "Kapanis");
var MA5 = Sistem.MA(Kapanislar5, "Exp", 160);

var Bars6 = Sistem.GrafikVerileriniOku(Sembol1, "15");
var Kapanislar6 = Sistem.GrafikFiyatOku(Bars6, "Kapanis");
var MA6 = Sistem.MA(Kapanislar6, "Exp", 200);

// 60 dakikalık verileri 5 dakikalık verilere hizala
MA2 = Sistem.DonemCevir(Bars1, Bars2, MA2);
MA3 = Sistem.DonemCevir(Bars1, Bars3, MA3);
MA4 = Sistem.DonemCevir(Bars1, Bars4, MA4);

// 15 dakikalık verileri 5 dakikalık verilere hizala
MA5 = Sistem.DonemCevir(Bars1, Bars5, MA5);
MA6 = Sistem.DonemCevir(Bars1, Bars6, MA6);

// hesaplanan verileri çizgilere aktar ve açıklama ekle
Sistem.Cizgiler[3].Deger = MA1;
Sistem.Cizgiler[3].Aciklama = "MA1";

Sistem.Cizgiler[4].Deger = MA2;
Sistem.Cizgiler[4].Aciklama = "MA2";

Sistem.Cizgiler[5].Deger = MA3;
Sistem.Cizgiler[5].Aciklama = "MA3";

Sistem.Cizgiler[6].Deger = MA4;
Sistem.Cizgiler[6].Aciklama = "MA4";

Sistem.Cizgiler[7].Deger = MA5;
Sistem.Cizgiler[7].Aciklama = "MA5";

Sistem.Cizgiler[8].Deger = MA6;
Sistem.Cizgiler[8].Aciklama = "MA6";


var IslemMiktari = Sistem.Liste(0);
var Pozisyon = Sistem.Liste(0);
var KarZarar = Sistem.Liste(0);

float SonPozisyon = 0;
float SonFiyat = 0;
float ToplamKarZarar = 0;
var SonYon = "";

for (int i = 1; i < Sistem.BarSayisi; i++)
{
// AL
if (MA2< MA1[i-1] && MA3[i-1]< MA1[i-1] && MA4[i-1]< MA1[i-1] && MA2[i-1]< MA1[i] && MA4[i-1]< MA1[i] && MA3[i-1]< MA1[i] &&SonYon != "A")
{
if (SonPozisyon == 0)
{
IslemMiktari[i] = 1;
SonFiyat = Veriler[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
else if (SonPozisyon < 0)
{
IslemMiktari[i] = 2;
SonFiyat = Veriler[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
SonYon = "A";
Sistem.Yon[i] = "A";
}

// SAT
else if (MA2[i-1]> MA1[i-1] && MA3[i-1]> MA1[i-1] && MA4[i-1]> MA1[i-1] && MA2[i-1]> MA1[i] && MA4[i-1]> MA1[i] && MA3[i-1]> MA1[i] &&SonPozisyon >= 0)
{
if (SonPozisyon == 0)
{
IslemMiktari[i] = -1;
SonFiyat = Veriler[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
else if (SonPozisyon > 0)
{
IslemMiktari[i] = -2;
SonFiyat = Veriler[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
SonYon = "S";
Sistem.Yon[i] = "S";
}
Pozisyon[i] = SonPozisyon;
KarZarar[i] = ToplamKarZarar + Veriler[i].Close * Pozisyon[i];
}

var KarZararAy = Sistem.Liste(0);
float KarZarar1 = 0;
int BarNo1 = 1;
float Fark = 0;
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if (Veriler[i].Date.Month != Veriler[i-1].Date.Month )
{
Fark = KarZarar[i-1] - KarZarar1;
for (int j = BarNo1; j < i; j++)
KarZararAy[j] = Fark;
KarZarar1 = KarZarar[i-1];
BarNo1 = i;
}
if (i == Sistem.BarSayisi-1)
{
Fark = KarZarar[i] - KarZarar1;
for (int j = BarNo1; j < Sistem.BarSayisi; j++)
KarZararAy[j] = Fark;
}
}
var KarList = Sistem.Liste(0);
var ZararList = Sistem.Liste(0);
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if (KarZararAy[i] > 0)
KarList[i] = KarZararAy[i];
else if (KarZararAy[i] < 0)
ZararList[i] = KarZararAy[i];
}


// gün K/Z
var KarZararGun = Sistem.Liste(0);
KarZararGun[Sistem.BarSayisi-1] = KarZarar[Sistem.BarSayisi-1];
for (int i = Sistem.BarSayisi-2; i>0; i--)
{
if (Sistem.Yon[i] != "")
KarZararGun[i] = KarZarar[i];
else
KarZararGun[i] = KarZararGun[i+1];
}
Sistem.Cizgiler[0].Deger = KarZarar;
Sistem.Cizgiler[1].Deger = KarZararGun;
_______________________________________________

[I]performansı.. geçen yıl marttan bu yana 44.000 puan getiri

http://i.hizliresim.com/6ld2g0.jpg (http://hizliresim.com/6ld2g0)


Teşekkürler Korsan :cool:

Exfake
01-02-2015, 01:28
User.dll ve Lib.cs için C# kodları..

Commodity Channel Index


public List<float> CCI(int sayiX, List<float> Kapanis, List<float> Yuksek, List<float> Dusuk)
{
var list = new List<float>(new float[Kapanis.Count]);
try
{
if (Kapanis.Count > sayiX)
{
List<float> tipikfiyat = new List<float>(new float[Kapanis.Count]);
for (int i = 0; i < Kapanis.Count; i++)
tipikfiyat[i] = (Kapanis[i] + Yuksek[i] + Dusuk[i]) / 3f;
List<float> orttipikfiyat = new List<float>(MA(sayiX, tipikfiyat));
var ortsapma = new List<float>(new float[Kapanis.Count]);
for (int i = 0; i < Kapanis.Count; i++)
{
if (i >= sayiX)
{
float sapma = 0f;
for (int j = i - sayiX + 1; j <= i; j++)
sapma += Math.Abs(orttipikfiyat[i] - tipikfiyat[j]);
ortsapma[i] = sapma / sayiX;
list[i] = (tipikfiyat[i] - orttipikfiyat[i]) / (0.015f * ortsapma[i]);
}
}
}
return list;
}
catch { return list; }
}

Exfake
02-02-2015, 11:56
User.dll ve Lib.cs için C# kodları..

Moving Average Convergence Divergence


public MACDCiz MACD(int kisaP, int uzunP, int sinyalP, List<float> Kapanis)
{
MACDCiz list = new MACDCiz();
list.macdciz = new List<float>(new float[Kapanis.Count]);
list.sinyalciz = new List<float>(new float[Kapanis.Count]);
list.histciz = new List<float>(new float[Kapanis.Count]);
try
{
if (Kapanis.Count > uzunP)
{
var kisaema = EMA(kisaP, Kapanis);
var uzunema = EMA(uzunP, Kapanis);
for (int i = 0; i < Kapanis.Count; i++)
list.macdciz[i] = kisaema[i] - uzunema[i];
list.sinyalciz = EMA(sinyalP, list.macdciz);
for (int i = 0; i < Kapanis.Count; i++)
list.histciz[i] = list.macdciz[i] - list.sinyalciz[i];
}
return list;
}
catch { return list; }
}

public struct MACDCiz
{
public List<float> macdciz { get; set; }
public List<float> sinyalciz { get; set; }
public List<float> histciz { get; set; }
}


Bunu iDeal'de çizdirmek biraz farklı:

var macdal = User.MACD(12,25,9,Sistem.GrafikFiyatSec("Kapanis"));
var macd = macdal.macdciz;
var sinyal = macdal.sinyalciz;
var hist = macdal.histciz;
Sistem.Cizgiler[0].Deger = macd;
Sistem.Cizgiler[1].Deger = sinyal;
Sistem.Cizgiler[2].Deger = hist;

Exfake
06-02-2015, 17:58
User.dll ve Lib.cs için C# kodları..

Stochastic Fast - Slow


public STOCiz STO(int PeriyotK, int PeriyotD, List<float> Kapanis, List<float> Yuksek, List<float> Dusuk)
{
STOCiz liste = new STOCiz();
liste.KCiz = new List<float>(new float[Kapanis.Count]);
liste.DCiz = new List<float>(new float[Kapanis.Count]);
try
{
if (Kapanis.Count > PeriyotK)
{
var Kendusuk = XBarEnDusuk(PeriyotK, Dusuk);
var Kenyuksek = XBarEnYuksek(PeriyotK, Yuksek);
for (int i = 0; i < Kapanis.Count; i++)
if (i > PeriyotK)
liste.KCiz[i] = ((Kapanis[i] - Kendusuk[i]) / (Kenyuksek[i] - Kendusuk[i])) * 100f; //fast stoK **sabit
liste.DCiz = EMA(PeriyotD, liste.KCiz); //fast stoD
//liste.KCiz = EMA(PeriyotD, liste.KCiz); //slow stoK
//liste.DCiz = MA(PeriyotD, liste.KCiz); //slow stoD
}
return liste;
}
catch { return liste; }
}

public struct STOCiz
{
public List<float> KCiz { get; set; }
public List<float> DCiz { get; set; }
}


Hepsi bir arada indirmek için UserLib.cs (https://drive.google.com/open?id=0B0VMBB05UaPWTGJKLWg1RVhwMGM&authuser=0)

thebaboli
08-02-2015, 19:19
// data sayısı öğren
var Sembol = Sistem.Sembol;

var Y = Sistem.Periyot ;
var x = Sistem.BarSayisi;

var Renk0 = Sistem.Renk(255, 255, 0, 0); //
Sistem.ZeminYazisiEkle("Periyot : " + Y , 1, 100, 220, Renk0, "Tahoma", 12);
Sistem.ZeminYazisiEkle("Data sayısı : " + x , 1, 100, 240, Renk0, "Tahoma", 12);
Sistem.ZeminYazisiEkle(Sembol , 1, 100, 190, Renk0, "Tahoma", 18);
// işlemlerin sonu


*************

Exfake
10-02-2015, 15:20
User.dll ve Lib.cs için C# kodları..

Bollinger bandı ve Momentum eklendi..

İndirmek için UserLib.cs (https://drive.google.com/open?id=0B0VMBB05UaPWTGJKLWg1RVhwMGM&authuser=0)

Exfake
10-02-2015, 15:26
Bear_Bull abimiz yılbaşı hediyesi vermişti.
Bende sevgililer günü hediyesi hazırlıyorum. :he:

http://i62.tinypic.com/rt3riw.png

Pek yakında..

thebaboli
11-02-2015, 13:09
Hediyeniz için şimdiden teşekkürler Sn Exfake :cool:





Değerli arkadaşlar matriskde expolerarda formül yazıp hisse aratıyorduk, ideal de 50 HO nun 200 HO yu yukarı kestiği formülü nasıl ve nereye yazıp bu şartları saglayan hisseleri buluruz,mümkünse fotograflı anlatmanız mümkün mü şimdiden teşekkür ederim

Herhangi bir periyot için, son barında 50'lik ortalamanın, 200'lük ortalamayı kestiği senetleri filtreleyen örnek sorgu kodu;



Sistem.SorguBaslik[0] = "Kapanış";
Sistem.SorguBaslik[1] = "MA50";
Sistem.SorguBaslik[2] = "MA200";

var MA50 = Sistem.MA(50, "Simple", "Kapanis");
var MA200= Sistem.MA(200, "Simple", "Kapanis");

var SonMA50 = MA50[Sistem.BarSayisi-1];
var SonMA200 = MA200[Sistem.BarSayisi-1];


if (Sistem.YukariKestiyse(MA50,MA200) || Sistem.AsagiKestiyse(MA50,MA200))
{
Sistem.SorguDeger[0] = Sistem.GrafikVerileri[Sistem.BarSayisi-1].Close;
Sistem.SorguDeger[1] = SonMA50;
Sistem.SorguDeger[2] = SonMA200;

if (Sistem.YukariKestiyse(MA50,MA200))
Sistem.SorguAciklama = "Yukarı Kesti";
else if (Sistem.AsagiKestiyse(MA50,MA200))
Sistem.SorguAciklama = "Aşağı Kesti";

Sistem.SorguEkle();
}


http://i.hizliresim.com/oArLz9.png (http://hizliresim.com/oArLz9)

-edit-
Not: Gerek tarama sırasında hata mesajı almamak için gerekse tam/doğru sonuçların filtrelenebilmesi için, taramayı yaptıracağınız sembol grubunu grafik verilerinin boş/eksik olmaması gerektiğine dikkat ediniz.




Örneğin basit bir hali aşağıda gösterdiğim gibi bir sorgu yazmak ve bunu geliştirmek..
(son gün kapanışı, 1 aylık zirve veya dip fiyatına %3 den daha yakın olan hisseler)




Sistem.SorguBaslik[0] = "Kapanış";
Sistem.SorguBaslik[1] = "Zirve";
Sistem.SorguBaslik[2] = "Dip";

var Veriler = Sistem.GrafikFiyatSec("Kapanis");
var HHV = Sistem.HHV(30,"Kapanis");
var LLV = Sistem.LLV(30,"Kapanis");

var Son = Veriler[Sistem.BarSayisi-1];
var Zirve = HHV[Sistem.BarSayisi-1];
var Dip = LLV[Sistem.BarSayisi-1];
var FarkZirve = Zirve * 0.97;
var FarkDip = Dip * 1.03;


// filtrele
if (Son < FarkDip || Son > FarkZirve )
{
Sistem.SorguDeger[0] = Sistem.GrafikVerileri[Sistem.BarSayisi-1].Close;
Sistem.SorguDeger[1] = Zirve;
Sistem.SorguDeger[2] = Dip;

if (Son < FarkDip )
Sistem.SorguAciklama = "Dibe Geldi";
else if (Son > FarkZirve)
Sistem.SorguAciklama = "Zirveye Geldi";
else
Sistem.SorguAciklama = "Normal";

Sistem.SorguEkle();
}


http://i.hizliresim.com/ao32dO.png (http://hizliresim.com/ao32dO)

thebaboli
11-02-2015, 17:27
FLAT Sistem Örneği

Hareketli Ortalama Sistemi;
kısa ortalama uzun ortalamayı kesince işlem yapılır,
% 5 kar durumunda TAKE PROFIT, % 2 zarar durumunda STOP uygulanır






// kapanış fiyatlarını oku
var C = Sistem.GrafikFiyatSec("Kapanis");

// hareketli ortalamaları hesapla
var MA1 = Sistem.MA(C, "Exp", 50);
var MA2 = Sistem.MA(C, "Exp", 100);


// strateji
var SonYon = "";
double Fiyat = 0;
for (int i = 1; i<Sistem.BarSayisi; i++)
{
if (MA1[i-1] < MA2[i-1] && MA1[i] >= MA2[i] && SonYon != "A") // AL
{
Sistem.Yon[i] = "A"; // alış
SonYon = Sistem.Yon[i];
Fiyat = C[i];
}
else if (MA1[i-1] > MA2[i-1] && MA1[i] <= MA2[i] && SonYon != "S") // SAT
{
Sistem.Yon[i] = "S"; // satış
SonYon = Sistem.Yon[i];
Fiyat = C[i];
}
else if (SonYon == "A" && C[i] > Fiyat * 1.05) // % 5 kar realizasyonu
{
Sistem.Yon[i] = "F"; // flat
SonYon = Sistem.Yon[i];
}
else if (SonYon == "A" && C[i] < Fiyat * 0.98) // % 2 stop
{
Sistem.Yon[i] = "F"; // flat
SonYon = Sistem.Yon[i];
}
else if (SonYon == "S" && C[i] < Fiyat * 0.95) // % 5 kar realizasyonu
{
Sistem.Yon[i] = "F"; // flat
SonYon = Sistem.Yon[i];
}
else if (SonYon == "S" && C[i] > Fiyat * 1.02) // % 2 stop
{
Sistem.Yon[i] = "F"; // flat
SonYon = Sistem.Yon[i];
}
}



// hesaplanan verileri çizgilere aktar ve açıklama ekle
Sistem.Cizgiler[0].Deger = MA1;
Sistem.Cizgiler[1].Deger = MA2;





Sn iDeal Trade ;

bu flat sistemler harika , sistem ve optimizasyon öreneklerinin yanı sıra birde robot için olan kodu göndermenizi özellikle sizden rica ediyorum.

teşekkürler.




var Sembol = "VIP'VIP-X030";
var Veriler = Sistem.GrafikVerileriniOku(Sembol,"1");
var Kapanislar= Sistem.GrafikFiyatOku(Veriler,"Kapanis");
var Sonbar = Veriler.Count-1;

var MA1 = Sistem.MA(Kapanislar, "Exp", 50);
var MA2 = Sistem.MA(Kapanislar, "Exp", 100);

var NetPoz = Sistem.PozisyonKontrolOku(Sembol);
float RefFiyat = (float)Sistem.SayiTablosunuOku("RefFiyat");
var SonFiyat = Sistem.SonFiyat(Sembol);

var SartAL = (MA1[Sonbar-2] < MA2[Sonbar-2] && MA1[Sonbar-1] >= MA1[Sonbar-1]);
var SartSAT = (MA1[Sonbar-2] > MA2[Sonbar-2] && MA1[Sonbar-1] <= MA1[Sonbar-1]);

if (SartAL && NetPoz <= 0)
{
Sistem.SayiTablosunuGuncelle("RefFiyat",Kapanislar[Sonbar]);
Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = "Alış";
Sistem.EmirMiktari = 1;
Sistem.EmirSuresi = "GUN"; // GUN, SNS, IKG
Sistem.EmirTipi = "KPY"; // KPY, KIE, GIE, SAR
Sistem.EmirFiyatTipi = "PYS"; // PYS, LMT, EIF, KAPSistem.EmirGonder();
Sistem.EmirFiyati = SonFiyat;
Sistem.EmirGonder();
NetPoz=NetPoz+1;
Sistem.PozisyonKontrolGuncelle(Sembol, NetPoz);
}
else if (SartSAT && NetPoz >= 0)
{
Sistem.SayiTablosunuGuncelle("RefFiyat",Kapanislar[Sonbar]);
Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = "Satış";
Sistem.EmirMiktari = 1;
Sistem.EmirSuresi = "GUN"; // GUN, SNS, IKG
Sistem.EmirTipi = "KPY"; // KPY, KIE, GIE, SAR
Sistem.EmirFiyatTipi = "PYS"; // PYS, LMT, EIF, KAPSistem.EmirGonder();
Sistem.EmirFiyati = SonFiyat;
Sistem.EmirGonder();
NetPoz=NetPoz-1;
Sistem.PozisyonKontrolGuncelle(Sembol, NetPoz);
}
else if (NetPoz == -1)
{
if (SonFiyat < RefFiyat * 0.95)
Sistem.SayiTablosunuGuncelle("RefFiyat",Kapanislar[Sonbar]);
else if (SonFiyat > RefFiyat * 1.02)

Sistem.SayiTablosunuGuncelle("RefFiyat",Kapanislar[Sonbar]);
Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = "Alış";
Sistem.EmirMiktari = 1;
Sistem.EmirSuresi = "GUN"; // GUN, SNS, IKG
Sistem.EmirTipi = "KPY"; // KPY, KIE, GIE, SAR
Sistem.EmirFiyatTipi = "PYS"; // PYS, LMT, EIF, KAPSistem.EmirGonder();
Sistem.EmirFiyati = SonFiyat;
NetPoz=NetPoz-1;
Sistem.PozisyonKontrolGuncelle(Sembol, NetPoz);

}
else if (NetPoz == 1)
{
if (SonFiyat > RefFiyat * 1.02)
Sistem.SayiTablosunuGuncelle("RefFiyat",Kapanislar[Sonbar]);
else if (SonFiyat < RefFiyat * 0.95)
Sistem.SayiTablosunuGuncelle("RefFiyat",Kapanislar[Sonbar]);

//emir gönder
Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = "Satış";
Sistem.EmirMiktari = 1;
Sistem.EmirSuresi = "GUN"; // GUN, SNS, IKG
Sistem.EmirTipi = "KPY"; // KPY, KIE, GIE, SAR
Sistem.EmirFiyatTipi = "PYS"; // PYS, LMT, EIF, KAPSistem.EmirGonder();
Sistem.EmirFiyati = SonFiyat;
Sistem.EmirGonder();
NetPoz=NetPoz+1;
Sistem.PozisyonKontrolGuncelle(Sembol, NetPoz);

}


******************************


Ben flatli robotu çalıştıramadım. Başka bir "flatli robot" örneği mümkünmü acaba?


Kendi söküğümü dikeyim bari !
( Kullanmadan önce lütfen test ediniz )



//periyot ve sembol seçimi
var Periyot1 = "5" ;
var Sembol1 ="VIP'VIP-X030" ;
var Sembol = "VIP'F_XU0300215S0" ;

//verileri oku
var V = Sistem.GrafikVerileriniOku(Sembol1 , Periyot1) ;
var C = Sistem.GrafikFiyatOku(V, "Kapanis") ;


// hareketli ortalamaları hesapla
var MA1 = Sistem.MA(C, "Exp", 50);
var MA2 = Sistem.MA(C, "Exp", 100);

// yüzdeleri gir
var a_tp_y = 5f ; // long kar al
var a_s_y = 2f ; // long stop
var s_tp_y = 5f ; // short kar al
var s_s_y = 2f ; // short stop



var Pozisyon = Sistem.PozisyonKontrolOku(Sistem.Name +" "+ Sembol) ;
var IslemFiyat = Sistem.SayiTablosunuOku(Sistem.Name +" "+ Sembol) ;

var j = V.Count - 2 ;
// (V.Count - 2) ise son barın kapanışını bekler,
// (V.Count - 1) ise son barın kapanışını beklemeden bar içinde, koşulun gerçekleştiği "tick" de işlem yapar

var Islem = "" ;
var Miktar = 0 ;

var SonFiyat = Sistem.SonFiyat(Sembol);

if ( SonFiyat > 0 && (Sistem.SaatAraligi("09:05", "12:35") || Sistem.SaatAraligi("13:50", "17:50")) && DateTime.Now.DayOfWeek != DayOfWeek.Saturday && DateTime.Now.DayOfWeek != DayOfWeek.Sunday )
{

var A1 = MA1[j-1] < MA2[j-1] && MA1[j] >= MA2[j] ;
var S1 = MA1[j-1] > MA2[j-1] && MA1[j] <= MA2[j] ;



if (A1 && Pozisyon <= 0) // alış
{
Islem = "ALIS" ;

if (Pozisyon == 0) // pozisyonum yoksa 1 lot al
Miktar = 1 ;
else if (Pozisyon < 0) // short isem stop and reverse , 2 lot al
Miktar = 2 ;
}




else if (S1 && Pozisyon >= 0) // satış
{
Islem = "SATIS" ;

if (Pozisyon == 0) // pozisyonum yoksa 1 lot sat
Miktar = 1 ;
else if (Pozisyon > 0) // long isem stop and reverse , 2 lot sat
Miktar = 2 ;
}


else if ( ( C[j] > Convert.ToDouble(IslemFiyat) * ( 1 + a_tp_y / 100 ) ) || ( C[j] < Convert.ToDouble(IslemFiyat) * ( 1 - a_s_y / 100 ) ) && Pozisyon > 0 ) // long ise tp veya stop
{
Islem = "SATIS" ;
Miktar = 1 ;
}


else if ( ( C[j] < Convert.ToDouble(IslemFiyat) * ( 1 - s_tp_y / 100 ) ) || ( C[j] > Convert.ToDouble(IslemFiyat) * ( 1 + s_s_y / 100 ) ) && Pozisyon < 0 ) // short ise tp veya stop
{
Islem = "ALIS" ;
Miktar = 1 ;
}



}






// emri gönder
if (Islem != "")
{
if (Islem == "ALIS")
{
Sistem.PozisyonKontrolGuncelle(Sistem.Name +" "+ Sembol, Pozisyon+Miktar) ;
Sistem.SayiTablosunuGuncelle(Sistem.Name +" "+ Sembol, SonFiyat) ;
}

else if (Islem == "SATIS")
{
Sistem.PozisyonKontrolGuncelle(Sistem.Name +" "+ Sembol, Pozisyon-Miktar) ;
Sistem.SayiTablosunuGuncelle(Sistem.Name +" "+ Sembol, SonFiyat) ;
}

Sistem.EmirSembol = Sembol ;
Sistem.EmirIslem = Islem ;
Sistem.EmirMiktari = Miktar ;
Sistem.EmirFiyati ="Aktif" ;
Sistem.EmirSuresi = "GUN" ; // GUN, SNS, IKG
Sistem.EmirTipi = "KPY" ; // KPY, KIE, GIE, SAR
Sistem.EmirFiyatTipi = "PYS" ; // PYS, LMT, EIF, KAP
Sistem.EmirGonder() ;
}

Bear_Bull
13-02-2015, 22:38
RSI Mirrors / reflections ( ilginç ve güzel bir gösterge)

(EXPERIMENTAL: using mirrors/reflections to pinpoint reversal points.
Can be used as a regular RSI.
can use mirrors/reflections to check how strong the moves are, or when they break apart. )

https://www.tradingview.com/v/U6HTqGKS/

http://i.hizliresim.com/gkXLb3.png (http://hizliresim.com/gkXLb3)



http://i.hizliresim.com/Yv43Xz.png (http://hizliresim.com/Yv43Xz)






var V = Sistem.GrafikVerileri ;
var source = Sistem.GrafikFiyatOku(V, "Kapanis" ) ;



var buylimit = 40 ;
var selllimit = 60 ;

var rsi1 = Sistem.RSI(source, 14) ;
var rsi2 = Sistem.RSI(source, 50) ;

var excess= Sistem.Liste(V.Count,0);

var posexcess = Sistem.Liste(V.Count,0);
var negexcess = Sistem.Liste(V.Count,0);

var posexcess1 = Sistem.Liste(V.Count,0);
var negexcess1 = Sistem.Liste(V.Count,0);
var posexcess2 = Sistem.Liste(V.Count,0);
var negexcess2 = Sistem.Liste(V.Count,0);

var posfilter = Sistem.Liste(V.Count,0);
var posfilter1 = Sistem.Liste(V.Count,0);
var posfilter2 = Sistem.Liste(V.Count,0);
var negfilter = Sistem.Liste(V.Count,0);
var negfilter1 = Sistem.Liste(V.Count,0);
var negfilter2 = Sistem.Liste(V.Count,0);


var posmirror = Sistem.Liste(V.Count,0);
var negmirror = Sistem.Liste(V.Count,0);
var posmirror1 = Sistem.Liste(V.Count,0);
var negmirror1 = Sistem.Liste(V.Count,0);
var posmirror2 = Sistem.Liste(V.Count,0);
var negmirror2 = Sistem.Liste(V.Count,0);

var posmfilter = Sistem.Liste(V.Count,0);
var posmfilter1 = Sistem.Liste(V.Count,0);
var posmfilter2 = Sistem.Liste(V.Count,0);
var negmfilter = Sistem.Liste(V.Count,0);
var negmfilter1 = Sistem.Liste(V.Count,0);
var negmfilter2 = Sistem.Liste(V.Count,0);

for (int i = 1; i < V.Count; i++)
{
excess[i] = rsi2[i]-rsi1[i] ;


posexcess[i] = excess[i] > 0 ? buylimit-excess[i] : buylimit ;
negexcess[i] = excess[i] < 0 ? selllimit-excess[i] : selllimit ;


posexcess1[i] = excess[i] > 0 ? buylimit-excess[i]*2 : buylimit;
negexcess1[i] = excess[i] < 0 ? selllimit-excess[i]*2 : selllimit;
posexcess2[i] = excess[i] > 0 ? buylimit-excess[i]*4 : buylimit;
negexcess2[i] = excess[i] < 0 ? selllimit-excess[i]*4 : selllimit;

posfilter[i] = posexcess[i] < 0 ? 0 : posexcess[i] ;
posfilter1[i] = posexcess1[i] < 0 ? 0 : posexcess1[i];
posfilter2[i] = posexcess2[i] < 0 ? 0 : posexcess2[i];
negfilter[i] = negexcess[i] > 100 ? 100 : negexcess[i];
negfilter1[i] = negexcess1[i] > 100 ? 100 : negexcess1[i];
negfilter2[i] = negexcess2[i] > 100 ? 100 : negexcess2[i];

posmirror[i] = excess[i] > 0 ? 0+excess[i] : 0 ;
negmirror[i] = excess[i] < 0 ? 100+excess[i] : 100;
posmirror1[i] = excess[i] > 0 ? 0+excess[i]*2 : 0;
negmirror1[i] = excess[i] < 0 ? 100+excess[i]*2 : 100;
posmirror2[i] = excess[i] > 0 ? 0+excess[i]*4 : 0;
negmirror2[i] = excess[i] < 0 ? 100+excess[i]*4 : 100;

posmfilter[i] = posmirror[i] > buylimit ? buylimit : posmirror[i];
posmfilter1[i] = posmirror1[i] > buylimit ? buylimit : posmirror1[i];
posmfilter2[i] = posmirror2[i] > buylimit ? buylimit : posmirror2[i];
negmfilter[i] = negmirror[i] < selllimit ? selllimit : negmirror[i];
negmfilter1[i] = negmirror1[i] < selllimit ? selllimit : negmirror1[i];
negmfilter2[i] = negmirror2[i] < selllimit ? selllimit : negmirror2[i];


}

Sistem.Cizgiler[0].Deger = posfilter;
Sistem.Cizgiler[1].Deger = posfilter1;
Sistem.Cizgiler[2].Deger = posfilter2;
Sistem.Cizgiler[3].Deger = negfilter;
Sistem.Cizgiler[4].Deger = negfilter1;
Sistem.Cizgiler[5].Deger = negfilter2;
Sistem.Cizgiler[6].Deger = posmfilter;
Sistem.Cizgiler[7].Deger = posmfilter1;
Sistem.Cizgiler[8].Deger = posmfilter2;
Sistem.Cizgiler[9].Deger = negmfilter;
Sistem.Cizgiler[10].Deger = negmfilter1;
Sistem.Cizgiler[11].Deger = negmfilter2;




sn anonim'den {emeklerine sağlık} ilginç bir gösterge
cizgilerin gösterimi için PANEL=2 kullanın.

Exfake
14-02-2015, 15:25
http://i.hizliresim.com/dnbpJn.png (http://hizliresim.com/dnbpJn)



//selam öncelikle bu bir al-sat sistemi değil
//bu sistem izleme ekranı, sistem özeti, sistem bilgisi gibi bişey
//örnek olması açısından aşagıdaki 2 ma kesişme sistemini kullandım
//siz kendi sistemlerinize monte edeceksiniz
//ihtiyacımız olan şey sistemlerinizin al-sat sinyalleri
//başlamadan önce en alttaki notları okumanızı öneririm

//*****sisteminizin bölgesi*****
var time = DateTime.Now;
var Veriler = Sistem.GrafikVerileri; //sisteminizde varsa silebilirsiniz
var MA1 = Sistem.MA(10, "Exp", "Kapanis");
var MA2 = Sistem.MA(50, "Exp", "Kapanis");
//bu noktadan yukarıya kendi sisteminizi yapıştırın
//yada bu noktadan aşağısını kendi sisteminize yapıştırın :)

//*****parametreler bölgesi*****
float Sermaye = float.Parse(Sistem.Parametreler[0]); //parametreler 0'a sermaye girin örn: 10000
float KomOran = float.Parse(Sistem.Parametreler[1]); //parametreler 1'e komisyon oranınızı girin (virgül kullanın) örn: 0,0002 - komisyon hesaplatmak istemiyorsanız 0 yazın
int Kontrat = Convert.ToInt16(Sistem.Parametreler[2]); //parametreler 2'ye kontrat miktarınızı girin (bu sistemde sabit kontrat kullanılmıştır) örn: 10
float Kayma = float.Parse(Sistem.Parametreler[3]); //parametreler 3'e kayma miktarını girin (puan olarak) örn: 50
//burda kayma kısmında diyelim long açtınız 50 puan kaydı, long kapatırken 50p daha kaydı toplam 100p kayma oldu bir işlemde, ama siz buraya 50 yazın sistem toplamı yapıyor
//tabiki her işlemde 50p kaymıyor bazen 100-200 bazen 0 bazende pozitif kayma olabiliyor sonuçta ortalama bir puan yazmalısınız, kayma hesaplatmak istemiyorsanız 0 yazın

//*****değişkenler bölgesi*****
var SermayeEgrisi = Sistem.Liste(Sermaye);
var NetSerEgrisi = Sistem.Liste(Sermaye);
var AlVeTut = Sistem.Liste(0);
var KomEgrisi = Sistem.Liste(0);
var KaymaEgrisi = Sistem.Liste(0);
var IslemMiktari = Sistem.Liste(0);
var Pozisyon = Sistem.Liste(0);
var KarZarar = Sistem.Liste(0);
var Komisyon = Sistem.Liste(0);
float SonPozisyon = 0;
float SonFiyat = 0;
float ToplamKarZarar = 0;
float ToplamKomi = 0;
float HedefFiyat = 0;
int LongSayar = 0;
int ShortSayar = 0;
int FlatSayar = 0;
int BasBar = 1;
int IslemBar = 1;

//*****parametreler sorgu bölgesi*****
//bu bölge sisteminizi belirli bir tarihten mesela yılbaşından veya belirli bir bar sayısından atıyorum son 2000 bar başlatmak için
//burada parametreler 4'e Tarih yazıp parametreler 5'e 01.01.2015 yazarsanız yılbaşından itibaren hesaplar
//parametreler 4'e Bar yazıp parametreler 5'e 2000 yazarsanız son 2000 barı hesaplar
if (Sistem.Parametreler[4] == "Tarih") //parametreler 4'e Tarih yazıyoruz büyük küçük harf önemli
{
var Tarih = DateTime.Parse(Sistem.Parametreler[5]); //parametre 5'e başlatmak istediğimiz tarihi yazıyoruz birçok formatı kabul eder ama yinede dikkat örn: 01.01.2015
for (int i = 0; i < Veriler.Count; i++)
if (Veriler[0].Date > Tarih) { BasBar = 1; break; }
else if (Veriler[i].Date >= Tarih) { BasBar = i; break; }
}
else if (Sistem.Parametreler[4] == "Bar") //parametreler 4'e Bar yazıyoruz büyük küçük harf önemli
{
int Bar = Convert.ToInt16(Sistem.Parametreler[5]); //parametre 5'e başlatmak istediğimiz bar sayısını yazıyoruz örn: 2000
if (Veriler.Count > Bar) BasBar = Veriler.Count - Bar;
}
//tüm barları kullanmak için parametreler 4'e Tüm yazın, yani Tarih veya Bar haricinde herhangi birşey yazmanız yeterli

//*****sistem hesaplama bölgesi****
for (int i = BasBar; i < Veriler.Count; i++)
{
if (MA1[i - 1] < MA2[i - 1] && MA1[i] >= MA2[i] && SonPozisyon <= 0)//burada örn sistem ma kesişmesi yerine siz kendi sisteminizin al koşulunu yazın
//sisteminizde strateji belirlemişseniz aşağıdaki gibi yapabilirsiniz
//if (Sistem.Yon[i] == "A" && Sistem.Yon[i-1] != "A" && SonPozisyon <= 0)
{//*****al koşulu bölgesi*****
if (SonPozisyon == 0) IslemMiktari[i] = Kontrat;
else if (SonPozisyon < 0) IslemMiktari[i] = Kontrat * 2;
Sistem.Yon[i] = "A"; //sisteminizde strateji belirlemişseniz burayı kapatın
LongSayar++;
IslemBar = i;
SonFiyat = Veriler[i].Close;
HedefFiyat = SonFiyat + 3f; //örnek sistemde long hedef 3000puan
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
ToplamKomi = SonFiyat * KomOran * IslemMiktari[i];
KomEgrisi[i] = KomEgrisi[i - 1] + Math.Abs(ToplamKomi) * 100;
KaymaEgrisi[i] = KaymaEgrisi[i - 1] + Math.Abs(Kayma * IslemMiktari[i] / 10);
if(Sistem.Parametreler[7] == "Göster") Sistem.YaziEkle("AL@" + SonFiyat, 1, i, Veriler[i].Low - 0.5f, Sistem.Renk(255, 255, 255, 255), "Calibri", 7);
//parametreler 7'ye Göster yazarsanız grafik üzerinde al-sat fiyatları yazar
}
else if (MA1[i - 1] > MA2[i - 1] && MA1[i] <= MA2[i] && SonPozisyon >= 0)//kendi sisteminizin sat koşulunu yazıyorsunuz, SonPozisyon'a dokunmayın
{//*****sat koşulu bölgesi*****
if (SonPozisyon == 0) IslemMiktari[i] = Kontrat * -1;
else if (SonPozisyon > 0) IslemMiktari[i] = Kontrat * -2;
Sistem.Yon[i] = "S"; //sisteminizde strateji belirlemişseniz burayı kapatın
ShortSayar++;
IslemBar = i;
SonFiyat = Veriler[i].Close;
HedefFiyat = SonFiyat - 3f; //örnek sistemde short hedef 3000puan
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
ToplamKomi = SonFiyat * KomOran * IslemMiktari[i];
KomEgrisi[i] = KomEgrisi[i - 1] + Math.Abs(ToplamKomi) * 100;
KaymaEgrisi[i] = KaymaEgrisi[i - 1] + Math.Abs(Kayma * IslemMiktari[i] / 10);
if (Sistem.Parametreler[7] == "Göster") Sistem.YaziEkle("SAT@" + SonFiyat, 1, i, Veriler[i].High + 0.5f, Sistem.Renk(255, 255, 255, 255), "Calibri", 7);
}
else if (Veriler[i].Close >= HedefFiyat && SonPozisyon > 0)//hedef fiyat geçildiğinde flat ol koşulu sisteminizde flat yoksa bu bölgeleri kapatın
{//*****long flat koşulu bölgesi*****
Sistem.Yon[i] = "F"; //sisteminizde strateji belirlemişseniz burayı kapatın
FlatSayar++;
IslemMiktari[i] = Kontrat * -1;
SonFiyat = HedefFiyat;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
ToplamKomi = SonFiyat * KomOran * IslemMiktari[i];
KomEgrisi[i] = KomEgrisi[i - 1] + Math.Abs(ToplamKomi) * 100;
KaymaEgrisi[i] = KaymaEgrisi[i - 1] + Math.Abs(Kayma * IslemMiktari[i] / 10);
if (Sistem.Parametreler[7] == "Göster") Sistem.YaziEkle("FLAT@" + SonFiyat, 1, i, Veriler[i].High + 0.25f, Sistem.Renk(255, 255, 255, 255), "Calibri", 7);
}
else if (Veriler[i].Close <= HedefFiyat && SonPozisyon < 0)
{//*****short flat koşulu bölgesi*****
Sistem.Yon[i] = "F"; //sisteminizde strateji belirlemişseniz burayı kapatın
FlatSayar++;
IslemMiktari[i] = Kontrat * 1;
SonFiyat = HedefFiyat;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
ToplamKomi = SonFiyat * KomOran * IslemMiktari[i];
KomEgrisi[i] = KomEgrisi[i - 1] + Math.Abs(ToplamKomi) * 100;
KaymaEgrisi[i] = KaymaEgrisi[i - 1] + Math.Abs(Kayma * IslemMiktari[i] / 10);
if (Sistem.Parametreler[7] == "Göster") Sistem.YaziEkle("FLAT@" + SonFiyat, 1, i, Veriler[i].Low - 0.25f, Sistem.Renk(255, 255, 255, 255), "Calibri", 7);
}
else { KomEgrisi[i] = KomEgrisi[i - 1]; KaymaEgrisi[i] = KaymaEgrisi[i - 1]; }
Pozisyon[i] = SonPozisyon;
//KarZarar[i] = (ToplamKarZarar + SonFiyat * Pozisyon[i]) * 100; //pozisyon kapanana kadar bekler
KarZarar[i] = (ToplamKarZarar + Veriler[i].Close * Pozisyon[i]) * 100; //anlık görüntü
Komisyon[i] = Math.Abs(ToplamKomi) * 100;
SermayeEgrisi[i] = Sermaye + KarZarar[i];
NetSerEgrisi[i] = Sermaye + KarZarar[i] - KaymaEgrisi[i] - KomEgrisi[i];
AlVeTut[i] = Sermaye + (Veriler[i].Close - Veriler[BasBar].Close) * 1000;
}

//*****çeşitli kar zarar, değişken ve hesap bölgesi*****
var KarZararAy = Sistem.Liste(0);
float KarZararAy1 = 0;
int BarNoAy1 = 1;
float FarkAy = 0;
var KarZararHaf = Sistem.Liste(0);
float KarZararHaf1 = 0;
int BarNoHaf1 = 1;
float FarkHaf = 0;
var KarZararGun = Sistem.Liste(0);
float KarZararGun1 = 0;
int BarNoGun1 = 1;
float FarkGun = 0;
var KarZararIs = Sistem.Liste(0);
float KarZararIs1 = 0;
int BarNoIs1 = 1;
float FarkIs = 0;
for (int i = 1; i < Veriler.Count; i++)
{
if (Veriler[i].Date.Month != Veriler[i - 1].Date.Month)
{
FarkAy = KarZarar[i - 1] - KarZararAy1;
for (int j = BarNoAy1; j < i; j++)
KarZararAy[j] = FarkAy;
KarZararAy1 = KarZarar[i - 1];
BarNoAy1 = i;
}
if (Veriler[i].Date.DayOfWeek == DayOfWeek.Monday && Veriler[i - 1].Date.DayOfWeek != DayOfWeek.Monday)
{
FarkHaf = KarZarar[i - 1] - KarZararHaf1;
for (int j = BarNoHaf1; j < i; j++)
KarZararHaf[j] = FarkHaf;
KarZararHaf1 = KarZarar[i - 1];
BarNoHaf1 = i;
}
if (Veriler[i].Date.Day != Veriler[i - 1].Date.Day)
{
FarkGun = KarZarar[i - 1] - KarZararGun1;
for (int j = BarNoGun1; j < i; j++)
KarZararGun[j] = FarkGun;
KarZararGun1 = KarZarar[i - 1];
BarNoGun1 = i;
}
if (Sistem.Yon[i] == "A" || Sistem.Yon[i] == "S")
{
FarkIs = KarZarar[i] - KarZararIs1;
for (int j = BarNoIs1; j < i; j++)
KarZararIs[j] = FarkIs;
KarZararIs1 = KarZarar[i];
BarNoIs1 = i;
}
if (i == Veriler.Count - 1)
{
FarkAy = KarZarar[i] - KarZararAy1;
for (int j = BarNoAy1; j < Veriler.Count; j++)
KarZararAy[j] = FarkAy;
FarkHaf = KarZarar[i] - KarZararHaf1;
for (int j = BarNoHaf1; j < Veriler.Count; j++)
KarZararHaf[j] = FarkHaf;
FarkGun = KarZarar[i] - KarZararGun1;
for (int j = BarNoGun1; j < Veriler.Count; j++)
KarZararGun[j] = FarkGun;
FarkIs = KarZarar[i] - KarZararIs1;
for (int j = BarNoIs1; j < Veriler.Count; j++)
KarZararIs[j] = FarkIs;
}
}
var MaksSE = Sistem.Liste(0);
var DD = Sistem.Liste(0);
var MDD = Sistem.Liste(0);
var MaksIKZ = Sistem.Liste(0);
var MinIKZ = Sistem.Liste(0);
float MDDY = 0;
for (int i = 1; i < Veriler.Count; i++)
{
if (SermayeEgrisi[i] <= MaksSE[i - 1]) MaksSE[i] = MaksSE[i - 1]; else MaksSE[i] = SermayeEgrisi[i];
if (SermayeEgrisi[i] < MaksSE[i]) DD[i] = SermayeEgrisi[i] - MaksSE[i]; //drawdown hesaplar
if (DD[i] >= MDD[i - 1]) MDD[i] = MDD[i - 1]; else { MDD[i] = DD[i]; MDDY = (MaksSE[i] - Math.Abs(MDD[i])) / MaksSE[i] - 1; } //maksimum dd ve %dd hesaplar
if (KarZararIs[i] <= MaksIKZ[i - 1]) MaksIKZ[i] = MaksIKZ[i - 1]; else MaksIKZ[i] = KarZararIs[i];
if (KarZararIs[i] >= MinIKZ[i - 1]) MinIKZ[i] = MinIKZ[i - 1]; else MinIKZ[i] = KarZararIs[i];
}
var HedefCiz = Sistem.Liste(null);
for (int i = Veriler.Count - 1; i >= IslemBar; i--)
HedefCiz[i] = HedefFiyat; //hedef cizgisi cizer (hedef cizgisinin stilini yassı yapın yoksa ekranın ortasına çizmemesi(!) gereken bir çizgi çizer)

//*****cizgi tanımları bölgesi*****
Sistem.Cizgiler[0].Deger = SermayeEgrisi;
Sistem.Cizgiler[1].Deger = NetSerEgrisi;
Sistem.Cizgiler[2].Deger = MaksSE;
Sistem.Cizgiler[3].Deger = AlVeTut;
Sistem.Cizgiler[4].Deger = Sistem.Liste(0);
Sistem.Cizgiler[5].Deger = KarZarar;
Sistem.Cizgiler[6].Deger = KomEgrisi;
Sistem.Cizgiler[7].Deger = KaymaEgrisi;
Sistem.Cizgiler[8].Deger = Sistem.Liste(0);
Sistem.Cizgiler[9].Deger = DD;
Sistem.Cizgiler[10].Deger = MDD;
Sistem.Cizgiler[11].Deger = Sistem.Liste(0);
Sistem.Cizgiler[12].Deger = KarZararIs;
Sistem.Cizgiler[13].Deger = Sistem.Liste(0);
Sistem.Cizgiler[14].Deger = KarZararAy;
Sistem.Cizgiler[15].Deger = KarZararHaf;
Sistem.Cizgiler[16].Deger = KarZararGun;
Sistem.Cizgiler[17].Deger = Sistem.Liste(0);
Sistem.Cizgiler[18].Deger = HedefCiz;
Sistem.Cizgiler[0].Aciklama = "Sermaye Eğrisi";
Sistem.Cizgiler[1].Aciklama = "Net Sermaye Eğrisi";
Sistem.Cizgiler[2].Aciklama = "Maks SE";
Sistem.Cizgiler[3].Aciklama = "Al ve Tut";
Sistem.Cizgiler[4].Aciklama = "Boş Liste";
Sistem.Cizgiler[5].Aciklama = "Kar / Zarar Eğrisi";
Sistem.Cizgiler[6].Aciklama = "Komisyon Eğrisi";
Sistem.Cizgiler[7].Aciklama = "Kayma Egrisi";
Sistem.Cizgiler[8].Aciklama = "Boş Liste";
Sistem.Cizgiler[9].Aciklama = "Batak Eğrisi";
Sistem.Cizgiler[10].Aciklama = "Maks Drawdown";
Sistem.Cizgiler[11].Aciklama = "Boş Liste";
Sistem.Cizgiler[12].Aciklama = "İşlem Bazında K/Z";
Sistem.Cizgiler[13].Aciklama = "Boş Liste";
Sistem.Cizgiler[14].Aciklama = "Aylık K/Z";
Sistem.Cizgiler[15].Aciklama = "Haftalık K/Z";
Sistem.Cizgiler[16].Aciklama = "Günlük K/Z";
Sistem.Cizgiler[17].Aciklama = "Boş Liste";
Sistem.Cizgiler[18].Aciklama = "Hedef";
Sistem.Cizgiler[0].Renk = Sistem.Renk(255, 255, 0, 128);
Sistem.Cizgiler[1].Renk = Sistem.Renk(255, 255, 0, 255);
Sistem.Cizgiler[2].Renk = Sistem.Renk(255, 255, 0, 0);
Sistem.Cizgiler[3].Renk = Sistem.Renk(255, 0, 0, 64);
Sistem.Cizgiler[4].Renk = Sistem.Renk(255, 255, 255, 255);
Sistem.Cizgiler[5].Renk = Sistem.Renk(255, 255, 255, 255);
Sistem.Cizgiler[6].Renk = Sistem.Renk(255, 0, 128, 255);
Sistem.Cizgiler[7].Renk = Sistem.Renk(255, 255, 128, 128);
Sistem.Cizgiler[8].Renk = Sistem.Renk(255, 255, 255, 255);
Sistem.Cizgiler[9].Renk = Sistem.Renk(255, 0, 128, 255);
Sistem.Cizgiler[10].Renk = Sistem.Renk(255, 0, 0, 160);
Sistem.Cizgiler[11].Renk = Sistem.Renk(255, 255, 255, 255);
Sistem.Cizgiler[12].Renk = Sistem.Renk(255, 255, 255, 0);
Sistem.Cizgiler[13].Renk = Sistem.Renk(255, 255, 255, 255);
Sistem.Cizgiler[14].Renk = Sistem.Renk(255, 255, 255, 0);
Sistem.Cizgiler[15].Renk = Sistem.Renk(255, 0, 128, 255);
Sistem.Cizgiler[16].Renk = Sistem.Renk(255, 192, 192, 192);
Sistem.Cizgiler[17].Renk = Sistem.Renk(255, 255, 255, 255);
Sistem.Cizgiler[18].Renk = Sistem.Renk(255, 0, 255, 0);
Sistem.Cizgiler[0].Panel = 2;
Sistem.Cizgiler[1].Panel = 2;
Sistem.Cizgiler[2].Panel = 2;
Sistem.Cizgiler[3].Panel = 2;
Sistem.Cizgiler[4].Panel = 2;
Sistem.Cizgiler[5].Panel = 3;
Sistem.Cizgiler[6].Panel = 3;
Sistem.Cizgiler[7].Panel = 3;
Sistem.Cizgiler[8].Panel = 3;
Sistem.Cizgiler[9].Panel = 4;
Sistem.Cizgiler[10].Panel = 4;
Sistem.Cizgiler[11].Panel = 4;
Sistem.Cizgiler[12].Panel = 5;
Sistem.Cizgiler[13].Panel = 5;
Sistem.Cizgiler[14].Panel = 6;
Sistem.Cizgiler[15].Panel = 6;
Sistem.Cizgiler[16].Panel = 6;
Sistem.Cizgiler[17].Panel = 6;
Sistem.Cizgiler[18].Panel = 1;
Sistem.Cizgiler[0].Stil = 1;
Sistem.Cizgiler[1].Stil = 1;
Sistem.Cizgiler[2].Stil = 3;
Sistem.Cizgiler[3].Stil = 1;
Sistem.Cizgiler[4].Stil = 1;
Sistem.Cizgiler[5].Stil = 1;
Sistem.Cizgiler[6].Stil = 1;
Sistem.Cizgiler[7].Stil = 1;
Sistem.Cizgiler[8].Stil = 1;
Sistem.Cizgiler[9].Stil = 1;
Sistem.Cizgiler[10].Stil = 3;
Sistem.Cizgiler[11].Stil = 1;
Sistem.Cizgiler[12].Stil = 2;
Sistem.Cizgiler[13].Stil = 1;
Sistem.Cizgiler[14].Stil = 1;
Sistem.Cizgiler[15].Stil = 1;
Sistem.Cizgiler[16].Stil = 1;
Sistem.Cizgiler[17].Stil = 1;
Sistem.Cizgiler[18].Stil = 4;
Sistem.Cizgiler[0].ActiveBool = true;
Sistem.Cizgiler[1].ActiveBool = true;
Sistem.Cizgiler[2].ActiveBool = true;
Sistem.Cizgiler[3].ActiveBool = true;
Sistem.Cizgiler[4].ActiveBool = false;
Sistem.Cizgiler[5].ActiveBool = true;
Sistem.Cizgiler[6].ActiveBool = true;
Sistem.Cizgiler[7].ActiveBool = true;
Sistem.Cizgiler[8].ActiveBool = false;
Sistem.Cizgiler[9].ActiveBool = true;
Sistem.Cizgiler[10].ActiveBool = true;
Sistem.Cizgiler[11].ActiveBool = false;
Sistem.Cizgiler[12].ActiveBool = true;
Sistem.Cizgiler[13].ActiveBool = false;
Sistem.Cizgiler[14].ActiveBool = true;
Sistem.Cizgiler[15].ActiveBool = true;
Sistem.Cizgiler[16].ActiveBool = true;
Sistem.Cizgiler[17].ActiveBool = false;
Sistem.Cizgiler[18].ActiveBool = true;
Sistem.DolguEkle(0, 4, Sistem.Renk(100, 255, 0, 128), Sistem.Renk(100, 255, 0, 128));
Sistem.DolguEkle(1, 4, Sistem.Renk(100, 255, 0, 255), Sistem.Renk(100, 255, 0, 255));
Sistem.DolguEkle(2, 4, Sistem.Renk(50, 255, 0, 0), Sistem.Renk(50, 0, 0, 0));
Sistem.DolguEkle(5, 8, Sistem.Renk(100, 0, 255, 0), Sistem.Renk(100, 255, 0, 0));
Sistem.DolguEkle(10, 11, Sistem.Renk(50, 0, 0, 255), Sistem.Renk(50, 0, 0, 255));
Sistem.DolguEkle(12, 13, Sistem.Renk(100, 0, 255, 0), Sistem.Renk(100, 255, 0, 0));
Sistem.DolguEkle(14, 17, Sistem.Renk(150, 255, 255, 0), Sistem.Renk(50, 255, 255, 0));
Sistem.DolguEkle(15, 17, Sistem.Renk(150, 0, 128, 255), Sistem.Renk(50, 0, 128, 255));
Sistem.DolguEkle(16, 17, Sistem.Renk(150, 192, 192, 192), Sistem.Renk(50, 192, 192, 192));

//*****sistem bilgi ekranı bölgesi*****
if (Sistem.Parametreler[6] == "Göster") //parametreler 6'ya Göster yazarsanız bilgi ekranı açılır
{
string ozettablo = "";
ozettablo += "\tSistem Bilgi Ekranı\n";
ozettablo += "Başlangıç Sermayesi: " + Sermaye.ToString("C2") + "\n";
ozettablo += "Bitiş Sermayesi: " + SermayeEgrisi[SermayeEgrisi.Count - 1].ToString("C2") + "\n";
ozettablo += "Kar / Zarar: " + KarZarar[KarZarar.Count - 1].ToString("C2") + "\n";
ozettablo += "Komisyon: " + KomEgrisi[KomEgrisi.Count - 1].ToString("C2") + "\n";
ozettablo += "Kayma: " + KaymaEgrisi[KaymaEgrisi.Count - 1].ToString("C2") + "\n";
ozettablo += "Net Sermaye: " + NetSerEgrisi[NetSerEgrisi.Count - 1].ToString("C2") + "\n";
ozettablo += "Net Kar / Zarar: " + (NetSerEgrisi[NetSerEgrisi.Count - 1] - Sermaye).ToString("C2") + "\n";
ozettablo += "En Karlı İşlem: " + MaksIKZ[MaksIKZ.Count - 1].ToString("C2") + "\n";
ozettablo += "En Zararlı İşlem: " + MinIKZ[MinIKZ.Count - 1].ToString("C2") + "\n";
ozettablo += "Maks. Drawdown: " + MDD[MDD.Count - 1].ToString("N0") + " | " + MDDY.ToString("P2") + "\n";
ozettablo += "Long Sayısı: " + LongSayar + "\n";
ozettablo += "Short Sayısı: " + ShortSayar + "\n";
ozettablo += "Flat Sayısı: " + FlatSayar + "\n";
ozettablo += "Bar Sayısı: " + Veriler.Count + " bar..\n";
ozettablo += "Grafik Süresi: " + (DateTime.Now - time).Milliseconds + " ms..\n";
Sistem.ZeminYazisiEkle(ozettablo, 1, 5, 155, Sistem.Renk(200, 255, 255, 255), "Calibri", 8);
}

//*****notlar bölgesi*****
//viop için tasarlanmıştır, hisseler için değişiklik gerekir
//indikatör olarak çalışmaz, sistem olarak grafiğe atmalısınız
//sistemde bir çok değişken ismi var ve büyük ihtimal sizin sisteminizdeki değişkenler ile çakışacak dikkat örn: SonFiyat değişkeni
//yeni başlayan arkadaşlar için tavsiyem kendi sistemlerinize aktarmadan önce bu örnek sistemi iyice inceleyin
//neyin ne işe yaradığını anladıktan sonra ufak ufak taşınırsınız
//hesaplamalar nokta atışı değildir ufak tefek oynamalar olabilir
//bu sistemi hiç kullanmasanız bile yeni başlayan arkadaşlara bir çok örnek kodun yardımcı olacağını düşünüyorum
//örnek sistem kapanış fiyatına göre işlem yapar, kapanış fiyatı yerine belirli bir fiyat kullanıyorsanız 1-2 ufak değişiklik gerekiyor
//1920x1080 çözünürlüğe göre tasarlandı, çözünürlüğünüz küçükse görüntülemede sıkıntı olabilir
//beyaz ağırlıklı tema kullanıyorsanız, bazı çizgiler görünmeyebilir
//komisyon ve kayma sadece sermaye üzerine uygulanmıştır diğer tüm göstergeler ham puan ile hesaplanır
//umarım faydalı olmuştur
//saygılar..Ex


Dosya olarakda yükledim, isteyen indirip C:\iDeal\ChartSistem içine atabilir. Sistem_Bilgi.001 (https://drive.google.com/open?id=0B0VMBB05UaPWYUhKb3ctZnBCS00&authuser=0)

thebaboli
14-02-2015, 21:53
aşağıdaki kodu MA kesim sistemi olarak kabul edersek;

var Sembol = Sistem.Sembol;
var V = Sistem.GrafikVerileri;

var AX = Sistem.GrafikFiyatOku(V, "Kapanis");
var A1 = Sistem.MA(AX, "Exp", 10);
var A2 = Sistem.MA(AX, "Exp", 100);


// tara
var SartAl = false;
var SartSat = false;
var SonYon = "";
for (int i = 1 ; i < V.Count - 1; i++)
{
if (( ( A1[i] > A2[i] ) ) && SonYon != "A" ) // alış
{
SonYon = "A";
Sistem.Yon[i] = SonYon;
if (i == V.Count - 2) SartAl = true;

}
if (((A1[i] < A2[i] )) && SonYon != "S" ) // satış
{
SonYon = "S";
Sistem.Yon[i] = SonYon;
if (i == V.Count - 2) SartSat = true;
}
}




ben aşağıdaki yapıda robot kullanıyorum

var LotSize = 4.0;

var Sembol = "VIP'F_XU0300215S0";
var Periyot = "5";
Sistem.GrafikVerisiIndir(Sembol, Periyot);

var V = Sistem.GrafikVerileriniOku(Sembol, Periyot);

var AX = Sistem.GrafikFiyatOku(V, "Kapanis");
var A1 = Sistem.MA(AX, "Exp", 10);
var A2 = Sistem.MA(AX, "Exp", 100);


// tara
var SartAl = false;
var SartSat = false;
var SonYon = "";
for (int i = 1 ; i < V.Count - 1; i++)
{
if (( (A1[i] > A2[i] ) ) && SonYon != "A" ) // alış
{
SonYon = "A";
if (i == V.Count - 2) SartAl = true;
}
if (((A1[i] < A2[i] )) && SonYon != "S") // satış
{
SonYon = "S";
if (i == V.Count - 2) SartSat = true;
}
}


// emir gönder
var Islem = "";
var Miktar = 0.0;
var SonFiyat = Sistem.SonFiyat(Sembol);
var Pozisyon = Sistem.PozisyonKontrolOku(Sistem.Name + " , " + Sembol);

if (SonFiyat > 0 && (Sistem.SaatAraligi("09:10", "12:30") || Sistem.SaatAraligi("13:50", "17:45")) && V[V.Count-1].Date.Day == DateTime.Now.Day)
{
if (SartAl && Pozisyon <= 0) // alış
{
Islem = "ALIS";
if (Pozisyon == 0) // pozisyonum yoksa 1 lot al
Miktar = LotSize;
else if (Pozisyon < 0) // short isem stop and reverse , 2 lot al
Miktar = LotSize + Math.Abs(Pozisyon);
}
else if (SartSat && Pozisyon >= 0) // satış
{
Islem = "SATIS";
if (Pozisyon == 0) // pozisyonum yoksa 1 lot sat
Miktar = LotSize;
else if (Pozisyon > 0) // long isem stop and reverse , 2 lot sat
Miktar = LotSize + Math.Abs(Pozisyon);
}
}

// Emir Gönder !!!
if (Islem != "")
{
if (Islem == "ALIS")
Sistem.PozisyonKontrolGuncelle(Sistem.Name + " , " + Sembol, LotSize);
else if (Islem == "SATIS")
Sistem.PozisyonKontrolGuncelle(Sistem.Name + " , " + Sembol, -LotSize);

Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = Islem;
Sistem.EmirMiktari = Miktar;
Sistem.EmirSuresi = "GUN"; // GUN, SNS, IKG
Sistem.EmirTipi = "KPY"; // KPY, KIE, GIE, SAR
Sistem.EmirFiyatTipi = "PYS"; // PYS, LMT, EIF, KAP
Sistem.EmirGonder();


// mesaj
Sistem.Mesaj(DateTime.Now.ToString("HH:mm:ss") + "\r\n" + Miktar.ToString() + " " + Islem);


// mail
Sistem.MailServerAdres = "smtp.mail.yahoo.com";
Sistem.MailServerPort = 587;
Sistem.MailKonu = "İşlem Gerçekleşti";
Sistem.MailMetin = Miktar.ToString() + " " + Islem;
Sistem.MailGonderenAdres = "yahoo.com.tr";
Sistem.MailGonderenSifre = "xxx";
Sistem.MailAliciEkle("yahoo.com.tr");
Sistem.MailGonder();
}



diyelim 4 lot pozisyonunuz var ve bundan sonra 5 lota geçmek istiyorsunuz
var LotSize = 5.0;
yapmanız yeterli.
ilk dönüşte 9 adet emir gönderecek ve bundan sonra 5 lot trade edeceksiniz



kırmızı renkli satırlar barın kapandığını garanti ediyor.
benim makine 7X24 açık ve robot kusursuz çalışıyor.
sanal modda test edin.


for (int i = 1 ; i < V.Count - 1; i++)
{
if (( (A1[i] > A2[i] ) ) && SonYon != "A" ) // alış
{
SonYon = "A";
if (i == V.Count - 2) SartAl = true;
}
if (((A1[i] < A2[i] )) && SonYon != "S") // satış
{
SonYon = "S";
if (i == V.Count - 2) SartSat = true;
}
}

********************

Lyrklaunavan
16-02-2015, 09:57
http://i.imgur.com/s4n4M3g.jpg (http://imgur.com/s4n4M3g)




//
// @author Lyrklaunavan
// Inverse Fisher Transform of CCI
//

var V = Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V, "Kapanis" ) ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek" ) ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk" ) ;
var O = Sistem.GrafikFiyatOku(V, "Acilis" ) ;

var v1=Sistem.Liste(0);
var v2=Sistem.Liste(0);
var ifish=Sistem.Liste(0);

var lengthwma=20;

var cci=Sistem.CommodityChannelIndex(V, 9);

for( int i=1; i<V.Count; i++){

v1[i]=0.1f*(cci[i]-50);

}

v2=Sistem.MA(v1,"Wilder",lengthwma);

for( int i=1; i<V.Count; i++){

ifish[i]= (float) ((Math.Exp(2*v2[i])-1)/(Math.Exp(2*v2[i])+1));

}

Sistem.Cizgiler[0].Deger = ifish;
Sistem.Cizgiler[0].Aciklama = "ifish";

Lyrklaunavan
16-02-2015, 10:08
http://i.imgur.com/9q4f641.jpg (http://imgur.com/9q4f641)



//
// @author Lyrklaunavan
// Qstick
//

var V = Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V, "Kapanis" ) ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek" ) ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk" ) ;
var O = Sistem.GrafikFiyatOku(V, "Acilis" ) ;

var S2 =Sistem.Liste(0);

var length=8;

var CminusO=Sistem.Liste(0);

for( int i=1; i<V.Count; i++)
{
CminusO[i]=C[i]-O[i];
}

S2=Sistem.MA(CminusO,"Simple",length);

Sistem.Cizgiler[0].Deger = S2;
Sistem.Cizgiler[0].Aciklama = "S2";

thebaboli
17-02-2015, 11:19
harika bir sistem yakaladım.
bu da benim hediyem olsun
mavi çizgi dip ve tepenin orta noktasıdır.

http://i.hizliresim.com/LpZD3G.png (http://hizliresim.com/LpZD3G)






var V = Sistem.GrafikVerileri;
var C = Sistem.GrafikFiyatOku(V, "Kapanis");

var PARAM1 = 500;
var PARAM2 = 100;
var PARAM3 = 1.00;

var UpList = Sistem.Liste(0);
var DownList = Sistem.Liste(0);

var TrendYon = "";
var UpLevel = 0.0f;
var DownLevel = 0.0f;

for (var i=PARAM1+PARAM2; i<V.Count; i++)
{
var maxbarno = i;
var minbarno = i;
var max = V[i].High;
var min = V[i].Low;
for (var j=i-PARAM1; j<i; j++)
{
if (max < V[j].High)
{
max = V[j].High;
maxbarno = j;
}
if (min > V[j].Low)
{
min = V[j].Low;
minbarno = j;
}
}
var PeakBool = true;
if (maxbarno > 0)
{
var StartNo = maxbarno-PARAM2;
if (StartNo <0) StartNo = 0;
for (var j=StartNo; j<maxbarno; j++)
{
if (V[j].High > max)
PeakBool = false;
}
}
if (i-maxbarno > PARAM2 && PeakBool )
{
TrendYon = "UP";
UpLevel = V[maxbarno].High;
}
UpList[i] = UpLevel;


PeakBool = true;
if (minbarno > 0)
{
var StartNo = minbarno-PARAM2;
if (StartNo <0) StartNo = 0;
for (var j=StartNo; j<minbarno; j++)
{
if (V[j].Low < min)
PeakBool = false;
}
}
if (i-minbarno > PARAM2 && PeakBool )
{
TrendYon = "DOWN";
DownLevel = V[minbarno].Low;
}
UpList[i] = UpLevel;
DownList[i] = DownLevel;



}


var MidList = Sistem.Liste(0);
for (var i=1; i<V.Count; i++)
{
MidList[i] = (UpList[i]+DownList[i])/2;
}
var Avr = Sistem.MA(C,"Exp",50);


Sistem.Cizgiler[0].Deger = UpList;
Sistem.Cizgiler[1].Deger = DownList;
Sistem.Cizgiler[2].Deger = MidList;
Sistem.Cizgiler[3].Deger = Avr;
Sistem.Cizgiler[4].Deger = Sistem.MA(MidList,"Exp",100);

var SonYon="";
for (var i=1; i<V.Count; i++)
{
if (SonYon != "A" && Avr[i] > MidList[i])
{
Sistem.Yon[i] = "A";
SonYon = Sistem.Yon[i];
}
else if (SonYon != "S" && Avr[i] < MidList[i])
{
Sistem.Yon[i] = "S";
SonYon = Sistem.Yon[i];
}

}





Tiberius'a teşekkürler :cool:

thebaboli
17-02-2015, 16:26
Ehler Fisher Transform Indicator

http://i.hizliresim.com/39v0ap.png (http://hizliresim.com/39v0ap)



// Fisher transform formula is: y = 0.5 * ln ((1+x)/(1-x))
// Median price = hl/2
// Typical price = hlc/3

var V = Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V, "Kapanis" ) ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek" ) ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk" ) ;
var O = Sistem.GrafikFiyatOku(V, "Acilis" ) ;
var T = Sistem.GrafikFiyatOku(V, "OrtaNokta" ) ;



var Length = 10 ;


var xMaxH =Sistem.HHV( Length, T) ;
var xMinL =Sistem.LLV(Length, T) ;

var nValue1 = Sistem.Liste(V.Count, 0);
var nValue2 = Sistem.Liste(V.Count, 0);
var nFish = Sistem.Liste(V.Count, 0);
var xFish = Sistem.Liste(V.Count, 0);

for (int i = Length; i < V.Count; i++)
{

nValue1[i] = 0.33f * 2 * ((T[i] - xMinL[i]) / (xMaxH[i] - xMinL[i]) - 0.5f) + 0.67f * nValue1[i-1] ;

if(nValue1[i] > 0.99f) nValue2[i] = 0.999f ;
else if(nValue1[i] < -0.99f ) nValue2[i] = -0.999f ;
else nValue2[i] = nValue1[i] ;

nFish[i] = 0.5f * (float) Math.Log((1 + nValue2[i]) / (1 - nValue2[i])) + 0.5f * nFish[i-1] ;
xFish[i] = nFish[i-1] ;

}

Sistem.Cizgiler[0].Deger = nFish; // panel 2
Sistem.Cizgiler[1].Deger = xFish; // panel 2



Anonim'e teşekkürler. :cool:

thebaboli
18-02-2015, 01:27
İhtimal Ata indikatoru

böyle hediyeyi bulamazsınız bidaha :) sinan hocam diğer tarafa aktarırsın.

değerleri istediğiniz gibi değiştirirsiniz. ilk sistemim ve paylasımım olsun buda


// GRAFİKTEKİ DAKİKAYA GÖRE KAPANISLARI OKU
var Kapanislar = Sistem.GrafikFiyatSec("Kapanis");

// indikatorlerını HESAPLA
var MA1 = Sistem.MA (191, "Simple", "Kapanis");
var MA2 = Sistem.MA (50, "Simple", "Kapanis");
var TOMA = Sistem.TOMA (10, 5);
var MA3 = Sistem.MA(100, "Simple", "Kapanis");


// İHTİMALLER LİSTESİ YAP
var ihtimal1 = Sistem.Liste(0);
var ihtimal2 = Sistem.Liste(0);
var ihtimal3 = Sistem.Liste(0);
var ihtimal4 = Sistem.Liste(0);
var ihtimal5 = Sistem.Liste(0);
var ihtimal6 = Sistem.Liste(0);


// MA1 NASIL ÇALIŞACAK
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if (( MA1[i-1] > Kapanislar[i-1] && MA1[i] < Kapanislar[i] ) || (MA1[i] > Kapanislar[i]) )
ihtimal1[i] = -10;
}

for (int i = 1; i < Sistem.BarSayisi; i++)
{
if (( MA1[i-1] < Kapanislar[i-1] && MA1[i] > Kapanislar[i] ) || (MA1[i] < Kapanislar[i]) )
ihtimal2[i] = 10;
}

// MA2 NASIL ÇALIŞACAK
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if (( MA2[i-1] > Kapanislar[i-1] && MA2[i] < Kapanislar[i] ) || (MA2[i] > Kapanislar[i]) )
ihtimal3[i] = -5;
}

for (int i = 1; i < Sistem.BarSayisi; i++)
{
if (( MA2[i-1] < Kapanislar[i-1] && MA2[i] > Kapanislar[i] ) || (MA2[i] < Kapanislar[i]) )
ihtimal4[i] = 5;
}

// TOMA NASIL ÇALIŞACAK
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if (( TOMA[i-1] > Kapanislar[i-1] && TOMA[i] < Kapanislar[i] ) || (TOMA[i] > Kapanislar[i]) )
ihtimal3[i] = -5;
}

for (int i = 1; i < Sistem.BarSayisi; i++)
{
if (( TOMA[i-1] < Kapanislar[i-1] && TOMA[i] > Kapanislar[i] ) || (TOMA[i] < Kapanislar[i]) )
ihtimal4[i] = 5;
}


// MA3 NASIL ÇALIŞACAK
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if (( MA3[i-1] > Kapanislar[i-1] && MA3[i] < Kapanislar[i] ) || (MA3[i] > Kapanislar[i]) )
ihtimal5[i] = -15;
}

for (int i = 1; i < Sistem.BarSayisi; i++)
{
if (( MA3[i-1] < Kapanislar[i-1] && MA3[i] > Kapanislar[i] ) || (MA3[i] < Kapanislar[i]) )
ihtimal6[i] = 15;
}

// İHTİMALLERİ TOPLA VE LİSTELE
var ihtimal = Sistem.Liste(0);

for (int i = 0; i < Sistem.BarSayisi; i++)
ihtimal[i] = (ihtimal1[i] + ihtimal2[i] + ihtimal3[i] + ihtimal4[i] + ihtimal5[i] + ihtimal6[i] + 0) ; // 0 anlamı sizin öngörünüz

// İNDİKATÖRLERİN ÇİZGİLERİ
Sistem.Cizgiler[0].Deger = MA1;
Sistem.Cizgiler[1].Deger = MA2;
Sistem.Cizgiler[2].Deger = TOMA;
Sistem.Cizgiler[3].Deger = ihtimal;
Sistem.Cizgiler[4].Deger = MA3;

// STRATEJİ
var SonYon = "";
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if ( ihtimal[i] >= 10 && SonYon != "A" ) // İHTİMAL +10 ÇIKARSA AL
{
Sistem.Yon[i] = "A";
SonYon = Sistem.Yon[i] ;
}

if ( ihtimal[i] <= -10 && SonYon != "S" ) // İHTİMAL -10 ÇIKARSA SAT
{
Sistem.Yon[i] = "S";
SonYon = Sistem.Yon[i] ;
}


if ( ihtimal[i] == 0 && SonYon != "F") // 0 cıkarsa kar al veya stop loss yap
{
Sistem.Yon[i] = "F"; // flat
SonYon = Sistem.Yon[i];
}



15 dakikalıkta

http://i.hizliresim.com/4LPDaA.png


20 dakıkalıkta

http://i.hizliresim.com/1YL4EB.png

30 dakıaklıkta

http://i.hizliresim.com/22ry6E.png



not sisz istediğiniz şekli ve ihtimali istediğiniz indikatore giydirin ;)

****************************************

Erhan'a teşekkürler. :cool:

Bear_Bull
18-02-2015, 21:00
**********

Schaff Trend Cycle Indicator

The Schaff Trend Cycle is a faster and more accurate indicator than the MACD because the currency cycle trends are factored into the equation of the MACD. The STC Indicator uses a 23- and 50-period EMA with a cycle component used as the 10-period signal line. Factoring in cycle trends based on a certain amount of days, indicates how far and how long a trend lasts. The algorithm involves applying the smoothed stochastic twice on the MACD Line. The result combines the benefits of both indicators. In trending markets it moves between 0 and 100, rising when an uptrend is accelerating and falling when a downtrend is accelerating.

http://i.hizliresim.com/pR0PVq.png (http://hizliresim.com/pR0PVq)






var V = Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V, "Kapanis" ) ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek" ) ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk" ) ;

var p = 10 ;
var ps= 23 ;
var pl = 50 ;
var Factor = 0.5f ;

var MAs=Sistem.MA(C, "Exp", ps ) ;
var MAl=Sistem.MA(C, "Exp", pl ) ;

var f1 = Sistem.Liste(V.Count, 0) ;

for (int i = 1; i < V.Count; i++)
{
f1[i] = MAs[i] - MAl[i] ;
}

var MA=Sistem.MA(f1, "Exp", p ) ;

var xmac = Sistem.Liste(V.Count, 0) ;

for (int i = 1; i < V.Count; i++)
{
xmac[i] = f1[i] - MA[i] ;
}


var Value1= Sistem.LLV(p, xmac);
var Value22= Sistem.HHV(p, xmac);

var Value2= Sistem.Liste(V.Count, 0) ;
var Frac1= Sistem.Liste(V.Count, 0) ;
var PF= Sistem.Liste(V.Count, 0) ;

for (int i = 1; i < V.Count; i++)
{
Value2[i] = Value22[i] - Value1[i] ;
Frac1[i] = Value2[i] > 0 ? ( ( xmac[i] - Value1[i] )/ Value2[i] ) * 100f : Frac1[i-1] ;
PF[i] = i <= 1 ? Frac1[i] : ( PF[i-1]+ ( Factor * ( Frac1[i] - PF[i-1] ) ) ) ;
}


var Value3= Sistem.LLV(p, PF);
var Value44= Sistem.HHV(p, PF);

var Value4= Sistem.Liste(V.Count, 0) ;
var Frac2= Sistem.Liste(V.Count, 0) ;
var PFF= Sistem.Liste(V.Count, 0) ;

for (int i = 1; i < V.Count; i++)
{
Value4[i] = Value44[i] - Value3[i] ;
Frac2[i] = Value4[i] > 0 ? ( ( PF[i] - Value3[i] ) / Value4[i] ) * 100 : Frac2[i-1] ;

PFF[i]= i <=1 ? Frac2[i] : ( PFF[i-1] + ( Factor * ( Frac2[i] - PFF[i-1] ))) ;

}

Sistem.Cizgiler[0].Deger = PFF; // panel 2

Lyrklaunavan
19-02-2015, 22:26
http://i.imgur.com/GONlMBd.jpg (http://imgur.com/GONlMBd)



//
//Created by SharpDevelop.
//User: Lyrklaunavan
//Date: 19-Dec-14
//RMO(Rahul Mohindar Oscillator)
//To change this template use Tools | Options | Coding | Edit Standard Headers.
//

var V = Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V, "Kapanis" ) ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek") ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk") ;

var Bar = Sistem.GrafikVerileri;
var BarSayisi = Sistem.BarSayisi;
var BaslangicNo = 1;
var Veriler = Sistem.GrafikVerileri;

var M1 = Sistem.MA(C , "Simple", 2);
var M2 = Sistem.MA(M1, "Simple", 2);
var M3 = Sistem.MA(M2, "Simple", 2);
var M4 = Sistem.MA(M3, "Simple", 2);
var M5 = Sistem.MA(M4, "Simple", 2);
var M6 = Sistem.MA(M5, "Simple", 2);
var M7 = Sistem.MA(M6, "Simple", 2);
var M8 = Sistem.MA(M7, "Simple", 2);
var M9 = Sistem.MA(M8, "Simple", 2);
var M10 = Sistem.MA(M9, "Simple", 2);

var HHV = Sistem.HHV(10, "Kapanis");
var LLV = Sistem.LLV(10, "Kapanis");

var SwingTrd1 = Sistem.Liste(0);

for (int i = 1; i < V.Count; i++)
{
SwingTrd1[i]= 100* ( (C[i]- ((M1[i]+M2[i]+M3[i]+M4[i]+M5[i]+M6[i]+M7[i]+M8[i]+M9[i]+M10[i])/10)) / (HHV[i]-LLV[i]) );
}

var S2 = Sistem.MA(SwingTrd1, "Simple", 30);
var S3 = Sistem.MA(S2, "Simple", 30);

var diff = Sistem.Liste(0);

for (int i = 1; i < V.Count; i++)
{
diff[i]= S2[i]-S3[i];
}

//ekrana cizdir
Sistem.Cizgiler[0].Deger = diff;
Sistem.Cizgiler[0].Aciklama = "diff";

Sistem.Cizgiler[1].Deger = Sistem.Liste(0);




Not: Sag ust panelde 0 nolu yere `diff` yazip check etmeniz lazim. (Histograma cevirirseniz daha kolay okunabiliyor) Ayni zamanda 1 nolu yere birsey yazmaniza gerek yok. Sadece check etseniz yeterli... (0 cizgisi icin)

Kaynak: http://www.traderji.com/metastock/14275-rmo-formula-2.html

KORSAN_WW
20-02-2015, 09:55
Günaydınlar,

Hareketli ortalamalara dayalı bir sistemde Flat şartı olarak aşağıdaki gibi bir şey nasıl formüle edilir.

SAT sinyali flat koşulu
Son pozisyon getirisi >+5000
Son pozisyondan sonra görülen en düşük seviye = dip
Flat şartı = son fiyat > dip +3000

yani flatın devreye girmesi için son siyalin getirisinin +5.000 den fazla olması lazım, (son poz getirisi 5000 den fazla olmazsa flat şartı olmayacak)
+5.000 yakalandıktan sonra, son sinyalden sonra görülen en düşük seviyeden +3.000 fazla artarsa pozisyon FLAT olur.

Al sinyali için
Son pozisyon getirisi >+5000
Son pozisyondan sonra görülen en yüksek seviye = tepe
Flat şartı = son fiyat < tepe-3000




http://i.hizliresim.com/blG2Dn.png (http://hizliresim.com/blG2Dn)


sistemdir, robot olarak kullanmayın.
hatalar olabilir, test edin.





// kapanış fiyatlarını oku
var C = Sistem.GrafikFiyatSec("Kapanis");
var H = Sistem.GrafikFiyatSec("Yuksek");
var L = Sistem.GrafikFiyatSec("Dusuk");

// hareketli ortalamaları hesapla
var MA1 = Sistem.MA(C, "Exp", 50);
var MA2 = Sistem.MA(C, "Exp", 100);


// strateji
var SonYon = "";
double Fiyat = 0;
var IslemBarNo = 0;
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if (MA1[i-1] < MA2[i-1] && MA1[i] >= MA2[i] && SonYon != "A") // AL
{
Sistem.Yon[i] = "A"; // alış
SonYon = Sistem.Yon[i];
Fiyat = C[i];
IslemBarNo = i;
}
else if (MA1[i-1] > MA2[i-1] && MA1[i] <= MA2[i] && SonYon != "S") // SAT
{
Sistem.Yon[i] = "S"; // satış
SonYon = Sistem.Yon[i];
Fiyat = C[i];
IslemBarNo = i;
}
else if (SonYon == "S") // satış pozisyonundayken FLAT
{
var LimitBarNo = 0;
var Seviye = 0.0;
for (int k = IslemBarNo; k < i; k++)
{
if (Fiyat - L[k] > 5)
{
if (Seviye == 0 || Seviye > L[k])
{
LimitBarNo = k;
Seviye = L[k];
}
}
}
if (LimitBarNo > 0)
{
if (C[i] - Seviye > 3)
{
Sistem.Yon[i] = "F"; // flat
SonYon = Sistem.Yon[i];
}
}
}
else if (SonYon == "A") // alış pozisyonundayken FLAT
{
var LimitBarNo = 0;
var Seviye = 0.0;
for (int k = IslemBarNo; k < i; k++)
{
if (H[k] - Fiyat > 5)
{
if (Seviye == 0 || Seviye < H[k])
{
LimitBarNo = k;
Seviye = H[k];
}
}
}
if (LimitBarNo > 0)
{
if (Seviye - C[i] > 3)
{
Sistem.Yon[i] = "F"; // flat
SonYon = Sistem.Yon[i];
}
}
}
}



// hesaplanan verileri çizgilere aktar ve açıklama ekle
Sistem.Cizgiler[0].Deger = MA1;
Sistem.Cizgiler[1].Deger = MA2;






Sn.Tiberius (http://www.hisse.net/forum/member.php?u=187811)'a teşekkürler.

drleo66
21-02-2015, 15:57
Başlangıçtan bu güne İdeal Formülleri konusu. yazdırılabilir, düzenlenebilir doc formatında.

http://s3.dosya.tc/server31/LuprzF/idealform_lleri10112013to20022014.doc.html

Dilbert
21-02-2015, 18:59
Variable Index Dynamic Average (VIDYA) by Tushar Chande. Ben 233-21-55 parametreleri ile 15/60/Gunluk grafiklerde kullaniyorum.

// parametreleri al
int Length = Int32.Parse(Sistem.Parametreler[0]); //233
int Smooth = Int32.Parse(Sistem.Parametreler[1]); //21

var X= Sistem.GrafikVerileri;
X = Sistem.GrafikVerilerindeTarihHizala(Sistem.GrafikV erileri, X );

var AbsCMO = Sistem.Liste(Sistem.BarSayisi, 0);

for (int j = 0; j<Sistem.BarSayisi; j++)
{
X[j].Close= (X[j].Close + X[j].High + X[j].Low + X[j].Close )/4;
}

var CMO = Sistem.ChandeMomentum(X,Length);

for (int j = 0; j<Sistem.BarSayisi; j++)
{
AbsCMO[j] = Math.Abs(CMO[j])/100;
}

float SC = 2/((float)(Smooth+1)) ;

// indikator hesaplamasi
var V = Sistem.Liste(Sistem.BarSayisi, 0);

for (int i = 0; i<Sistem.BarSayisi; i++)
{
if (i<=Length+1)
{
V[i]=X[i].Close;
}
else
{
V[i]=SC*AbsCMO[i]*X[i].Close+(1-(SC*AbsCMO[i]))*V[i-1];
}
}

// indikatoru cizgiye aktar
Sistem.Cizgiler[0].Deger = V; // panel 1

//////////////////////////////////

// parametreleri al
int Length1 = Int32.Parse(Sistem.Parametreler[2]); //233
int Smooth1 = Int32.Parse(Sistem.Parametreler[3]); //55

var Y= Sistem.GrafikVerileri;
Y= Sistem.GrafikVerilerindeTarihHizala(Sistem.GrafikV erileri, Y );

var AbsCMO1 = Sistem.Liste(Sistem.BarSayisi, 0);

for (int j = 0; j<Sistem.BarSayisi; j++)
{
Y[j].Close= (Y[j].Open + Y[j].High + Y[j].Low + Y[j].Close )/4;
}

var CMO1 = Sistem.ChandeMomentum(Y,Length1);

for (int j = 0; j<Sistem.BarSayisi; j++)
{
AbsCMO1[j] = Math.Abs(CMO1[j])/100;
}

float SC1 = 2/((float)(Smooth1+1)) ;

// indikator hesaplamasi
var Z = Sistem.Liste(Sistem.BarSayisi, 0);

for (int i = 0; i<Sistem.BarSayisi; i++)
{
if (i<=Length1+1)
{
Z[i]=Y[i].Close;
}
else
{
Z[i]=SC1*AbsCMO1[i]*Y[i].Close+(1-(SC1*AbsCMO1[i]))*Z[i-1];
}
}

// indikatoru cizgiye aktar
Sistem.Cizgiler[1].Deger = Z; //panel 1

Lyrklaunavan
21-02-2015, 20:59
http://i.imgur.com/maQPab0.jpg (http://imgur.com/maQPab0)





/* EhlersUniversalOscillator
* Created by SharpDevelop.
* User: Lyrklaunavan
* Date: 21.2.2015
* Time: 18:42
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/

var V = Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V, "Kapanis" ) ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek" ) ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk" ) ;
var O = Sistem.GrafikFiyatOku(V, "Acilis" ) ;

int bandedge=20;
int currentbar=1;

//---- Define individual script parameters
float WhiteNoise,a1, b1, c1, c2, c3, Filt, Peak, Universal;
float prevWhiteNoise1, prevFilt1, prevFilt2, prevPeak1; //used to store previous values
var returnvalues=Sistem.Liste(0);

//---- set initial values
WhiteNoise=0;
Filt =0;
Peak = 0;
prevFilt1 = 0;
Universal = 0;

for (int i = 3; i < V.Count; i++)
{
//save previous values
prevWhiteNoise1 = WhiteNoise;
prevFilt2 = prevFilt1;
prevFilt1 = Filt;
prevPeak1 = Peak;

//start calculation
WhiteNoise=(C[i]-C[i-2])/2;

//Super Smoother Filter
a1=(float)Math.Exp(-1.414f*3.14159f/bandedge);
b1=2.0f*a1*(float)Math.Cos(1.414f*180/bandedge);
c2=b1;
c3=-a1*a1;
c1=1-c2-c3;
Filt = (float)c1 * (WhiteNoise + prevWhiteNoise1) / 2 + c2 * prevFilt1 + c3 * prevFilt2;
if (currentbar == 1) Filt = 0;
if (currentbar == 2) Filt = c1 * 0 * (C[i] + C[i-1]) / 2 + c2 * prevFilt1;
if (currentbar == 3) Filt = c1 * 0 * (C[i] + C[i-1]) / 2 + c2 * prevFilt1 + c3 * prevFilt2;

// Automatic Gain Control (AGC)
Peak = .991f * prevPeak1;
if (currentbar == 1) Peak = 0.0000001f;
if ((float)Math.Abs(Filt) > Peak) Peak = (float)Math.Abs(Filt);
if (Peak!= 0) Universal = Filt / Peak;
returnvalues[i] = Universal;
currentbar++;
}

Sistem.Cizgiler[0].Deger = returnvalues; // panel 2
Sistem.Cizgiler[1].Deger = Sistem.Liste(0); // panel 2

Lyrklaunavan
22-02-2015, 14:20
http://i.imgur.com/SocZ1u2.jpg (http://imgur.com/SocZ1u2)



//
// @author Lyrklaunavan
// NRTR_WATR
// http://konkop.narod.ru/Files/4_24_28.pdf
//

var V = Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V, "Kapanis" ) ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek" ) ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk" ) ;
var O = Sistem.GrafikFiyatOku(V, "Acilis" ) ;

int Period = 20;
float Multiple = 3.0f;
int Trend = 0;
float Reverse = 0;

var HPrice= Sistem.HHV(V, Period, "Kapanis");
var LPrice= Sistem.LLV(V, Period, "Kapanis");

var atr= Sistem.AverageTrueRange(V, 1);
var K = Sistem.MA(atr,"Wilder",Period);

for(int i=1; i<V.Count; i++){

K[i]=K[i]*Multiple;
}

var NRTR_WATR=Sistem.Liste(0);

for(int i=1; i<V.Count; i++){

// Calculate NRTR_WATR Series
if( Trend >= 0 )
{
HPrice[i] = Math.Max( C[i], HPrice[i] );
Reverse = HPrice[i] - K[i];

if(C[i] <= Reverse )
{
Trend = -1;
LPrice[i] = C[i];
Reverse = LPrice[i] + K[i];
}
}

if( Trend <= 0 )
{
LPrice[i] = Math.Min( C[i], LPrice[i] );
Reverse = LPrice[i] + K[i];

if( C[i] >= Reverse )
{
Trend = 1;
HPrice[i] = C[i];
Reverse = HPrice[i] - K[i];
}
}

NRTR_WATR[i] = Reverse;
}

Sistem.Cizgiler[0].Deger = NRTR_WATR;

thebaboli
23-02-2015, 16:11
Günaydın,

Yeni ufuklar ve arkadaşlarımızın farklı sistemlerini/stratejilerini paylaşmalarını teşvik açısından, "göstergesiz band sistemi" paylaşmak istiyorum. Bandın referans yerlerini ve aralığı (adımı) belirleyen j döngüsü. x ve y ise, referans yerlerine "güvenlik bölgesi" ( j referansının üstüne ve altına) eklenmek istenirse dilediğimiz puanı kullanabiliriz. Temel mantık, referans seviyelerinde H ve L kontolü ile poza girmek.




var V = Sistem.GrafikVerileri;
var C = Sistem.GrafikFiyatOku(V, "Kapanis" ) ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek" ) ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk" ) ;

var IslemMiktari = Sistem.Liste(0);
var Pozisyon = Sistem.Liste(0);
var KarZarar = Sistem.Liste(0);

float SonPozisyon = 0;
float SonFiyat = 0;
float ToplamKarZarar = 0;

var x = 0.0f ;
var y = 0.0f ;


for (int i = 1; i < Sistem.BarSayisi; i++)
{

for ( var j = 1f; j < 151.0f ; j += 3f )
{

// AL
if ( L[i-1] < (j+x) && H[i-1] > (j+x) && L[i] > (j+x) && SonPozisyon <= 0 )
{
if (SonPozisyon == 0)
{
IslemMiktari[i] = 1;
SonFiyat = V[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
else if (SonPozisyon < 0)
{
IslemMiktari[i] = 2;
SonFiyat = V[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
Sistem.Yon[i] = "A";
}

// SAT
else if ( H[i-1] > (j-y) && L[i-1] < (j-y) && H[i] < (j-y) && SonPozisyon >= 0 )
{
if (SonPozisyon == 0)
{
IslemMiktari[i] = -1;
SonFiyat = V[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
else if (SonPozisyon > 0)
{
IslemMiktari[i] = -2;
SonFiyat = V[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
Sistem.Yon[i] = "S";
}

Pozisyon[i] = SonPozisyon;
KarZarar[i] = ToplamKarZarar + V[i].Close * Pozisyon[i];
}
}




Sistem.Cizgiler[0].Deger = KarZarar; // panel 2




Anonim'e teşekkürler :cool:

Exfake
25-02-2015, 22:19
Merhaba,
Bildiğiniz üzere idealin optimizasyon modülü biraz yüzeysel. Portföy bilgisi girme, komisyon, kayma tanımlama gibi detaylar yok.
Ama siz görmek istediğiniz özel bilgileri kendiniz yazabilirsiniz.
Tek sıkıntı optimizasyon penceresindeki kolonlarda değilde dışarıya çıktı olarak alabiliriz.
ideal yetkilileri belki ileride sorgu penceresindeki gibi kolon ekleme özelliğini optimizasyonada getirirse onuda çözeriz.:super:
Daha önce paylaştığımız sistem bilgi ekran zımbırtısıda sadece tek bir sistemin bilgilerini gösteriyordu.
Bunu optimizasyon döngülerinin içine gömerek her optimizasyon adımında sistem bilgilerini hesaplayıp .csv dosyasına satır satır yazdırıyoruz.
Kabaca mantık bu.
Şimdi gelelim nasıl çalıştığına.
İndikatör veya sistem olarak açmıyoruz.
Grafikten optimizasyon penceresini açıyoruz. Sembol,Periyot kontrol edip Sistem combobox’ından kodu kopyaladığınız dosya adını seçiyoruz.
Burada Bar Sayısı textbox’ında ne yazarsanız kodun içerisindeki BarSayisi değişkeninede aynı sayıyı yazmalısınız.
Eğer farklı olursa ne olur, idealin optimizasyon sonuçları ile csv dosyasındaki sonuçlarda tutarsızlık oluşur.
Mesela ideal 5000 bar sayısına göre hesap yaparken kodun içine 10000 yazdıysanız csv dosyasındaki sonuçlar 10000 bara göre hesaplanmış olur.
Malesef bu textbox’a erişim olmadığı için böyle bir şey yapmak zorundayız.
Zaten ideal puan üzerinden biz portföy üzerinden optimizasyon yaptığımız için farklılıklar olacak.
Hızlı mod’u kapatıp açmak sanırım pek bi fark yapmıyor, açıkçası denemedim. :clown:
Ama kodu hazırlarken hızlı mod kapalı idi.
Burası bu kadar Hesapla butona basıp hesaplatıyoruz.
İşlem bittiğinde C:\Optimizasyon_MA.csv dosyasını excelde açıyoruz. excel yok diyorsanız not defterinde de açabilirsiniz ama karışık gelir.
Sanırım C:\’ye yazabilmek için ideali yönetici olarak çalıştırmanız gerekir.

http://i.hizliresim.com/6ZJWAW.png (http://hizliresim.com/6ZJWAW)



int BarSayisi = 5000;//optimizasyon penceresindeki Bar Sayısı textbox’ı ile aynı olmalı
var Veriler = Sistem.GrafikVerileri;
if (BarSayisi > Veriler.Count) BarSayisi = Veriler.Count - 1; //burası yanlışlıkla grafikteki bar sayısından fazla bir rakam girmeyin diye
var K = Sistem.GrafikFiyatOku(Veriler, "Kapanis");
string tablobaslik = "Sembol;Periyot;Sistem;Bas. Sermaye;Son Sermaye;Kar/Zarar;Kar/Zarar %;Komisyon;Kayma;Net Sermaye;Net Kar/Zarar; Net K/Z %;";
tablobaslik += "En Buyuk Kar;En Buyuk Zarar;Maks. Drawdown;Maks. DD %;Kontrat;Long;Short;Flat;Stop;Sure";
//Yukardaki iki satır excel tablosunun başlıklarını oluşturmak içindir. Burada yapacağınız değişikliği aşağıdaki ozettablo değişkeninede yapmalısınız.
//yoksa tutarsızlık oluşur.
using (System.IO.StreamWriter dosya = new System.IO.StreamWriter(@"C:\Optimizasyon_MA.csv", false)) dosya.WriteLine(tablobaslik);
//üstteki satır her Hesapla butonuna tıkladığınızda Optimizasyon_MA.csv dosyasını sıfırlar, yoksa oluşturur ve başlıkları yazar.
for (int KucukPeriyot = 50; KucukPeriyot < 101; KucukPeriyot++)//burada optimizasyon başlıyor. bunları idealin içindeki örnek kodlardan aldık.
{
for (int BuyukPeriyot = 200; BuyukPeriyot < 251; BuyukPeriyot++)
{
if (KucukPeriyot >= BuyukPeriyot) continue;
var time = DateTime.Now;
var MA1 = Sistem.MA(K, "Exp", KucukPeriyot);//örnek kodda 2 ma kesişmesi kullandık
var MA2 = Sistem.MA(K, "Exp", BuyukPeriyot);//siz buraya kendi sisteminizi monte edeceksiniz, Allah kolaylık versin..
for (int i = 1; i < Veriler.Count; i++)
Sistem.Yon[i] = ""; //önceki sinyalleri sıfırladık.
float Sermaye = 10000f; //buraya başlangıç bakiyesini yazıyoruz.
float KomOran = 0.0002f; //komisyon oranını yazıyoruz. puan hesabı yapıyorsanız bunlara 0 yazın
int Kontrat = 10; //sabit 10 kontrat ile işlem yapıyoruz
float Kayma = 0; //kayma aynı şekilde komisyon gibi
var SermayeEgrisi = Sistem.Liste(Sermaye);//burdan sonrası sistem bilgi ekran şeysi kodlarının aynısı olduğundan hızlıca geçiyorum
var NetSerEgrisi = Sistem.Liste(Sermaye);
var AlVeTut = Sistem.Liste(0);
var KomEgrisi = Sistem.Liste(0);
var KaymaEgrisi = Sistem.Liste(0);
var IslemMiktari = Sistem.Liste(0);
var Pozisyon = Sistem.Liste(0);
var KarZarar = Sistem.Liste(0);
var Komisyon = Sistem.Liste(0);
float SonPozisyon = 0;
float SonFiyat = 0;
float ToplamKarZarar = 0;
float ToplamKomi = 0;
float HedefFiyat = 0;
float StopFiyat = 0;
int LongSayar = 0;
int ShortSayar = 0;
int FlatSayar = 0;
int StopSayar = 0;
int IslemBar = 1;
int BasBar = Veriler.Count - BarSayisi;
for (int i = BasBar; i < Veriler.Count; i++)
{
if (MA1[i - 1] < MA2[i - 1] && MA1[i] >= MA2[i] && SonPozisyon <= 0)
{//*****al koşulu bölgesi*****
if (SonPozisyon == 0) IslemMiktari[i] = Kontrat;
else if (SonPozisyon < 0) IslemMiktari[i] = Kontrat * 2;
Sistem.Yon[i] = "A";
LongSayar++;
IslemBar = i;
SonFiyat = Veriler[i].Close;
HedefFiyat = SonFiyat + 3f;
StopFiyat = SonFiyat - 0.5f;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
ToplamKomi = SonFiyat * KomOran * IslemMiktari[i];
KomEgrisi[i] = KomEgrisi[i - 1] + Math.Abs(ToplamKomi) * 100;
KaymaEgrisi[i] = KaymaEgrisi[i - 1] + Math.Abs(Kayma * IslemMiktari[i] / 10);
}
else if (MA1[i - 1] > MA2[i - 1] && MA1[i] <= MA2[i] && SonPozisyon >= 0)
{//*****sat koşulu bölgesi*****
if (SonPozisyon == 0) IslemMiktari[i] = Kontrat * -1;
else if (SonPozisyon > 0) IslemMiktari[i] = Kontrat * -2;
Sistem.Yon[i] = "S";
ShortSayar++;
IslemBar = i;
SonFiyat = Veriler[i].Close;
HedefFiyat = SonFiyat - 3f;
StopFiyat = SonFiyat + 0.5f;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
ToplamKomi = SonFiyat * KomOran * IslemMiktari[i];
KomEgrisi[i] = KomEgrisi[i - 1] + Math.Abs(ToplamKomi) * 100;
KaymaEgrisi[i] = KaymaEgrisi[i - 1] + Math.Abs(Kayma * IslemMiktari[i] / 10);
}
else if (Veriler[i].Close >= HedefFiyat && SonPozisyon > 0)
{//*****long flat koşulu bölgesi*****
Sistem.Yon[i] = "F";
FlatSayar++;
IslemMiktari[i] = Kontrat * -1;
SonFiyat = HedefFiyat;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
ToplamKomi = SonFiyat * KomOran * IslemMiktari[i];
KomEgrisi[i] = KomEgrisi[i - 1] + Math.Abs(ToplamKomi) * 100;
KaymaEgrisi[i] = KaymaEgrisi[i - 1] + Math.Abs(Kayma * IslemMiktari[i] / 10);
}
else if (Veriler[i].Close <= HedefFiyat && SonPozisyon < 0)
{//*****short flat koşulu bölgesi*****
Sistem.Yon[i] = "F";
FlatSayar++;
IslemMiktari[i] = Kontrat * 1;
SonFiyat = HedefFiyat;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
ToplamKomi = SonFiyat * KomOran * IslemMiktari[i];
KomEgrisi[i] = KomEgrisi[i - 1] + Math.Abs(ToplamKomi) * 100;
KaymaEgrisi[i] = KaymaEgrisi[i - 1] + Math.Abs(Kayma * IslemMiktari[i] / 10);
}
else if (Veriler[i].Close <= StopFiyat && SonPozisyon > 0)
{//*****long stop koşulu bölgesi*****
Sistem.Yon[i] = "F";
StopSayar++;
IslemMiktari[i] = Kontrat * -1;
SonFiyat = StopFiyat;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
ToplamKomi = SonFiyat * KomOran * IslemMiktari[i];
KomEgrisi[i] = KomEgrisi[i - 1] + Math.Abs(ToplamKomi) * 100;
KaymaEgrisi[i] = KaymaEgrisi[i - 1] + Math.Abs(Kayma * IslemMiktari[i] / 10);
}
else if (Veriler[i].Close >= StopFiyat && SonPozisyon < 0)
{//*****short stop koşulu bölgesi*****
Sistem.Yon[i] = "F";
StopSayar++;
IslemMiktari[i] = Kontrat * 1;
SonFiyat = StopFiyat;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
ToplamKomi = SonFiyat * KomOran * IslemMiktari[i];
KomEgrisi[i] = KomEgrisi[i - 1] + Math.Abs(ToplamKomi) * 100;
KaymaEgrisi[i] = KaymaEgrisi[i - 1] + Math.Abs(Kayma * IslemMiktari[i] / 10);
}
else { KomEgrisi[i] = KomEgrisi[i - 1]; KaymaEgrisi[i] = KaymaEgrisi[i - 1]; }
Pozisyon[i] = SonPozisyon;
//KarZarar[i] = (ToplamKarZarar + SonFiyat * Pozisyon[i]) * 100; //pozisyon kapanışına göre
KarZarar[i] = (ToplamKarZarar + Veriler[i].Close * Pozisyon[i]) * 100; //anlık görüntü
Komisyon[i] = Math.Abs(ToplamKomi) * 100;
SermayeEgrisi[i] = Sermaye + KarZarar[i];
NetSerEgrisi[i] = Sermaye + KarZarar[i] - KaymaEgrisi[i] - KomEgrisi[i];
AlVeTut[i] = Sermaye + (Veriler[i].Close - Veriler[1].Close) * 1000;
}

var KarZararIs = Sistem.Liste(0);
float KarZararIs1 = 0;
int BarNoIs1 = 1;
float FarkIs = 0;
for (int i = BasBar; i < Veriler.Count; i++)
{
if (Sistem.Yon[i] == "A" || Sistem.Yon[i] == "S")
{
FarkIs = KarZarar[i] - KarZararIs1;
for (int j = BarNoIs1; j < i; j++)
KarZararIs[j] = FarkIs;
KarZararIs1 = KarZarar[i];
BarNoIs1 = i;
}
if (i == Veriler.Count - 1)
{
FarkIs = KarZarar[i] - KarZararIs1;
for (int j = BarNoIs1; j < Veriler.Count; j++)
KarZararIs[j] = FarkIs;
}
}
var MaksSE = Sistem.Liste(0);
var DD = Sistem.Liste(0);
var MDD = Sistem.Liste(0);
var MaksIKZ = Sistem.Liste(0);
var MinIKZ = Sistem.Liste(0);
float MDDY = 0;
for (int i = BasBar; i < Veriler.Count; i++)
{
if (SermayeEgrisi[i] <= MaksSE[i - 1]) MaksSE[i] = MaksSE[i - 1]; else MaksSE[i] = SermayeEgrisi[i];
if (SermayeEgrisi[i] < MaksSE[i]) DD[i] = SermayeEgrisi[i] - MaksSE[i];
if (DD[i] >= MDD[i - 1]) MDD[i] = MDD[i - 1]; else { MDD[i] = DD[i]; MDDY = (MaksSE[i] - Math.Abs(MDD[i])) / MaksSE[i] - 1; }
if (KarZararIs[i] <= MaksIKZ[i - 1]) MaksIKZ[i] = MaksIKZ[i - 1]; else MaksIKZ[i] = KarZararIs[i];
if (KarZararIs[i] >= MinIKZ[i - 1]) MinIKZ[i] = MinIKZ[i - 1]; else MinIKZ[i] = KarZararIs[i];
}
string ozettablo = "";
ozettablo += Sistem.Sembol + ";" + Sistem.Periyot + ";" + "MA-" + KucukPeriyot + "-" + BuyukPeriyot + ";";
ozettablo += Sermaye.ToString("N2") + ";";
ozettablo += SermayeEgrisi[SermayeEgrisi.Count - 1].ToString("N2") + ";";
ozettablo += KarZarar[KarZarar.Count - 1].ToString("N2") + ";" + ((SermayeEgrisi[SermayeEgrisi.Count - 1] / Sermaye) - 1).ToString("P2") + ";";
ozettablo += KomEgrisi[KomEgrisi.Count - 1].ToString("N2") + ";";
ozettablo += KaymaEgrisi[KaymaEgrisi.Count - 1].ToString("N2") + ";";
ozettablo += NetSerEgrisi[NetSerEgrisi.Count - 1].ToString("N2") + ";";
ozettablo += (NetSerEgrisi[NetSerEgrisi.Count - 1] - Sermaye).ToString("N2") + ";" + ((NetSerEgrisi[NetSerEgrisi.Count - 1] / Sermaye) - 1).ToString("P2") + ";";
ozettablo += MaksIKZ[MaksIKZ.Count - 1].ToString("N2") + ";";
ozettablo += MinIKZ[MinIKZ.Count - 1].ToString("N2") + ";";
ozettablo += MDD[MDD.Count - 1].ToString("N0") + ";" + MDDY.ToString("P2") + ";" + Kontrat.ToString("N0") + ";";
ozettablo += LongSayar + ";" + ShortSayar + ";";
ozettablo += FlatSayar + ";" + StopSayar + ";";
ozettablo += (DateTime.Now - time).Milliseconds + " ms..";
//yukarıdaki ozettablo değişkenine hesaplanan bütün değerleri ekliyoruz. buralarda değişiklik yaparken dikkat, tutarsızlıklara neden olabilir.
//bu ozettablo csv dosyasına satır satır yazılan optimizasyon sonuçlarıdır
using (System.IO.StreamWriter dosya = new System.IO.StreamWriter(@"C:\Optimizasyon_MA.csv", true)) dosya.WriteLine(ozettablo);
//üsteki kod, var olan Optimizasyon_MA.csv dosyasına ozettablo değişkenini satır satır yazar.
Sistem.Optimizasyon("MA", KucukPeriyot, BuyukPeriyot);
}
}


Buda dosyanın kendileri Optimizasyon_MA_Ozel.001 (https://drive.google.com/open?id=0B0VMBB05UaPWYUpYUjh1VjZwRkE&authuser=0)

Hadi kolay gelsin.. Ex.. :he:

thebaboli
26-02-2015, 18:54
Exfake üstteki kod için çok teşekkürler. Resmen döktürmüşsün zihnine sağlık. :cool:



merhaba 60 dk lık,stochastick momentum indeks(5,3,3),kairi(simple,10,10),rsı(Weighted,14, 10)ve tke(Weighted,9) nin hareketli ortalamalarının en az 3 tanesinin aşağı veya yukarı kesmesinden oluşan robot sistemi yapmak istiyorum bu konuda yardımcı olabilir misiniz?

Sistem
A,B,C,D listelerini tanımlarsanız istediğiniz sistem oluşur.
Ben örnek olsun diye hareketli ortalama kullandım.
Robotu da yapan çıkmaz ise ben el atarım.




var Sembol = Sistem.Sembol;
var V = Sistem.GrafikVerileri;

var AA = Sistem.GrafikFiyatOku(V, "Kapanis");
var A1 = Sistem.MA(AA, "Exp", 10);
var A2 = Sistem.MA(AA, "Exp", 100);

var BB = Sistem.GrafikFiyatOku(V, "Kapanis");
var B1 = Sistem.MA(BB, "Exp", 10);
var B2 = Sistem.MA(BB, "Exp", 100);

var CC = Sistem.GrafikFiyatOku(V, "Kapanis");
var C1 = Sistem.MA(CC, "Exp", 10);
var C2 = Sistem.MA(CC, "Exp", 100);

var DD = Sistem.GrafikFiyatOku(V, "Kapanis");
var D1 = Sistem.MA(DD, "Exp", 10);
var D2 = Sistem.MA(DD, "Exp", 100);


// tara
var SonYon = "";
for (int i = 1 ; i < V.Count - 1; i++)
{
var SayacAlis = 0;
if (SonYon != "A" ) // alış
{
if (A1[i] > A2[i]) SayacAlis++;
if (B1[i] > B2[i]) SayacAlis++;
if (C1[i] > C2[i]) SayacAlis++;
if (D1[i] > D2[i]) SayacAlis++;
if (SayacAlis >= 3)
{
SonYon = "A";
Sistem.Yon[i] = SonYon;
}
}
var SayacSatis = 0;
if (SonYon != "S" ) // satış
{
if (A1[i] < A2[i]) SayacSatis++;
if (B1[i] < B2[i]) SayacSatis++;
if (C1[i] < C2[i]) SayacSatis++;
if (D1[i] < D2[i]) SayacSatis++;
if (SayacSatis >= 3)
{
SonYon = "S";
Sistem.Yon[i] = SonYon;
}
}
}


Tiberius abiye de teşekkürler :cool:





var Sembol = Sistem.Sembol;
var V = Sistem.GrafikVerileri;


var Kairi = Sistem.Kairi(14);
var MA1 = Sistem.MA(Kairi, "Simple", 10);


var RSI = Sistem.RSI(14);
var MA2 = Sistem.MA(RSI, "Weighted", 100);

var TKE = Sistem.TKE();
var MA3 = Sistem.MA(TKE, "Weighted", 9);

var Stock = Sistem.StochasticMomIndex(5, 3, 3);
var MA4 = Sistem.MA(Stock, "Simple", 3);

Sistem.Cizgiler[0].Deger = Kairi;
Sistem.Cizgiler[1].Deger = MA1;
Sistem.Cizgiler[2].Deger = RSI;
Sistem.Cizgiler[3].Deger = MA2;
Sistem.Cizgiler[4].Deger = TKE;
Sistem.Cizgiler[5].Deger = MA3;
Sistem.Cizgiler[6].Deger = Stock;
Sistem.Cizgiler[7].Deger = MA4;



// tara
var SonYon = "";
for (int i = 1 ; i < V.Count - 1; i++)
{
var SayacAlis = 0;
if (SonYon != "A" ) // alış
{
if (Kairi[i] > MA1[i]) SayacAlis++;
if (RSI[i] > MA2[i]) SayacAlis++;
if (TKE[i] > MA3[i]) SayacAlis++;
if (Stock[i] > MA4[i]) SayacAlis++;
if (SayacAlis >= 3)
{
SonYon = "A";
Sistem.Yon[i] = SonYon;
}
}
var SayacSatis = 0;
if (SonYon != "S" ) // satış
{
if (Kairi[i] < MA1[i]) SayacSatis++;
if (RSI[i] < MA2[i]) SayacSatis++;
if (TKE[i] < MA3[i]) SayacSatis++;
if (Stock[i] < MA4[i]) SayacSatis++;
if (SayacSatis >= 3)
{
SonYon = "S";
Sistem.Yon[i] = SonYon;
}
}
}

Buda resmi ;

http://i.imgur.com/gxCORWs.png

http://i.imgur.com/Mzg55sH.png

thebaboli
27-02-2015, 00:03
Merhaba arkadaşlar,
Sizinle gün içinde bana çok yardımı dokunan bir robotumu paylaşmak istiyorum.
Benimle aynı sorunu yaşayan tüm VOB'cu arkadaşlarımın da bu robottan faydalanması istiyorum.
Her sorumuza cevap vermeye ve yardımcı olmaya çalışan forum arkadaşlarımla böyle paylaşımlarda bulunmak beni ayrıca mutlu ediyor.
Robotu aktif olarak ben kullanıyorum ve gerçek modda testleri yapılmıştır.

Robotun Amacı;
Gün içinde girilen pozisyona sizin belirlediğiniz parametre değerlerine uygun şekilde göz kulak olmak :)
Hepimiz gün içinde bazen AL/SAT pozisyonuna girip, çeşitli sebeplerden dolayı bilgisayar ekranından uzaklaşıyoruz ve biz yokken pozisyonda istediğimiz kar seviyeleri kaçıyor daha da kötüsü üstüne zarar yazıyor. Kendi çapımda bunu engellemek için bir robot yazdım.

http://i.imgur.com/TKwbBCu.jpg

Robotun Parametre Açıklamaları;
Parametre 0 : Girilen Pozisyonun Yönü Alış:A / Satış:S / Flat:F
Parametre 1 : Pozisyona girilen lot miktarı
Parametre 2 : Alış/Satış yapılan işlem fiyatı Örnek:"106,300"
Parametre 3 : Pozisyonun Zarar limiti puan olarak belirlenir. Örnek:"300"
Parametre 4 : Pozisyondan almak istediğiniz maksimum kar limiti puan olarak.
Bu limite gelindiğinde pozisyon kapatılır. Örnek:"1500" puan
Parametre 5 : Bu parametre pozisyondan kar alma limitini gösterir. Buraya değer girmeyin.
Robot bu değeri sizin verdiğiniz kriterlere göre kendisi belirler.
Örneğin; Girdiğiniz pozisyonda 500 puan kar elde ettiğinizde, pozisyon düşüşe geçse bile bu puanın 200'ünü mutlaka kar olarak alacaktır. Bu değerleri kod kısmında açıklamalı bir şekilde yazdım ve kendi kriterinizi kendiniz oluşturabilirsiniz.

Parametre 7 : VOB'da işlem yapılacak sözleşme adı girilir. örnek:"VIP'F_XU0301214S0"
Parametre 8 : İşlem yapılacak Hesap adı girilir. örnek: "9999, Firma ADI"
Parametre 9 : Alt Hesap Adı girilir. Bu değer genelde "1" dir.

Not: Robotu çalıştırmadan önce 1, 2, 3 ve 4 numaralı parametreleri, girmiş olduğunuz pozisyona göre düzenleyin, en son da 0 nolu Pozisyon yönü parametresini girin ki robot bu parametreye göre işlem yapıyor. Kodlarda gerekli açıklamaları yapmaya çalıştım.

Lütfen ilk kez robot kullanan arkadaşlar mutlaka, robotu önce sanalda kullanıp test etsin.

Bilgi: Robot Grafik üzerinde çalıştırıldığında girilen pozisyon ve yapılan/yapılacak işlemler hakkında görsel bilgide verir. Örneğin Hangi seviyede pozisyona girilmiş, hangi seviyede stop olacak, hangi seviyede kar alacak gibi.

Robotun Kodları;
//Pozisyon Kontrol Robotu / Girilen Pozisyonun Otomatik Kontrolünü Sağlar Kontrolsüz Zarar Etmenizi Önler
//#################################################
var Sembol_VIP30 = "VIP'VIP-X030";

//Kontrol Edilecek Pozisyon Bilgileri Parametrelerden Alınır.
string Pozisyon_Yonu = Sistem.Parametreler[0]; // Girilen pozisyonun yönü belirlenir Örnek: Satış = S Alış = A
float Lot_Miktari = Convert.ToSingle(Sistem.Parametreler[1]); //Alış/Satış yapılan Aktif Lot Miktarı belirlenir.
float islem_Fiyati = Convert.ToSingle(Sistem.Parametreler[2]); //Lot Alış/Satış fiyatı belirlenir.
float Zarar_Limiti = Convert.ToSingle(Sistem.Parametreler[3])/1000; //Pozisyonda maksimum edilecek zarar seviyesi. Örnek: 300 Puan için = 300
float Kar_Limiti = Convert.ToSingle(Sistem.Parametreler[4]); //Pozisyonda maksimum kar seviyesi belirlenir. Örnek: 1250 Puan için = 1250
float Kar_Alma_Seviyesi = Convert.ToSingle(Sistem.Parametreler[5]); //Pozisyondan alınacak olan kar seviyesi

string HesapAdi = Sistem.Parametreler[8];
string AltHesapAdi = Sistem.Parametreler[9];
string SozlesmeAdi = Sistem.Parametreler[10];

var Renk_Kirmizi = Sistem.Renk(250, 250, 0, 0); //Kırmızı
var Renk_Siyah = Sistem.Renk(0, 300, 0, 0); //Siyah
var Renk_Mavi = Sistem.Renk(250, 50, 50, 250); //Mavi
var Renk_Mor = Sistem.Renk(250, 191, 62, 255); //Mor
var Renk_Gri = Sistem.Renk(255, 160, 160, 160); //Gri
var Renk_Yesil = Sistem.Renk(250, 0, 160, 50); //Yeşil

//Anlık VIOP değeri alınır.
float VIP30 = Sistem.SonFiyat(Sembol_VIP30);
if (VIP30 != 0 )
{
//-------------------------------------------------------------------------------------
// Strateji İşlemleri Yapılır.
float Kar_Zarar = 0;
float Stop_Seviyesi = 0;
var Sinyal = 0; // Al, Sat veya Stop sinyali olduğunda değer 1 olur ve pozisyona göre işlem yapılır.

if (Pozisyon_Yonu == "A")
{
Stop_Seviyesi = islem_Fiyati - Zarar_Limiti; //Stop Seviyesi Hesaplanır.
Kar_Zarar = Sistem.SayiYuvarla(((VIP30 - islem_Fiyati) * 1000),1); //Anlık Kar Zarar Durumu Hesaplanır ve Virgülden sonrası yuvarlanır.
}
if (Pozisyon_Yonu == "S")
{
Stop_Seviyesi = islem_Fiyati + Zarar_Limiti; //Stop Seviyesi Hesaplanır.
Kar_Zarar = Sistem.SayiYuvarla(((islem_Fiyati - VIP30) * 1000),1); //Anlık Kar Zarar Durumu Hesaplanır ve Virgülden sonrası yuvarlanır.
}
if ( (Pozisyon_Yonu == "A") || (Pozisyon_Yonu == "S") ) //Robotun Pozisyonda ise hesaplama yapılır.
{
if ( (Kar_Zarar >= 150) && (Kar_Alma_Seviyesi < 50) ) { Kar_Alma_Seviyesi = 50; } //50 TL kar alır //Kar Alma Seviyesi Belirlenir.
if ( (Kar_Zarar >= 200) && (Kar_Alma_Seviyesi < 100) ) { Kar_Alma_Seviyesi = 100; } //100 TL kar alır //Kar Alma Seviyesi Belirlenir.
if ( (Kar_Zarar >= 300) && (Kar_Alma_Seviyesi < 200) ) { Kar_Alma_Seviyesi = 200; } //200 TL kar alır //Kar Alma Seviyesi Belirlenir.
if ( (Kar_Zarar >= 500) && (Kar_Alma_Seviyesi < 250) ) { Kar_Alma_Seviyesi = 250; } //250 TL kar alır //Kar Alma Seviyesi Belirlenir.
}
//-----------------------------------------------------------------------------------------
//Stop ve Kar Alma Seviyeleri kontrol edilir. Duruma göre pozisyon kapatılır.
if (Pozisyon_Yonu == "A") //Pozisyon Alış Yönde ise
{
if (VIP30 < Stop_Seviyesi) { Sinyal = 1; } //Stop Seviyesi Geçilmiş ise Pozisyon Kapatılır.
if (Kar_Zarar >= Kar_Limiti) { Sinyal = 1; } //Maksimum Kar Limitine Gelinmiş ise Pozisyon Kapatılır.
if ( (Kar_Alma_Seviyesi > 0) && (VIP30 <= (islem_Fiyati + (Kar_Alma_Seviyesi/1000))) ) { Sinyal = 1; } //Kar Alma Seviyesi Geçilmiş ise Pozisyon Kapatılır.
}
if (Pozisyon_Yonu == "S") //Pozisyon Satış Yönde ise
{
if (VIP30 > Stop_Seviyesi) { Sinyal = 1; } //Stop Seviyesi Geçilmiş ise Pozisyon Kapatılır.
if (Kar_Zarar >= Kar_Limiti) { Sinyal = 1; } //Maksimum Kar Limitine Gelinmiş ise Pozisyon Kapatılır.
if ( (Kar_Alma_Seviyesi > 0) && (VIP30 >= (islem_Fiyati - (Kar_Alma_Seviyesi/1000))) ) { Sinyal = 1; } //Kar Alma Seviyesi Geçilmiş ise Pozisyon Kapatılır.
}
//Stop ve Kar Alma Seviyeleri kontrol edilir. Duruma göre pozisyon kapatılır. BİTTİ
//-------------------------------------------------------------------------------------

// Strateji İşlemleri Yapılır. BİTTİ
//----------------------------------------------------------------------------------

//--------------------------------------------------------------------------------
// AL - SAT İşlemleri Yapılır.
if (Sistem.HaftaSonu == false) { //Hafta Sonu Kontrolü Yapılır.
if (Sistem.BaglantiVar == true) { //iDeal Bağlantı Kontrolü Yapılır.
if (Sistem.SaatAraligi("09:10", "12:30") || Sistem.SaatAraligi("13:55", "17:30") ) { //Zaman Kontrolü Yapılır, Seans Saatleri

if ( (Sinyal == 1) && (Lot_Miktari != 0) && (Pozisyon_Yonu != "F")) // Sinyal ve Parametre Kontrolü Yapılır.
{
Sistem.EmirHesapAdi = HesapAdi;
Sistem.EmirAltHesap = AltHesapAdi;
Sistem.EmirSembol = SozlesmeAdi;
if (Pozisyon_Yonu == "A") { Sistem.EmirIslem = "Satış"; } else { Sistem.EmirIslem = "Alış"; }
Sistem.EmirMiktari = Lot_Miktari;
Sistem.EmirSuresi = "GUN"; // GUN, SNS, IKG
Sistem.EmirTipi = "NORMAL"; // NORMAL, KPY, KIE, GIE, SAR
Sistem.EmirFiyati = "Aktif";
Sistem.EmirFiyatTipi = "PYS"; // PYS, LMT, EIF, KAP
Sistem.EmirGonder();

Pozisyon_Yonu = "F"; //Pozisyon Kapatıldığı için Parametre Değerine Flat ifadesi atanır.
Sistem.Parametreler[1] = "0"; //Pozisyon Kapatıldığı için Parametre Değerine 0 atanır.
Kar_Alma_Seviyesi = 0; //Pozisyon Kapatıldığı için Parametre Değerine 0 atanır.
} // AL - SAT İşlemleri Yapılır. BİTTİ
//-----------------------------------------------------------------------------------------------------------------

}//HaftaSonu
}//Bağlantı
}//Saat

//----------------------------------------------------------------------------------
// Ekrana Robot ile ilgili Çeşitli Bilgiler Yazılır.
Sistem.ZeminYazisiEkle("Pozisyon Yönü ", 1, 165, 43, Renk_Siyah, "Tahoma", 7);
Sistem.ZeminYazisiEkle("Lot miktarı ", 1, 165, 55, Renk_Siyah, "Tahoma", 7);
Sistem.ZeminYazisiEkle("İşlem Fiyatı ", 1, 165, 67, Renk_Siyah, "Tahoma", 7);
Sistem.ZeminYazisiEkle("Stop Seviyesi ", 1, 165, 79, Renk_Siyah, "Tahoma", 7);
Sistem.ZeminYazisiEkle("Kar Alma Seviyesi ", 1, 165, 91, Renk_Siyah, "Tahoma", 7);
Sistem.ZeminYazisiEkle("Kar-Zarar (Puan) ", 1, 165, 103, Renk_Siyah, "Tahoma", 7);
Sistem.ZeminYazisiEkle("Kar-Zarar (TL) ", 1, 165, 115, Renk_Siyah, "Tahoma", 7);
//Sisteme ait Sonuçlar ve Strateji Ekrana Yazılır.
if (Pozisyon_Yonu == "A") { Sistem.ZeminYazisiEkle(": Alış ", 1, 265, 43, Renk_Mavi, "Tahoma", 7); } //Piyasa Yönü
if (Pozisyon_Yonu == "S") { Sistem.ZeminYazisiEkle(": Satış ", 1, 265, 43, Renk_Kirmizi, "Tahoma", 7); } //Piyasa Yönü
if (Pozisyon_Yonu == "F") { Sistem.ZeminYazisiEkle(": Pozisyon Kapalı ", 1, 265, 43, Renk_Mor, "Tahoma", 7); } //Piyasa Yönü
Sistem.ZeminYazisiEkle(": " + Lot_Miktari.ToString(), 1, 265, 55, Renk_Mor, "Tahoma", 7); //Lot Miktarı
Sistem.ZeminYazisiEkle(": " + islem_Fiyati.ToString(), 1, 265, 67, Renk_Mor, "Tahoma", 7); //İşlem Fiuyatı
Sistem.ZeminYazisiEkle(": " + Stop_Seviyesi.ToString(), 1, 265, 79, Renk_Kirmizi, "Tahoma", 7); //Stop Seviyesi
Sistem.ZeminYazisiEkle(": " + Kar_Alma_Seviyesi.ToString() + " Puan", 1, 265, 91, Renk_Yesil, "Tahoma", 7); //Kar Alma Seviyesi
if (Kar_Zarar >= 0) { Sistem.ZeminYazisiEkle(": " + Kar_Zarar.ToString() + " Puan", 1, 265, 103, Renk_Yesil, "Tahoma", 7); } //Kar Zarar Durumu Puan +
if (Kar_Zarar < 0) { Sistem.ZeminYazisiEkle(": " + Kar_Zarar.ToString() + " Puan", 1, 265, 103, Renk_Kirmizi, "Tahoma", 7); } //Kar Zarar Durumu Puan -
if (Kar_Zarar >= 0) { Sistem.ZeminYazisiEkle(": " + ((Kar_Zarar/10)*Lot_Miktari).ToString() + " TL", 1, 265, 115, Renk_Yesil, "Tahoma", 7); } //Kar Zarar Durumu Puan +
if (Kar_Zarar < 0) { Sistem.ZeminYazisiEkle(": " + ((Kar_Zarar/10)*Lot_Miktari).ToString() + " TL", 1, 265, 115, Renk_Kirmizi, "Tahoma", 7); } //Kar Zarar Durumu Puan -

if (Pozisyon_Yonu != "F") // Pozisyon kapalı ise çizgiler kapatılır.
{
Sistem.Cizgiler[0].Deger = Sistem.Liste(islem_Fiyati); Sistem.Cizgiler[0].Aciklama = "İşlem Fiyatı"; Sistem.Cizgiler[0].Kalinlik = 2; Sistem.Cizgiler[0].Renk = Renk_Mavi;
Sistem.Cizgiler[1].Deger = Sistem.Liste(Stop_Seviyesi); Sistem.Cizgiler[1].Aciklama = "Stop Seviyesi"; Sistem.Cizgiler[1].Kalinlik = 2; Sistem.Cizgiler[1].Renk = Renk_Kirmizi;
//Kar Alma Çizgisi Ekrana Çizdirilir.
if ( (Pozisyon_Yonu == "A") && (Kar_Alma_Seviyesi >0) ) { Sistem.Cizgiler[2].Deger = Sistem.Liste(islem_Fiyati + (Kar_Alma_Seviyesi/1000)); Sistem.Cizgiler[2].Aciklama = "Kar Seviyesi"; Sistem.Cizgiler[2].Kalinlik = 2; Sistem.Cizgiler[2].Renk = Renk_Yesil; }
if ( (Pozisyon_Yonu == "S") && (Kar_Alma_Seviyesi >0) ) { Sistem.Cizgiler[2].Deger = Sistem.Liste(islem_Fiyati - (Kar_Alma_Seviyesi/1000)); Sistem.Cizgiler[2].Aciklama = "Kar Seviyesi"; Sistem.Cizgiler[2].Kalinlik = 2; Sistem.Cizgiler[2].Renk = Renk_Yesil; }
}
// Ekrana Robot ile ilgili Çeşitli Bilgiler Yazılır. BİTTİ
//---------------------------------------------------------------------------------------

} //VIP30 Değişkeni 0 Sıfır kontrolü

//Kontrol Edilecek YENİ Pozisyon Bilgileri Parametrelere Aktarılır.
Sistem.Parametreler[0] = Pozisyon_Yonu; // Girilen pozisyonun yönü belirlenir Örnek: Satış = S Alış = A
Sistem.Parametreler[2] = islem_Fiyati.ToString(); //Lot Alış/Satış fiyatı belirlenir.
Sistem.Parametreler[5] = Kar_Alma_Seviyesi.ToString(); //Pozisyondan alınacak olan kar seviyesi. Örnek: 300 Puan için = 300

Teşekkürler Sn. Erdal.karakaş

thebaboli
01-03-2015, 20:47
Bunu kullanabilirsiniz.

Kauffman Adaptive Moving Average Indicator

http://i.hizliresim.com/4Lj4YQ.png (http://hizliresim.com/4Lj4YQ)






var V = Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V, "Kapanis" ) ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek" ) ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk" ) ;
var O = Sistem.GrafikFiyatOku(V, "Acilis" ) ;

var amaLength = 10 ;
var fastend= 0.666f;
var slowend= 0.0645f;

var diff= Sistem.Liste(V.Count, 0) ;
var signal= Sistem.Liste(V.Count, 0) ;

for (int i = amaLength ; i < V.Count; i++)
{
diff[i] =(float) Math.Abs( C[i]-C[i-1] ) ;
signal[i]= (float) Math.Abs( C[i]-C[i-amaLength] ) ;
}

var noise= Sistem.Sum(diff, amaLength) ;

var efratio = Sistem.Liste(V.Count, 0) ;
var smooth = Sistem.Liste(V.Count, 0) ;
var KAMA = Sistem.Liste(V.Count, 0) ;

for (int i = 1; i < V.Count; i++)
{

efratio[i] = noise[i] != 0 ? signal[i] / noise[i]: 0 ;
smooth[i] = (float) Math.Pow( efratio[i] * ( fastend - slowend ) + slowend, 2) ;
KAMA[i] = KAMA[i-1] + smooth[i] * (C[i] - KAMA[i-1] ) ;

}

Sistem.Cizgiler[0].Deger = KAMA; // panel 1




Teşekkürler Anonimm

thebaboli
04-03-2015, 19:32
var Sembol1 = Sistem.Sembol;
var Veriler1 = Sistem.GrafikVerileri;

// SİSTEM
var Sembol = Sistem.Sembol;

// verileri oku
var Bars1 = Sistem.GrafikVerileriniOku(Sembol1, "H");
var Bars2 = Sistem.GrafikVerileriniOku(Sembol1, "15");
var Kapanislar1 = Sistem.GrafikFiyatOku(Bars1, "Kapanis");
var MA1 = Sistem.MA(Kapanislar1, "Exp", 21);



// Haftalık verileri 15 dakikalık verilere hizala
MA1 = Sistem.DonemCevir(Bars2, Bars1, MA1);




Sistem.Cizgiler[0].Deger = MA1;

Yukarıdaki koddaki MA1 değerinin 1 önceki (1 hafta önceki) değerini grafikte göstermek istiyorum bunu nasıl yapabilirim?

Aşağıdaki gibi denedim olmadı.



// X - boş liste oluştur
var X = Sistem.Liste(0);
// X - hesapla
for (int i = 1; i < Bars1.Count; i++)
X[i] = MA1[i-1];
Sistem.Cizgiler[1].Deger = X;





Baboli dene bakalım

var MA1 = Sistem.MA(Kapanislar1, "Exp", 21);
MA1 = Sistem.Ref(MA1,-1);

iyi geceler.

Teşekkürler Bearbull



Evet Olmamış...

var X = Sistem.Liste(0); ile oluşturunca açılan grafikteki bar sayısı kadarlık bir liste oluşturuyor dolayısıyla 15 dakikalık grafikteki bar sayısı kadar bir liste oluşturup sonra buna haftalıktaki bar sayısı kadar veri giriyorsun.


var X = Sistem.Liste(Bars1.Count,0.0f);

şeklide tanımlayabilirsin yada aşağıdaki şekilde ben yazdım bir kontrol edebilirsin bende çalışıyor.


var Sembol1 = Sistem.Sembol;
var Veriler1 = Sistem.GrafikVerileri;

// SİSTEM
var Sembol = Sistem.Sembol;

// verileri oku
var Bars1 = Sistem.GrafikVerileriniOku(Sembol1, "H");
var Bars2 = Sistem.GrafikVerileriniOku(Sembol1, "15");
var Kapanislar1 = Sistem.GrafikFiyatOku(Bars1, "Kapanis");
var MA1 = Sistem.MA(Kapanislar1, "Exp", 21);

// X - boş liste oluştur
List<float> X = new List<float>(Bars1.Count);
for (int i = 0; i < Bars1.Count; i++)
{
X.Add(0.0f);
}
// X - hesapla
for (int i = 1; i < Bars1.Count; i++)
{

X[i]= MA1[i-1];

}


// Haftalık verileri 15 dakikalık verilere hizala
var MA1Adjusted = Sistem.DonemCevir(Bars2, Bars1, MA1);
var XAdjusted = Sistem.DonemCevir(Bars2, Bars1, X);




Sistem.Cizgiler[0].Deger = MA1Adjusted ;

Sistem.Cizgiler[1].Deger = XAdjusted;




Teşekkürler Modidedo

Lyrklaunavan
09-03-2015, 19:58
Price Action / Breakout

http://i.imgur.com/8vpknsG.jpg (http://imgur.com/8vpknsG)



/*
* SharpDevelop tarafından düzenlendi.
* Kullanıcı: Lyrklaunavan
* Tarih: 9.3.2015
* Zaman: 18:34
* PRICE ACTION / BREAKOUT
* Kaynak:http://ctdn.com/algos/indicators/show/219
* Bu şablonu değiştirmek için Araçlar | Seçenekler | Kodlama | Standart Başlıkları Düzenle 'yi kullanın.
*/


var V = Sistem.GrafikVerileri;
var C = Sistem.GrafikFiyatOku(V, "Kapanis" ) ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek" ) ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk" ) ;

int index=5;

var Up = Sistem.Liste(0);
var Down = Sistem.Liste(0);
var Mid = Sistem.Liste(0);
var HHV=Sistem.HHV(V, index, "Yuksek");
var LLV=Sistem.LLV(V, index, "Dusuk");

for (int i = index; i < V.Count; i++)
{

if(C[i]<Up[i-1] & C[i] > Down[i-1])
{
Up[i] = Up[i-1];
Down[i] = Down[i-1];
}
else
{
Up[i] = HHV[i];
Down[i] = LLV[i];
}

Mid[i] = (Up[i] + Down[i])/2;
}

Sistem.Cizgiler[0].Deger = Up; //Panel 1
Sistem.Cizgiler[1].Deger = Mid; //Panel 1
Sistem.Cizgiler[2].Deger = Down;//Panel 1

thebaboli
10-03-2015, 15:51
Syn Lyrklaunavan high low dan kasıt mesela 5 dk'lık barlar son 25 barın yükseğini geçince al veren son 25 barın düşüğünü geçince sat veren bir sistemin sonuçlarını merak ediyorum bunu nasıl yapabiliriz diye sormuştum.

http://i.imgur.com/dRhNAwT.jpg (http://imgur.com/dRhNAwT)



/*
* SharpDevelop tarafından düzenlendi.
* Kullanıcı: Baran
* Tarih: 10.3.2015
* Zaman: 13:42
* Negro
* Bu şablonu değiştirmek için Araçlar | Seçenekler | Kodlama | Standart Başlıkları Düzenle 'yi kullanın.
*/

var Veriler =Sistem.GrafikVerileri;

var V = Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V, "Kapanis" ) ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek" ) ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk" ) ;
var O = Sistem.GrafikFiyatOku(V, "Acilis" ) ;
var M = Sistem.GrafikFiyatOku(V, "OrtaNokta" ) ;

float SonPozisyon = 0;
float SonFiyat = 0;
float ToplamKarZarar = 0;

var IslemMiktari = Sistem.Liste(0);
var Pozisyon = Sistem.Liste(0);
var KarZarar = Sistem.Liste(0);

int periyot1=25;
int periyot2=25;

var HHV = Sistem.HHV(periyot1, "Yuksek");
var LLV = Sistem.LLV(periyot2, "Dusuk");

for (int i = 2; i < Sistem.BarSayisi; i++)
{
// AL
if ( C[i-2] < HHV[i-2] && C[i-1] > HHV[i-2] && SonPozisyon<= 0)
{
if (SonPozisyon == 0)
{
IslemMiktari[i] = 1;
SonFiyat = V[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
Sistem.Yon[i] = "A";

}
else if (SonPozisyon < 0)
{
IslemMiktari[i] = 2;
SonFiyat = V[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
Sistem.Yon[i] = "A";

}
}
// SAT
else if (C[i-2] > LLV[i-2] && C[i-1] < LLV[i-2] && SonPozisyon >= 0)
{
if (SonPozisyon == 0)
{
IslemMiktari[i] = -1;
SonFiyat = V[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
Sistem.Yon[i] = "S";

}
else if (SonPozisyon > 0)
{
IslemMiktari[i] = -2;
SonFiyat = V[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
Sistem.Yon[i] = "S";

}
}
Pozisyon[i] = SonPozisyon;
KarZarar[i] = ToplamKarZarar + V[i].Close * Pozisyon[i];
}


Sistem.Cizgiler[0].Deger = HHV;
Sistem.Cizgiler[0].Aciklama = "HHV";

Sistem.Cizgiler[1].Deger = LLV;
Sistem.Cizgiler[1].Aciklama = "LLV";

Sistem.Cizgiler[3].Deger = IslemMiktari;
Sistem.Cizgiler[4].Deger = Pozisyon;
Sistem.Cizgiler[5].Deger = KarZarar;




Her iki yonlu bu.

Optimize etmek isterseniz de kodu bu. Bu dediginiz sistem "Donchian Breakout" olarak geciyor. Bi ara bende kullanmistim bunu.
Optimize edince daha guzel sonuclar cikabilir. Asagidaki kodda dusuk ve yuksek parametrelerini farkli sekilde ayarlayabiliyorsunuz.


/*
* SharpDevelop tarafından düzenlendi.
* Kullanıcı: Lyrklaunavan
* Tarih: 10.3.2015
* Zaman: 13:54
*
* Bu şablonu değiştirmek için Araçlar | Seçenekler | Kodlama | Standart Başlıkları Düzenle 'yi kullanın.
*/

var C = Sistem.GrafikFiyatSec("Kapanis");
var Y = Sistem.GrafikFiyatSec("Yuksek");
var D = Sistem.GrafikFiyatSec("Dusuk");
var Veriler =Sistem.GrafikVerileri;
var SonYon="";
float SonFiyat=0;


for (int periyot1 = 1; periyot1 <= 100; periyot1++)
{
for (int periyot2 = 1; periyot2 <= 100; periyot2++)
{

var HHV = Sistem.HHV(periyot1, "Yuksek");
var LLV = Sistem.LLV(periyot2, "Dusuk");

for (int i=1; i<Sistem.BarSayisi; i++)
Sistem.Yon[i]="";
SonFiyat=0;

for(int i=2; i<Sistem.BarSayisi; i++)
{

//L
if (C[i-2] < HHV[i-2] && C[i-1] > HHV[i-2] && SonYon!="A")
{
Sistem.Yon[i] = "A";
SonYon="A";
SonFiyat=Veriler[i].Close;
}

//S
if (C[i-2] > LLV[i-2] && C[i-1] < LLV[i-2] && SonYon!="S")
{
Sistem.Yon[i] = "S";
SonYon="S";
SonFiyat=Veriler[i].Close;
}
}
Sistem.Optimizasyon("periyot1", periyot1,"periyot2", periyot2);
}
}



Teşekkürler Lyrklaunavan

thebaboli
12-03-2015, 19:05
Sayın Bear_Bull,

VIOP "Açık pozisyon sayısı değişimi" değerini sistem formüllerinizde kullanmak istiyordunuz;
İki ayrı yöntemle bunu yapabileceğinizi örnek kodlarla birlikte bilgilerinize sunarız;



// seçilen bir senet
var yuzeysel = Sistem.YuzeyselVeriOku("VIP'VIP-X030");
var Y = yuzeysel.OpenInterestDif;
Sistem.Debug(Y.ToString()+ " " + DateTime.Now.ToString());




// grafik sisteminden gelen senet
var X = Sistem.YuzeyselVeri.OpenInterestDif;
Sistem.Debug(X.ToString()+ " " + DateTime.Now.ToString());


İyi çalışmalar




Açık Pozisyon sayısını döngü içinde kullanmak istediğim zaman "OpenInterestDif metod olarak kullanılamaz " diyor.
Sistem Elemanları içinde de bar içindeki APSD 'ni doğrudan gösterebilecek bir metod yok sanırım.

Ayrıca Abs() şeklinde mutlak değer alan bir Sistem Elemanına da rastlayamadım.
Yardımcı olur musunuz?



Yukarıdaki örnekteki OpenInterestDif (açık pozisyon sayısı değişimi) YÜZEYSEL veri setinin bir verisidir. O anki durumu verir.
Tarihsel olarak açık pozisyon sayıları GRAFİKVERİLERİ setindedir.
Aşağıda örnek bir kullanım görebilirsiniz.

Mutlak Değer gibi matematik fonksiyonları c# global fonkasiyonlarıdır, bizim özel bir sistem elemanı tanımlamamıza gerek yok, direk yazılabilir, kullanılabilir;

Math.Max
Math.Min
Math.Abs...
Math.Pow
Math.Sin
Mat.Cos...gibi

Örnek kullanım;


var LotSize = 1;
var Pozisyon = Sistem.PozisyonKontrolOku(Sistem.Name + " , " + Sembol);
Miktar = LotSize + Math.Abs(Pozisyon);



http://i.hizliresim.com/AANp6X.png (http://hizliresim.com/AANp6X)




Yüzeysel Veri Seti içinden aşağıdaki bilgileri okutabilirsiniz;



.LastPrice] = "Son.Fyt";
.LastSize] = "Son.Lot";
.LastVol] = "Son.Hcm";
.BidPrice] = "Al.Fyt";
.BidSize] = "Al.Lot";
.BidVol] = "Al.Hcm";
.AskPrice] = "Sat.Fyt";
.AskSize] = "Sat.Lot";
.AskVol] = "Sat.Hcm";
.HighDay] = "Yks.Gün";
.HighWeek] = "Yks.Haf";
.HighMonth] = "Yks.Ay";
.HighYear] = "Yks.Yıl";
.LowDay] = "Dşk.Gün";
.LowWeek] = "Dşk.Haf";
.LowMonth] = "Dşk.Ay";
.LowYear] = "Dşk.Yıl";
.PrevCloseSession] = "ÖncK.Sea";
.PrevCloseDay] = "ÖncK.Gün";
.PrevCloseWeek] = "ÖncK.Haf";
.PrevCloseMonth] = "ÖncK.Ay";
.PrevCloseYear] = "ÖncK.Yıl";
.NetDifSession] = "Frk.Sea";
.NetDifDay] = "Frk.Gün";
.NetDifWeek] = "Frk.Haf";
.NetDifMonth] = "Frk.Ay";
.NetDifYear] = "Frk.Yıl";
.NetPerSession] = "Frk%.Sea";
.NetPerDay] = "Frk%.Gün";
.NetPerWeek] = "Frk%.Haf";
.NetPerMonth] = "Frk%.Ay";
.NetPerYear] = "Frk%.Yıl";
.SizeSession] = "Lot.Sea";
.SizeDay] = "Lot.Gün";
.VolSession] = "Hcm.Sea";
.VolDay] = "Hcm.Gün";
.WavrSession] = "Aort.Sea";
.WavrDay] = "Aort.Gün";
.LimitUp] = "Tavan";
.LimitDown] = "Taban";
.Date] = "Tarih";
.Time] = "Saat";
.Capital] = "Sermaye";
.NetProfit] = "Kar";
.PriceEarningValue] = "FK";
.MarketValue] = "Piy.Değ";
.BookValue] = "Def.Değ";
.DaysToExpiry] = "K.Gün";
.OpenInterest] = "AçkP";
.OpenInterestDif] = "AçkP.Frk";
.TeorikVal] = "Teo.Fyt";
.TeorikDif] = "Teo.Fark";
.TeorikPer] = "Teo.%";


Örnek Kullanım;



var Sembol = "IMKBH'GARAN";
var Veri = Sistem.YuzeyselVeriOku(Sembol);
var Son = Veri.LastPrice;
var Alis = Veri.BidPrice;
var Satis = Veri.AskPrice;
var GunHacim = Veri.VolDay;

Sistem.Mesaj(Sembol + "\r\n" + "Tarih" + " " + DateTime.Now.ToString("HH:mm:ss") + "\r\n" + "Son Fiyat" + " " + Son.ToString() + "\r\n" + "Alış Fiyatı" + " " + Alis.ToString() + "\r\n" + "Satış Fiyatı" + " "+ Satis.ToString() + "\r\n" + "Günlük Hacim" + " "+ GunHacim.ToString() );


http://i.hizliresim.com/8l5JVa.png (http://hizliresim.com/8l5JVa)


Örnek Derinlik Verisi kullanımı (Birinci sıradaki kademelerin fiyatları ve emir sayıları)
[x] kademe sırası.. (ilk kademe "0" dır)



var Sembol = "VIP'VIP-X030";
var Derinlik = Sistem.DerinlikVerisiOku(Sembol);
var AlisFiyatKademe0 = Derinlik.Bids[0].Price;
var AlisLotKademe0 = Derinlik.Bids[0].Size;
var AlisEmirSayisi = Derinlik.Bids[0].OrderCount;
var SatisEmirSayisi = Derinlik.Asks[0].OrderCount;



Sezai Beye teşekkürler.

thebaboli
13-03-2015, 18:28
iDeal kullanıcılarının, sistem/indikatör yazarken daha rahat kodlama yapmalarına rağmen, yazdıkları sistemleri Robota çevirirken biraz zorlandıkları bir konu olduğunu gördüğüm için hatırlatma amaçlı yazmak istedim.

Aşağıdaki fonksiyonlar (çeşitli indikatörleri hesaplatıp, liste olarak almak) SİSTEM/İNDİKATÖR kullanımı içindir.
Grafiğe uygulandıklarında, hangi sembolde, hangi periyotta olduğunuzu, kaç tane bar olduğunu vs kendileri otomatik algılarlar.



Sistem.RSI(14);
Sistem.Momentum(12);
Sistem.Toma(3,2);
Sistem.Parabolic(0.02, 0.2);
Sistem.MACD(12,26);

for(int i=1; i < Sistem.BarSayisi; i++


Fakat Robot yazarken, (iDeal Robotları grafik üzerinden değil, direk portföy üzerinden çalıştığı için) Hangi veri listesinin, hangi sembol ve hangi periyot için hesaplanacağını belirtmelisiniz.

Yukarıdaki örneğin birebir robot versiyonu şöyle olur:



var Sembol = "Robot sembolü";
var Periyot = "5";
var Veriler = Sistem.GrafikVerileriniOku(Sembol, Periyot);

Sistem.RSI(Veriler,14);
Sistem.Momentum(Veriler,12);
Sistem.Toma(Veriler,3,2);
Sistem.Parabolic(Veriler,0.02, 0.2);
Sistem.MACD(Veriler,12,26);

for(int i=1; i < Veriler.Count; i++


İyi çalışmalar, bol kazançlar dileklerimle.

Sezai Beye teşekkürler.

Exfake
13-03-2015, 20:55
var Veriler = Sistem.GrafikVerileri;
var K = Sistem.GrafikFiyatOku(Veriler, "Kapanis");
string tablobaslik = "Sembol;Periyot;Sistem;Bas. Sermaye;Son Sermaye;Kar/Zarar;Kar/Zarar %;Komisyon;Kayma;Net Sermaye;Net Kar/Zarar; Net K/Z %;";
tablobaslik += "En Buyuk Kar;En Buyuk Zarar;Maks. Drawdown;Maks. DD %;CAR;CAR/MDD;IBK;Kontrat;Long;Short;Flat;Stop;Sure";
using (System.IO.StreamWriter dosya = new System.IO.StreamWriter(@"C:\Optimizasyon_MA.csv", false)) dosya.WriteLine(tablobaslik);
for (int KucukPeriyot = 50; KucukPeriyot < 101; KucukPeriyot++)
{
for (int BuyukPeriyot = 200; BuyukPeriyot < 251; BuyukPeriyot++)
{
if (KucukPeriyot >= BuyukPeriyot) continue;
var time = DateTime.Now;
var MA1 = Sistem.MA(K, "Exp", KucukPeriyot);
var MA2 = Sistem.MA(K, "Exp", BuyukPeriyot);
for (int i = 1; i < Veriler.Count; i++)
Sistem.Yon[i] = "";
float Sermaye = 10000f;
float KomOran = 0.0002f;
int Kontrat = 10;
float Kayma = 0;
var SermayeEgrisi = Sistem.Liste(Sermaye);
var NetSerEgrisi = Sistem.Liste(Sermaye);
var AlVeTut = Sistem.Liste(0);
var KomEgrisi = Sistem.Liste(0);
var KaymaEgrisi = Sistem.Liste(0);
var IslemMiktari = Sistem.Liste(0);
var Pozisyon = Sistem.Liste(0);
var KarZarar = Sistem.Liste(0);
var Komisyon = Sistem.Liste(0);
float SonPozisyon = 0;
float SonFiyat = 0;
float ToplamKarZarar = 0;
float ToplamKomi = 0;
float HedefFiyat = 0;
float StopFiyat = 0;
int LongSayar = 0;
int ShortSayar = 0;
int FlatSayar = 0;
int StopSayar = 0;
int IslemBar = 1;
for (int i = 1; i < Veriler.Count; i++)
{
if (MA1[i - 1] < MA2[i - 1] && MA1[i] >= MA2[i] && SonPozisyon <= 0)
{//*****al koşulu bölgesi*****
if (SonPozisyon == 0) IslemMiktari[i] = Kontrat;
else if (SonPozisyon < 0) IslemMiktari[i] = Kontrat * 2;
Sistem.Yon[i] = "A";
LongSayar++;
IslemBar = i;
SonFiyat = Veriler[i].Close;
HedefFiyat = SonFiyat + 3f;
StopFiyat = SonFiyat - 0.5f;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
ToplamKomi = SonFiyat * KomOran * IslemMiktari[i];
KomEgrisi[i] = KomEgrisi[i - 1] + Math.Abs(ToplamKomi) * 100;
KaymaEgrisi[i] = KaymaEgrisi[i - 1] + Math.Abs(Kayma * IslemMiktari[i] / 10);
}
else if (MA1[i - 1] > MA2[i - 1] && MA1[i] <= MA2[i] && SonPozisyon >= 0)
{//*****sat koşulu bölgesi*****
if (SonPozisyon == 0) IslemMiktari[i] = Kontrat * -1;
else if (SonPozisyon > 0) IslemMiktari[i] = Kontrat * -2;
Sistem.Yon[i] = "S";
ShortSayar++;
IslemBar = i;
SonFiyat = Veriler[i].Close;
HedefFiyat = SonFiyat - 3f;
StopFiyat = SonFiyat + 0.5f;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
ToplamKomi = SonFiyat * KomOran * IslemMiktari[i];
KomEgrisi[i] = KomEgrisi[i - 1] + Math.Abs(ToplamKomi) * 100;
KaymaEgrisi[i] = KaymaEgrisi[i - 1] + Math.Abs(Kayma * IslemMiktari[i] / 10);
}
else if (Veriler[i].Close >= HedefFiyat && SonPozisyon > 0)
{//*****long flat koşulu bölgesi*****
Sistem.Yon[i] = "F";
FlatSayar++;
IslemMiktari[i] = Kontrat * -1;
SonFiyat = HedefFiyat;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
ToplamKomi = SonFiyat * KomOran * IslemMiktari[i];
KomEgrisi[i] = KomEgrisi[i - 1] + Math.Abs(ToplamKomi) * 100;
KaymaEgrisi[i] = KaymaEgrisi[i - 1] + Math.Abs(Kayma * IslemMiktari[i] / 10);
}
else if (Veriler[i].Close <= HedefFiyat && SonPozisyon < 0)
{//*****short flat koşulu bölgesi*****
Sistem.Yon[i] = "F";
FlatSayar++;
IslemMiktari[i] = Kontrat * 1;
SonFiyat = HedefFiyat;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
ToplamKomi = SonFiyat * KomOran * IslemMiktari[i];
KomEgrisi[i] = KomEgrisi[i - 1] + Math.Abs(ToplamKomi) * 100;
KaymaEgrisi[i] = KaymaEgrisi[i - 1] + Math.Abs(Kayma * IslemMiktari[i] / 10);
}
else if (Veriler[i].Close <= StopFiyat && SonPozisyon > 0)
{//*****long stop koşulu bölgesi*****
Sistem.Yon[i] = "F";
StopSayar++;
IslemMiktari[i] = Kontrat * -1;
SonFiyat = StopFiyat;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
ToplamKomi = SonFiyat * KomOran * IslemMiktari[i];
KomEgrisi[i] = KomEgrisi[i - 1] + Math.Abs(ToplamKomi) * 100;
KaymaEgrisi[i] = KaymaEgrisi[i - 1] + Math.Abs(Kayma * IslemMiktari[i] / 10);
}
else if (Veriler[i].Close >= StopFiyat && SonPozisyon < 0)
{//*****short stop koşulu bölgesi*****
Sistem.Yon[i] = "F";
StopSayar++;
IslemMiktari[i] = Kontrat * 1;
SonFiyat = StopFiyat;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
ToplamKomi = SonFiyat * KomOran * IslemMiktari[i];
KomEgrisi[i] = KomEgrisi[i - 1] + Math.Abs(ToplamKomi) * 100;
KaymaEgrisi[i] = KaymaEgrisi[i - 1] + Math.Abs(Kayma * IslemMiktari[i] / 10);
}
else { KomEgrisi[i] = KomEgrisi[i - 1]; KaymaEgrisi[i] = KaymaEgrisi[i - 1]; }
Pozisyon[i] = SonPozisyon;
//KarZarar[i] = (ToplamKarZarar + SonFiyat * Pozisyon[i]) * 100; //pozisyon kapanışına göre
KarZarar[i] = (ToplamKarZarar + Veriler[i].Close * Pozisyon[i]) * 100; //anlık görüntü
Komisyon[i] = Math.Abs(ToplamKomi) * 100;
SermayeEgrisi[i] = Sermaye + KarZarar[i];
NetSerEgrisi[i] = Sermaye + KarZarar[i] - KaymaEgrisi[i] - KomEgrisi[i];
AlVeTut[i] = Sermaye + (Veriler[i].Close - Veriler[1].Close) * 1000;
}

var KarZararIs = Sistem.Liste(0);
float KarZararIs1 = 0;
int BarNoIs1 = 1;
float FarkIs = 0;
for (int i = 1; i < Veriler.Count; i++)
{
if (Sistem.Yon[i] == "A" || Sistem.Yon[i] == "S")
{
FarkIs = KarZarar[i] - KarZararIs1;
for (int j = BarNoIs1; j < i; j++)
KarZararIs[j] = FarkIs;
KarZararIs1 = KarZarar[i];
BarNoIs1 = i;
}
if (i == Veriler.Count - 1)
{
FarkIs = KarZarar[i] - KarZararIs1;
for (int j = BarNoIs1; j < Veriler.Count; j++)
KarZararIs[j] = FarkIs;
}
}
var MaksSE = Sistem.Liste(0);
var DD = Sistem.Liste(0);
var MDD = Sistem.Liste(0);
var MaksIKZ = Sistem.Liste(0);
var MinIKZ = Sistem.Liste(0);
float MDDY = 0;
for (int i = 1; i < Veriler.Count; i++)
{
if (SermayeEgrisi[i] <= MaksSE[i - 1]) MaksSE[i] = MaksSE[i - 1]; else MaksSE[i] = SermayeEgrisi[i];
if (SermayeEgrisi[i] < MaksSE[i]) DD[i] = SermayeEgrisi[i] - MaksSE[i];
if (DD[i] >= MDD[i - 1]) MDD[i] = MDD[i - 1]; else { MDD[i] = DD[i]; MDDY = (MaksSE[i] - Math.Abs(MDD[i])) / MaksSE[i] - 1; }
if (KarZararIs[i] <= MaksIKZ[i - 1]) MaksIKZ[i] = MaksIKZ[i - 1]; else MaksIKZ[i] = KarZararIs[i];
if (KarZararIs[i] >= MinIKZ[i - 1]) MinIKZ[i] = MinIKZ[i - 1]; else MinIKZ[i] = KarZararIs[i];
}
float CAR = (float)Math.Pow(SermayeEgrisi[SermayeEgrisi.Count - 1] / Sermaye, 365f / (Veriler[Veriler.Count - 1].Date - Veriler[1].Date).Days) - 1;
float CARMDD = CAR / MDDY;
string ozettablo = "";
ozettablo += Sistem.Sembol + ";" + Sistem.Periyot + ";" + "MA-" + KucukPeriyot + "-" + BuyukPeriyot + ";";
ozettablo += Sermaye.ToString("N2") + ";";
ozettablo += SermayeEgrisi[SermayeEgrisi.Count - 1].ToString("N2") + ";";
ozettablo += KarZarar[KarZarar.Count - 1].ToString("N2") + ";" + ((SermayeEgrisi[SermayeEgrisi.Count - 1] / Sermaye) - 1).ToString("P2") + ";";
ozettablo += KomEgrisi[KomEgrisi.Count - 1].ToString("N2") + ";";
ozettablo += KaymaEgrisi[KaymaEgrisi.Count - 1].ToString("N2") + ";";
ozettablo += NetSerEgrisi[NetSerEgrisi.Count - 1].ToString("N2") + ";";
ozettablo += (NetSerEgrisi[NetSerEgrisi.Count - 1] - Sermaye).ToString("N2") + ";" + ((NetSerEgrisi[NetSerEgrisi.Count - 1] / Sermaye) - 1).ToString("P2") + ";";
ozettablo += MaksIKZ[MaksIKZ.Count - 1].ToString("N2") + ";";
ozettablo += MinIKZ[MinIKZ.Count - 1].ToString("N2") + ";";
ozettablo += MDD[MDD.Count - 1].ToString("N0") + ";" + MDDY.ToString("P2") + ";";
ozettablo += CAR.ToString("N2") + ";" + CARMDD.ToString("N2") + ";";
ozettablo += (SermayeEgrisi[SermayeEgrisi.Count - 1] / (LongSayar + ShortSayar)).ToString("N2") + ";" + Kontrat.ToString("N0") + ";";
ozettablo += LongSayar + ";" + ShortSayar + ";";
ozettablo += FlatSayar + ";" + StopSayar + ";";
ozettablo += (DateTime.Now - time).Milliseconds + " ms..";
using (System.IO.StreamWriter dosya = new System.IO.StreamWriter(@"C:\Optimizasyon_MA.csv", true)) dosya.WriteLine(ozettablo);
Sistem.Optimizasyon("MA", KucukPeriyot, BuyukPeriyot);
}
}


İstek üzerine CAR/MDD ve İşlem başı kar eklendi.
Sadece kırmızı renkli olan yerler değiştirildi geri kalan eski kod ile aynı.
Bol kazançlar..

Exfake
16-03-2015, 13:55
Merhaba,
Tahmini süre ekledik.
Arada bir rakamlar sapıtsada bozuk saat misali günde iki kez doğruyu gösteriyor sanırım :oley:
KucukPeriyot BuyukPeriyot gitti yerine Optimize1 geldi.
Siz direkt bu satıra örnekteki gibi başlangıç, bitiş ve adım değerlerini girin. Diğer yerler sabit.
Kırmızılar değişiklik yapılan yerler.
Maviler ekleme yapılan yerler.
Sistem.Mesaj rahatsız ederse Debug'ı kullanabilirsiniz.
Bol Kazançlar..
http://i.hizliresim.com/9V3l03.png (http://hizliresim.com/9V3l03)http://i.hizliresim.com/q4anVD.png (http://hizliresim.com/q4anVD)


var Veriler = Sistem.GrafikVerileri;
var K = Sistem.GrafikFiyatOku(Veriler, "Kapanis");
string tablobaslik = "Sembol;Periyot;Sistem;Bas. Sermaye;Son Sermaye;Kar/Zarar;Kar/Zarar %;Komisyon;Kayma;Net Sermaye;Net Kar/Zarar; Net K/Z %;";
tablobaslik += "En Buyuk Kar;En Buyuk Zarar;Maks. Drawdown;Maks. DD %;CAR;CAR/MDD;IBK;Kontrat;Long;Short;Flat;Stop;Sure";
using (System.IO.StreamWriter dosya = new System.IO.StreamWriter(@"C:\Optimizasyon_MA.csv", false)) dosya.WriteLine(tablobaslik);
string sure = "Yok";
var topsure = DateTime.Now;
string Optimize1 = "50|100|1"; //örnek Optimize1 = "Baslangıc sayısı|Bitis sayısı|Adım";
string Optimize2 = "150|200|1";
int Opt1adimsayisi = (Convert.ToInt16(Optimize1.Split('|')[1])-(Convert.ToInt16(Optimize1.Split('|')[0])-Convert.ToInt16(Optimize1.Split('|')[2])))/Convert.ToInt16(Optimize1.Split('|')[2]);
int Opt2adimsayisi = (Convert.ToInt16(Optimize2.Split('|')[1])-(Convert.ToInt16(Optimize2.Split('|')[0])-Convert.ToInt16(Optimize1.Split('|')[2])))/Convert.ToInt16(Optimize2.Split('|')[2]);
int topadimsayisi = Opt1adimsayisi * Opt2adimsayisi;
for (int Opt1 = Convert.ToInt16(Optimize1.Split('|')[0]); Opt1 <= Convert.ToInt16(Optimize1.Split('|')[1]); Opt1+=Convert.ToInt16(Optimize1.Split('|')[2]))
{
for (int Opt2 = Convert.ToInt16(Optimize2.Split('|')[0]); Opt2 <= Convert.ToInt16(Optimize2.Split('|')[1]); Opt2+=Convert.ToInt16(Optimize2.Split('|')[2]))
{
var adimsure = DateTime.Now;
if (Opt1 >= Opt2) continue;
var MA1 = Sistem.MA(K, "Exp", Opt1);
var MA2 = Sistem.MA(K, "Exp", Opt2);
for (int i = 1; i < Veriler.Count; i++)
Sistem.Yon[i] = "";
float Sermaye = 50000f;
float KomOran = 0.00021f;
int Kontrat = 10;
float Kayma = 0;
var SermayeEgrisi = Sistem.Liste(Sermaye);
var NetSerEgrisi = Sistem.Liste(Sermaye);
var AlVeTut = Sistem.Liste(0);
var KomEgrisi = Sistem.Liste(0);
var KaymaEgrisi = Sistem.Liste(0);
var IslemMiktari = Sistem.Liste(0);
var Pozisyon = Sistem.Liste(0);
var KarZarar = Sistem.Liste(0);
var Komisyon = Sistem.Liste(0);
float SonPozisyon = 0;
float SonFiyat = 0;
float ToplamKarZarar = 0;
float ToplamKomi = 0;
float HedefFiyat = 0;
float StopFiyat = 0;
int LongSayar = 0;
int ShortSayar = 0;
int FlatSayar = 0;
int StopSayar = 0;
int IslemBar = 1;
for (int i = 1; i < Veriler.Count; i++)
{
if (MA1[i - 1] < MA2[i - 1] && MA1[i] >= MA2[i] && SonPozisyon <= 0)
{//*****al koşulu bölgesi*****
if (SonPozisyon == 0) IslemMiktari[i] = Kontrat;
else if (SonPozisyon < 0) IslemMiktari[i] = Kontrat * 2;
Sistem.Yon[i] = "A";
LongSayar++;
IslemBar = i;
SonFiyat = Veriler[i].Close;
HedefFiyat = SonFiyat + 3f;
StopFiyat = SonFiyat - 0.5f;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
ToplamKomi = SonFiyat * KomOran * IslemMiktari[i];
KomEgrisi[i] = KomEgrisi[i - 1] + Math.Abs(ToplamKomi) * 100;
KaymaEgrisi[i] = KaymaEgrisi[i - 1] + Math.Abs(Kayma * IslemMiktari[i] / 10);
}
else if (MA1[i - 1] > MA2[i - 1] && MA1[i] <= MA2[i] && SonPozisyon >= 0)
{//*****sat koşulu bölgesi*****
if (SonPozisyon == 0) IslemMiktari[i] = Kontrat * -1;
else if (SonPozisyon > 0) IslemMiktari[i] = Kontrat * -2;
Sistem.Yon[i] = "S";
ShortSayar++;
IslemBar = i;
SonFiyat = Veriler[i].Close;
HedefFiyat = SonFiyat - 3f;
StopFiyat = SonFiyat + 0.5f;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
ToplamKomi = SonFiyat * KomOran * IslemMiktari[i];
KomEgrisi[i] = KomEgrisi[i - 1] + Math.Abs(ToplamKomi) * 100;
KaymaEgrisi[i] = KaymaEgrisi[i - 1] + Math.Abs(Kayma * IslemMiktari[i] / 10);
}
else if (Veriler[i].Close >= HedefFiyat && SonPozisyon > 0)
{//*****long flat koşulu bölgesi*****
Sistem.Yon[i] = "F";
FlatSayar++;
IslemMiktari[i] = Kontrat * -1;
SonFiyat = HedefFiyat;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
ToplamKomi = SonFiyat * KomOran * IslemMiktari[i];
KomEgrisi[i] = KomEgrisi[i - 1] + Math.Abs(ToplamKomi) * 100;
KaymaEgrisi[i] = KaymaEgrisi[i - 1] + Math.Abs(Kayma * IslemMiktari[i] / 10);
}
else if (Veriler[i].Close <= HedefFiyat && SonPozisyon < 0)
{//*****short flat koşulu bölgesi*****
Sistem.Yon[i] = "F";
FlatSayar++;
IslemMiktari[i] = Kontrat * 1;
SonFiyat = HedefFiyat;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
ToplamKomi = SonFiyat * KomOran * IslemMiktari[i];
KomEgrisi[i] = KomEgrisi[i - 1] + Math.Abs(ToplamKomi) * 100;
KaymaEgrisi[i] = KaymaEgrisi[i - 1] + Math.Abs(Kayma * IslemMiktari[i] / 10);
}
else if (Veriler[i].Close <= StopFiyat && SonPozisyon > 0)
{//*****long stop koşulu bölgesi*****
Sistem.Yon[i] = "F";
StopSayar++;
IslemMiktari[i] = Kontrat * -1;
SonFiyat = StopFiyat;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
ToplamKomi = SonFiyat * KomOran * IslemMiktari[i];
KomEgrisi[i] = KomEgrisi[i - 1] + Math.Abs(ToplamKomi) * 100;
KaymaEgrisi[i] = KaymaEgrisi[i - 1] + Math.Abs(Kayma * IslemMiktari[i] / 10);
}
else if (Veriler[i].Close >= StopFiyat && SonPozisyon < 0)
{//*****short stop koşulu bölgesi*****
Sistem.Yon[i] = "F";
StopSayar++;
IslemMiktari[i] = Kontrat * 1;
SonFiyat = StopFiyat;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
ToplamKomi = SonFiyat * KomOran * IslemMiktari[i];
KomEgrisi[i] = KomEgrisi[i - 1] + Math.Abs(ToplamKomi) * 100;
KaymaEgrisi[i] = KaymaEgrisi[i - 1] + Math.Abs(Kayma * IslemMiktari[i] / 10);
}
else { KomEgrisi[i] = KomEgrisi[i - 1]; KaymaEgrisi[i] = KaymaEgrisi[i - 1]; }
Pozisyon[i] = SonPozisyon;
//KarZarar[i] = (ToplamKarZarar + SonFiyat * Pozisyon[i]) * 100; //pozisyon kapanışına göre
KarZarar[i] = (ToplamKarZarar + Veriler[i].Close * Pozisyon[i]) * 100; //anlık görüntü
Komisyon[i] = Math.Abs(ToplamKomi) * 100;
SermayeEgrisi[i] = Sermaye + KarZarar[i];
NetSerEgrisi[i] = Sermaye + KarZarar[i] - KaymaEgrisi[i] - KomEgrisi[i];
AlVeTut[i] = Sermaye + (Veriler[i].Close - Veriler[1].Close) * 1000;
}
var KarZararIs = Sistem.Liste(0);
float KarZararIs1 = 0;
int BarNoIs1 = 1;
float FarkIs = 0;
for (int i = 1; i < Veriler.Count; i++)
{
if (Sistem.Yon[i] == "A" || Sistem.Yon[i] == "S")
{
FarkIs = KarZarar[i] - KarZararIs1;
for (int j = BarNoIs1; j < i; j++)
KarZararIs[j] = FarkIs;
KarZararIs1 = KarZarar[i];
BarNoIs1 = i;
}
if (i == Veriler.Count - 1)
{
FarkIs = KarZarar[i] - KarZararIs1;
for (int j = BarNoIs1; j < Veriler.Count; j++)
KarZararIs[j] = FarkIs;
}
}
var MaksSE = Sistem.Liste(0);
var DD = Sistem.Liste(0);
var MDD = Sistem.Liste(0);
var MaksIKZ = Sistem.Liste(0);
var MinIKZ = Sistem.Liste(0);
float MDDY = 0;
for (int i = 1; i < Veriler.Count; i++)
{
if (SermayeEgrisi[i] <= MaksSE[i - 1]) MaksSE[i] = MaksSE[i - 1]; else MaksSE[i] = SermayeEgrisi[i];
if (SermayeEgrisi[i] < MaksSE[i]) DD[i] = SermayeEgrisi[i] - MaksSE[i];
if (DD[i] >= MDD[i - 1]) MDD[i] = MDD[i - 1]; else { MDD[i] = DD[i]; MDDY = (MaksSE[i] - Math.Abs(MDD[i])) / MaksSE[i] - 1; }
if (KarZararIs[i] <= MaksIKZ[i - 1]) MaksIKZ[i] = MaksIKZ[i - 1]; else MaksIKZ[i] = KarZararIs[i];
if (KarZararIs[i] >= MinIKZ[i - 1]) MinIKZ[i] = MinIKZ[i - 1]; else MinIKZ[i] = KarZararIs[i];
}
float CAR = (float)Math.Pow(SermayeEgrisi[SermayeEgrisi.Count - 1] / Sermaye, 365f / (Veriler[Veriler.Count - 1].Date - Veriler[1].Date).Days) - 1;
float CARMDD = CAR / MDDY;
string ozettablo = "";
ozettablo += Sistem.Sembol + ";" + Sistem.Periyot + ";" + "MA-" + Opt1 + "-" + Opt2 + ";";
ozettablo += Sermaye.ToString("N2") + ";";
ozettablo += SermayeEgrisi[SermayeEgrisi.Count - 1].ToString("N2") + ";";
ozettablo += KarZarar[KarZarar.Count - 1].ToString("N2") + ";" + ((SermayeEgrisi[SermayeEgrisi.Count - 1] / Sermaye) - 1).ToString("P2") + ";";
ozettablo += KomEgrisi[KomEgrisi.Count - 1].ToString("N2") + ";";
ozettablo += KaymaEgrisi[KaymaEgrisi.Count - 1].ToString("N2") + ";";
ozettablo += NetSerEgrisi[NetSerEgrisi.Count - 1].ToString("N2") + ";";
ozettablo += (NetSerEgrisi[NetSerEgrisi.Count - 1] - Sermaye).ToString("N2") + ";" + ((NetSerEgrisi[NetSerEgrisi.Count - 1] / Sermaye) - 1).ToString("P2") + ";";
ozettablo += MaksIKZ[MaksIKZ.Count - 1].ToString("N2") + ";";
ozettablo += MinIKZ[MinIKZ.Count - 1].ToString("N2") + ";";
ozettablo += MDD[MDD.Count - 1].ToString("N0") + ";" + MDDY.ToString("P2") + ";";
ozettablo += CAR.ToString("N2") + ";" + CARMDD.ToString("N2") + ";";
ozettablo += (SermayeEgrisi[SermayeEgrisi.Count - 1] / (LongSayar + ShortSayar)).ToString("N2") + ";" + Kontrat.ToString("N0") + ";";
ozettablo += LongSayar + ";" + ShortSayar + ";";
ozettablo += FlatSayar + ";" + StopSayar + ";";
ozettablo += (DateTime.Now - adimsure).Milliseconds + " ms..";
using (System.IO.StreamWriter dosya = new System.IO.StreamWriter(@"C:\Optimizasyon_MA.csv", true)) dosya.WriteLine(ozettablo);
Sistem.Optimizasyon("MA", Opt1, Opt2);
TimeSpan ts1 = TimeSpan.FromMilliseconds((DateTime.Now - adimsure).Milliseconds*topadimsayisi);
sure = "Kalan süre: "+ts1.Hours+" saat "+ts1.Minutes+" dakika "+ts1.Seconds+" saniye..\r\nKalan adım: "+topadimsayisi+" adet..";
Sistem.Mesaj(sure);
topadimsayisi--;
}
}
TimeSpan tst = (DateTime.Now - topsure);
sure += "\r\nToplam süre: "+tst.Hours+" saat "+tst.Minutes+" dakika "+tst.Seconds+" saniye..";
Sistem.Mesaj(sure);

Exfake
17-03-2015, 17:57
Merhaba,
Sistemcilerin ve robotçuların işine yarayacağını düşündüğüm 1-2 basit kod.

var veri = Sistem.GrafikVerileri;
string saat = "13:55";
for(int i = 1;i<veri.Count;i++)
{
if(veri[i].Date.Day != veri[i-1].Date.Day)//intraday grafiklerde günün ilk barı
Sistem.YaziEkle("|Açılış barı",1,i,veri[i].Low-0.5f,Sistem.Renk(250,250,250,250),"Calibri",8);
if(veri[i].Low > veri[i-1].High)//yuksek düşüge göre yukarı gap
Sistem.YaziEkle("|Yukarı gap",1,i,veri[i].Low-0.6f,Sistem.Renk(250,0,250,0),"Calibri",8);
if(veri[i].High < veri[i-1].Low)//yuksek düşüğe göre aşağı gap
Sistem.YaziEkle("|Aşağı gap",1,i,veri[i].High+0.6f,Sistem.Renk(250,250,0,0),"Calibri",8);
if(veri[i].Open > veri[i-1].High)//açılışa göre yukarı gap - bar kapanışını beklemeden işlem yapan sistemler için daha iyi olabilir.
Sistem.YaziEkle(".",1,i,veri[i].Low-0.5f,Sistem.Renk(250,250,250,0),"Calibri",8);
if(veri[i].Open < veri[i-1].Low)//açılışa göre aşağı gap
Sistem.YaziEkle(".",1,i,veri[i].High+0.5f,Sistem.Renk(250,250,250,0),"Calibri",8);
if(veri[i].Date.Day != veri[i-1].Date.Day && veri[i].Low > veri[i-1].High)//yukarı gapli açılış
Sistem.YaziEkle("|Yukarı gapli açılış",1,i,veri[i].Low-0.7f,Sistem.Renk(250,0,100,0),"Calibri",8);
if(veri[i].Date.Day != veri[i-1].Date.Day && veri[i].High < veri[i-1].Low)//aşağı gapli açılış
Sistem.YaziEkle("|Aşağı gapli açılış",1,i,veri[i].High+0.7f,Sistem.Renk(250,100,0,0),"Calibri",8);
if(veri[i].Date.ToShortTimeString() == saat)//öğlen açılış - eğer viop açılış-kapanış saatlerinin farklı olduğu zamanlara kadar uzanan veri setleriniz varsa bu yönteme dikkat edin.
Sistem.YaziEkle("|öğlen açılış",1,i,veri[i].High+0.7f,Sistem.Renk(250,0,0,0),"Calibri",8);
}
http://i.hizliresim.com/WVPn32.png (http://hizliresim.com/WVPn32)

Lyrklaunavan
18-03-2015, 19:14
Hareketli ortalama yerine bunu kullanmak daha mantikli.

http://i.imgur.com/IR6yoEo.jpg (http://imgur.com/IR6yoEo)




/*
* SharpDevelop tarafından düzenlendi.
* Kullanıcı: Lyrklaunavan
* Tarih: 18.3.2015
* Zaman: 18:04
* Low Pass Filter
* Bu şablonu değiştirmek için Araçlar | Seçenekler | Kodlama | Standart Başlıkları Düzenle 'yi kullanın.
*/

var V = Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V, "Kapanis") ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek") ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk") ;
var O = Sistem.GrafikFiyatOku(V, "Acilis") ;

int order = 3; // 2 ya da 3 olmali
int FilterPeriod = 35; //kafaniza gore degistirebilirsiniz
int PreSmooth = 5; //kafaniza gore degistirebilirsiniz
double a=0;
double b=0;
double c=0;
double pi = Math.Round(Math.PI,6);
double k1=0;
double k2=0;
double k3=0;
double k4=0;
double k5=0;
double k6=0;

var Smoother = Sistem.Liste(V.Count,0);
var Filter = Sistem.Liste(V.Count,0);
var sma1 = Sistem.MA(C, "Simple", PreSmooth);
var sma2 = Sistem.MA(Smoother, "Simple", FilterPeriod);

switch (order)
{
case 1:
break;

case 2:
a = Math.Round(Math.Exp(-Math.Sqrt(2) * pi / FilterPeriod),6);
b = Math.Round(2 * a * Math.Cos(Math.Sqrt(2) * pi / FilterPeriod),6);
k1=a*a; k2=(1 - b + a * a);
break;

case 3:
a = Math.Round(Math.Exp(-pi / FilterPeriod),6);
b = Math.Round(2 * a * Math.Cos(Math.Sqrt(3) * pi / FilterPeriod),6);
c = Math.Round(Math.Exp(-2 * pi / FilterPeriod),6);
k3=(b + c); k4=Math.Round((c + b * c),6);k5=Math.Round(c * c,6);k6=Math.Round(((1 - b + c) * (1 - c)),6);
break;
}

for (int i = 3; i < V.Count; i++)
{
Smoother[i]=sma1[i];

switch (order)
{
case 1: Filter[i]=sma2[i]; break;
case 2: Filter[i]=(float)(b*Filter[i-1] - k1*Filter[i-2] + k2*Smoother[i]); break;
case 3: Filter[i]=(float)(k3*Filter[i-1] - k4*Filter[i-2] + k5*Filter[i-3]+ k6*Smoother[i]); break;
}

}

Sistem.Cizgiler[0].Deger = Filter;

Lyrklaunavan
22-03-2015, 00:38
Fiyatin standart deviasyonuna uzakligini gosteren bir indikator... +2 ve -2 noktalarina degdiginde guzel sinyaller vermis...Bollinger bandin bir cesidi...

http://i.imgur.com/WKzE4nP.jpg (http://imgur.com/WKzE4nP)




/* Z-Score
* Created by SharpDevelop.
* User: Lyrklaunavan
* Date: 21.3.2015
* Time: 23:10
* '************************************************* *********************
* Z-Score Indicator
*
* Adapted from Technical Analysis of Stocks and Commodities
* February 2003
*
* Summary:
*
* This indicator measures the normalized distance from the
* N period Moving Average using the statistical formula for Z-value.
* For more information see "Z-Score Indicator" in the
* February 2003 edition of Technical Analysis of Stocks and
* Commodities.
*
* Parameters:
*
* period= Specifies the number of Periods used for the Average and
* Standard Deviation calculations used to determine the
* Z-Score.
*
************************************************** ******************
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/

var V = Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V, "Kapanis" ) ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek" ) ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk" ) ;
var O = Sistem.GrafikFiyatOku(V, "Acilis" ) ;

int period=20;

var SMA=Sistem.MA(C, "Simple", period);
var stDev=Sistem.StDev(C, period);

var Z_Score=Sistem.Liste(V.Count,0);

for(int i=1;i<V.Count;i++){

Z_Score[i]=(C[i]-SMA[i])/stDev[i];

}

Sistem.Cizgiler[0].Deger = Z_Score; // panel 2
Sistem.Cizgiler[1].Deger = Sistem.Liste(-2); // panel 2
Sistem.Cizgiler[2].Deger = Sistem.Liste(2); // panel 2

Lyrklaunavan
22-03-2015, 01:00
Aslinda bu z-score koduyla herhangi bir indikatorun o anki seviyesinin 2 std.deviasyonuna gore konumu hesaplattirilabilir...
Asagida RSI i kullandim... Yukarda kapanis fiyatini kullanmistim...

http://i.imgur.com/LHAtmtL.jpg (http://imgur.com/LHAtmtL)




/* Z-Score of RSI
* Created by SharpDevelop.
* User: Lyrklaunavan
* Date: 21.3.2015
* Time: 23:10
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/

var V = Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V, "Kapanis" ) ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek" ) ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk" ) ;
var O = Sistem.GrafikFiyatOku(V, "Acilis" ) ;

int period=14;

var RSI=Sistem.RSI(C, period);
var MA=Sistem.MA(RSI, "Simple", 10);
var stDev=Sistem.StDev(RSI, period);

var Z_Score_of_RSI=Sistem.Liste(V.Count,0);

for(int i=1;i<V.Count;i++){

Z_Score_of_RSI[i]=(RSI[i]-MA[i])/stDev[i];

}

Sistem.Cizgiler[0].Deger = Z_Score_of_RSI; // panel 2
Sistem.Cizgiler[1].Deger = Sistem.Liste(-2); // panel 2
Sistem.Cizgiler[2].Deger = Sistem.Liste(2); // panel 2

Lyrklaunavan
23-03-2015, 01:05
Sayin Dilberte tesekkurler...

Hilbert Sine Wave...

http://www.forexfactory.com/attachment.php?attachmentid=234275






var Veriler = Sistem.GrafikVerileriniOku(Sistem.Sembol, Sistem.Periyot);
var Price = Sistem.Liste(0);
float Alpha = 0.07f;
var Smooth = Sistem.Liste(0);
var Cycle = Sistem.Liste(0);
var I1 = Sistem.Liste(0);
var Q1 = Sistem.Liste(0);
var I2 = Sistem.Liste(0);
var Q2 = Sistem.Liste(0);
var DeltaPhase = Sistem.Liste(0);
var MedianDelta = Sistem.Liste(0);
var MaxAmp = Sistem.Liste(0);
var AmpFix = Sistem.Liste(0);
var Re = Sistem.Liste(0);
var Im = Sistem.Liste(0);
float DC = 0f;
var alfa1 = Sistem.Liste(0);
var InstPeriod = Sistem.Liste(0);
double DCPeriod = 0;
var SmoothCycle = Sistem.Liste(0);
double RealPart = 0;
double ImagPart = 0;
var DCPhase = new List<double>();
var Price5= new List<double>();
var Value1 = Sistem.Liste(0);
var Sinus = Sistem.Liste(0);
var LeadSinus = Sistem.Liste(0);

for (int i =0 ; i<Veriler.Count;i++)
{
Price[i]=(Veriler[i].High + Veriler[i].Low)/2;
DCPhase.Add(0);
}


for(int i = 40 ; i<Veriler.Count;i++)
{
Smooth[i] = (Price[i]+2*Price[i-1]+2*Price[i-2]+Price[i-3])/6;
Cycle[i] =(1-.5f*Alpha)*(1-.5f*Alpha)*(Smooth[i]-2*Smooth[i-1]+Smooth[i-2])+2*(1-Alpha)*Cycle[i-1]-(1-Alpha)*(1-Alpha)*Cycle[i-2];

Q1[i]=(0.0962f*Cycle[i]+0.5769f*Cycle[i-2]-0.5769f*Cycle[i-4]-0.0962f*Cycle[i-6])*(0.5f+0.08f*InstPeriod[i-1]);
I1[i] = Cycle[i-3];

if (Q1[i]!=0 && Q1[i-1]!=0) DeltaPhase[i]=(I1[i]/Q1[i]-I1[i-1]/Q1[i-1])/(1+I1[i]*I1[i-1]/(Q1[i]*Q1[i-1]));
if (DeltaPhase[i]<0.1) DeltaPhase[i]=0.1f;
if (DeltaPhase[i]>1.1) DeltaPhase[i]=1.1f;
Price5.Add(DeltaPhase[i]);
Price5.Add(DeltaPhase[i-1]);
Price5.Add(DeltaPhase[i-2]);
Price5.Add(DeltaPhase[i-3]);
Price5.Add(DeltaPhase[i-4]);
Price5.Sort();
MedianDelta[i] =(float)Price5[2];
Price5.Clear();
if (MedianDelta[i]==0){DC=15f;}else{DC=6.28318f/MedianDelta[i]+0.5f;}

InstPeriod[i]=0.33f*DC+0.67f*InstPeriod[i-1];
Value1[i] = 0.15f*InstPeriod[i]+0.85f*Value1[i-1];
DCPeriod =System.Math.Floor(Value1[i]);
RealPart = 0;
ImagPart = 0;
for (int j = 0; j < DCPeriod-1;++j)
{
RealPart = RealPart + System.Math.Sin((System.Math.PI/180)*(360*j / DCPeriod)) * Cycle[i-j];
ImagPart = ImagPart + System.Math.Cos((System.Math.PI/180)*(360*j / DCPeriod)) * Cycle[i-j];
}

if (System.Math.Abs(ImagPart) > 0.0001) DCPhase[i] = (180/System.Math.PI)*System.Math.Atan(RealPart / ImagPart);
if (System.Math.Abs(ImagPart) <= 0.0001) DCPhase[i] = 90 * System.Math.Sign(RealPart);

DCPhase[i]+= 90;

if(ImagPart <0 ) DCPhase[i] = DCPhase[i] + 180;
if(DCPhase[i] >315 ) DCPhase[i] = DCPhase[i] -360;

Sinus[i]=(float)System.Math.Sin((System.Math.PI/180)*(DCPhase[i]));
LeadSinus[i]=(float)System.Math.Sin((System.Math.PI/180)*(DCPhase[i]+45));

}


//Sistem.KesismeTara(Sinus,LeadSinus);
Sistem.Cizgiler[0].Deger=Sinus; // panel 2
Sistem.Cizgiler[1].Deger=LeadSinus; // panel 2

thebaboli
23-03-2015, 21:14
Getiri eğrisini de dikkate alan MA kesişme sistemi
( Temel mantık : getiri eğrisi, referansın altındayken sistem kendini korumaya alır (flat), referans üzerindeyken işleme (long veya short) devam eder , mantık Holy Grail, ama uygulama farklı olabilir :) )

MA kesişimine göre getiri eğrisini çizer, önceki gün/hafta/ay kapanış getirisine göre (kırmızı ile işaretli yerden seçiminizi yapabilirsiniz , kod içinde aylık kıyas yapılmaktadır) kıyas yaparak yeni stratejiyi uygular. Örneğin, ma kesişiminde longken, terste kalıp zarar yazıyorken, getiri önceki gün/hafta/ayın altına düşünce sistem kendini korumaya alıp flat olur. Tekrar üzerine çıkınca normal çalışmasına devam eder. Sistemlerin aşırı derecede terste kalmasını engelleyeceğini düşünüyorum.





// verileri oku
var Periyot1 = Sistem.Periyot;
var Sembol1 = Sistem.Sembol ;
var V = Sistem.GrafikVerileriniOku(Sembol1 , Periyot1) ;
var C = Sistem.GrafikFiyatOku(V, "Kapanis") ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek") ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk") ;


// ma'ları hesapla
var MA1 = Sistem.MA(C, "Exp", 10);
var MA2 = Sistem.MA(C, "Exp", 50);


// belirlediğin stratejiye göre getiri eğirisini çizdir
var IslemMiktari1 = Sistem.Liste(V.Count, 0);
var Pozisyon1 = Sistem.Liste(V.Count, 0);
var KarZarar1 = Sistem.Liste(V.Count,0);

float SonPozisyon1 = 0;
float SonFiyat1 = 0 ;
float ToplamKarZarar1 = 0;


for (int i = 1; i < V.Count ; i++)
{

if ( MA1[i] >= MA2[i] &&
SonPozisyon1 <= 0 )
{
if (SonPozisyon1 == 0)
{
IslemMiktari1[i] = 1;
SonFiyat1 = V[i].Close;
SonPozisyon1 = SonPozisyon1 + IslemMiktari1[i];
ToplamKarZarar1 = ToplamKarZarar1 - SonFiyat1 * IslemMiktari1[i];
}
else if (SonPozisyon1 < 0)
{
IslemMiktari1[i] = 2;
SonFiyat1 = V[i].Close;
SonPozisyon1 = SonPozisyon1 + IslemMiktari1[i];
ToplamKarZarar1 = ToplamKarZarar1 - SonFiyat1 * IslemMiktari1[i];
}

}


else if ( MA1[i] < MA2[i] &&
SonPozisyon1 >= 0 )
{
if (SonPozisyon1 == 0)
{
IslemMiktari1[i] = -1;
SonFiyat1 = V[i].Close;
SonPozisyon1 = SonPozisyon1 + IslemMiktari1[i];
ToplamKarZarar1 = ToplamKarZarar1 - SonFiyat1 * IslemMiktari1[i];
}
else if (SonPozisyon1 > 0)
{
IslemMiktari1[i] = -2;
SonFiyat1 = V[i].Close;
SonPozisyon1 = SonPozisyon1 + IslemMiktari1[i];
ToplamKarZarar1 = ToplamKarZarar1 - SonFiyat1 * IslemMiktari1[i];
}

}
Pozisyon1[i] = SonPozisyon1;
KarZarar1[i] = ToplamKarZarar1 + V[i].Close * Pozisyon1[i];
}



// günlük/haftalık/aylık referansına göre fark getiriyi hesapla
var KarZararAy = Sistem.Liste(V.Count, 0);
var RefGetiri = 0f ;

for (int i = 1; i < V.Count; i++)
{


// if (V[i].Date.Day != V[i-1].Date.Day) // gün
// if (V[i].Date.DayOfWeek == DayOfWeek.Monday && V[i-1].Date.DayOfWeek != DayOfWeek.Monday) // hafta
if (V[i].Date.Month != V[i-1].Date.Month) // ay
{
RefGetiri = KarZarar1[i-1] ;
}

KarZararAy[i] = KarZarar1[i] - RefGetiri ;
}

Sistem.Cizgiler[0].Deger = KarZarar1; // panel 2
Sistem.Cizgiler[1].Deger = KarZararAy; // panel 3




// getiri eğrisini de dikkate alan yeni stratejiyi uygula
var SonYon = "";

for (int i = 1; i<V.Count; i++)
{


if ( KarZararAy[i] >= 0 && MA1[i] >= MA2[i] && SonYon != "A" ) // AL
{
Sistem.Yon[i] = "A"; // alış
SonYon = Sistem.Yon[i];

}


else if ( KarZararAy[i] >= 0 && MA1[i] < MA2[i] && SonYon != "S" ) // SAT
{
Sistem.Yon[i] = "S"; // satış
SonYon = Sistem.Yon[i];

}


else if (SonYon == "A" && KarZararAy[i] < 0 ) // flat
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
}

else if (SonYon == "S" && KarZararAy[i] < 0 ) // flat
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
}



}




Sn. Anonimme teşekkürler


Getiri eğrisine TOMA uygulaması
(eğri, toma altında ise sistem korumada, üstünde ise işleme devam (long veya şort) ) (2 nci getiri eğrisini çizdirmedim, "performans" menüsünden görülebilir, ama istenirse 2 nci, 3 nci... n inci derecedeki getiri eğrisine kadar inilebilir :) , Getiri eğrisi filitrelemede alt eğrilere indikçe nihai eğrideki hata sıfır olabilirmi? , kimbilir ! )



// verileri oku
var Periyot1 = Sistem.Periyot;
var Sembol1 = Sistem.Sembol ;
var V = Sistem.GrafikVerileriniOku(Sembol1 , Periyot1) ;
var C = Sistem.GrafikFiyatOku(V, "Kapanis") ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek") ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk") ;


// ma'ları hesapla
var MA1 = Sistem.MA(C, "Exp", 10);
var MA2 = Sistem.MA(C, "Exp", 50);


// belirlediğin stratejiye göre getiri eğirisini çizdir
var IslemMiktari1 = Sistem.Liste(V.Count, 0);
var Pozisyon1 = Sistem.Liste(V.Count, 0);
var KarZarar1 = Sistem.Liste(V.Count,0);

float SonPozisyon1 = 0;
float SonFiyat1 = 0 ;
float ToplamKarZarar1 = 0;


for (int i = 1; i < V.Count ; i++)
{

if ( MA1[i] >= MA2[i] &&
SonPozisyon1 <= 0 )
{
if (SonPozisyon1 == 0)
{
IslemMiktari1[i] = 1;
SonFiyat1 = V[i].Close;
SonPozisyon1 = SonPozisyon1 + IslemMiktari1[i];
ToplamKarZarar1 = ToplamKarZarar1 - SonFiyat1 * IslemMiktari1[i];
}
else if (SonPozisyon1 < 0)
{
IslemMiktari1[i] = 2;
SonFiyat1 = V[i].Close;
SonPozisyon1 = SonPozisyon1 + IslemMiktari1[i];
ToplamKarZarar1 = ToplamKarZarar1 - SonFiyat1 * IslemMiktari1[i];
}

}


else if ( MA1[i] < MA2[i] &&
SonPozisyon1 >= 0 )
{
if (SonPozisyon1 == 0)
{
IslemMiktari1[i] = -1;
SonFiyat1 = V[i].Close;
SonPozisyon1 = SonPozisyon1 + IslemMiktari1[i];
ToplamKarZarar1 = ToplamKarZarar1 - SonFiyat1 * IslemMiktari1[i];
}
else if (SonPozisyon1 > 0)
{
IslemMiktari1[i] = -2;
SonFiyat1 = V[i].Close;
SonPozisyon1 = SonPozisyon1 + IslemMiktari1[i];
ToplamKarZarar1 = ToplamKarZarar1 - SonFiyat1 * IslemMiktari1[i];
}

}
Pozisyon1[i] = SonPozisyon1;
KarZarar1[i] = ToplamKarZarar1 + V[i].Close * Pozisyon1[i];
}



var t = Sistem.TOMA(KarZarar1, 5, 3) ;




Sistem.Cizgiler[0].Deger = KarZarar1; // panel 2
Sistem.Cizgiler[1].Deger = t; // panel 2




// getiri eğrisini de dikkate alan yeni stratejiyi uygula
var SonYon = "";

for (int i = 1; i<V.Count; i++)
{


if ( KarZarar1[i] >= t[i] && MA1[i] >= MA2[i] && SonYon != "A" ) // AL
{
Sistem.Yon[i] = "A"; // alış
SonYon = Sistem.Yon[i];

}


else if ( KarZarar1[i] >= t[i] && MA1[i] < MA2[i] && SonYon != "S" ) // SAT
{
Sistem.Yon[i] = "S"; // satış
SonYon = Sistem.Yon[i];

}


else if (SonYon == "A" && KarZarar1[i] < t[i] ) // flat
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
}

else if (SonYon == "S" && KarZarar1[i] < t[i] ) // flat
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
}



}




Getiri eğrisine TOMA uygulaması Robotu






///////
var SartAl = false;
var SartSat = false;
var SartFlat = false;
var SonYon = "";
var LotSize = 1.0;
double Fiyat = 0;

//////
var Ay = "00";
if(DateTime.Now.Month>10)
Ay="12";
else if(DateTime.Now.Month>8)
Ay="10";
else if(DateTime.Now.Month>6)
Ay="08";
else if(DateTime.Now.Month>4)
Ay="06";
else if(DateTime.Now.Month>2)
Ay="04";
else if(DateTime.Now.Month>0)
Ay="02";
var Sembol = ("VIP'F_XU030" + Ay + (DateTime.Now.Year-2000) + "S0");



var Periyot1 = "60" ;
var Sembol1 ="VIP'VIP-X030" ;

Sistem.GrafikVerisiIndir(Sembol1, Periyot1);

var V = Sistem.GrafikVerileriniOku(Sembol1, Periyot1) ;

var C = Sistem.GrafikFiyatOku(V, "Kapanis") ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek") ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk") ;


// ma'ları hesapla
var MA1 = Sistem.MA(C, "Exp", 10);
var MA2 = Sistem.MA(C, "Exp", 50);


var IslemMiktari1 = Sistem.Liste(V.Count, 0);
var Pozisyon1 = Sistem.Liste(V.Count, 0);
var KarZarar1 = Sistem.Liste(V.Count,0);

float SonPozisyon1 = 0;
float SonFiyat1 = 0 ;
float ToplamKarZarar1 = 0;


for (int i = 1; i < V.Count ; i++)
{

if ( MA1[i] >= MA2[i] &&
SonPozisyon1 <= 0 )
{
if (SonPozisyon1 == 0)
{
IslemMiktari1[i] = 1;
SonFiyat1 = V[i].Close;
SonPozisyon1 = SonPozisyon1 + IslemMiktari1[i];
ToplamKarZarar1 = ToplamKarZarar1 - SonFiyat1 * IslemMiktari1[i];
}
else if (SonPozisyon1 < 0)
{
IslemMiktari1[i] = 2;
SonFiyat1 = V[i].Close;
SonPozisyon1 = SonPozisyon1 + IslemMiktari1[i];
ToplamKarZarar1 = ToplamKarZarar1 - SonFiyat1 * IslemMiktari1[i];
}

}


else if ( MA1[i] < MA2[i] &&
SonPozisyon1 >= 0 )
{
if (SonPozisyon1 == 0)
{
IslemMiktari1[i] = -1;
SonFiyat1 = V[i].Close;
SonPozisyon1 = SonPozisyon1 + IslemMiktari1[i];
ToplamKarZarar1 = ToplamKarZarar1 - SonFiyat1 * IslemMiktari1[i];
}
else if (SonPozisyon1 > 0)
{
IslemMiktari1[i] = -2;
SonFiyat1 = V[i].Close;
SonPozisyon1 = SonPozisyon1 + IslemMiktari1[i];
ToplamKarZarar1 = ToplamKarZarar1 - SonFiyat1 * IslemMiktari1[i];
}

}
Pozisyon1[i] = SonPozisyon1;
KarZarar1[i] = ToplamKarZarar1 + V[i].Close * Pozisyon1[i];
}

var t = Sistem.TOMA(KarZarar1, 5, 3) ;


///////
for (int i = 1; i < V.Count - 1 ; i++)
{


if ( KarZarar1[i] >= t[i] && MA1[i] >= MA2[i] && SonYon != "A" ) // AL
{
SonYon = "A";
if (i == V.Count - 2) SartAl = true;
}


else if ( KarZarar1[i] >= t[i] && MA1[i] < MA2[i] && SonYon != "S" ) // SAT
{
SonYon = "S";
if (i == V.Count - 2) SartSat = true;
}


else if ( SonYon == "A" && KarZarar1[i] < t[i] ) // flat
{
SonYon = "F";
if (i == V.Count - 2) SartFlat = true;
}


else if ( SonYon == "S" && KarZarar1[i] < t[i] ) // flat
{
SonYon = "F";
if (i == V.Count - 2) SartFlat = true;
}
}


// emir gönder
var Islem = "";
var Miktar = 0.0;
var SonFiyat = Sistem.SonFiyat(Sembol);
var Pozisyon = Sistem.PozisyonKontrolOku(Sistem.Name + " , " + Sembol);

if (SonFiyat > 0 && (Sistem.SaatAraligi("09:10", "12:30") || Sistem.SaatAraligi("13:50", "17:45")) && V[V.Count-1].Date.Day == DateTime.Now.Day && Sistem.HaftaSonu == false && Sistem.BaglantiVar == true )
{

if (SartAl && Pozisyon <= 0) // alış
{
Islem = "ALIS";
if (Pozisyon == 0) // pozisyonum yoksa 1 lot al
Miktar = LotSize;
else if (Pozisyon < 0) // short isem stop and reverse , 2 lot al
Miktar = LotSize + Math.Abs(Pozisyon);
}


else if (SartSat && Pozisyon >= 0) // satış
{
Islem = "SATIS";
if (Pozisyon == 0) // pozisyonum yoksa 1 lot sat
Miktar = LotSize;
else if (Pozisyon > 0) // long isem stop and reverse , 2 lot sat
Miktar = LotSize + Math.Abs(Pozisyon);
}


else if ( SartFlat ) // flat
{
if (Pozisyon > 0)
{
Islem = "SATIS";
Miktar = Math.Abs(Pozisyon);
}
else if (Pozisyon < 0)
{
Islem = "ALIS";
Miktar = Math.Abs(Pozisyon);
}
}
}

// Emir Gönder !!!
if (Islem != "")
{
if (Islem == "ALIS")
Sistem.PozisyonKontrolGuncelle(Sistem.Name + " , " + Sembol, Pozisyon + Miktar);
else if (Islem == "SATIS")
Sistem.PozisyonKontrolGuncelle(Sistem.Name + " , " + Sembol, Pozisyon - Miktar);

Sistem.EmirSembol = Sembol ;
Sistem.EmirIslem = Islem ;
Sistem.EmirMiktari = Miktar ;
Sistem.EmirFiyati ="Aktif" ;
Sistem.EmirSuresi = "GUN" ; // GUN, SNS, IKG
Sistem.EmirTipi = "KPY" ; // KPY, KIE, GIE, SAR
Sistem.EmirFiyatTipi = "PYS" ; // PYS, LMT, EIF, KAP
Sistem.EmirGonder() ;
}

Lyrklaunavan
24-03-2015, 22:00
Hilbert Sine Wave Destek Direnc eklenmis hali... Son 2000 bari hesaplattiriyorum. bastan hesaplattirdigimda cok yavasliyor... Birde bunun nasil kullanilacagi hakkinda bir fikrim yok. Bir mantik yakalarsaniz bilmek isterim...




int baslangic=Veriler.Count-2000;



Yukardaki rakami degistirerek daha geriden hesaplatabilirsiniz...

http://i.imgur.com/R6bWt9o.jpg (http://imgur.com/R6bWt9o)



/*
* SharpDevelop tarafından düzenlendi.
* Kullanıcı: Lyrklaunavan
* Tarih: 24.3.2015
* Zaman: 20:01
* Hilbert Sine Wave Destek Direncli hali
* Bu şablonu değiştirmek için Araçlar | Seçenekler | Kodlama | Standart Başlıkları Düzenle 'yi kullanın.
*/

var Veriler = Sistem.GrafikVerileriniOku(Sistem.Sembol, Sistem.Periyot);
var C = Sistem.GrafikFiyatSec("Kapanis");
var L = Sistem.GrafikFiyatSec("Dusuk");
var H= Sistem.GrafikFiyatSec("Yuksek");

var Price = Sistem.Liste(0);
float Alpha = 0.07f;
var Smooth = Sistem.Liste(0);
var Cycle = Sistem.Liste(0);
var I1 = Sistem.Liste(0);
var Q1 = Sistem.Liste(0);
var I2 = Sistem.Liste(0);
var Q2 = Sistem.Liste(0);
var DeltaPhase = Sistem.Liste(0);
var MedianDelta = Sistem.Liste(0);
var MaxAmp = Sistem.Liste(0);
var AmpFix = Sistem.Liste(0);
var Re = Sistem.Liste(0);
var Im = Sistem.Liste(0);
float DC = 0f;
var alfa1 = Sistem.Liste(0);
var InstPeriod = Sistem.Liste(0);
double DCPeriod = 0;
var SmoothCycle = Sistem.Liste(0);
double RealPart = 0;
double ImagPart = 0;
var DCPhase = new List<double>();
var Price5= new List<double>();
var Value1 = Sistem.Liste(0);
var Sine = Sistem.Liste(0);
var LeadSine = Sistem.Liste(0);

bool drawingSupport = true;
bool drawSupportResistance = true;
float a1=0f;
var Renk1 = Sistem.Renk(255, 222,184,135);
var Renk2 = Sistem.Renk(255, 0,0,139);

int baslangic=Veriler.Count-2000;

for (int i =0 ; i<Veriler.Count;i++)
{
Price[i]=(Veriler[i].High + Veriler[i].Low)/2;
DCPhase.Add(0);
}

for(int i = baslangic ; i<Veriler.Count;i++)
{
Smooth[i] = (Price[i]+2*Price[i-1]+2*Price[i-2]+Price[i-3])/6;
Cycle[i] =(1-.5f*Alpha)*(1-.5f*Alpha)*(Smooth[i]-2*Smooth[i-1]+Smooth[i-2])+2*(1-Alpha)*Cycle[i-1]-(1-Alpha)*(1-Alpha)*Cycle[i-2];

Q1[i]=(0.0962f*Cycle[i]+0.5769f*Cycle[i-2]-0.5769f*Cycle[i-4]-0.0962f*Cycle[i-6])*(0.5f+0.08f*InstPeriod[i-1]);
I1[i] = Cycle[i-3];

if (Q1[i]!=0 && Q1[i-1]!=0) DeltaPhase[i]=(I1[i]/Q1[i]-I1[i-1]/Q1[i-1])/(1+I1[i]*I1[i-1]/(Q1[i]*Q1[i-1]));
if (DeltaPhase[i]<0.1) DeltaPhase[i]=0.1f;
if (DeltaPhase[i]>1.1) DeltaPhase[i]=1.1f;
Price5.Add(DeltaPhase[i]);
Price5.Add(DeltaPhase[i-1]);
Price5.Add(DeltaPhase[i-2]);
Price5.Add(DeltaPhase[i-3]);
Price5.Add(DeltaPhase[i-4]);
Price5.Sort();
MedianDelta[i] =(float)Price5[2];
Price5.Clear();
if (MedianDelta[i]==0){DC=15f;}else{DC=6.28318f/MedianDelta[i]+0.5f;}

InstPeriod[i]=0.33f*DC+0.67f*InstPeriod[i-1];
Value1[i] = 0.15f*InstPeriod[i]+0.85f*Value1[i-1];
DCPeriod =System.Math.Floor(Value1[i]);
RealPart = 0;
ImagPart = 0;
for (int j = 0; j < DCPeriod-1;++j)
{
RealPart = RealPart + System.Math.Sin((System.Math.PI/180)*(360*j / DCPeriod)) * Cycle[i-j];
ImagPart = ImagPart + System.Math.Cos((System.Math.PI/180)*(360*j / DCPeriod)) * Cycle[i-j];
}

if (System.Math.Abs(ImagPart) > 0.0001) DCPhase[i] = (180/System.Math.PI)*System.Math.Atan(RealPart / ImagPart);
if (System.Math.Abs(ImagPart) <= 0.0001) DCPhase[i] = 90 * System.Math.Sign(RealPart);

DCPhase[i]+= 90;

if(ImagPart <0 ) DCPhase[i] = DCPhase[i] + 180;
if(DCPhase[i] >315 ) DCPhase[i] = DCPhase[i] -360;

Sine[i]=(float)System.Math.Sin((System.Math.PI/180)*(DCPhase[i]));
LeadSine[i]=(float)System.Math.Sin((System.Math.PI/180)*(DCPhase[i]+45));


//Zemin yazisi ekle
if (drawSupportResistance)
{
if (LeadSine[i-1] > Sine[i-1] && LeadSine[i] < Sine[i]){
drawingSupport=true;
a1=H[i-1];
Sistem.YaziEkle(".",1,i,a1,Renk1,"Tahoma", 16);
}

else if (drawingSupport && LeadSine[i] < Sine[i]){
Sistem.YaziEkle(".",1,i,a1,Renk1,"Tahoma", 16);

}

else if (LeadSine[i-1] < Sine[i-1] && LeadSine[i] > Sine[i]){
drawingSupport=false;
a1=L[i-1];
Sistem.YaziEkle(".",1,i,a1,Renk2,"Tahoma",16);
}

else Sistem.YaziEkle(".",1,i,a1,Renk2,"Tahoma",16);

}

}

Sistem.Cizgiler[0].Deger=Sine; // panel 2
Sistem.Cizgiler[1].Deger=LeadSine; // panel 2

thebaboli
25-03-2015, 00:00
Abiler kolay gelsin.bir konuda sizden yardım istiyorum yardimci olursaniz çok sevinirim. 20-50 ve 100 günlük 3 tane hareketli ortalamanin sıkışması ni veren formül iistiyorum. Yani bu 3 ortalama birbirine çok yakında olabilir üst üste de olabilir. 5 60 dakka lik ve gunlukte tarama yapmak istiyorum.simdiden çok teşekkür ederim


çocuk cevap dönmedi ama belki başkasının işine yarar.

MA yaklaşım sorgusu
En üst satıra marj giriniz ( fiyatın %1 örnek olarak girildi)




var MARJ = 0.01f; // %1 yaklaşma

Sistem.SorguBaslik[0] = "MA-20";
Sistem.SorguBaslik[1] = "MA-50";
Sistem.SorguBaslik[2] = "MA-100";
Sistem.SorguBaslik[3] = "Fark12";
Sistem.SorguBaslik[4] = "Fark13";
Sistem.SorguBaslik[5] = "Fark23";


var MA1 = Sistem.MA(20, "Simple", "Kapanis");
var MA2 = Sistem.MA(50, "Simple", "Kapanis");
var MA3 = Sistem.MA(100, "Simple", "Kapanis");
var C = Sistem.GrafikFiyatOku(Sistem.GrafikVerileri, "Kapanis");
var Limit = MARJ*C[C.Count-1];


// filtrele
var Fark12 = Math.Abs(MA1[MA1.Count-1]-MA2[MA2.Count-1]);
var Fark13 = Math.Abs(MA1[MA1.Count-1]-MA3[MA3.Count-1]);
var Fark23 = Math.Abs(MA2[MA2.Count-1]-MA3[MA3.Count-1]);

if (Fark12 < Limit && Fark13 < Limit && Fark23 < Limit)
{
Sistem.SorguDeger[0] = MA1[MA1.Count-1];
Sistem.SorguDeger[1] = MA2[MA2.Count-1];
Sistem.SorguDeger[2] = MA3[MA3.Count-1];
Sistem.SorguDeger[3] = Fark12;
Sistem.SorguDeger[4] = Fark13;
Sistem.SorguDeger[5] = Fark23;
Sistem.SorguAciklama = "MA YAKLAŞIM";
Sistem.SorguEkle();
}







Teşekkürler sn. Tiberius

Lyrklaunavan
25-03-2015, 03:21
ADXVMA




bool conservativemode = true;
bool renkliciz = true;



conservativemode true yaparsaniz sadece onceki degeri ile arasindaki farka bakar.
conservativemode false yaparsaniz median isin icine katar.

renkliciz false yaparsaniz renkleri goremezsiniz. Panel 2 ye main dizisini atmaniz gerekiyor.
renkliciz true yaparsaniz renkli oluyor her yer...

yesil yukari trend,
sari trend yok,
kirmizi asagi trend var demek...

Bu renk olayi ayri bir boyut katti...

http://i.imgur.com/pCqNK34.jpg (http://imgur.com/pCqNK34)







/*
* SharpDevelop tarafından düzenlendi.
* Kullanıcı: Lyrklaunavan
* Tarih: 24.3.2015
* Zaman: 22:05
* ADXVMA
* Bu şablonu değiştirmek için Araçlar | Seçenekler | Kodlama | Standart Başlıkları Düzenle 'yi kullanın.
*/

var V =Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V, "Kapanis") ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek") ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk") ;
var O = Sistem.GrafikFiyatOku(V, "Acilis") ;
var median = Sistem.GrafikFiyatOku(V, "OrtaNokta") ;

//variables

int aDXPeriod = 6;

float WeightDM=aDXPeriod;
float WeightDI=aDXPeriod;
float WeightDX=aDXPeriod;
float ChandeEMA=aDXPeriod;
float HHV = float.MinValue;
float LLV = float.MaxValue;

var PDI=Sistem.Liste(V.Count);
var PDM=Sistem.Liste(V.Count);
var MDM=Sistem.Liste(V.Count);
var MDI=Sistem.Liste(V.Count);
var Out=Sistem.Liste(V.Count);
var main=Sistem.Liste(V.Count);
var Rising=Sistem.Liste(V.Count);
var Falling=Sistem.Liste(V.Count);
var Neutral=Sistem.Liste(V.Count);

bool conservativemode = true;
bool renkliciz = true;

var Renk1 = Sistem.Renk(255,107,142,45);
var Renk2 = Sistem.Renk(255, 255,0,0);
var Renk3 = Sistem.Renk(255, 255,215,0);

int baslangic=V.Count-2000;
for(int Currentbar=baslangic; Currentbar<V.Count; Currentbar++){

int i=0;
PDM[Currentbar]=0;
MDM[Currentbar]=0;

if(C[Currentbar]>C[Currentbar-1])
PDM[Currentbar]=C[Currentbar]-C[Currentbar-1];
else
MDM[Currentbar]= C[Currentbar-1]-C[Currentbar] ;

PDM[Currentbar]=(((WeightDM-1)*PDM[Currentbar-1] + PDM[Currentbar])/WeightDM);
MDM[Currentbar]=(((WeightDM-1)*MDM[Currentbar-1] + MDM[Currentbar])/WeightDM);
//
float TR=PDM[Currentbar]+MDM[Currentbar];


if (TR>0)
{
PDI[Currentbar]=(PDM[Currentbar]/TR);
MDI[Currentbar]=(MDM[Currentbar]/TR);
}
else
{
PDI[Currentbar]=0;
MDI[Currentbar]=0;
}

PDI[Currentbar]=(((WeightDI-1)*PDI[Currentbar-1] + PDI[Currentbar])/WeightDI);
MDI[Currentbar]=(((WeightDI-1)*MDI[Currentbar-1] + MDI[Currentbar])/WeightDI);

float DI_Diff=PDI[Currentbar]-MDI[Currentbar];
if (DI_Diff<0)
DI_Diff= -DI_Diff;
float DI_Sum=PDI[Currentbar]+MDI[Currentbar];
float DI_Factor=0;
if (DI_Sum>0)
Out[Currentbar]=(DI_Diff/DI_Sum);
else
Out[Currentbar]=0;

Out[Currentbar]=(((WeightDX-1)*Out[Currentbar-1] + Out[Currentbar])/WeightDX);

if (Out[Currentbar]>Out[Currentbar-1])
{
HHV=Out[Currentbar];
LLV=Out[Currentbar-1];
}
else
{
HHV=Out[Currentbar-1];
LLV=Out[Currentbar];
}

for(int j=1;j<Math.Min(aDXPeriod,Currentbar);j++)
{
if(Out[Currentbar-j-1]>HHV)HHV=Out[Currentbar-j-1];
if(Out[Currentbar-j-1]<LLV)LLV=Out[Currentbar-j-1];
}


float diff = HHV - LLV;
float VI=0;
if (diff>0)
VI=(Out[Currentbar]-LLV)/diff;

main[Currentbar]=(((ChandeEMA-VI)*main[Currentbar-1]+VI*C[Currentbar])/ChandeEMA);

if (renkliciz && conservativemode)
{
if (main[Currentbar] > main[Currentbar-1])
{
Sistem.YaziEkle(".",1,Currentbar,main[Currentbar],Renk1,"Tahoma", 16);
}
else if (main[Currentbar] < main[Currentbar-1])
{
Sistem.YaziEkle(".",1,Currentbar,main[Currentbar],Renk2,"Tahoma", 16);
}
else Sistem.YaziEkle(".",1,Currentbar,main[Currentbar],Renk3,"Tahoma", 16);

}

if (renkliciz && !conservativemode)
{
if (main[Currentbar] > main[Currentbar-1] )
{
Sistem.YaziEkle(".",1,Currentbar,main[Currentbar],Renk1,"Tahoma", 16); //rising
}
else if (main[Currentbar] < main[Currentbar-1])
{
Sistem.YaziEkle(".",1,Currentbar,main[Currentbar],Renk2,"Tahoma", 16); //falling
}

else if (main[Currentbar] == main[Currentbar] && median[Currentbar] > main[Currentbar] )
{
Sistem.YaziEkle(".",1,Currentbar,main[Currentbar],Renk1,"Tahoma", 16); //rising
}

else if (main[Currentbar] == main[Currentbar] && median[Currentbar] < main[Currentbar] )
{
Sistem.YaziEkle(".",1,Currentbar,main[Currentbar],Renk2,"Tahoma", 16); //falling
}

else Sistem.YaziEkle(".",1,Currentbar,main[Currentbar],Renk3,"Tahoma", 16);//neutral

}

}

Sistem.Cizgiler[0].Deger=main; //panel2

Lyrklaunavan
25-03-2015, 22:15
TEMA (Triple Exponential Moving Average)

Bu indikatoru Sn.Anonim atmismiydi hatirlayamiyorum. Aslinda bu topikteki indikatorlerin listesi olsa devamli guncellense iyi olur. Duplike olmaz...

http://i.imgur.com/h0cZr7c.jpg (http://imgur.com/h0cZr7c)




/*
* SharpDevelop tarafından düzenlendi.
* Kullanıcı: Lyrklaunavan
* Tarih: 25.3.2015
* Zaman: 21:01
* TEMA (Triple Exponential Moving Average)
* Bu şablonu değiştirmek için Araçlar | Seçenekler | Kodlama | Standart Başlıkları Düzenle 'yi kullanın.
*/


var V = Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V, "Kapanis" ) ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek" ) ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk" ) ;
var O = Sistem.GrafikFiyatOku(V, "Acilis" ) ;

int period = 14;

var ema1=Sistem.MA(C, "Exp", period);
var ema2=Sistem.MA(ema1, "Exp", period);
var ema3=Sistem.MA(ema2, "Exp", period);

var TEMA=Sistem.Liste( V.Count, 0);

for(int j=1; j<V.Count; j++){

TEMA[j]=(3 * ema1[j] - 3 * ema2[j] + ema3[j]);

}

Sistem.Cizgiler[0].Deger = TEMA;

Lyrklaunavan
25-03-2015, 22:34
Zero_Lag_TEMA(Triple Exponential Moving Average)

http://i.imgur.com/D7v0QcU.jpg (http://imgur.com/D7v0QcU)




/*
* SharpDevelop tarafından düzenlendi.
* Kullanıcı: Lyrklaunavan
* Tarih: 25.3.2015
* Zaman: 21:20
* Zero-Lagging TEMA
* Bu şablonu değiştirmek için Araçlar | Seçenekler | Kodlama | Standart Başlıkları Düzenle 'yi kullanın.
*/


var V = Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V, "Kapanis" ) ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek" ) ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk" ) ;
var O = Sistem.GrafikFiyatOku(V, "Acilis" ) ;

int period = 14;

var ema1=Sistem.MA(C, "Exp", period);
var ema2=Sistem.MA(ema1, "Exp", period);
var ema3=Sistem.MA(ema2, "Exp", period);

var TEMA1=Sistem.Liste( V.Count, 0);

for(int j=1; j<V.Count; j++){

TEMA1[j]=(3 * ema1[j] - 3 * ema2[j] + ema3[j]);

}

var ema4=Sistem.MA(TEMA1, "Exp", period);
var ema5=Sistem.MA(ema4, "Exp", period);
var ema6=Sistem.MA(ema5, "Exp", period);

var TEMA2=Sistem.Liste( V.Count, 0);

for(int j=1; j<V.Count; j++){

TEMA2[j]=(3 * ema4[j] - 3 * ema5[j] + ema6[j]);

}

var Zero_Lag_TEMA=Sistem.Liste( V.Count, 0);

for(int j=1; j<V.Count; j++){

Zero_Lag_TEMA[j]=(2 * TEMA1[j] - TEMA2[j]);

}


Sistem.Cizgiler[0].Deger = Zero_Lag_TEMA;

Lyrklaunavan
25-03-2015, 22:50
2 Pole Butterworth Filter

http://i.imgur.com/rwZQK5x.jpg (http://imgur.com/rwZQK5x)




/*
* SharpDevelop tarafından düzenlendi.
* Kullanıcı: Lyrklaunavan
* Tarih: 25.3.2015
* Zaman: 21:36
* 2 Pole Butterworth Filter From 'Cybernetic Analysis for Stocks and Futures' by John Ehlers
* Bu şablonu değiştirmek için Araçlar | Seçenekler | Kodlama | Standart Başlıkları Düzenle 'yi kullanın.
*/

var V = Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V, "Kapanis" ) ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek" ) ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk" ) ;
var O = Sistem.GrafikFiyatOku(V, "Acilis" ) ;

int period = 15;

float a1 = (float)Math.Exp(-1.414 * 3.14159 / period);
float b1 = 2 * a1 * (float)Math.Cos(1.414 * 3.14159 / period);
float coef2 = b1;
float coef3 = -a1 * a1;
float coef1 = (1 - b1 + a1 * a1) / 4;

var Butter=Sistem.Liste(V.Count,0);

for(int j=3; j<V.Count; j++){

Butter[j]=coef1 * (C[j] + 2 * C[j-1] + C[j-2]) + coef2 * Butter[j-1] + coef3 * Butter[j-2];

}

Sistem.Cizgiler[0].Deger = Butter;

Lyrklaunavan
25-03-2015, 23:00
3 Pole Butterworth filter

http://i.imgur.com/ZdLodOH.jpg (http://imgur.com/ZdLodOH)




/*
* SharpDevelop tarafından düzenlendi.
* Kullanıcı: Lyrklaunavan
* Tarih: 25.3.2015
* Zaman: 21:36
* 3 Pole Butterworth Filter From 'Cybernetic Analysis for Stocks and Futures' by John Ehlers
* Bu şablonu değiştirmek için Araçlar | Seçenekler | Kodlama | Standart Başlıkları Düzenle 'yi kullanın.
*/

var V = Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V, "Kapanis" ) ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek" ) ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk" ) ;
var O = Sistem.GrafikFiyatOku(V, "Acilis" ) ;

int period = 15;

float a1 = (float)Math.Exp(-3.14159/period);
float b1 = 2*a1*(float)Math.Cos(1.738*3.14159 /period);
float c1=a1*a1;
float coef2=b1+c1;
float coef3=-(c1+b1*c1);
float coef4=c1*c1;
float coef1=(1-b1+c1)*(1-c1)/8;

var Butter3Pole=Sistem.Liste(V.Count,0);

for(int j=4; j<V.Count; j++){

Butter3Pole[j] = coef1*(C[j]+3*C[j-1]+3*C[j-2]+C[j-3])+coef2*Butter3Pole[j-1]+coef3*Butter3Pole[j-2]+coef4*Butter3Pole[j-3];

}

Sistem.Cizgiler[0].Deger = Butter3Pole;

Lyrklaunavan
25-03-2015, 23:10
2 Pole Super Smoother

http://i.imgur.com/vU2IkvW.jpg (http://imgur.com/vU2IkvW)




/*
* SharpDevelop tarafından düzenlendi.
* Kullanıcı: Lyrklaunavan
* Tarih: 25.3.2015
* Zaman: 21:36
* 2 Pole Super Smoother - //// From 'Cybernetic Analysis for Stocks and Futures' by John Ehlers
* Bu şablonu değiştirmek için Araçlar | Seçenekler | Kodlama | Standart Başlıkları Düzenle 'yi kullanın.
*/

var V = Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V, "Kapanis" ) ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek" ) ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk" ) ;
var O = Sistem.GrafikFiyatOku(V, "Acilis" ) ;

int period = 15;

float a1 = (float)Math.Exp(-1.414*3.14159/period);
float b1 = 2*a1*(float)Math.Cos(1.414*3.14159 /period);
float coef2=b1;
float coef3=-a1*a1;
float coef1=1-coef2-coef3;

var SS2Pole=Sistem.Liste(V.Count,0);

for(int j=3; j<V.Count; j++){

SS2Pole[j] = coef1*C[j]+coef2*SS2Pole[j-1]+coef3*SS2Pole[j-2];

}

Sistem.Cizgiler[0].Deger = SS2Pole;

Lyrklaunavan
25-03-2015, 23:25
3 Pole Super Smoother

http://i.imgur.com/qZBXiME.jpg (http://imgur.com/qZBXiME)




/*
* SharpDevelop tarafından düzenlendi.
* Kullanıcı: Lyrklaunavan
* Tarih: 25.3.2015
* Zaman: 21:36
* 3 Pole Super Smoother - //// From 'Cybernetic Analysis for Stocks and Futures' by John Ehlers
* Bu şablonu değiştirmek için Araçlar | Seçenekler | Kodlama | Standart Başlıkları Düzenle 'yi kullanın.
*/

var V = Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V, "Kapanis" ) ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek" ) ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk" ) ;
var O = Sistem.GrafikFiyatOku(V, "Acilis" ) ;

int period = 15;

float a1 = (float)Math.Exp(-3.14159/period);
float b1 = 2*a1*(float)Math.Cos(1.738*3.14159 /period);
float c1=a1*a1;
float coef2=b1+c1;
float coef3=-(c1+b1*c1);
float coef4=c1*c1;
float coef1=1-coef2-coef3-coef4;

var SS3Pole=Sistem.Liste(V.Count,0);

for(int j=4; j<V.Count; j++){

SS3Pole[j] = coef1*C[j]+coef2*SS3Pole[j-1]+coef3*SS3Pole[j-2]+coef4*SS3Pole[j-3];

}

Sistem.Cizgiler[0].Deger = SS3Pole;

thebaboli
28-03-2015, 21:42
Arkadaşlar ma tipini nasıl optimize edebiliriz?

Örneğin ;

simple ma = 1
exp ma = 2
wilder ma = 3
weighted ma = 4
....
...

diye tanımlayıp bunları optimize edebilirmiyiz?


yapabilirsiniz




var Metodlar = new List<string>();
Metodlar.Add("Exp");
Metodlar.Add("Simple");
Metodlar.Add("Triangular");
Metodlar.Add("Wilder");
Metodlar.Add("Weighted");



// 1. periyot döngüsü
for (int P1 = 5; P1 < 20; P1+=5)
{
var LIST1 = Sistem.CommodityChannelIndex(P1);
// 2. periyot döngüsü
for (int P2 = 20; P2 < 200; P2+=10)
{
// MA metodları
for (int P3 = 0; P3 < Metodlar.Count; P3+=1)
{
var LIST2 = Sistem.MA(LIST1, Metodlar[P3], P2);

// önceki taramadaki pozisyonları temizle
for (int i = 1; i < Sistem.BarSayisi; i++)
Sistem.Yon[i] = "";

// strateji
var SonYon = "";
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if (LIST1[i-1] < LIST2[i-1] && LIST1[i] >= LIST2[i] && SonYon != "A") // alış
{
Sistem.Yon[i] = "A";
SonYon = Sistem.Yon[i];
}
else if (LIST1[i-1] > LIST2[i-1] && LIST1[i] <= LIST2[i] && SonYon != "S") // satış
{
Sistem.Yon[i] = "S";
SonYon = Sistem.Yon[i];
}
}
Sistem.Optimizasyon("CCI and AVR", P1 , P2, Metodlar[P3]);
}
}
}





Teşekkürler Abi :cool:

thebaboli
30-03-2015, 17:28
InSync Index oscillator

The InSync Index is a consensus oscillator created in 1995 by Norm North. A consensus oscillator is an indicator that generates an output using the value of many other trading indicators.

The InSync Index is calculated by summing several technical analysis indicators including the Bollinger Bands, Moving average convergence/divergence, Commodity channel index, Relative Strength Index, Rate of change, Stochastic, Detrended Price Oscillator, Ease of movement and Money flow index.

Each trading indicator is compared to specific thresholds and a value of -5, 0 or +5 is then added to the InSync Index. The Relative Strength Index for example is compared to 70 and 30 levels. If RSI is higher than 70 then a value of 5 is added to the InSync Index. If its value is lower than 30 then a value of 5 is removed from the InSync Index, otherwise the InSync Index is unchanged and in this case, theRSI indicator do not contribute to the InSync Index.

The InSync Index can be used in the watchlist and screener tools to detect extreme levels. Values higher or equal to 80 are considered to be high extreme levels, while values lower or equal than 20 are considered to be low extreme levels. When an extreme level is reached, the InSync Index should be confirmed by another indicator (fundamental, options-based or another indicator not already used in the InSync Index calculation) or a candlestick pattern.
This trading indicator works well in ranging markets and shouldn't be applied in trending markets.



http://i.hizliresim.com/P5jMy7.png (http://hizliresim.com/P5jMy7)



var V = Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V, "Kapanis" ) ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek" ) ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk" ) ;
var Vol = Sistem.Volume(V) ;



var p1 = 20 ;
var p2 = 14 ;
var p3 = 10 ;
var p4 = 12 ;
var p5 = 26 ;
var p6 = 18 ;

var rsi = Sistem.RSI(V, p2) ;
var stoc1 = Sistem.StochasticOsc(V, p2, 3) ;
var stoc2 = Sistem.StochasticOsc(V, p2, 1) ;

var m1 = Sistem.MA(C, "Simple", p1 ) ;
var s1 = Sistem.StDev(C, p1 ) ;
var cci1 = Sistem.CommodityChannelIndex(V, p2 ) ;
var emv1 = Sistem.EaseOfMovement(V, p3);
var m2 = Sistem.MA(emv1, "Simple", p3 ) ;
var macd1 = Sistem.MACD(V, p4, p5 ) ;
var m3 = Sistem.MA(macd1, "Simple", p3 ) ;
var mfi1 = Sistem.MoneyFlowIndex(V, p1) ;
var m4 = Sistem.MA(C, "Simple",p6) ;

var roc1 = Sistem.PriceRocPoint(V, p3) ;
var m6 = Sistem.MA(roc1, "Simple", p3 ) ;

var dpo = Sistem.Liste(V.Count, 0) ;
var x11= p6/2 + 1 ;

for (int i = x11; i < V.Count; i++)
{
dpo[i] = C[i] - m4[i-x11] ;
}

var m5 = Sistem.MA(dpo, "Simple", p3 ) ;


var y1 = Sistem.Liste(V.Count, 0) ;
var y2 = Sistem.Liste(V.Count, 0) ;
var y3 = Sistem.Liste(V.Count, 0) ;
var y4 = Sistem.Liste(V.Count, 0) ;
var y5 = Sistem.Liste(V.Count, 0) ;
var y6 = Sistem.Liste(V.Count, 0) ;
var y7 = Sistem.Liste(V.Count, 0) ;
var y8 = Sistem.Liste(V.Count, 0) ;
var y9 = Sistem.Liste(V.Count, 0) ;
var y10 = Sistem.Liste(V.Count, 0) ;
var y11 = Sistem.Liste(V.Count, 0) ;
var y12 = Sistem.Liste(V.Count, 0) ;
var y13 = Sistem.Liste(V.Count, 0) ;
var y14 = Sistem.Liste(V.Count, 0) ;
var y15 = Sistem.Liste(V.Count, 0) ;
var y16 = Sistem.Liste(V.Count, 0) ;
var y17 = Sistem.Liste(V.Count, 0) ;
var y18 = Sistem.Liste(V.Count, 0) ;
var y19 = Sistem.Liste(V.Count, 0) ;
var y20 = Sistem.Liste(V.Count, 0) ;
var y21 = Sistem.Liste(V.Count, 0) ;
var y = Sistem.Liste(V.Count, 0) ;

for (int i = 10; i < V.Count; i++)
{
y1[i] = m1[i] - 2 * s1[i] ;
y2[i] = m1[i] + 2 * s1[i] ;
y3[i] = ( C[i] - y1[i] ) / (y2[i] - y1[i] ) ;
y4[i] = y3[i] < 0.05f ? -5 : y3[i] >0.95f ? 5 : 0 ;
y5[i] = cci1[i] > 100 ? 5 : cci1[i] < -100 ? -5 : 0 ;
y6[i] = emv1[i] - m2[i] ;
y7[i] = ( y6[i] < 0 && m2[i] < 0 ) ? -5 : ( y6[i] < 0 && m2[i] > 0 ) ? 0 : 0 ;
y8[i] = ( y6[i] > 0 && m2[i] > 0 ) ? 5 : ( y6[i] > 0 && m2[i] < 0 ) ? 0 : 0 ;
y9[i] = macd1[i] - m3[i] ;
y10[i] = ( y9[i] < 0 && m3[i] < 0 ) ? -5 : ( y9[i] < 0 && m3[i] > 0 ) ? 0 : 0 ;
y11[i] = ( y9[i] > 0 && m3[i] > 0 ) ? 5 : ( y9[i] > 0 && m3[i] < 0 ) ? 0 : 0 ;
y12[i] = mfi1[i] > 80 ? 5 : mfi1[i] < 20 ? -5 : 0 ;
y13[i] = dpo[i] - m5[i] ;
y14[i] = ( y13[i] < 0 && m5[i] < 0 ) ? -5 : ( y13[i] < 0 && m5[i] > 0 ) ? 0 : 0 ;
y15[i] = ( y13[i] > 0 && m5[i] > 0 ) ? 5 : ( y13[i] > 0 && m5[i] < 0 ) ? 0 : 0 ;
y16[i] = roc1[i] - m6[i] ;
y17[i] = ( y16[i] < 0 && m6[i] < 0 ) ? -5 : ( y16[i] < 0 && m6[i] > 0 ) ? 0 : 0 ;
y18[i] = ( y16[i] > 0 && m6[i] > 0 ) ? 5 : ( y16[i] > 0 && m6[i] < 0 ) ? 0 : 0 ;
y19[i] = rsi[i] > 70 ? 5 : rsi[i] < 30 ? -5 : 0 ;
y20[i] = stoc1[i] > 80 ? 5 : stoc1[i] < 20 ? -5 : 0 ;
y21[i] = stoc2[i] > 80 ? 5 : stoc2[i] < 20 ? -5 : 0 ;


y[i] = 50 + y5[i] + y4[i] + y19[i] + y20[i] + y21[i] + y12[i] + y7[i] + y8[i] + y17[i] + y18[i] + y14[i-10] + y15[i-10] + y10[i] + y11[i] ;

}

var ax = 75 ;
var bx = 25 ;

Sistem.Cizgiler[0].Deger = y; // panel 2

// strateji
var SonYon = "";

for (int i = 1; i<Sistem.BarSayisi; i++)
{


if ( y[i] > ax && SonYon != "A" ) // AL
{
Sistem.Yon[i] = "A"; // alış
SonYon = Sistem.Yon[i];

}


else if ( y[i] < bx && SonYon != "S" ) // SAT
{
Sistem.Yon[i] = "S"; // satış
SonYon = Sistem.Yon[i];
}





}





Teşekkürler Sv. Anonimm :cool:

Exfake
06-04-2015, 13:35
Merhaba,
Karlı/Zararlı işlem toplamı/sayısı eklendi.
Sistem Bilgi Ekranın son halidir.


var time = DateTime.Now;
var Veriler = Sistem.GrafikVerileri;
var MA1 = Sistem.MA(10, "Exp", "Kapanis");
var MA2 = Sistem.MA(50, "Exp", "Kapanis");
float Sermaye = float.Parse(Sistem.Parametreler[0]);
float KomOran = float.Parse(Sistem.Parametreler[1]);
int Kontrat = Convert.ToInt16(Sistem.Parametreler[2]);
float Kayma = float.Parse(Sistem.Parametreler[3]);
var SermayeEgrisi = Sistem.Liste(Sermaye);
var NetSerEgrisi = Sistem.Liste(Sermaye);
var AlVeTut = Sistem.Liste(0);
var KomEgrisi = Sistem.Liste(0);
var KaymaEgrisi = Sistem.Liste(0);
var IslemMiktari = Sistem.Liste(0);
var Pozisyon = Sistem.Liste(0);
var KarZarar = Sistem.Liste(0);
var Komisyon = Sistem.Liste(0);
float SonPozisyon = 0;
float SonFiyat = 0;
float ToplamKarZarar = 0;
float ToplamKomi = 0;
float KarIsTop = 0;
float ZarIsTop = 0;
float HedefFiyat = 0;
float StopFiyat = 0;
int LongSayar = 0;
int ShortSayar = 0;
int FlatSayar = 0;
int StopSayar = 0;
int KarIsSay = 0;
int ZarIsSay = 0;
int BasBar = 1;
int IslemBar = 1;
if (Sistem.Parametreler[4] == "Tarih")
{
var Tarih = DateTime.Parse(Sistem.Parametreler[5]);
for (int i = 0; i < Veriler.Count; i++)
if (Veriler[0].Date > Tarih) { BasBar = 1; break; }
else if (Veriler[i].Date >= Tarih) { BasBar = i; break; }
}
else if (Sistem.Parametreler[4] == "Bar")
{
int Bar = Convert.ToInt16(Sistem.Parametreler[5]);
if (Veriler.Count > Bar) BasBar = Veriler.Count - Bar;
}
for (int i = BasBar; i < Veriler.Count; i++)
{
if (MA1[i - 1] < MA2[i - 1] && MA1[i] >= MA2[i] && SonPozisyon <= 0)
{//*****al koşulu bölgesi*****
if (SonPozisyon == 0) IslemMiktari[i] = Kontrat;
else if (SonPozisyon < 0) IslemMiktari[i] = Kontrat * 2;
Sistem.Yon[i] = "A";
LongSayar++;
IslemBar = i;
SonFiyat = Veriler[i].Close;
HedefFiyat = SonFiyat + 3f;
StopFiyat = SonFiyat - 0.5f;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
ToplamKomi = SonFiyat * KomOran * IslemMiktari[i];
KomEgrisi[i] = KomEgrisi[i - 1] + Math.Abs(ToplamKomi) * 100;
KaymaEgrisi[i] = KaymaEgrisi[i - 1] + Math.Abs(Kayma * IslemMiktari[i] / 10);
if (Sistem.Parametreler[7] == "Göster") Sistem.YaziEkle("AL@" + SonFiyat, 1, i, Veriler[i].Low - 0.5f, Sistem.Renk(255, 255, 255, 255), "Calibri", 7);
}
else if (MA1[i - 1] > MA2[i - 1] && MA1[i] <= MA2[i] && SonPozisyon >= 0)
{//*****sat koşulu bölgesi*****
if (SonPozisyon == 0) IslemMiktari[i] = Kontrat * -1;
else if (SonPozisyon > 0) IslemMiktari[i] = Kontrat * -2;
Sistem.Yon[i] = "S";
ShortSayar++;
IslemBar = i;
SonFiyat = Veriler[i].Close;
HedefFiyat = SonFiyat - 3f;
StopFiyat = SonFiyat + 0.5f;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
ToplamKomi = SonFiyat * KomOran * IslemMiktari[i];
KomEgrisi[i] = KomEgrisi[i - 1] + Math.Abs(ToplamKomi) * 100;
KaymaEgrisi[i] = KaymaEgrisi[i - 1] + Math.Abs(Kayma * IslemMiktari[i] / 10);
if (Sistem.Parametreler[7] == "Göster") Sistem.YaziEkle("SAT@" + SonFiyat, 1, i, Veriler[i].High + 0.5f, Sistem.Renk(255, 255, 255, 255), "Calibri", 7);
}
else if (Veriler[i].Close >= HedefFiyat && SonPozisyon > 0)
{//*****long flat koşulu bölgesi*****
Sistem.Yon[i] = "F";
FlatSayar++;
IslemMiktari[i] = Kontrat * -1;
SonFiyat = HedefFiyat;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
ToplamKomi = SonFiyat * KomOran * IslemMiktari[i];
KomEgrisi[i] = KomEgrisi[i - 1] + Math.Abs(ToplamKomi) * 100;
KaymaEgrisi[i] = KaymaEgrisi[i - 1] + Math.Abs(Kayma * IslemMiktari[i] / 10);
if (Sistem.Parametreler[7] == "Göster") Sistem.YaziEkle("FLAT@" + SonFiyat, 1, i, Veriler[i].High + 0.25f, Sistem.Renk(255, 255, 255, 255), "Calibri", 7);
}
else if (Veriler[i].Close <= HedefFiyat && SonPozisyon < 0)
{//*****short flat koşulu bölgesi*****
Sistem.Yon[i] = "F";
FlatSayar++;
IslemMiktari[i] = Kontrat * 1;
SonFiyat = HedefFiyat;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
ToplamKomi = SonFiyat * KomOran * IslemMiktari[i];
KomEgrisi[i] = KomEgrisi[i - 1] + Math.Abs(ToplamKomi) * 100;
KaymaEgrisi[i] = KaymaEgrisi[i - 1] + Math.Abs(Kayma * IslemMiktari[i] / 10);
if (Sistem.Parametreler[7] == "Göster") Sistem.YaziEkle("FLAT@" + SonFiyat, 1, i, Veriler[i].Low - 0.25f, Sistem.Renk(255, 255, 255, 255), "Calibri", 7);
}
else if (Veriler[i].Close <= StopFiyat && SonPozisyon > 0)
{//*****long stop koşulu bölgesi*****
Sistem.Yon[i] = "F";
StopSayar++;
IslemMiktari[i] = Kontrat * -1;
SonFiyat = StopFiyat;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
ToplamKomi = SonFiyat * KomOran * IslemMiktari[i];
KomEgrisi[i] = KomEgrisi[i - 1] + Math.Abs(ToplamKomi) * 100;
KaymaEgrisi[i] = KaymaEgrisi[i - 1] + Math.Abs(Kayma * IslemMiktari[i] / 10);
if (Sistem.Parametreler[7] == "Göster") Sistem.YaziEkle("STOP@" + SonFiyat, 1, i, Veriler[i].Low - 0.25f, Sistem.Renk(255, 255, 255, 255), "Calibri", 7);
}
else if (Veriler[i].Close >= StopFiyat && SonPozisyon < 0)
{//*****short stop koşulu bölgesi*****
Sistem.Yon[i] = "F";
StopSayar++;
IslemMiktari[i] = Kontrat * 1;
SonFiyat = StopFiyat;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
ToplamKomi = SonFiyat * KomOran * IslemMiktari[i];
KomEgrisi[i] = KomEgrisi[i - 1] + Math.Abs(ToplamKomi) * 100;
KaymaEgrisi[i] = KaymaEgrisi[i - 1] + Math.Abs(Kayma * IslemMiktari[i] / 10);
if (Sistem.Parametreler[7] == "Göster") Sistem.YaziEkle("STOP@" + SonFiyat, 1, i, Veriler[i].High + 0.25f, Sistem.Renk(255, 255, 255, 255), "Calibri", 7);
}
else { KomEgrisi[i] = KomEgrisi[i - 1]; KaymaEgrisi[i] = KaymaEgrisi[i - 1]; }
Pozisyon[i] = SonPozisyon;
//KarZarar[i] = (ToplamKarZarar + SonFiyat * Pozisyon[i]) * 100; //step form
KarZarar[i] = (ToplamKarZarar + Veriler[i].Close * Pozisyon[i]) * 100; //anlık form
Komisyon[i] = Math.Abs(ToplamKomi) * 100;
SermayeEgrisi[i] = Sermaye + KarZarar[i];
NetSerEgrisi[i] = Sermaye + KarZarar[i] - KaymaEgrisi[i] - KomEgrisi[i];
AlVeTut[i] = Sermaye + (Veriler[i].Close - Veriler[BasBar].Close) * 1000;
}
var KarZararAy = Sistem.Liste(0);
float KarZararAy1 = 0;
int BarNoAy1 = 1;
float FarkAy = 0;
var KarZararHaf = Sistem.Liste(0);
float KarZararHaf1 = 0;
int BarNoHaf1 = 1;
float FarkHaf = 0;
var KarZararGun = Sistem.Liste(0);
float KarZararGun1 = 0;
int BarNoGun1 = 1;
float FarkGun = 0;
var KarZararIs = Sistem.Liste(0);
float KarZararIs1 = 0;
int BarNoIs1 = 1;
float FarkIs = 0;
for (int i = 1; i < Veriler.Count; i++)
{
if (Veriler[i].Date.Month != Veriler[i - 1].Date.Month)
{
FarkAy = KarZarar[i - 1] - KarZararAy1;
for (int j = BarNoAy1; j < i; j++)
KarZararAy[j] = FarkAy;
KarZararAy1 = KarZarar[i - 1];
BarNoAy1 = i;
}
if (Veriler[i].Date.DayOfWeek == DayOfWeek.Monday && Veriler[i - 1].Date.DayOfWeek != DayOfWeek.Monday)
{
FarkHaf = KarZarar[i - 1] - KarZararHaf1;
for (int j = BarNoHaf1; j < i; j++)
KarZararHaf[j] = FarkHaf;
KarZararHaf1 = KarZarar[i - 1];
BarNoHaf1 = i;
}
if (Veriler[i].Date.Day != Veriler[i - 1].Date.Day)
{
FarkGun = KarZarar[i - 1] - KarZararGun1;
for (int j = BarNoGun1; j < i; j++)
KarZararGun[j] = FarkGun;
KarZararGun1 = KarZarar[i - 1];
BarNoGun1 = i;
}
if (Sistem.Yon[i] == "A" || Sistem.Yon[i] == "S")
{
FarkIs = KarZarar[i] - KarZararIs1;
for (int j = BarNoIs1; j < i; j++)
KarZararIs[j] = FarkIs;
KarZararIs1 = KarZarar[i];
BarNoIs1 = i;
if (KarZararIs[i - 1] > 0) { KarIsTop += KarZararIs[i - 1]; KarIsSay++; } //Kapanmış pozisyonları hesaplar
else if (KarZararIs[i - 1] <= 0) { ZarIsTop += KarZararIs[i - 1]; ZarIsSay++; } //notr sonuçları zarar olarak gösterdim isterseniz <= ifadesini değiştirirsiniz
}

if (i == Veriler.Count - 1)
{
FarkAy = KarZarar[i] - KarZararAy1;
for (int j = BarNoAy1; j < Veriler.Count; j++)
KarZararAy[j] = FarkAy;
FarkHaf = KarZarar[i] - KarZararHaf1;
for (int j = BarNoHaf1; j < Veriler.Count; j++)
KarZararHaf[j] = FarkHaf;
FarkGun = KarZarar[i] - KarZararGun1;
for (int j = BarNoGun1; j < Veriler.Count; j++)
KarZararGun[j] = FarkGun;
FarkIs = KarZarar[i] - KarZararIs1;
for (int j = BarNoIs1; j < Veriler.Count; j++)
KarZararIs[j] = FarkIs;
}
}
if (KarZararIs[KarZararIs.Count - 1] > 0) { KarIsTop += KarZararIs[KarZararIs.Count - 1]; KarIsSay++; } //açık olan pozisyonuda işleme katmak için
if (KarZararIs[KarZararIs.Count - 1] <= 0) { ZarIsTop += KarZararIs[KarZararIs.Count - 1]; ZarIsSay++; }
var MaksSE = Sistem.Liste(0);
var DD = Sistem.Liste(0);
var MDD = Sistem.Liste(0);
var MaksIKZ = Sistem.Liste(0);
var MinIKZ = Sistem.Liste(0);
float MDDY = 0;
for (int i = 1; i < Veriler.Count; i++)
{
if (SermayeEgrisi[i] <= MaksSE[i - 1]) MaksSE[i] = MaksSE[i - 1]; else MaksSE[i] = SermayeEgrisi[i];
if (SermayeEgrisi[i] < MaksSE[i]) DD[i] = SermayeEgrisi[i] - MaksSE[i];
if (DD[i] >= MDD[i - 1]) MDD[i] = MDD[i - 1]; else { MDD[i] = DD[i]; MDDY = (MaksSE[i] - Math.Abs(MDD[i])) / MaksSE[i] - 1; }
if (KarZararIs[i] <= MaksIKZ[i - 1]) MaksIKZ[i] = MaksIKZ[i - 1]; else MaksIKZ[i] = KarZararIs[i];
if (KarZararIs[i] >= MinIKZ[i - 1]) MinIKZ[i] = MinIKZ[i - 1]; else MinIKZ[i] = KarZararIs[i];
}
var HedefCiz = Sistem.Liste(null);
var StopCiz = Sistem.Liste(null);
for (int i = Veriler.Count - 1; i >= IslemBar; i--)
{
HedefCiz[i] = HedefFiyat;
StopCiz[i] = StopFiyat;
}
Sistem.Cizgiler[0].Deger = SermayeEgrisi;
Sistem.Cizgiler[1].Deger = NetSerEgrisi;
Sistem.Cizgiler[2].Deger = MaksSE;
Sistem.Cizgiler[3].Deger = AlVeTut;
Sistem.Cizgiler[4].Deger = Sistem.Liste(0);
Sistem.Cizgiler[5].Deger = KarZarar;
Sistem.Cizgiler[6].Deger = KomEgrisi;
Sistem.Cizgiler[7].Deger = KaymaEgrisi;
Sistem.Cizgiler[8].Deger = Sistem.Liste(0);
Sistem.Cizgiler[9].Deger = DD;
Sistem.Cizgiler[10].Deger = MDD;
Sistem.Cizgiler[11].Deger = Sistem.Liste(0);
Sistem.Cizgiler[12].Deger = KarZararIs;
Sistem.Cizgiler[13].Deger = Sistem.Liste(0);
Sistem.Cizgiler[14].Deger = KarZararAy;
Sistem.Cizgiler[15].Deger = KarZararHaf;
Sistem.Cizgiler[16].Deger = KarZararGun;
Sistem.Cizgiler[17].Deger = Sistem.Liste(0);
Sistem.Cizgiler[18].Deger = HedefCiz;
Sistem.Cizgiler[19].Deger = StopCiz;
Sistem.Cizgiler[0].Aciklama = "Sermaye Eğrisi";
Sistem.Cizgiler[1].Aciklama = "Net Sermaye Eğrisi";
Sistem.Cizgiler[2].Aciklama = "Maks SE";
Sistem.Cizgiler[3].Aciklama = "Al ve Tut";
Sistem.Cizgiler[4].Aciklama = "Boş Liste";
Sistem.Cizgiler[5].Aciklama = "Kar / Zarar Eğrisi";
Sistem.Cizgiler[6].Aciklama = "Komisyon Eğrisi";
Sistem.Cizgiler[7].Aciklama = "Kayma Egrisi";
Sistem.Cizgiler[8].Aciklama = "Boş Liste";
Sistem.Cizgiler[9].Aciklama = "Batak Eğrisi";
Sistem.Cizgiler[10].Aciklama = "Maks Drawdown";
Sistem.Cizgiler[11].Aciklama = "Boş Liste";
Sistem.Cizgiler[12].Aciklama = "İşlem Bazında K/Z";
Sistem.Cizgiler[13].Aciklama = "Boş Liste";
Sistem.Cizgiler[14].Aciklama = "Aylık K/Z";
Sistem.Cizgiler[15].Aciklama = "Haftalık K/Z";
Sistem.Cizgiler[16].Aciklama = "Günlük K/Z";
Sistem.Cizgiler[17].Aciklama = "Boş Liste";
Sistem.Cizgiler[18].Aciklama = "Hedef";
Sistem.Cizgiler[19].Aciklama = "Stop";
Sistem.Cizgiler[0].Renk = Sistem.Renk(255, 255, 0, 128);
Sistem.Cizgiler[1].Renk = Sistem.Renk(255, 255, 0, 255);
Sistem.Cizgiler[2].Renk = Sistem.Renk(255, 255, 0, 0);
Sistem.Cizgiler[3].Renk = Sistem.Renk(255, 0, 0, 64);
Sistem.Cizgiler[4].Renk = Sistem.Renk(255, 255, 255, 255);
Sistem.Cizgiler[5].Renk = Sistem.Renk(255, 255, 255, 255);
Sistem.Cizgiler[6].Renk = Sistem.Renk(255, 0, 128, 255);
Sistem.Cizgiler[7].Renk = Sistem.Renk(255, 255, 128, 128);
Sistem.Cizgiler[8].Renk = Sistem.Renk(255, 255, 255, 255);
Sistem.Cizgiler[9].Renk = Sistem.Renk(255, 0, 128, 255);
Sistem.Cizgiler[10].Renk = Sistem.Renk(255, 0, 0, 160);
Sistem.Cizgiler[11].Renk = Sistem.Renk(255, 255, 255, 255);
Sistem.Cizgiler[12].Renk = Sistem.Renk(255, 255, 255, 0);
Sistem.Cizgiler[13].Renk = Sistem.Renk(255, 255, 255, 255);
Sistem.Cizgiler[14].Renk = Sistem.Renk(255, 255, 255, 0);
Sistem.Cizgiler[15].Renk = Sistem.Renk(255, 0, 128, 255);
Sistem.Cizgiler[16].Renk = Sistem.Renk(255, 192, 192, 192);
Sistem.Cizgiler[17].Renk = Sistem.Renk(255, 255, 255, 255);
Sistem.Cizgiler[18].Renk = Sistem.Renk(255, 0, 255, 0);
Sistem.Cizgiler[19].Renk = Sistem.Renk(255, 255, 0, 0);
Sistem.Cizgiler[0].Panel = 2;
Sistem.Cizgiler[1].Panel = 2;
Sistem.Cizgiler[2].Panel = 2;
Sistem.Cizgiler[3].Panel = 2;
Sistem.Cizgiler[4].Panel = 2;
Sistem.Cizgiler[5].Panel = 3;
Sistem.Cizgiler[6].Panel = 3;
Sistem.Cizgiler[7].Panel = 3;
Sistem.Cizgiler[8].Panel = 3;
Sistem.Cizgiler[9].Panel = 4;
Sistem.Cizgiler[10].Panel = 4;
Sistem.Cizgiler[11].Panel = 4;
Sistem.Cizgiler[12].Panel = 5;
Sistem.Cizgiler[13].Panel = 5;
Sistem.Cizgiler[14].Panel = 6;
Sistem.Cizgiler[15].Panel = 6;
Sistem.Cizgiler[16].Panel = 6;
Sistem.Cizgiler[17].Panel = 6;
Sistem.Cizgiler[18].Panel = 1;
Sistem.Cizgiler[19].Panel = 1;
Sistem.Cizgiler[0].Stil = 1;
Sistem.Cizgiler[1].Stil = 1;
Sistem.Cizgiler[2].Stil = 3;
Sistem.Cizgiler[3].Stil = 1;
Sistem.Cizgiler[4].Stil = 1;
Sistem.Cizgiler[5].Stil = 1;
Sistem.Cizgiler[6].Stil = 1;
Sistem.Cizgiler[7].Stil = 1;
Sistem.Cizgiler[8].Stil = 1;
Sistem.Cizgiler[9].Stil = 1;
Sistem.Cizgiler[10].Stil = 3;
Sistem.Cizgiler[11].Stil = 1;
Sistem.Cizgiler[12].Stil = 2;
Sistem.Cizgiler[13].Stil = 1;
Sistem.Cizgiler[14].Stil = 1;
Sistem.Cizgiler[15].Stil = 1;
Sistem.Cizgiler[16].Stil = 1;
Sistem.Cizgiler[17].Stil = 1;
Sistem.Cizgiler[18].Stil = 4;
Sistem.Cizgiler[19].Stil = 4;
Sistem.Cizgiler[0].ActiveBool = true;
Sistem.Cizgiler[1].ActiveBool = true;
Sistem.Cizgiler[2].ActiveBool = true;
Sistem.Cizgiler[3].ActiveBool = true;
Sistem.Cizgiler[4].ActiveBool = false;
Sistem.Cizgiler[5].ActiveBool = true;
Sistem.Cizgiler[6].ActiveBool = true;
Sistem.Cizgiler[7].ActiveBool = true;
Sistem.Cizgiler[8].ActiveBool = false;
Sistem.Cizgiler[9].ActiveBool = true;
Sistem.Cizgiler[10].ActiveBool = true;
Sistem.Cizgiler[11].ActiveBool = false;
Sistem.Cizgiler[12].ActiveBool = true;
Sistem.Cizgiler[13].ActiveBool = false;
Sistem.Cizgiler[14].ActiveBool = true;
Sistem.Cizgiler[15].ActiveBool = true;
Sistem.Cizgiler[16].ActiveBool = true;
Sistem.Cizgiler[17].ActiveBool = false;
Sistem.Cizgiler[18].ActiveBool = true;
Sistem.Cizgiler[19].ActiveBool = true;
Sistem.DolguEkle(0, 4, Sistem.Renk(100, 255, 0, 128), Sistem.Renk(100, 255, 0, 128));
Sistem.DolguEkle(1, 4, Sistem.Renk(100, 255, 0, 255), Sistem.Renk(100, 255, 0, 255));
Sistem.DolguEkle(2, 4, Sistem.Renk(50, 255, 0, 0), Sistem.Renk(50, 0, 0, 0));
Sistem.DolguEkle(5, 8, Sistem.Renk(100, 0, 255, 0), Sistem.Renk(100, 255, 0, 0));
Sistem.DolguEkle(10, 11, Sistem.Renk(50, 0, 0, 255), Sistem.Renk(50, 0, 0, 255));
Sistem.DolguEkle(12, 13, Sistem.Renk(100, 0, 255, 0), Sistem.Renk(100, 255, 0, 0));
Sistem.DolguEkle(14, 17, Sistem.Renk(150, 255, 255, 0), Sistem.Renk(50, 255, 255, 0));
Sistem.DolguEkle(15, 17, Sistem.Renk(150, 0, 128, 255), Sistem.Renk(50, 0, 128, 255));
Sistem.DolguEkle(16, 17, Sistem.Renk(150, 192, 192, 192), Sistem.Renk(50, 192, 192, 192));
if (Sistem.Parametreler[6] == "Göster")
{
string ozettablo = "";
ozettablo += "\tSistem Bilgi Ekranı\n";
ozettablo += "Başlangıç Sermayesi: " + Sermaye.ToString("C2") + "\n";
ozettablo += "Bitiş Sermayesi: " + SermayeEgrisi[SermayeEgrisi.Count - 1].ToString("C2") + "\n";
ozettablo += "Kar / Zarar: " + KarZarar[KarZarar.Count - 1].ToString("C2") + "\n";
ozettablo += "Komisyon: " + KomEgrisi[KomEgrisi.Count - 1].ToString("C2") + "\n";
ozettablo += "Kayma: " + KaymaEgrisi[KaymaEgrisi.Count - 1].ToString("C2") + "\n";
ozettablo += "Net Sermaye: " + NetSerEgrisi[NetSerEgrisi.Count - 1].ToString("C2") + "\n";
ozettablo += "Net Kar / Zarar: " + (NetSerEgrisi[NetSerEgrisi.Count - 1] - Sermaye).ToString("C2") + "\n";
ozettablo += "En Kar. İş.: " + MaksIKZ[MaksIKZ.Count - 1].ToString("C2") + " | En Zar. İş.: " + MinIKZ[MinIKZ.Count - 1].ToString("C2") + "\n";
ozettablo += "Kar. İş. Top.: " + KarIsTop.ToString("C2") + " | Zar. İş. Top.: " + ZarIsTop.ToString("C2") + "\n";
ozettablo += "Kar. İş. Sayısı: " + KarIsSay + " | Zar. İş. Sayısı: " + ZarIsSay + "\n";
ozettablo += "Maks. Drawdown: " + MDD[MDD.Count - 1].ToString("N0") + " | " + MDDY.ToString("P2") + "\n";
ozettablo += "Long Sayısı: " + LongSayar + " | Short Sayısı: " + ShortSayar + "\n";
ozettablo += "Flat Sayısı: " + FlatSayar + " | Stop Sayısı: " + StopSayar + "\n";
ozettablo += "Bar Sayısı: " + Veriler.Count + " bar..\n";
ozettablo += "Grafik Süresi: " + (DateTime.Now - time).Milliseconds + " ms.."; //bu liste çok uzadı ekrana sığmıyor yan-yana yazılanlar kafa karıştırabiliyor siz istediğiniz gibi düzenlersiniz..
Sistem.ZeminYazisiEkle(ozettablo, 1, 5, 170, Sistem.Renk(200, 255, 255, 255), "Calibri", 8);
}

thebaboli
27-04-2015, 10:33
arkadaşlar ideal de DI (directional indicator) göstergesini al-sat sistem haline getirebilecek bir arkadaş varmı aceba çalışma mantığı aynı kesişimlerde al yada sat sinyali üretecek. test için lazımda çok teşekkür ederim


Deneme çalışmamdır. Eksik fazla var ise düzeltilebilir.

http://i.hizliresim.com/Pqpj2v.png (http://hizliresim.com/Pqpj2v)

var Veriler = Sistem.GrafikVerileri;
var C = Sistem.GrafikFiyatOku(Veriler,"Kapanis");
var DM = Sistem.DirectionalIndicatorMinus(Veriler,14);
var DP = Sistem.DirectionalIndicatorPlus(Veriler,14);
var IslemMiktari = Sistem.Liste(0);
var Pozisyon = Sistem.Liste(0);
var KarZarar = Sistem.Liste(0);
var SonYonB = Sistem.SozcukTablosunuOku("YonB");
var SonYonK = Sistem.SozcukTablosunuOku("YonK");
float SonPozisyon = 0;
float SonFiyat = 0;
float ToplamKarZarar = 0;
var SonYon = "";
for (int i = 1; i < Veriler.Count; i++)
{
if (DP[i]>DM[i]) //AL
{
if (SonPozisyon == 0 && SonYon != "A")
{
Sistem.Yon[i] = "A";
SonYon="A";
IslemMiktari[i] = 1;
SonFiyat = Veriler[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
if (SonPozisyon < 0 && SonYon != "A")
{
Sistem.Yon[i] = "A";
SonYon="A";
IslemMiktari[i] = 2;
SonFiyat = Veriler[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
}
if (DP[i]<DM[i]) //SAT
{
if (SonPozisyon == 0 && SonYon != "S")
{
Sistem.Yon[i] = "S";
SonYon="S";
IslemMiktari[i] = -1;
SonFiyat = Veriler[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
if (SonPozisyon > 0 && SonYon != "S")
{
Sistem.Yon[i] = "S";
SonYon ="S";
IslemMiktari[i] = -2;
SonFiyat = Veriler[i].Close;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
}
Pozisyon[i] = SonPozisyon;
KarZarar[i] = ToplamKarZarar + Veriler[i].Close * Pozisyon[i];
}

Sistem.Cizgiler[0].Deger = DM;
Sistem.Cizgiler[1].Deger = DP;
Sistem.Cizgiler[2].Deger = KarZarar;


Teşekkürler Kosa :cool:


bir de şu periyot kısmını optimize etmek için küçük bir kod yazılıp idealin optimizasyon bölümüne koyuluyor o konuda bilgiliniz varmı?


Yazdığınız kodun optimizasyon kodu aşağıdadır.
VIOP kontatının 60 dk verileri için tarama sonuçları da aşağıda.
(Not: DM periyodunu 10 ile 100, DP periyodunu ise 5 ile 50 aralığında kullandım ben, siz oraları kendinize göre değiştirebilirsiniz.)

Kolay gelsin



var Veriler = Sistem.GrafikVerileri;
float SonPozisyon = 0;
var SonYon = "";
var C = Sistem.GrafikFiyatOku(Veriler,"Kapanis");

for (int DMPeriyot=10; DMPeriyot<100; DMPeriyot++)
{
var DM = Sistem.DirectionalIndicatorMinus(Veriler,DMPeriyot );
for (int DPPeriyot=5; DPPeriyot<50; DPPeriyot++)
{
var DP = Sistem.DirectionalIndicatorPlus(Veriler,DPPeriyot) ;

for (int i = 1; i < Veriler.Count; i++)
Sistem.Yon[i] = "";

for (int i = 1; i < Veriler.Count; i++)
{
if (DP[i]>DM[i]) //AL
{
if (SonPozisyon == 0 && SonYon != "A")
{
Sistem.Yon[i] = "A";
SonYon="A";
}
if (SonPozisyon < 0 && SonYon != "A")
{
Sistem.Yon[i] = "A";
SonYon="A";
}
}
if (DP[i]<DM[i]) //SAT
{
if (SonPozisyon == 0 && SonYon != "S")
{
Sistem.Yon[i] = "S";
SonYon="S";
}
if (SonPozisyon > 0 && SonYon != "S")
{
Sistem.Yon[i] = "S";
SonYon ="S";
}
}
}
Sistem.Optimizasyon("DM/DP Periyotlar= ", DMPeriyot, DPPeriyot);
}
}


http://i.hizliresim.com/Nq54bP.png (http://hizliresim.com/Nq54bP)

Teşekkürler Sezai Bey :cool:

thebaboli
27-04-2015, 10:34
tek sistem ile 20 hisse kontrolü

parametreler kısmına takip edilecek 20 hisseyi girmeniz gerekir IMKBH'????? gibi


//sakın kopyalayıp gerçekte çalıştırmayın akşama kadar hesapta paranız varsa para bitene kadar 1 ton hisseniz olur :kahkah:


for (int i = 0 ; i <= 19; i+=1)
{
var sembol = Sistem.Parametreler[i];

var Pozisyon = Sistem.PozisyonKontrolOku(Sistem.Name + sembol);

// indikatörler


//alım şartı

//satım şartı


//// her dk bir alım örneği



var Sembol = sembol;

if (Sistem.ZamanKontrolSaniye(Sembol) >= 60)
{
Sistem.ZamanKontrolGuncelle(Sembol);
var Miktar = 1;
Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = "Alış";
Sistem.EmirMiktari = Miktar;
Sistem.EmirFiyati = "Aktif"; // aktif fiyat
Sistem.EmirSuresi = "SEANS"; // SEANS, GUN
Sistem.EmirTipi = "NORMAL"; // NORMAL, KIE, KPY, AFE/KAFE
Sistem.EmirGonder();
Sistem.PozisyonKontrolGuncelle(Sistem.Name + sembol, + Miktar);
}



}


Teşekkürler Bearbull :cool:

thebaboli
29-04-2015, 10:46
Sezai bey selamlar,
Foruma daha önce sordum ama zannedersem çözümü zor veya zahmetli olduğu için yanıt alamadım.
Yukarıda bahsettikleriniz ışığı altında aşağıdaki formülü İdeal'a nasıl çevirebiliriz?
C# bilgim malesef sıfır.
Teşekkürler.

al koşulu
d:=If(C>Ref(Max(Max(H,Ref(H,-20)),Max(Ref(H,-10),Ref(H,-15))),-1),Min(Min(L,Ref(L,-20)),Min(Ref(L,-10),Ref(L,-15))),
If(C<Ref(Min(Min(L,Ref(L,-20)),Min(Ref(L,-10),Ref(L,-15))),-1),Max(Max(H,Ref(H,-20)),Max(Ref(H,-10),Ref(H,-15))),PREV));
Cross(Close,d)
sat koşulu
d:=If(C>Ref(Max(Max(H,Ref(H,-20)),Max(Ref(H,-10),Ref(H,-15))),-1),Min(Min(L,Ref(L,-20)),Min(Ref(L,-10),Ref(L,-15))),
If(C<Ref(Min(Min(L,Ref(L,-20)),Min(Ref(L,-10),Ref(L,-15))),-1),Max(Max(H,Ref(H,-20)),Max(Ref(H,-10),Ref(H,-15))),PREV));
Cross(d,Close)


Merhaba.
Çok sayıda iç içe parantezlerde bir hata yapmadıysam iDeal formülü aşağıdaki gibi.



var C = Sistem.GrafikFiyatSec("Kapanis");
var H = Sistem.GrafikFiyatSec("Yuksek");
var L = Sistem.GrafikFiyatSec("Dusuk");
var d = Sistem.Liste(0);
var Max = Sistem.Liste(0);
var Min = Sistem.Liste(0);

for (int i=20; i<Sistem.BarSayisi; i++)
{
Max[i] = Math.Max(Math.Max(H[i],H[i-20]),Math.Max(H[i-10],H[i-15]));
Min[i] = Math.Min(Math.Min(L[i],L[i-20]),Math.Min(L[i-10],L[i-15]));

if (C[i] > Max[i-1])
d[i] = Math.Min(Math.Min(L[i],L[i-20]),Math.Min(L[i-10],L[i-15]));
if (C[i] < Min[i-1])
d[i] = Math.Max(Math.Max(H[i],H[i-20]),Math.Max(H[i-10],H[i-15]));
else
d[i] = d[i-1] ;
}
Sistem.KesismeTara(C,d);


http://i.hizliresim.com/b55lbb.png (http://hizliresim.com/b55lbb)

Teşekkürler Sezai Bey :cool:

Lyrklaunavan
04-05-2015, 19:06
Unscented Kalman Filter


http://i.hizliresim.com/a50Oad.jpg (http://hizliresim.com/a50Oad)




int Period = 16;
int Phase = 0;
var Input = Sistem.GrafikFiyatSec("Kapanis");
double _beta;
double _expFactor;
double _lengthParam;
double _windowLength = 0.5 * (Period - 1);
double _permissivity = 0.01 * Phase + 1.5;
double _sigma;
int _longAvgWindow = 65;
int _stdDevLength = 20;
var _hInterval = new List<double>(new double[Input.Count]);
var _lInterval = new List<double>(new double[Input.Count]);
var _vx = new List<double>(new double[Input.Count]);
var _avgVx = new List<double>(new double[Input.Count]);
var _vxCum = new List<double>(new double[Input.Count]);
var bank0 = new List<double>(new double[Input.Count]);
var bank1 = new List<double>(new double[Input.Count]);
var bank2 = new List<double>(new double[Input.Count]);
var bank3 = new List<double>(new double[Input.Count]);
var bank4 = new List<double>(new double[Input.Count]);
var kalman = Sistem.Liste(0);
var SMA = Sistem.MA(Input, "Simple", 1);

for (int i = 1; i < Input.Count; i++)
{
_windowLength = 0.5 * (Period - 1);
_lengthParam = Math.Log(Math.Sqrt(_windowLength)) / Math.Log(2.0) + 2;
if (_lengthParam < 0) _lengthParam = 0;
_expFactor = _lengthParam - 2;
if (_expFactor < 0.5) _expFactor = 0.5;
_sigma = Math.Sqrt(_windowLength) * _lengthParam;
_beta = _sigma / (_sigma + 1);
var price = SMA[i];
if (i == 1 || i == 0)
{
_hInterval[i] = price;
_lInterval[i] = price;
}
double uDelta = price - _hInterval[i - 1];
double lDelta = price - _lInterval[i - 1];
double uAbs = Math.Abs(uDelta);
double lAbs = Math.Abs(lDelta);
if (uAbs > lAbs) _vx[i] = uAbs;
else if (uAbs < lAbs) _vx[i] = lAbs;
else if (uAbs == lAbs) _vx[i] = 0;
_vxCum[i] = (i < 10) ? 0 : _vxCum[i] = _vxCum[i - 1] + 0.1 * (_vx[i] - _vx[i - 10]);
double matop = 0.0;
for (int j = i - _longAvgWindow + 1; j <= i; j++)
matop += _vxCum[i];
var SMA2 = matop / _longAvgWindow;
_avgVx[i] = (i <= _longAvgWindow + 1) ? _avgVx[i - 1] + 2.0 * (_vxCum[i] - _avgVx[i - 1]) / (_longAvgWindow + 1) : SMA2;
double vxCoeff = 0d;
if (_avgVx[i] > 0) vxCoeff = _vx[i] / _avgVx[i];
if (vxCoeff > Math.Pow(_lengthParam, 1.0 / _expFactor)) vxCoeff = Math.Pow(_lengthParam, 1.0 / _expFactor);
if (vxCoeff < 1) vxCoeff = 1.0;
double vExp = Math.Pow(vxCoeff, _expFactor);
double kV = Math.Pow(_beta, Math.Sqrt(vExp));
double gamma = 0.45 * (Period - 1) / (0.45 * (Period - 1) + 2);
double alpha = Math.Pow(gamma, vExp);
_hInterval[i] = (uDelta > 0) ? price : _hInterval[i] = price - kV * uDelta;
_lInterval[i] = (lDelta < 0) ? price : _lInterval[i] = price - kV * lDelta;
if (i == 2)
{
bank4[i] = price;
bank0[i] = price;
bank2[i] = price;
}
else if (i > 2)
{
bank0[i] = (1 - alpha) * price + alpha * bank0[i - 1];
bank1[i] = (price - bank0[i]) * (1 - gamma) + gamma * bank1[i - 1];
bank2[i] = bank0[i] + _permissivity * bank1[i];
bank3[i] = (bank2[i] - bank4[i - 1]) * Math.Pow((1 - alpha), 2) + Math.Pow(alpha, 2) * bank3[i - 1];
bank4[i] = bank4[i - 1] + bank3[i];
}
kalman[i] = (float)bank4[i];
}
Sistem.Cizgiler[0].Deger =kalman;//panel1

thebaboli
11-05-2015, 00:45
http://i.imgur.com/bxb2tOA.png

Yapmaya çalıştığım ilk okla gösterdiğim yerde en yüksek rsı değeri o iken sonrasında sırasıyla oklarla gösterdiğim değeri gösteren bir indikatör oluşturmak istiyorum. En yüksek tazelenene kadar o an için en yüksek olanı göstersin.

Galiba math.max gibi birşey kullanacağız ama bakmayın adını dediğime nasıl kullanıldığını bilmiyorum. Arapça arabesk-fantazi bir şarkıyı ilahi zanneden babaannem gibiyim c# da. :kahkah:



var rsi = Sistem.RSI(14);
var rsih = Sistem.Liste(0);
for (int i = 1; i<rsi.Count;i++)
rsih[i] = rsi[i]>rsih[i-1] ? rsi[i] : rsih[i-1];
Sistem.Cizgiler[0].Deger = rsi;
Sistem.Cizgiler[1].Deger = rsih;

Buyur dostum..

Teşekkürler Kıymetli Dostum :cool:



peki en yüksek rsi değerinin oluştuğu barın fiyatını, tarihini ve rsi değerinin kaçıncı kez en yüksek olduğunu nasıl bulabiliriz...



var Veri = Sistem.GrafikVerileri;
var rsi = Sistem.RSI(14);
var rsih = Sistem.Liste(0);
int sayac = 0;
for (int i = 1; i<Veri.Count;i++)
{
//rsih[i] = rsi[i]>rsih[i-1] ? rsi[i] : rsih[i-1];
if (rsi[i]>rsih[i-1])
{
rsih[i] = rsi[i];
sayac++;
Sistem.Debug(Veri[i].Date.ToString()); //tarihi
Sistem.Debug(Veri[i].Close.ToString()); //fiyatı
Sistem.Debug(sayac.ToString()); //kaçıncı kez gerçekleştiği
}
else rsih[i] = rsih[i-1];
}
Sistem.Cizgiler[0].Deger = rsi;
Sistem.Cizgiler[1].Deger = rsih;

thebaboli
11-05-2015, 10:23
http://www.charttec.de/html/indikator_dss_double_smoothed_stochastic.php

slw:=5;
pds:=8;
ratio:=(MOV(C,5,E) / MOV(C,20,E));
divi:=HHV(ratio,pds) - LLV(ratio,pds);
a:=MOV((ratio-LLV(ratio,pds))/(divi),slw,E)*100;
divi:=(HHV(a,pds)-LLV(a,pds));
divi:=IF(divi=0,1,divi);
dss:=MOV((a-LLV(a,pds))/divi,slw,E)*100;
dss;

Arkadaşlar bu formulasyonu nasıl dönüştürebiliriz ben yapamadım, verdiğim sayfadaki görüntüsü fena gözükmüyor.



int slw = 5;
int pds = 8;
int emakp = 5;
int emaup = 20;
var emak = Sistem.MA(emakp, "Exp", "Kapanis");
var emau = Sistem.MA(emaup, "Exp", "Kapanis");
var ratio = Sistem.Liste(0);

for (int i = emaup; i < Sistem.BarSayisi; i++)
ratio[i] = emak[i] / emau[i];

var ratioh = Sistem.HHV(pds, ratio);
var ratiol = Sistem.LLV(pds, ratio);
var ratioEmaList = Sistem.Liste(0);
var divi = Sistem.Liste(0);

for (int i = emaup; i < Sistem.BarSayisi; i++)
{
divi[i] = ratioh[i] - ratiol[i];
ratioEmaList[i] = (ratio[i] - ratiol[i]) / divi[i];
}

var a = Sistem.Liste(0);
var aEma = Sistem.MA(ratioEmaList, "Exp", slw);
for (int i = emaup; i < Sistem.BarSayisi; i++)
a[i] = aEma[i] * 100f;

var ah = Sistem.HHV(pds, a);
var al = Sistem.LLV(pds, a);
var aEmaList = Sistem.Liste(0);
for (int i = emaup; i < Sistem.BarSayisi; i++)
{
divi[i] = ah[i] - al[i];
divi[i] = divi[i] == 0f ? 1 : divi[i];
aEmaList[i] = (a[i] - al[i]) / divi[i];
}

var dssema = Sistem.MA(aEmaList, "Exp", slw);
var dss = Sistem.Liste(0);
for (int i = emaup; i < Sistem.BarSayisi; i++)
dss[i] = dssema[i] * 100f;

Sistem.Cizgiler[0].Deger = dss;

Böyle birşey sanırım..


Teşekkürler Kıymetli Dostum :cool:

thebaboli
11-05-2015, 23:16
iDeal üzerinde, kendi yazdığınız bir sistemin, KarZarar ve Anlık Pozisyon grafiklerini kolayca sisemlerinize, tek satırda entegre edebilirsiniz.
User.DLL ve Lib.Cs kullanım imkanı sayesinde bu işlem oldukça kolaydır.
Aşağıdaki kodu Lib.Cs dosyası içine eklemeniz yeterli.

Sistemde kullanımı;



Lib.Cs içeriği;


using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.IO;
using System.Linq;
using System.Drawing;
using System.Net;
using System.Text;
using System.Threading.Tasks;

namespace ideal
{
public class Lib
{
public List<float> KZ(List<string> Yon, List<float> Veriler)
{
var IslemMiktari = new List<float>();
var Pozisyon = new List<float>();
var KarZarar = new List<float>();
var islem = new List<float>();
var BaslangicNo = 0;
float SonPozisyon = 0;
float SonFiyat = 0;
float ToplamKarZarar = 0;
var BarSayisi = Veriler.Count;

for(int i = BaslangicNo;i<BarSayisi;i++)
{
IslemMiktari.Add(0);
Pozisyon.Add(0);
KarZarar.Add(0);
islem.Add(0);
}

for(int i = BaslangicNo;i<BarSayisi;i++)
{
if (Yon[i] == "A")
{
if(SonPozisyon == 0)
{
IslemMiktari[i] = 1;
SonFiyat = Veriler[i];
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}

if(SonPozisyon <0)
{
IslemMiktari[i] = 2;
SonFiyat = Veriler[i];
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
}

if (Yon[i] == "S")
{
if(SonPozisyon == 0)
{
IslemMiktari[i] = -1;
SonFiyat = Veriler[i];
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}

if(SonPozisyon >0)
{
IslemMiktari[i] = -2;
SonFiyat = Veriler[i];
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
}

Pozisyon[i] = SonPozisyon;
KarZarar[i] = ToplamKarZarar + Veriler[i] * Pozisyon[i];
}

return KarZarar;
}

public List<float> KZP(List<string> Yon, List<float> Veriler)
{
var IslemMiktari = new List<float>();
var Pozisyon = new List<float>();
var KarZarar = new List<float>();
var islem = new List<float>();
var BaslangicNo = 0;
float SonPozisyon = 0;
float SonFiyat = 0;
float ToplamKarZarar = 0;
var BarSayisi = Veriler.Count;

for(int i = BaslangicNo;i<BarSayisi;i++)
{
IslemMiktari.Add(0);
Pozisyon.Add(0);
KarZarar.Add(0);
islem.Add(0);
}

for(int i = BaslangicNo;i<BarSayisi;i++)
{
if (Yon[i] == "A")
{
if(SonPozisyon == 0)
{
IslemMiktari[i] = 1;
SonFiyat = Veriler[i];
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}

if(SonPozisyon <0)
{
IslemMiktari[i] = 2;
SonFiyat = Veriler[i];
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
}

if (Yon[i] == "S")
{
if(SonPozisyon == 0)
{
IslemMiktari[i] = -1;
SonFiyat = Veriler[i];
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}

if(SonPozisyon >0)
{
IslemMiktari[i] = -2;
SonFiyat = Veriler[i];
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
}

Pozisyon[i] = SonPozisyon;
KarZarar[i] = ToplamKarZarar + Veriler[i] * Pozisyon[i];
}

return Pozisyon;
}

public List<float> KZFLAT(List<string> Yon, List<float> Veriler)
{
var IslemMiktari = new List<float>();
var Pozisyon = new List<float>();
var KarZarar = new List<float>();
var islem = new List<float>();
var BaslangicNo = 1;
float SonPozisyon = 0;
float SonFiyat = 0;
float ToplamKarZarar = 0;
var BarSayisi = Veriler.Count;

for(int i = 0;i<BarSayisi;i++)
{
IslemMiktari.Add(0);
Pozisyon.Add(0);
KarZarar.Add(0);
islem.Add(0);
}

for(int i = BaslangicNo;i<BarSayisi;i++)
{
if (Yon[i] == "F" && SonPozisyon>0)
{
IslemMiktari[i] = -SonPozisyon;
SonFiyat = Veriler[i];
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}

if (Yon[i] == "F" && SonPozisyon<0)
{
IslemMiktari[i] = -SonPozisyon;
SonFiyat = Veriler[i];
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}

if (Yon[i] == "A")
{
if(SonPozisyon == 0)
{
IslemMiktari[i] = 1;
SonFiyat = Veriler[i];
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}

if(SonPozisyon <0)
{
IslemMiktari[i] = 2;
SonFiyat = Veriler[i];
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
}

if (Yon[i] == "S")
{
if(SonPozisyon == 0)
{
IslemMiktari[i] = -1;
SonFiyat = Veriler[i];
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}

if(SonPozisyon >0)
{
IslemMiktari[i] = -2;
SonFiyat = Veriler[i];
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
}

Pozisyon[i] = SonPozisyon;
KarZarar[i] = ToplamKarZarar + Veriler[i] * Pozisyon[i];
}

return KarZarar;
}

public List<float> KZFLATP(List<string> Yon, List<float> Veriler)
{
var IslemMiktari = new List<float>();
var Pozisyon = new List<float>();
var KarZarar = new List<float>();
var islem = new List<float>();
var BaslangicNo = 1;
float SonPozisyon = 0;
float SonFiyat = 0;
float ToplamKarZarar = 0;
var BarSayisi = Veriler.Count;

for(int i = 0;i<BarSayisi;i++)
{
IslemMiktari.Add(0);
Pozisyon.Add(0);
KarZarar.Add(0);
islem.Add(0);
}

for(int i = BaslangicNo;i<BarSayisi;i++)
{
if (Yon[i] == "F" && SonPozisyon>0)
{
IslemMiktari[i] = -SonPozisyon;
SonFiyat = Veriler[i];
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}

if (Yon[i] == "F" && SonPozisyon<0)
{
IslemMiktari[i] = -SonPozisyon;
SonFiyat = Veriler[i];
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}

if (Yon[i] == "A")
{
if(SonPozisyon == 0)
{
IslemMiktari[i] = 1;
SonFiyat = Veriler[i];
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}

if(SonPozisyon <0)
{
IslemMiktari[i] = 2;
SonFiyat = Veriler[i];
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
}

if (Yon[i] == "S")
{
if(SonPozisyon == 0)
{
IslemMiktari[i] = -1;
SonFiyat = Veriler[i];
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}

if(SonPozisyon >0)
{
IslemMiktari[i] = -2;
SonFiyat = Veriler[i];
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
}
}

Pozisyon[i] = SonPozisyon;
KarZarar[i] = ToplamKarZarar + Veriler[i] * Pozisyon[i];
}

return Pozisyon;
}


}
}






Umarım faydası olur.
http://s3.dosya.tc/server2/mk3tzk/lib.pdf.html

http://i.hizliresim.com/zA42lj.png (http://hizliresim.com/zA42lj)


:cool: :cool: :cool:

Lyrklaunavan
14-05-2015, 19:45
Sistem Yaklasimlari forumunda lot artirma muhabbetleri gecmisti. 2 kere zarardan sonra lot artirmalimiyiz ya da azaltmalimiyiz konusunda... Asagidaki kod sisteminizin sinyallerinin hafizasi var mi yok mu ona bakiyor. Kafaniza gore degistirebilirsiniz...( Not: Sisteminizin performansini excele aldiktan sonra kazanc ya da kayip kismini 1(kazanc) ve -1(kayip) ile doldurmalisiniz. Daha sonra bu exceli csv ye donusturup bu dosyanin `path` ini kodun asagidaki kismina gommeniz lazim)

Not: Simdilik sadece ciftli paternleri yazdim. 3 lu paternleride ekleyebilirsiniz benzer mantikla...

Bunun ne yarari olacak? Mesela 2 kere kazandiktan sonra kayip orani %61 gorunuyor asagida... 2 kere kazandiktan sonra bir miktar lot azaltmaniz guzel bir strateji olabilir...





//buraya csv dosyasinin pathini gommeniz lazim
using (var rd = new StreamReader(@"C:\Users\Putin\Desktop\SS.csv"))





using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace ConsoleApplication15
{
class Program
{
static void Main(string[] args)
{
var column = new List<string>();

using (var rd = new StreamReader(@"C:\Users\Putin\Desktop\SS.csv"))
{
while (!rd.EndOfStream)
{
var splits = rd.ReadLine().Split(';');
column.Add(splits[0]);
}
}
// print column1

//Console.WriteLine("Column:");
/*
foreach (var element in column)
Console.WriteLine(element);
*/
string[] Sinyal = column.ToArray();
int[] Sinyaller = new int[Sinyal.Length];

for (int i = 0; i < Sinyaller.Length; i++)
{
if (Sinyal[i] != null)
{
Sinyaller[i] = Convert.ToInt32(Sinyal[i]);
}
}
/*
Console.WriteLine("Array yazdırıliyor");
foreach (var item in Sinyaller)
Console.WriteLine(item);
*/
Tekli(Sinyaller);
Ciftli(Sinyaller);
}

//tekli paternler
//1,1
//1,-1
//-1,1
//-1,-1
public static void Tekli(int[] k)
{
int counter1 = 0;
int counter1_1 = 0;
int counter1_eksi1 = 0;
int countereksi1 = 0;
int countereksi1_1 = 0;
int countereksi1_eksi1 = 0;

for (int i = 0; i < k.Length - 1; i++)
{
//kac tane 1 le baslayan ikili patern var?
if (k[i] == 1) counter1++;
//1 den sonra 1 kac kere gelmis?
if (k[i] == 1 && k[i + 1] == 1) counter1_1++;
//1 den sonra -1 kac kere gelmis?
if (k[i] == 1 && k[i + 1] == -1) counter1_eksi1++;
//kac tane -1 le baslayan ikili patern var?
if (k[i] == -1) countereksi1++;
//-1 den sonra 1 kac kere gelmis?
if (k[i] == -1 && k[i + 1] == 1) countereksi1_1++;
//-1 den sonra -1 kac kere gelmis?
if (k[i] == -1 && k[i + 1] == -1) countereksi1_eksi1++;
}

Console.WriteLine();
//Console.WriteLine(k.Length);//18
Console.WriteLine("TEKLI PATERNLER");
Console.WriteLine("**************************************************");
Console.WriteLine("-1 le baslayan ciftli paternlerin toplam sayisi: " + countereksi1 + " Yuzdesi: " + Math.Truncate((float)countereksi1 * 100 / (k.Length-1)) + "%");
Console.WriteLine("-1 den sonra 1 gelmis patern sayısı: " + countereksi1_1 + " Yuzdesi: " + Math.Truncate((float)countereksi1_1 * 100 / countereksi1) + "%");
Console.WriteLine("-1 den sonra -1 gelmis patern sayısı: " + countereksi1_eksi1 + " Yuzdesi: " + Math.Truncate((float)countereksi1_eksi1 * 100 / countereksi1) + "%");
Console.WriteLine("**************************************************");
Console.WriteLine("1 le baslayan ciftli patern sayisi: " + counter1 + " Yuzdesi: " + Math.Truncate((float)counter1 * 100 / (k.Length-1)) + "%");
Console.WriteLine("1 den sonra 1 gelmis patern sayısı: " + counter1_1 + " Yuzdesi: " + Math.Truncate((float)counter1_1 * 100 / counter1) + "%");
Console.WriteLine("1 den sonra -1 gelmis patern sayısı: " + counter1_eksi1 + " Yuzdesi: " + Math.Truncate((float)counter1_eksi1 * 100 / counter1) + "%");

}

//ciftli paternler
//1,1,1
//1,1,-1
//1,-1,1
//1,-1,-1
//-1,1,1
//-1,1,-1
//-1,-1,1
//-1,-1,-1

public static void Ciftli(int[] k)
{
int counter1_1 = 0;
int counter1_eksi1 = 0;
int countereksi1_eksi1 = 0;
int counter111 = 0;
int counter11eksi1 = 0;
int counter1eksi11 = 0;
int counter1eksi1eksi1 = 0;
int countereksi11 = 0;
int countereksi111 = 0;//ok
int countereksi11eksi1 = 0;
int countereksi1eksi11 = 0;
int countereksi1eksi1eksi1 = 0;

//************************************************** ***

for (int i = 0; i < k.Length - 2; i++)
{
//kac tane 1,1 le baslayan 3lu patern var?
if (k[i] == 1 && k[i + 1] == 1) counter1_1++;
//1,1,1 kac adet?
if (k[i] == 1 && k[i + 1] == 1 && k[i + 2] == 1) counter111++;
//1,1,-1 kac adet?
if (k[i] == 1 && k[i + 1] == 1 && k[i + 2] == -1) counter11eksi1++;
//************************************************** ***
//kac tane 1,-1 le baslayan 3lu patern var?
if (k[i] == 1 && k[i + 1] == -1) counter1_eksi1++;
//1,-1,1 kac adet?
if (k[i] == 1 && k[i + 1] == -1 && k[i + 2] == 1) counter1eksi11++;
//1,-1,-1 kac adet?
if (k[i] == 1 && k[i + 1] == -1 && k[i + 2] == -1) counter1eksi1eksi1++;
//************************************************** *
//kac tane -1,1 le baslayan 3lu patern var?
if (k[i] == -1 && k[i + 1] == 1) countereksi11++;
//-1,1,1 kac adet?
if (k[i] == -1 && k[i + 1] == 1 && k[i + 2] == 1) countereksi111++;
//-1,1,-1 kac adet?
if (k[i] == -1 && k[i + 1] == 1 && k[i + 2] == -1) countereksi11eksi1++;
//************************************************** *
//kac tane -1,-1 le baslayan 3lu patern var?
if (k[i] == -1 && k[i + 1] == -1) countereksi1_eksi1++;
//-1,-1,1 kac adet?
if (k[i] == -1 && k[i + 1] == -1 && k[i + 2] == 1) countereksi1eksi11++;
//-1,-1,-1 kac adet?
if (k[i] == -1 && k[i + 1] == -1 && k[i + 2] == -1) countereksi1eksi1eksi1++;
}


Console.WriteLine();
Console.WriteLine("CIFTLI PATERNLER");
Console.WriteLine("**************************************************");
Console.WriteLine("1,1 le baslayan uclu paternlerin toplam sayisi: " + counter1_1 + " Yuzdesi: " + Math.Truncate((float)counter1_1 * 100 / (k.Length - 2)) + "%");
Console.WriteLine("1,1 den sonra 1 gelmis patern sayısı: " + counter111 + ", Yuzdesi: " + Math.Truncate((float)counter111 * 100 / (counter1_1)) + "%");
Console.WriteLine("1,1 den sonra -1 gelmis patern sayısı: " + counter11eksi1 + ", Yuzdesi: " + Math.Truncate((float)counter11eksi1 * 100 / (counter1_1)) + "%");
Console.WriteLine("**************************************************");
Console.WriteLine("1,-1 le baslayan uclu paternlerin toplam sayisi: " + counter1_eksi1 + " Yuzdesi: " + Math.Truncate((float)counter1_eksi1 * 100 / (k.Length - 2)) + "%");
Console.WriteLine("1,-1 den sonra 1 gelmis patern sayısı: " + counter1eksi11 + ", Yuzdesi: " + Math.Truncate((float)counter1eksi11 * 100 / (counter1_eksi1)) + "%");
Console.WriteLine("1,-1 den sonra -1 gelmis patern sayısı: " + counter1eksi1eksi1 + ", Yuzdesi: " + Math.Truncate((float)counter1eksi1eksi1 * 100 / (counter1_eksi1)) + "%");
Console.WriteLine("**************************************************");
Console.WriteLine("-1,-1 le baslayan uclu paternlerin toplam sayisi: " + countereksi1_eksi1 + " Yuzdesi: " + Math.Truncate((float)countereksi1_eksi1 * 100 / (k.Length - 2)) + "%");
Console.WriteLine("-1,-1 den sonra 1 gelmis patern sayısı: " + countereksi1eksi11 + ", Yuzdesi: " + Math.Truncate((float)countereksi1eksi11 * 100 / (countereksi1_eksi1)) + "%");
Console.WriteLine("-1,-1 den sonra -1 gelmis patern sayısı: " + countereksi1eksi1eksi1 + ", Yuzdesi: " + Math.Truncate((float)countereksi1eksi1eksi1 * 100 / (countereksi1_eksi1)) + "%");
Console.WriteLine("**************************************************");
Console.WriteLine("-1,1 le baslayan uclu paternlerin toplam sayisi: " + countereksi11 + " Yuzdesi: " + Math.Truncate((float)countereksi11 * 100 / (k.Length - 2)) + "%");
Console.WriteLine("-1,1 den sonra 1 gelmis patern sayısı: " + countereksi111 + ", Yuzdesi: " + Math.Truncate((float)countereksi111 * 100 / (countereksi11)) + "%");
Console.WriteLine("-1,1 den sonra -1 gelmis patern sayısı: " + countereksi11eksi1 + ", Yuzdesi: " + Math.Truncate((float)countereksi11eksi1 * 100 / (countereksi11)) + "%");
}
}
}





http://i.hizliresim.com/94GGW9.jpg (http://hizliresim.com/94GGW9)

Lyrklaunavan
18-05-2015, 20:55
Z_Score 1.96 dan buyuk cikarsa kayip ve kazanclarin siralamasi random olmuyor. Stratejinize entegre edebilirsiniz. Ama 1.96 dan dusuk cikarsa random diyebilirsiniz. Stratejinize uygulamamaniz lazim. Bir onceki posttaki gibi 1 ve -1 olarak sisteminizin sonuclarini siralayip csv dosyasi haline getirmeniz gerekiyor.



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace Z_Score
{
class Program
{
static void Main(string[] args)
{
var column = new List<string>();

using (var rd = new StreamReader(@"C:\Users\Putin\Desktop\sinyaller.csv"))
{
while (!rd.EndOfStream)
{
var splits = rd.ReadLine().Split(';');
column.Add(splits[0]);
}
}

string[] Sinyal = column.ToArray();
int[] Sinyaller = new int[Sinyal.Length];

for (int i = 0; i < Sinyaller.Length; i++)
{
if (Sinyal[i] != null)
{
Sinyaller[i] = Convert.ToInt32(Sinyal[i]);
}
}

Z_Score(Sinyaller);

}

/* Formul:
* Z=(N*(R-0.5)-P)/((P*(P-N))/(N-1))^(1/2)
* N - total number of trades in a series
* R - total number of series of profitable and losing trades
* W - total number of profitable trades in the series;
* L - total number of losing trades in the series.
* P = 2*W*L;
*/
private static void Z_Score(int[] k)
{
double W = 0;
double L = 0;
double P = 0;
double R = 1;
double N = k.Length;

for (int i = 0; i < k.Length; i++)
{
if (k[i] == 1) W++; //find W
if (k[i] == -1) L++; //find L
}

for (int i = 0; i < k.Length - 1; i++)
{
if (k[i] == 1 && k[i + 1] != 1 || k[i] == -1 && k[i + 1] != -1)
{
R++;
}
}

P = 2 * W * L; //find P
double Z_Score = (N * (R - 0.5) - P) / Math.Sqrt(P * (P - N) / (N - 1));

Console.WriteLine("Z-Score = " + Z_Score);
}
}
}

thebaboli
01-06-2015, 13:29
Merhabalar,

Kayma etkisinden yalıtılmış GetiriHesapla fonksiyonu eklendi.

Sistem.GetiriHesapla("01/01/2010", 0.000);
ilk parametre tarih, ikinci parametre kayma miktarı
Bu fonksiyonu eklediğinizde, sisteminizin Getiri, Pozisyon ve İşlem Miktarı bilgilerini grafiksel olarak görebilirsiniz.
Ayrıca KarZarar hesaplanması için kod yazmanıza gerek kalmıyor.

Versiyonu buradan indirebilirsiniz: www.directfn.com.tr/terminal/ideal.exe

http://i.hizliresim.com/VVQrGv.png (http://hizliresim.com/VVQrGv)


Örnek Kullanım:



var A1 = Sistem.MA(3, "Simple", "Kapanis");
var A2 = Sistem.MA(20, "Simple", "Kapanis");

var SonYon = "";
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if (A1[i] > A2[i] && SonYon != "A")
{
Sistem.Yon[i] = "A";
SonYon = Sistem.Yon[i];
}
else if (A1[i] < A2[i] && SonYon != "S")
{
Sistem.Yon[i] = "S";
SonYon = Sistem.Yon[i];
}
}

Sistem.GetiriHesapla("01/01/2010", 0.00);

Sistem.Cizgiler[0].Deger = A1;
Sistem.Cizgiler[1].Deger = A2;
Sistem.Cizgiler[2].Deger = Sistem.GetiriKZ;
Sistem.Cizgiler[3].Deger = Sistem.GetiriMiktar;
Sistem.Cizgiler[4].Deger = Sistem.GetiriPozisyon




SistemGetir fonksiyonunun nasıl kullanılabileceği ile alakalı çok soru geldi.
Bir basit örnek vermek isterim;
Bollinger isimli bir sistemim (aslında sadece bollinger çizgilerini gördüğüm bir kodum) var diyelim.
Bir de AL/SAT sinyalleri üreten "Walker" isimli bir sistemim var.
Bir tane çizgisi de var Bu Walker sisteminin.

Sistem.SistemGetir ("Walker", "VIP'VIP-X030","60");
satırını bollinger kodumun içini yazı.yorum.
IDEAL, gidip, VIP-X030 sembolünün 60 dakika periyotlu grafiğine Walker sistemini uyguluyor ve AL/SAT sinyal noktalarının yerlerini de içeren SİSTEM.YON dahil her verisini getiriyor.
(o sembolü açıp, o sistemi uyguladığımda elde edeceğim her bilgiyi, bir başka sistemden çağırmış ve kullanmış oluyorum yani.)

Ben aşağıdaki örnekte, viop grafiğinde bollinger çizgilerine ilave olarak Walker sistemine ait olan 1 adet çizgiyi ve o sistemin ürettiği al/sat sinyallerini buraya uygula demiş oluyorum.

http://i.hizliresim.com/RYgGAY.png (http://hizliresim.com/RYgGAY)

Teşekkürler :cool:

thebaboli
01-06-2015, 17:33
Keinlikle haklısınız. Hata vermdiği için öyle kalmış. Bileşke de dahil son hali ;




var ad1 = "sys1" ;
var sembol1 = "VIP'VIP-X030";
var periyot1 = "5" ;

var ad2 = "sys2" ;
var sembol2 = "VIP'VIP-X030";
var periyot2 = "5" ;

var a1 = Sistem.SistemGetir(ad1, sembol1, periyot1) ;
var a2 = Sistem.SistemGetir(ad2, sembol2, periyot2) ;


Sistem.Cizgiler[0].Deger = a1.Cizgiler[0].Deger ; // panel 2 (sys1 de getiri eğrisi No 0 da olduğu için Cizgiler[0] )
Sistem.Cizgiler[1].Deger = a2.Cizgiler[0].Deger ; // panel 2 (sys2 de getiri eğrisi No 0 da olduğu için Cizgiler[0] )

var Bileske= Sistem.Liste(0) ;

for (int i = 1 ; i < Sistem.BarSayisi; i++)
Bileske[i] = ( a1.Cizgiler[0].Deger[i] + a2.Cizgiler[0].Deger[i]) / 2 ;

Sistem.Cizgiler[2].Deger = Bileske; // panel 2







http://i.hizliresim.com/kkMDPW.png (http://hizliresim.com/kkMDPW)


Günaydın,
Farklı periyotlarda getiri karşılaştırma




// sys 1 verileri ve getiri eğrisi
var ad1 = "sys1" ;
var sembol1 = "VIP'VIP-X030";
var periyot1 = "5" ;
var V1 = Sistem.GrafikVerileriniOku(sembol1, periyot1);

var a11 = Sistem.SistemGetir(ad1, sembol1, periyot1) ;
var a1= Sistem.Liste(V1.Count, 0) ;
for (int i = 1 ; i < V1.Count; i++)
a1[i] = a11.Cizgiler[0].Deger[i] ; // sys1 de getiri eğrisi No 0 çizgisinde


// sys2 verileri ve getiri eğrisi
var ad2 = "sys2" ;
var sembol2 = "VIP'VIP-X030";
var periyot2 = "10" ;
var V2 = Sistem.GrafikVerileriniOku(sembol2, periyot2);


var a21 = Sistem.SistemGetir(ad2, sembol2, periyot2) ;
var a22= Sistem.Liste(V2.Count, 0) ;
for (int i = 1 ; i < V2.Count; i++)
a22[i] = a21.Cizgiler[0].Deger[i] ; // sys2 de getiri eğrisi No 0 çizgisinde

var a2 = Sistem.DonemCevir(V1, V2, a22 ) ; //üst periyod getirisi alt periyoda cevriliyor


// getiri eğrilerini çizdir
Sistem.Cizgiler[0].Deger = a1 ; // panel 2
Sistem.Cizgiler[1].Deger = a2 ; // panel 2

var Bileske= Sistem.Liste(V1.Count, 0) ;

for (int i = 1 ; i < V1.Count; i++)
Bileske[i] = ( a1[i] + a2[i] ) / 2 ;

Sistem.Cizgiler[2].Deger = Bileske; // panel 2






http://i.hizliresim.com/0q09VW.png (http://hizliresim.com/0q09VW)

Teşekkürler :cool:

thebaboli
15-06-2015, 22:23
Bileşke aylık kar/zarar







var ad1 = "sys1" ;
var sembol1 = "VIP'VIP-X030";
var periyot1 = "5" ;
var V1 = Sistem.GrafikVerileriniOku(sembol1, periyot1);

var a11 = Sistem.SistemGetir(ad1, sembol1, periyot1) ;
var a1= Sistem.Liste(V1.Count, 0) ;
for (int i = 1 ; i < V1.Count; i++)
a1[i] = a11.Cizgiler[1].Deger[i] + a11.Cizgiler[2].Deger[i] ; // sys1 de kar 1 nolu çizgide, zarar 2 nolu çizgide



var ad2 = "sys2" ;
var sembol2 = "VIP'VIP-X030";
var periyot2 = "10" ;
var V2 = Sistem.GrafikVerileriniOku(sembol2, periyot2);


var a21 = Sistem.SistemGetir(ad2, sembol2, periyot2) ;
var a22= Sistem.Liste(V2.Count, 0) ;

for (int i = 1 ; i < V2.Count; i++)
a22[i] = a21.Cizgiler[1].Deger[i] + a21.Cizgiler[2].Deger[i] ; //// sys2 de kar 1 nolu çizgide, zarar 2 nolu çizgide

var a2 = Sistem.DonemCevir(V1, V2, a22 ) ;



Sistem.Cizgiler[0].Deger = a1 ; // panel 2
Sistem.Cizgiler[1].Deger = a2 ; // panel 3

var Bileske= Sistem.Liste(V1.Count, 0) ;

for (int i = 1 ; i < V1.Count; i++)
Bileske[i] = a1[i] + a2[i] ;

Sistem.Cizgiler[2].Deger = Bileske; // panel 4






http://i.hizliresim.com/RYg297.png (http://hizliresim.com/RYg297)


Sv. Anonimm aylık kar zararı yıllık olarak nasıl görebiliriz?

Birde aynı grafiğe aylık ve/veya yıllık işlem sayısı ve drawdownu çizgi olarak gösterebilirmiyiz?


Yıllık kar/zarar için; sys1 ve sys2 sistemlerini önce buna göre oluşturmak gerekiyor. Aşağıda örnek sys1 mevcut . sys1 ve sys2 düzenlendikten sonra, bileşke aylık kar/zarar örneğine benzer biçimde yıllık oluşturulabilir. ( Basit bir ma sisteminde görüldüğü üzere yıllık bazda kayıp yok ve en az kazandırdığı yıl % 50 olmuş)




var V = Sistem.GrafikVerileri ;

var A1 = Sistem.MA(3, "Simple", "Kapanis");
var A2 = Sistem.MA(20, "Simple", "Kapanis");

var SonYon = "";
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if (A1[i] > A2[i] && SonYon != "A")
{
Sistem.Yon[i] = "A";
SonYon = Sistem.Yon[i];
}
else if (A1[i] < A2[i] && SonYon != "S")
{
Sistem.Yon[i] = "S";
SonYon = Sistem.Yon[i];
}
}

Sistem.GetiriHesapla("10/02/2005", 0.00);

var KarZarar = Sistem.GetiriKZ;



var KarZararAy = Sistem.Liste(0);
float KarZarar1 = 0;
int BarNo1 = 1;
float Fark = 0;
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if (V[i].Date.Year != V[i-1].Date.Year) // "year" olduğu için yıllık dilimleme yapacak, KarZararAy değişkeni aslında yıl
{
Fark = KarZarar[i-1] - KarZarar1;
for (int j = BarNo1; j < i; j++)
KarZararAy[j] = Fark;
KarZarar1 = KarZarar[i-1];
BarNo1 = i;
}
if (i == Sistem.BarSayisi-1)
{
Fark = KarZarar[i] - KarZarar1;
for (int j = BarNo1; j < Sistem.BarSayisi; j++)
KarZararAy[j] = Fark;
}
}
var KarList = Sistem.Liste(0);
var ZararList = Sistem.Liste(0);
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if (KarZararAy[i] > 0)
KarList[i] = KarZararAy[i];
else if (KarZararAy[i] < 0)
ZararList[i] = KarZararAy[i];
}


Sistem.Cizgiler[0].Deger = KarZarar; // panel 2
Sistem.Cizgiler[1].Deger = KarList; //panel 3
Sistem.Cizgiler[2].Deger = ZararList; // panel 3




http://i.hizliresim.com/5dNb6R.png (http://hizliresim.com/5dNb6R)


toplam işlem miktarı ve dilim işlem miktarı




var V = Sistem.GrafikVerileri ;

var A1 = Sistem.MA(3, "Simple", "Kapanis");
var A2 = Sistem.MA(20, "Simple", "Kapanis");

var SonYon = "";
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if (A1[i] > A2[i] && SonYon != "A")
{
Sistem.Yon[i] = "A";
SonYon = Sistem.Yon[i];
}
else if (A1[i] < A2[i] && SonYon != "S")
{
Sistem.Yon[i] = "S";
SonYon = Sistem.Yon[i];
}
}

Sistem.GetiriHesapla("01/01/2011", 0.00);

var KarZarar = Sistem.GetiriKZ;
Sistem.Cizgiler[0].Deger = KarZarar; // panel 2


var x = Sistem.GetiriMiktar ;



var sayac = Sistem.Liste(0);
for (int i = 1; i < Sistem.BarSayisi; i++)
sayac[i] = x[i] != 0 ? sayac[i-1] + 1 : sayac[i-1] ;
Sistem.Cizgiler[1].Deger = sayac; //panel 3


var islemsayisi = Sistem.Liste(0);
float x8 = 0;
int BarNo11 = 1;
float Fark1 = 0;
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if (V[i].Date.Year != V[i-1].Date.Year)
{
Fark1 = sayac[i-1] - x8;
for (int j = BarNo11; j < i; j++)
islemsayisi[j] = Fark1;
x8 = sayac[i-1];
BarNo11 = i;
}

if (i == Sistem.BarSayisi-1)
{
Fark1 = sayac[i] - x8;
for (int j = BarNo11; j < Sistem.BarSayisi; j++)
islemsayisi[j] = Fark1;
}
}


Sistem.Cizgiler[2].Deger = islemsayisi; //panel 4



http://i.hizliresim.com/mPXvoV.png (http://hizliresim.com/mPXvoV)



Teşekkürler :cool:

thebaboli
15-06-2015, 22:27
True Strenght Index



var C = Sistem.GrafikFiyatSec("Kapanis");
var PC = Sistem.Liste(0);
var PC2 = Sistem.Liste(0);
var TSI = Sistem.Liste(0);

for (int i=1; i<Sistem.BarSayisi; i++)
{
PC[i] = C[i] - C[i-1];
PC2[i] = Math.Abs(PC[i]);
}
var EMom =Sistem.MA(PC, "Exp", 25);
var EMom2 =Sistem.MA(PC2, "Exp", 25);
var DPC1 = Sistem.MA(EMom, "Exp", 13);
var DPC2 = Sistem.MA(EMom2, "Exp", 13);

for (int i=1; i<Sistem.BarSayisi; i++)
{
TSI[i] = 100 * (DPC1[i]/ DPC2[i-1]);
}
Sistem.KesismeTara(TSI,0);
Sistem.Cizgiler[0].Deger = TSI;


http://i.hizliresim.com/QAGW7g.png (http://hizliresim.com/QAGW7g)



QQE (Quantitative Qualitative Estimation) Indikatörü..
(al/sat stratejisi içinde. isteyen kaldırabilir, stratejiyi değiştirebilir.)

Çizgiler0 ve çicgiler1: panel 2




var QQE_DAR = Sistem.Liste(0);
var QQE_DAR_Fast= Sistem.Liste(0);
var QQE_FastSignal = Sistem.Liste(0);
var QQE_SlowSignal = Sistem.Liste(0);
var SonYon="";

var RSI = Sistem.RSI (14);
var QQE_RSI_MA = Sistem.MA(RSI, "Exp", 5);
var QQE_ATR_RSI = Sistem.AverageTrueRange(QQE_RSI_MA,27);
var QQE_MA_ATR_RSI = Sistem.MA(QQE_ATR_RSI, "Exp", 5);

var QQE_DARt= Sistem.MA(QQE_MA_ATR_RSI ,"Exp",27);
for (int i=0 ; i<Sistem.BarSayisi;i++)
{
QQE_DAR[i]= QQE_DARt[i]* (float)4.236;
QQE_DAR_Fast[i]= QQE_DARt[i]* (float)2.618;
}

for (int i=1 ; i<Sistem.BarSayisi;i++)
{
if( QQE_RSI_MA[i]< QQE_FastSignal[i-1])
{
QQE_FastSignal[i]=QQE_RSI_MA[i]+ QQE_DAR_Fast[i];

if((QQE_RSI_MA[i-1]< QQE_FastSignal[i-1])&& (QQE_FastSignal[i]>QQE_FastSignal[i-1]))
{
QQE_FastSignal[i]=QQE_FastSignal[i-1];
}
}
else
{
if( QQE_RSI_MA[i]> QQE_FastSignal[i-1])
{
QQE_FastSignal[i]=QQE_RSI_MA[i]- QQE_DAR_Fast[i];

if((QQE_RSI_MA[i-1]> QQE_FastSignal[i-1])&& (QQE_FastSignal[i]<QQE_FastSignal[i-1]))
{
QQE_FastSignal[i]=QQE_FastSignal[i-1];
}
}
}
//fast bitişi
if( QQE_RSI_MA[i]< QQE_SlowSignal[i-1])
{
QQE_SlowSignal[i]=QQE_RSI_MA[i]+ QQE_DAR [i];
if((QQE_RSI_MA[i-1]< QQE_SlowSignal[i-1])&& (QQE_SlowSignal[i]>QQE_SlowSignal[i-1]))
{
QQE_SlowSignal[i]=QQE_SlowSignal[i-1];
}
}
else
{
if( QQE_RSI_MA[i]> QQE_SlowSignal[i-1])
{
QQE_SlowSignal[i]=QQE_RSI_MA[i]- QQE_DAR [i];

if((QQE_RSI_MA[i-1]> QQE_SlowSignal[i-1])&& (QQE_SlowSignal[i]<QQE_SlowSignal[i-1]))
{
QQE_SlowSignal[i]=QQE_SlowSignal[i-1];
}
}
}

}
for (int i=28 ; i<Sistem.BarSayisi;i++)
{
if((QQE_RSI_MA[i-1]< QQE_SlowSignal[i-1])&&(QQE_RSI_MA[i]>= QQE_SlowSignal[i])&&SonYon!="A")
{
SonYon="A";
Sistem.Yon[i]="A";
}
if ((QQE_SlowSignal[i-1]<QQE_RSI_MA[i-1])&&(QQE_SlowSignal[i]>=QQE_RSI_MA[i])&&SonYon!="S")
{
SonYon="S";
Sistem.Yon[i]="S";
}
}
Sistem.Cizgiler[0].Deger=QQE_FastSignal;
Sistem.Cizgiler[1].Deger=QQE_SlowSignal;
Sistem.Cizgiler[2].Deger=QQE_RSI_MA;


http://i.hizliresim.com/Amb1R7.png (http://hizliresim.com/Amb1R7)

Teşekkürler :cool:

thebaboli
15-06-2015, 22:27
Aynı periyottaki iki sistemden tek sistem oluşturma ;


system



var ad = "sys1" ;
var sembol = "VIP'VIP-X030";
var periyot = "10" ;
var V = Sistem.GrafikVerileriniOku(sembol, periyot);
var a01 = Sistem.SistemGetir(ad, sembol, periyot ) ;
var a0= Sistem.Liste(V.Count, 0) ;
for (int i = 1 ; i < V.Count; i++)
a0[i] = a01.Yon[i] == "A" ? 1 : a01.Yon[i] == "S" ? -1 : a0[i-1] ;


var ad1 = "sys2" ;
var sembol1 = "VIP'VIP-X030";
var periyot1 = "10" ;
var V1 = Sistem.GrafikVerileriniOku(sembol1, periyot1);
var a11 = Sistem.SistemGetir(ad1, sembol1, periyot1) ;
var a1= Sistem.Liste(V1.Count, 0) ;
for (int i = 1 ; i < V1.Count; i++)
a1[i] = a11.Yon[i] == "A" ? 1 : a11.Yon[i] == "S" ? -1 : a1[i-1] ;


var SonYon = "";

for (int i = 1; i<V.Count; i++)
{


if ( a0[i] == 1 && a1[i]==1 && SonYon != "A" ) // AL
{
Sistem.Yon[i] = "A";
SonYon = Sistem.Yon[i];

}


else if ( a0[i] == -1 && a1[i]==-1 && SonYon != "S" ) // SAT
{
Sistem.Yon[i] = "S";
SonYon = Sistem.Yon[i];

}


else if ( SonYon == "A" && ( a0[i]==-1 || a1[i]==-1 ) ) // FLAT
{
Sistem.Yon[i] = "F"; // flat
SonYon = Sistem.Yon[i];
}


else if ( SonYon == "S" && ( a0[i]==1 || a1[i]==1 ) ) // FLAT
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
}


}




robot



//////
var Sembol = "VIP'F_XU0300615S0" ;

var SartAl = false;
var SartSat = false;
var SartFlat = false;

var LotSize = 1.0;
double Fiyat = 0;

var Periyot1 = "10" ;
var Sembol1 ="VIP'VIP-X030" ;
Sistem.GrafikVerisiIndir(Sembol1, Periyot1);

//////

var ad = "sys1" ;
var sembol = "VIP'VIP-X030";
var periyot = "10" ;
var V = Sistem.GrafikVerileriniOku(sembol, periyot);
var a01 = Sistem.SistemGetir(ad, sembol, periyot ) ;
var a0= Sistem.Liste(V.Count, 0) ;
for (int i = 1 ; i < V.Count; i++)
a0[i] = a01.Yon[i] == "A" ? 1 : a01.Yon[i] == "S" ? -1 : a0[i-1] ;


var ad1 = "sys2" ;
var sembol1 = "VIP'VIP-X030";
var periyot1 = "10" ;
var V1 = Sistem.GrafikVerileriniOku(sembol1, periyot1);
var a11 = Sistem.SistemGetir(ad1, sembol1, periyot1) ;
var a1= Sistem.Liste(V1.Count, 0) ;
for (int i = 1 ; i < V1.Count; i++)
a1[i] = a11.Yon[i] == "A" ? 1 : a11.Yon[i] == "S" ? -1 : a1[i-1] ;






///////
var SonYon = "";
for (int i = 1; i < V.Count - 1 ; i++)
{


if ( a0[i] == 1 && a1[i]== 1 && SonYon != "A" ) // AL
{
SonYon = "A";

if (i == V.Count - 2) SartAl = true;
}


else if ( a0[i] == -1 && a1[i]== -1 && SonYon != "S" ) // SAT
{
SonYon = "S";

if (i == V.Count - 2) SartSat = true;
}


else if (SonYon == "A" && ( a0[i] == -1 || a1[i] == -1 ) ) //flat
{
SonYon = "F";
if (i == V.Count - 2) SartFlat = true;
}


else if (SonYon == "S" && ( a0[i]== 1 || a1[i]== 1 ) ) // flat
{
SonYon = "F";
if (i == V.Count - 2) SartFlat = true;
}


}


// emir gönder
var Islem = "";
var Miktar = 0.0;
var SonFiyat = Sistem.SonFiyat(Sembol);
var Pozisyon = Sistem.PozisyonKontrolOku(Sistem.Name + " , " + Sembol);

if (SonFiyat > 0 && (Sistem.SaatAraligi("09:10", "12:30") || Sistem.SaatAraligi("13:50", "17:45")) && V[V.Count-1].Date.Day == DateTime.Now.Day && Sistem.HaftaSonu == false && Sistem.BaglantiVar == true )
{

if (SartAl && Pozisyon <= 0) // alış
{
Islem = "ALIS";
if (Pozisyon == 0) // pozisyonum yoksa 1 lot al
Miktar = LotSize;
else if (Pozisyon < 0) // short isem stop and reverse , 2 lot al
Miktar = LotSize + Math.Abs(Pozisyon);
}


else if (SartSat && Pozisyon >= 0) // satış
{
Islem = "SATIS";
if (Pozisyon == 0) // pozisyonum yoksa 1 lot sat
Miktar = LotSize;
else if (Pozisyon > 0) // long isem stop and reverse , 2 lot sat
Miktar = LotSize + Math.Abs(Pozisyon);
}


else if ( SartFlat ) // flat
{
if (Pozisyon > 0)
{
Islem = "SATIS";
Miktar = Math.Abs(Pozisyon);
}
else if (Pozisyon < 0)
{
Islem = "ALIS";
Miktar = Math.Abs(Pozisyon);
}
}
}

// Emir Gönder !!!
if (Islem != "")
{
if (Islem == "ALIS")
Sistem.PozisyonKontrolGuncelle(Sistem.Name + " , " + Sembol, Pozisyon + Miktar);
else if (Islem == "SATIS")
Sistem.PozisyonKontrolGuncelle(Sistem.Name + " , " + Sembol, Pozisyon - Miktar);

Sistem.EmirSembol = Sembol ;
Sistem.EmirIslem = Islem ;
Sistem.EmirMiktari = Miktar ;
Sistem.EmirFiyati ="Aktif" ;
Sistem.EmirSuresi = "GUN" ; // GUN, SNS, IKG
Sistem.EmirTipi = "KPY" ; // KPY, KIE, GIE, SAR
Sistem.EmirFiyatTipi = "PYS" ; // PYS, LMT, EIF, KAP
Sistem.EmirGonder() ;
}





Teşekkürler :cool:

thebaboli
15-06-2015, 22:28
Abiler,Üstatlar iyi akşamlar iyi tatiller,sizden bir formül hakkında yardım istiyorum,şimdiden yardımcı olan herkesden Allah razı olsun, istediğim formül 1 Bar önce Bolinger alt bandına değmiş ve RSİ degeri 30 dan aşagı olan hisseleri bulacak formül lazım, bunu günlük ve 60 dakkalıkta tarama yaptırmak istiyorum,şimdiden teşekkür ederim emeklerinize sağlık.


tam olarak istediğin olmadı ama idare eder.


Sistem.SorguBaslik[0] = "Açılış";
Sistem.SorguBaslik[1] = "Yüksek";
Sistem.SorguBaslik[2] = "Düşük";
Sistem.SorguBaslik[3] = "Kapanış";
Sistem.SorguBaslik[4] = "Hacim";
Sistem.SorguBaslik[6] = "RSI 14";
Sistem.SorguBaslik[7] = "BB 20";


var RSI = Sistem.RSI(14);
var BB = Sistem.BollingerDown("Simple", 20, 2);
var SonRSI = RSI[Sistem.BarSayisi-1];
var SonBB = BB[Sistem.BarSayisi-1];


// filtrele
if (SonRSI < 30.0F && SonBB > Sistem.GrafikVerileri[Sistem.BarSayisi-1].Close )
{
Sistem.SorguDeger[0] = Sistem.GrafikVerileri[Sistem.BarSayisi-1].Open;
Sistem.SorguDeger[1] = Sistem.GrafikVerileri[Sistem.BarSayisi-1].High;
Sistem.SorguDeger[2] = Sistem.GrafikVerileri[Sistem.BarSayisi-1].Low;
Sistem.SorguDeger[3] = Sistem.GrafikVerileri[Sistem.BarSayisi-1].Close;
Sistem.SorguDeger[4] = Sistem.GrafikVerileri[Sistem.BarSayisi-1].Vol;
Sistem.SorguDeger[6] = SonRSI;
Sistem.SorguDeger[7] = SonBB;

if (SonRSI < 30.0F)
Sistem.SorguAciklama = "Aşırı Satım";
else if (SonRSI > 70.0F)
Sistem.SorguAciklama = "Aşırı Alım";
else
Sistem.SorguAciklama = "Normal";

Sistem.SorguEkle();
}

http://badgs.webege.com/20150615202355.png

Teşekkürler :cool:

thebaboli
28-07-2015, 14:31
http://i.hizliresim.com/AqAOjL.jpg (https://hizliresim.com/AqAOjL)

Aleti secimde patladi diye birakmistim. Bu ay toparlamis ama bensiz tabi...

Aslinda buna da bikac lot ayirmayi dusunuyorum ama tek hesapta nasil 2 robot implemente edecegimi ve sistemlere agirlik vermenin nasil olacagini cozemiyorum.


sevgili lyrk,
ben bu yapıda robot kullanıyorum.
bu kodu istediğin kadar farklı isimde kopyalayıp,
istediğin kadar robotu aynı anda çalıştırabilirsin.
en üst iki satırda
lot miktarını ve periyodunu tanımlaman yeterli.
önce sanalda test etmen gerektiğini hatırlatayım.




var LotSize = 2.0;
var Periyot = "1";


var Ay = "00";
if(DateTime.Now.Month>10)
Ay="12";
else if(DateTime.Now.Month>8)
Ay="10";
else if(DateTime.Now.Month>6)
Ay="08";
else if(DateTime.Now.Month>4)
Ay="06";
else if(DateTime.Now.Month>2)
Ay="04";
else if(DateTime.Now.Month>0)
Ay="02";
var Sembol = ("VIP'F_XU030" + Ay + (DateTime.Now.Year-2000) + "S0");
var SembolComp = "VIP'VIP-X030";



Sistem.GrafikVerisiIndir(SembolComp, Periyot);
var V = Sistem.GrafikVerileriniOku(SembolComp, Periyot);
var C = Sistem.GrafikFiyatOku(V, "Kapanis");

var AX = Sistem.RSI(V, 100);
var A1 = AX;
var A2 = Sistem.MA(AX, "Exp", 100);


// tara
var SonYon = "";
float Fyt = 0;
for (int i = 1 ; i < V.Count - 1; i++)
{
if ( A1[i] > A2[i] && SonYon != "A" ) // alış
{
SonYon = "A";
Fyt = C[i];
}
if (A1[i] < A2[i] && SonYon != "S" ) // satış
{
SonYon = "S";
Fyt = C[i];
}
}


// emir gönder
var Islem = "";
var Miktar = 0.0;
var SonFiyat = Sistem.SonFiyat(Sembol);
var Pozisyon = Sistem.PozisyonKontrolOku(Sistem.Name + " , " + Sembol);

if (SonFiyat > 0 && (Sistem.SaatAraligi("09:12", "12:28") || Sistem.SaatAraligi("13:57", "17:43")) && V[V.Count-1].Date.Day == DateTime.Now.Day)
{
if (SonYon == "A" && Pozisyon <= 0) // alış
{
Islem = "ALIS";
if (Pozisyon == 0)
Miktar = LotSize;
else if (Pozisyon < 0)
Miktar = LotSize + Math.Abs(Pozisyon);
}
else if (SonYon == "S" && Pozisyon >= 0) // satış
{
Islem = "SATIS";
if (Pozisyon == 0)
Miktar = LotSize;
else if (Pozisyon > 0)
Miktar = LotSize + Math.Abs(Pozisyon);
}
}


// Emir Gönder !!!
if (Islem != "")
{
if (Islem == "ALIS")
Sistem.PozisyonKontrolGuncelle(Sistem.Name + " , " + Sembol, LotSize);
else if (Islem == "SATIS")
Sistem.PozisyonKontrolGuncelle(Sistem.Name + " , " + Sembol, -LotSize);

Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = Islem;
Sistem.EmirMiktari = Miktar;
Sistem.EmirSuresi = "GUN";
Sistem.EmirTipi = "KPY";
Sistem.EmirFiyatTipi = "PYS";
Sistem.EmirAltHesap = "1";
Sistem.EmirGonder();
}




Teşekkürler Tiberius abi :cool:

thebaboli
05-08-2015, 15:30
sisteme kısa yoldan robot :

"sys" isimli bir sisteminiz varsa, doğrudan burdaki al, sat ve flat sinyallerine göre robot yazabilirsiniz. (lisans kontrol koşulunu da ekledim . örnek kullanıcı kodu : ahmetmehmet )

Parametre kısmına girilecek veri örneği de aşağıda yer almakta.
( parametreler : işlem yapılacak enstruman, lot sayısı, sistemin kullanacağı enstruman )





if ( Sistem.LisansKontrol("ahmetmehmet") )
{
var yes = 1 ;
}

else return Sistem;

//////
var Sembol = Sistem.Parametreler[0];

///////
var SartAl = false;
var SartSat = false;
var SartFlat = false;
var SonYon = "";

var LotSize = float.Parse(Sistem.Parametreler[1]);
double Fiyat = 0;

///////
var Periyot1 = "5" ; //
var Sembol1 = Sistem.Parametreler[2] ;

Sistem.GrafikVerisiIndir(Sembol1, Periyot1);


var ad = "sys" ;
var sembol = Sembol1 ;
var periyot = Periyot1 ;
var V = Sistem.GrafikVerileriniOku(sembol, periyot);
var a01 = Sistem.SistemGetir(ad, sembol, periyot ) ;
var x1= Sistem.Liste(V.Count, 0) ;
for (int i = 1 ; i < V.Count; i++)
x1[i] = a01.Yon[i] == "A" ? 1 : a01.Yon[i] == "S" ? -1 : a01.Yon[i] == "F" ? 0: x1[i-1] ;


///////
for (int i = 1; i < V.Count - 1 ; i++)
{


if ( x1[i] == 1 && SonYon != "A" ) // AL
{
SonYon = "A";

if (i == V.Count - 2) SartAl = true;
}


else if ( x1[i] == -1 && SonYon != "S" ) // SAT
{
SonYon = "S";

if (i == V.Count - 2) SartSat = true;
}


else if ( ( SonYon == "A" || SonYon == "S" ) && x1[i] == 0 ) // FLAT
{
SonYon = "F";
if (i == V.Count - 2) SartFlat = true;
}




}


// emir gönder
var Islem = "";
var Miktar = 0.0;
var SonFiyat = Sistem.SonFiyat(Sembol);
var Pozisyon = Sistem.PozisyonKontrolOku(Sistem.Name + " , " + Sembol);

if (SonFiyat > 0 && (Sistem.SaatAraligi("09:10", "12:30") || Sistem.SaatAraligi("13:50", "17:45")) && V[V.Count-1].Date.Day == DateTime.Now.Day && Sistem.HaftaSonu == false && Sistem.BaglantiVar == true )
{

if (SartAl && Pozisyon <= 0) // alış
{
Islem = "ALIS";
if (Pozisyon == 0) //
Miktar = LotSize;
else if (Pozisyon < 0) //
Miktar = LotSize + Math.Abs(Pozisyon);
}


else if (SartSat && Pozisyon >= 0) //
{
Islem = "SATIS";
if (Pozisyon == 0) //
Miktar = LotSize;
else if (Pozisyon > 0) //
Miktar = LotSize + Math.Abs(Pozisyon);
}


else if ( SartFlat ) // flat
{
if (Pozisyon > 0)
{
Islem = "SATIS";
Miktar = Math.Abs(Pozisyon);
}
else if (Pozisyon < 0)
{
Islem = "ALIS";
Miktar = Math.Abs(Pozisyon);
}
}
}

// Emir Gönder !!!
if (Islem != "")
{
if (Islem == "ALIS")
Sistem.PozisyonKontrolGuncelle(Sistem.Name + " , " + Sembol, Pozisyon + Miktar);
else if (Islem == "SATIS")
Sistem.PozisyonKontrolGuncelle(Sistem.Name + " , " + Sembol, Pozisyon - Miktar);

Sistem.EmirSembol = Sembol ;
Sistem.EmirIslem = Islem ;
Sistem.EmirMiktari = Miktar ;
Sistem.EmirFiyati ="Aktif" ;
Sistem.EmirSuresi = "GUN" ; // GUN, SNS, IKG
Sistem.EmirTipi = "KPY" ; // KPY, KIE, GIE, SAR
Sistem.EmirFiyatTipi = "PYS" ; // PYS, LMT, EIF, KAP
Sistem.EmirGonder() ;
}





http://i.hizliresim.com/oZ8kkX.png (http://hizliresim.com/oZ8kkX)

Teşekkürler Anonimm abi :cool:

thebaboli
06-08-2015, 23:02
http://i.hizliresim.com/5kmA1M.png (http://hizliresim.com/5kmA1M)


@anonimm üstad alttaki iki grafigi hangi kod ekleyerek yaptın ben bi türlü beceremedim dön dolaş kafam bulandı artık


getiri eğrisi ve k/z dilimi
aşağıdaki kod sistemin devamına eklenip panelde ilgili ayarlamalar yapılmalı




Sistem.GetiriHesapla("31/12/2014", 0.01875);
// hangi tarihten getiri hesaplanacak ve kayma ne kadar olacak..örnekte 37.5 puan
var KarZarar = Sistem.GetiriKZ;



var KarZararAy = Sistem.Liste(0);
float KarZarar1 = 0;
int BarNo1 = 1;
float Fark = 0;
for (int i = 1; i < Sistem.BarSayisi; i++)
{

//if (V[i].Date.DayOfWeek == DayOfWeek.Monday && V[i-1].Date.DayOfWeek != DayOfWeek.Monday) // haftalık dilim
if (V[i].Date.Month != V[i-1].Date.Month) // aylık dilim
//if (V[i].Date.Year != V[i-1].Date.Year ) // yıllık dilim


{
Fark = KarZarar[i-1] - KarZarar1;
for (int j = BarNo1; j < i; j++)
KarZararAy[j] = Fark;
KarZarar1 = KarZarar[i-1];
BarNo1 = i;
}
if (i == Sistem.BarSayisi-1)
{
Fark = KarZarar[i] - KarZarar1;
for (int j = BarNo1; j < Sistem.BarSayisi; j++)
KarZararAy[j] = Fark;
}
}
var KarList = Sistem.Liste(0);
var ZararList = Sistem.Liste(0);
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if (KarZararAy[i] > 0)
KarList[i] = KarZararAy[i];
else if (KarZararAy[i] < 0)
ZararList[i] = KarZararAy[i];
}


Sistem.Cizgiler[0].Deger = KarZarar; // panel 2 -düz
Sistem.Cizgiler[1].Deger = KarList; // panel 3 -dikey
Sistem.Cizgiler[2].Deger = ZararList; // panel 3 - dikey




Teşekkürler Anonimm abi :cool:

thebaboli
10-08-2015, 17:58
var KarZarar = Sistem.GetiriKZ;

oluşturacağımız kar zarar grafiğini bardan bara değişen değil de pozdan poza değişen şekilde nasıl kullanabiliriz?

Örnek olsun diye ustalardan seçtim resimleri ;

http://i.hizliresim.com/5dNb6R.png

Buradaki kırmızı çizgi ile gösterilen kar zararı

http://i.hizliresim.com/L4pnAV.png

Buradaki gibi yapmaya çalışıyorum.

Edit : Ayrıca karlı işlem yüzdesini de grafikte çizdirmek istiyorum. Bunu nasıl yapabilirim?




var Yontem = "Simple";
var Periyot1 = 50;
var Periyot2 = 220;
var Veriler = Sistem.GrafikFiyatSec("Kapanis");
var MA1 = Sistem.MA(Veriler, Yontem, Periyot1);
var MA2 = Sistem.MA(Veriler, Yontem, Periyot2);
string sonyon="";

for(int i=1;i<Veriler.Count;i++)
{
if(MA1[i]>MA2[i] && sonyon!="A") {Sistem.Yon[i] = "A"; sonyon="A";}
else if(MA1[i]<MA2[i] && sonyon!="S") {Sistem.Yon[i] = "S"; sonyon="S";}
}

Sistem.Cizgiler[0].Deger = MA1;
Sistem.Cizgiler[0].Aciklama = "MA " + Periyot1;
Sistem.Cizgiler[1].Deger = MA2;
Sistem.Cizgiler[1].Aciklama = "MA " + Periyot2;

Sistem.GetiriHesapla("01.01.2015",0);
var karzarar = Sistem.GetiriKZ;
Sistem.Cizgiler[2].Deger = karzarar;
Sistem.Cizgiler[2].Aciklama = "MA kz";

var stepkz = Sistem.Liste(0);
float KarIsTop = 0;
float ZarIsTop = 0;
int KarIsSay = 0;
int ZarIsSay = 0;
var KarZararIs = Sistem.Liste(0);
float KarZararIs1 = 0;
int BarNoIs1 = 1;
float FarkIs = 0;
var KarIsYuz = Sistem.Liste(0);

for(int i=1;i<Veriler.Count;i++)
{
if (Sistem.Yon[i] == "A" || Sistem.Yon[i] == "S")
{
stepkz[i]= karzarar[i];
FarkIs = karzarar[i] - KarZararIs1;
for (int j = BarNoIs1; j < i; j++)
KarZararIs[j] = FarkIs;
KarZararIs1 = karzarar[i];
BarNoIs1 = i;
if (KarZararIs[i-1] > 0) { KarIsTop += KarZararIs[i - 1]; KarIsSay++; }
else if (KarZararIs[i-1] < 0) { ZarIsTop += KarZararIs[i - 1]; ZarIsSay++; }
if(KarIsSay!=0||ZarIsSay!=0) KarIsYuz[i] = ((float)KarIsSay/(float)(KarIsSay+ZarIsSay))*100;
else KarIsYuz[i]=0f;
}
else {stepkz[i]=stepkz[i-1]; KarIsYuz[i]=KarIsYuz[i-1];}
}

Sistem.Cizgiler[3].Deger = stepkz;
Sistem.Cizgiler[3].Aciklama = "step kz";
Sistem.Cizgiler[4].Deger = KarIsYuz;
Sistem.Cizgiler[4].Aciklama = "Karlı işlem yüzdesi";
Sistem.Cizgiler[5].Deger = Sistem.Liste(0);
Sistem.Cizgiler[5].Aciklama = "Boş çizgi";
Sistem.Cizgiler[0].Panel = 1;
Sistem.Cizgiler[1].Panel = 1;
Sistem.Cizgiler[2].Panel = 2;
Sistem.Cizgiler[3].Panel = 2;
Sistem.Cizgiler[4].Panel = 3;
Sistem.Cizgiler[5].Panel = 2;
Sistem.DolguEkle(3, 5, Sistem.Renk(100, 0, 255, 0), Sistem.Renk(100, 255, 0, 0));

Kıymetli Dostum Exfake sayesinde ilk kısım tamam. Keşke Ideal yetkilileri bunun için alternat kz kodu yayınlasa. :cool: Sistem.GetiriKZPOZ gibi :)



Teşekkürler Exfake :cool:

thebaboli
10-08-2015, 22:46
tüm renkler
anonimin verdiği siteden kopiş :he: :kahkah:



var HintKırmızısı = ( 205,92,92 ) ;
var AçıkMercan = ( 240,128,128 )
var Somon = ( 250,128,114 ) ;
var KoyuSomon = ( 233,150,122 ) ;
var AçıkSomon = ( 255,160,122 ) ;
var Crimson = ( 220,20,60 ) ;
var Kırmızı = ( 255,0,0 ) ;
var AteşKırmızısı = ( 178,34,34 ) ;
var KoyuKırmızı = ( 139,0,0 ) ;
var Pemberenkler = ( " ) ;
var Pembe = ( 255,192,203 ) ;
var AçıkPembe = ( 255,182,193 ) ;
var Ateşpembesi = ( 255,105,180 ) ;
var KoyuPembe = ( 255,20,147 ) ;
var MediumVioletRed = ( 199,21,133 ) ;
var PaleVioletRed = ( 219,112,147 ) ;
var Turuncurenkler = ( " ) ;
var AçıkSomon = ( 255,160,122 ) ;
var Mercan = ( 255,127,80 ) ;
var Domates = ( 255,99,71 ) ;
var OrangeRed = ( 255,69,0 ) ;
var KoyuTuruncu = ( 255,140,0 ) ;
var Turuncu = ( 255,165,0 ) ;
var Sarırenkler = ( " ) ;
var Altın = ( 255,215,0 ) ;
var Sarı = ( 255,255,0 ) ;
var AçıkYeşil = ( 255,255,224 ) ;
var LemonChiffon = ( 255,250,205 ) ;
var LightGoldenrodYellow = ( 250,250,210 ) ;
var PapayaWhip = ( 255,239,213 ) ;
var Moccasin = ( 255,228,181 ) ;
var PeachPuff = ( 255,218,185 ) ;
var PaleGoldenrod = ( 238,232,170 ) ;
var Haki = ( 240,230,140 ) ;
var KoyuHaki = ( 189,183,107 ) ;
var Morrenkler = ( " ) ;
var Lavender = ( 230,230,250 ) ;
var Thistle = ( 216,191,216 ) ;
var Plum = ( 221,160,221 ) ;
var Menekşe = ( 238,130,238 ) ;
var Orkide = ( 218,112,214 ) ;
var Fuchsia = ( 255,0,255 ) ;
var Magenta = ( 255,0,255 ) ;
var MediumOrchid = ( 186,85,211 ) ;
var MediumPurple = ( 147,112,219 ) ;
var BlueViolet = ( 138,43,226 ) ;
var DarkViolet = ( 148,0,211 ) ;
var DarkOrchid = ( 153,50,204 ) ;
var DarkMagenta = ( 139,0,139 ) ;
var Mor = ( 128,0,128 ) ;
var Indigo = ( 75,0,130 ) ;
var SlateBlue = ( 106,90,205 ) ;
var DarkSlateBlue = ( 72,61,139 ) ;
var GreenYellow = ( 173,255,47 ) ;
var Chartreuse = ( 127,255,0 ) ;
var LawnGreen = ( 124,252,0 ) ;
var Lime = ( 0,255,0 ) ;
var LimeGreen = ( 50,205,50 ) ;
var PaleGreen = ( 152,251,152 ) ;
var AçıkYeşil = ( 144,238,144 ) ;
var MediumSpringGreen = ( 0,250,154 ) ;
var BaharYeşili = ( 0,255,127 ) ;
var MediumSeaGreen = ( 60,179,113 ) ;
var DenizYeşili = ( 46,139,87 ) ;
var ForestGreen = ( 34,139,34 ) ;
var Yeşil = ( 0,128,0 ) ;
var KoyuYeşil = ( 0,100,0 ) ;
var YellowGreen = ( 154,205,50 ) ;
var OliveDrab = ( 107,142,35 ) ;
var Zeytin = ( 128,128,0 ) ;
var DarkOliveGreen = ( 85,107,47 ) ;
var MediumAquamarine = ( 102,205,170 ) ;
var DarkSeaGreen = ( 143,188,143 ) ;
var LightSeaGreen = ( 32,178,170 ) ;
var DarkCyan = ( 0,139,139 ) ;
var Teal = ( 0,128,128 ) ;
var Mavirenkler = ( " ) ;
var Turkuaz = ( 0,255,255 ) ;
var Cyan = ( 0,255,255 ) ;
var LightCyan = ( 224,255,255 ) ;
var PaleTurquoise = ( 175,238,238 ) ;
var Aquamarine = ( 127,255,212 ) ;
var Turquoise = ( 64,224,208 ) ;
var MediumTurquoise = ( 72,209,204 ) ;
var DarkTurquoise = ( 0,206,209 ) ;
var CadetBlue = ( 95,158,160 ) ;
var SteelBlue = ( 70,130,180 ) ;
var LightSteelBlue = ( 176,196,222 ) ;
var PowderBlue = ( 176,224,230 ) ;
var Açıkmavi = ( 173,216,230 ) ;
var SkyBlue = ( 135,206,235 ) ;
var LightSkyBlue = ( 135,206,250 ) ;
var DeepSkyBlue = ( 0,191,255 ) ;
var DodgerBlue = ( 30,144,255 ) ;
var CornflowerBlue = ( 100,149,237 ) ;
var MediumSlateBlue = ( 123,104,238 ) ;
var RoyalBlue = ( 65,105,225 ) ;
var Mavi = ( 0,0,255 ) ;
var MediumBlue = ( 0,0,205 ) ;
var KoyuMavi = ( 0,0,139 ) ;
var Navy = ( 0,0,128 ) ;
var MidnightBlue = ( 25,25,112 ) ;
var Cornsilk = ( 255,248,220 ) ;
var BlanchedAlmond = ( 255,235,205 ) ;
var Bisque = ( 255,228,196 ) ;
var NavajoWhite = ( 255,222,173 ) ;
var Wheat = ( 245,222,179 ) ;
var BurlyWood = ( 222,184,135 ) ;
var Tan = ( 210,180,140 ) ;
var RosyBrown = ( 188,143,143 ) ;
var SandyBrown = ( 244,164,96 ) ;
var Goldenrod = ( 218,165,32 ) ;
var DarkGoldenrod = ( 184,134,11 ) ;
var Peru = ( 205,133,63 ) ;
var Chocolate = ( 210,105,30 ) ;
var SaddleBrown = ( 139,69,19 ) ;
var Sienna = ( 160,82,45 ) ;
var Brown = ( 165,42,42 ) ;
var Maroon = ( 128,0,0 ) ;
var Beyaz = ( 255,255,255 ) ;
var Kar = ( 255,250,250 ) ;
var Honeydew = ( 240,255,240 ) ;
var MintCream = ( 245,255,250 ) ;
var Azure = ( 240,255,255 ) ;
var AliceBlue = ( 240,248,255 ) ;
var GhostWhite = ( 248,248,255 ) ;
var WhiteSmoke = ( 245,245,245 ) ;
var Seashell = ( 255,245,238 ) ;
var Beige = ( 245,245,220 ) ;
var OldLace = ( 253,245,230 ) ;
var FloralWhite = ( 255,250,240 ) ;
var Ivory = ( 255,255,240 ) ;
var AntikBeyaz = ( 250,235,215 ) ;
var Linen = ( 250,240,230 ) ;
var LavenderBlush = ( 255,240,245 ) ;
var MistyRose = ( 255,228,225 ) ;
var Gainsboro = " 220,220,220 ) ;
var AçıkGri = " 211,211,211 ) ;
var Gümüş = " 192,192,192 ) ;
var KoyuGri = " 169,169,169 ) ;
var Gri = " 128,128,128 ) ;
var DimGray = " 105,105,105 ) ;
var LightSlateGray = " 119,136,153 ) ;
var SlateGray = " 112,128,144 ) ;
var DarkSlateGray = " 47,79,79 ) ;
var Siyah = " 0,0,0 ) ;




http://badgs.webege.com/20150810223041.png

Bearbull ve Anonim abi teşekkürler :cool:

thebaboli
12-08-2015, 15:29
sezai bey selam,

png dosyadan grafiğe resim bastırabilir miyiz,
bunun için bir fonksiyon eklemeniz mümkün mü ?
şimdiden teşekkürler.
kolaylıklar dilerim.


Merhabalar

Sistem.ResimEkle fonkisyonu eklenmiştir.
Versiyonu www.directfn.com.tr/terminal/ideal.exe adresinden alabilirsiniz.

İstenildiği kadar imaj eklenebilir.
Alt panellere de resim eklenebilir.

Faydalı katkılarınız ve destekleriniz için teşekkür ederiz.

http://i.hizliresim.com/B020qj.png (http://hizliresim.com/B020qj)


tşk. fotonun pc deki açık yolunu yazmak gerekiyor, örneğin kullanılacak foto c\ideal klasöründeyse ve ismi id.png ise; Sistem.ResimEkle("C:\\ideal\\id.png", 1, 200, 1);



Günaydın.
Sistem ve Robot yazan iDeal kullanıcıları için işleri kolaylaştıracak iki önemli güncelleme yapılmıştır.

Yenilik -1: Aktif VIOP kontratını sistemin otomatik bulması.

Her iki ayda bir yakın vade endeks30 kontratı (sözleşme kodu) değiştiğinden, robot kullanan ideal kullanıcıları ya bir üst mesajdaki gibi bir kodlama yapmak, yada vade geçişlerinde manuel kod düzenlemesi yapmak durumunda kalıyordu. iDeal yeni versiyona yeni eklenen bir fonksiyonla artık bu işi programa bırakabilirsiniz;

Fonksiyon adı: Sistem.AktifViopKontrat

http://i.hizliresim.com/j2nrBj.png (http://hizliresim.com/j2nrBj)


Yenilik -2: Yazılan sistemin ROBOT olarak kullanılması.

iDeal üzerinden sistem/robot yazan kullanıcılarımızın, grafik üzerinde sinyalleri gösterecek stratejilerini/sistemlerini kolayca yazabildikleri, ama bu sistemlerin robot olarak çalışıp, otomatik olarak al/sat yapmasını sağlayacak robot kodunu yazmada sorunlar/zorluklar yaşadıkları görülmüştür.
Son versiyonumuzda, sorunsuz çalışan bir sistemi TEK SATIR ile ROBOT olarak kullandırtabilen yeni bir fonksiyon eklenmiştir.

Fonksiyon adı: Sistem.RobotViopAktİF

Kullanım Şekli:
Aşağıdaki gibi tek satır olarak Robotunuzu kaydedip çalıştırmak yeterlidir.


var Islem = Sistem.RobotViopAktif(("Sisteminizin Adı"", "Grafik Verisi Okuttuğunuz Sembol" , "Emir Gönderilecek Sembol", "Grafik Periyodu", İşlem Adedi);


ÖNEMLİ NOTLAR/BİLGİLER:
1-Bu robot fonksiyonu sadece VIOP için dizayn edilmiştir. VIOP işlem saatleri dışında çalışmaz.
2-Bar kapandıktan sonra işlem yapar. (yeni açılan barın ilk işlemiyle birlikte)
3-Pozisyon takibi tablosunda, anahtar değeri olarak "robotun adı + sembol" şeklinde girdi kullanılır. Dolayısıyla birden fazla robot, birbirinden bağımsız olarak aynı sembole emirler gönderebilecek şekilde çalışabilir. Hatta birden fazla robot, aynı sistemi kullanıp, farklı emir miktarları ile işlem yapabilir.
4-Bu fonksiyon, ISLEM değişkenini geri döndürür. Dönüş (işlem) A, S, F veya boş olabilir.
Dolayısıyla isteyen kullanıcılar,bu değeri kullanıp, işlem yapıldığı zaman mail atsın, ekranın fotoğrafını çeksin kaydetsin, ses çalsın, dosyaya veri yazsın vs gibi ek eylemler kullanmaya devam edebilirler.
5-Bu Robot Fonksiyonu, çalıştırıldığı anda HER DURUMDA MUTLAKA POZİSYON AÇACAK ŞEKİLDE dizayn edilmiştir.
Yani, örneğin sisteminiz LONG durumdayken, bu fonksiyonu kullanıp Robotunuzu yazdınız ve çalıştırdınız. Robot çalışır çalışmaz ALIM emri gönderir ve LONG Pozisyona geçer.

Robotunuz çalışırken internetiniz kesildi, elektrik kesildi, bilgisayar restart oldu vs gibi durumlar yaşadığınızda, tekrar robot devreye girdiğinde bir sinyal oluşmuşsa, her durumda Robot o sinyale uygun pozisyona geçer.İşlem yapmak için bir sonraki sinyali beklemenize gerek kalmaz. (Bu şekilde kullanmak istemeyen kullanıcılar, robotu SANAL modda başlatıp, sanal olarak emri yollamasından hemen sonra GERÇEK moda dönerek gerçek işlem için bir sonraki sinyali bekleyebilirler.)

http://i.hizliresim.com/ZVdjXZ.png (http://hizliresim.com/ZVdjXZ)

http://i.hizliresim.com/L438lG.png (http://hizliresim.com/L438lG)


Mail Gönderimini ve orjinal kontrat kodunu bulmayı kullanan bir örnek;



var Islem = Sistem.RobotViopAktif("OrnekSistem_TOMA", "VIP'VIP-X030" , Sistem.AktifViopKontrat, "60", 3);

if (Islem != "")
{
var MailServer = "smtp.gmail.com";
Sistem.MailServerAdres = MailServer;
Sistem.MailServerPort = 587;
Sistem.MailKonu = Islem ;
Sistem.MailMetin = "ROBOT ISLEM YAPTI";
Sistem.MailGonderenAdres = "[email protected]";
Sistem.MailGonderenSifre = "xxxxxxxx";
Sistem.MailAliciEkle("[email protected]");
Sistem.MailGonder();
}


Teşekkürler Sezai Bey :cool:

erdal.karakas
12-08-2015, 23:13
Güncelleme (daha önce paylaşmıştım)

Merhaba arkadaşlar,
Sizinle gün içinde bana çok yardımı dokunan bir robotumu paylaşmak istiyorum.
Benimle aynı sorunu yaşayan tüm VOB'cu arkadaşlarımın da bu robottan faydalanması istiyorum.
Her sorumuza cevap vermeye ve yardımcı olmaya çalışan forum arkadaşlarımla böyle paylaşımlarda bulunmak beni ayrıca mutlu ediyor.
Robotu aktif olarak ben kullanıyorum ve gerçek modda testleri yapılmıştır.

Robotun Amacı;
Gün içinde girilen pozisyona sizin belirlediğiniz parametre değerlerine uygun şekilde göz kulak olmak :)
Hepimiz gün içinde bazen AL/SAT pozisyonuna girip, çeşitli sebeplerden dolayı bilgisayar ekranından uzaklaşıyoruz ve biz yokken pozisyonda istediğimiz kar seviyeleri kaçıyor daha da kötüsü üstüne zarar yazıyor. Kendi çapımda bunu engellemek için bir robot yazdım.

http://i.hizliresim.com/qlB76R.jpg (http://hizliresim.com/qlB76R)

Robotun Parametre Açıklamaları;
Parametre 0 : Girilen Pozisyonun Yönü Alış:A / Satış:S / Flat:F
Parametre 1 : Pozisyona girilen lot miktarı
Parametre 2 : Alış/Satış yapılan işlem fiyatı Örnek:"106,300"
Parametre 3 : Pozisyonun Zarar limiti puan olarak belirlenir. Örnek:"300"
Parametre 4 : Pozisyondan almak istediğiniz maksimum kar limiti puan olarak.
Bu limite gelindiğinde pozisyon kapatılır. Örnek:"1500" puan
Parametre 5 : Bu parametre pozisyondan kar alma limitini gösterir. Robot bu değeri sizin verdiğiniz kriterlere göre kendisi belirler.

Örneğin; Girdiğiniz pozisyonda 400 puan kar elde ettiğinizde, pozisyon düşüşe geçse bile bu puanın 300'ünü mutlaka kar olarak alacaktır. Bu değerleri kod kısmında açıklamalı bir şekilde yazdım ve kendi kriterinizi kendiniz oluşturabilirsiniz.

Parametre 7 : Pozisyon kapatıldığında bilgi gönderilecek mail adresi yazılır.
Parametre 8 : İşlem yapılacak Hesap adı girilir. örnek: "9999, Firma ADI"
Parametre 9 : Alt Hesap Adı girilir. Bu değer genelde "1" dir.

Not: Robotu çalıştırmadan önce 1, 2, 3 ve 4 numaralı parametreleri, girmiş olduğunuz pozisyona göre düzenleyin, en son da 0 nolu Pozisyon yönü parametresini girin ki robot bu parametreye göre işlem yapıyor.
Robotun kodlarında mail gönderme bölümündeki mail adresi ve şifresi kısmını yazmayı unutmayın.

Lütfen ilk kez robot kullanan arkadaşlar mutlaka, robotu önce sanalda kullanıp test etsin.

Bilgi: Robot Grafik üzerinde çalıştırıldığında girilen pozisyon ve yapılan/yapılacak işlemler hakkında görsel bilgide verir. Örneğin Hangi seviyede pozisyona girilmiş, hangi seviyede stop olacak, hangi seviyede kar alacak gibi.

Robotun Kodları;

var Renk_Kirmizi = Sistem.Renk(250, 250, 0, 0); var Renk_Siyah = Sistem.Renk(0, 300, 0, 0); var Renk_Mavi = Sistem.Renk(250, 50, 50, 250);
var Renk_Mor = Sistem.Renk(250, 191, 62, 255); var Renk_Gri = Sistem.Renk(255, 160, 160, 160); var Renk_Yesil = Sistem.Renk(250, 0, 160, 50);
var Ay = "00"; if(DateTime.Now.Month>10) Ay="12"; else if(DateTime.Now.Month>8) Ay="10"; else if(DateTime.Now.Month>6) Ay="08"; else if(DateTime.Now.Month>4) Ay="06"; else if(DateTime.Now.Month>2) Ay="04"; else if(DateTime.Now.Month>0) Ay="02";
string SozlesmeAdi = ("VIP'F_XU030" + Ay + (DateTime.Now.Year-2000) + "S0"); //Sözleşme Adı Belirlenir.
//################################################## ################################################## #####
// Pozisyon Kontrol Robotu / Girilen Pozisyonun Otomatik Kontrolünü Sağlar Kontrolsüz Zarar Etmenizi Önler
var Sembol = "VIP'VIP-X030";

//Kontrol Edilecek Pozisyon Bilgileri Parametrelerden Alınır.
string Pozisyon_Yonu = (Sistem.Parametreler[0].Split('=')[1].Trim()).ToUpper(); // Girilen pozisyonun yönü belirlenir Örnek: Satış = S Alış = A Küçük harfler büyütülür.
float Lot_Miktari = Convert.ToSingle(Sistem.Parametreler[1].Split('=')[1].Trim()); // Alış/Satış yapılan Aktif Lot Miktarı belirlenir.
float islem_Fiyati = Convert.ToSingle(Sistem.Parametreler[2].Split('=')[1].Trim()); // Lot Alış/Satış fiyatı belirlenir. Örnek : 96,65
float Zarar_Limiti = Convert.ToSingle(Sistem.Parametreler[3].Split('=')[1].Trim()); // Pozisyonda maksimum edilecek zarar seviyesi. Örnek: 300 Puan için = 300
float Kar_Limiti = Convert.ToSingle(Sistem.Parametreler[4].Split('=')[1].Trim()); // Pozisyonda maksimum kar seviyesi belirlenir. Örnek: 1250 Puan için = 1250
float Kar_Alma_Seviyesi = Convert.ToSingle(Sistem.Parametreler[5].Split('=')[1].Trim()); // Pozisyondan alınacak olan kar seviyesi

string EPosta = Sistem.Parametreler[7];
string HesapAdi = Sistem.Parametreler[8];
string AltHesapAdi = Sistem.Parametreler[9];

//Anlık VIOP değeri alınır.
float VIP30 = Sistem.SonFiyat(Sembol);
if (VIP30 != 0 )
{
//-----------------------------------------------------------------------------------------------------------------
// Strateji İşlemleri Yapılır.
float Kar_Zarar = 0;
float Stop_Seviyesi = 0;
var Sinyal = 0; // Al, Sat veya Stop sinyali olduğunda değer 1 olur ve pozisyona göre işlem yapılır.

if (Pozisyon_Yonu == "A")
{
Stop_Seviyesi = (islem_Fiyati - (Zarar_Limiti/1000)); //Stop Seviyesi Hesaplanır.
Kar_Zarar = Sistem.SayiYuvarla(((VIP30 - islem_Fiyati) * 1000),1); //Anlık Kar Zarar Durumu Hesaplanır ve Virgülden sonrası yuvarlanır.
}
if (Pozisyon_Yonu == "S")
{
Stop_Seviyesi = (islem_Fiyati + (Zarar_Limiti/1000)); //Stop Seviyesi Hesaplanır.
Kar_Zarar = Sistem.SayiYuvarla(((islem_Fiyati - VIP30) * 1000),1); //Anlık Kar Zarar Durumu Hesaplanır ve Virgülden sonrası yuvarlanır.
}
if ( (Pozisyon_Yonu == "A") || (Pozisyon_Yonu == "S") ) //Robot Pozisyonda ise hesaplama yapılır.
{
if ( (Kar_Zarar >= 100) && (Kar_Alma_Seviyesi < 25) ) { Kar_Alma_Seviyesi = 25; } //Kar Alma Seviyesi Belirlenir.
if ( (Kar_Zarar >= 150) && (Kar_Alma_Seviyesi < 50) ) { Kar_Alma_Seviyesi = 50; } //Kar Alma Seviyesi Belirlenir.
if ( (Kar_Zarar >= 250) && (Kar_Alma_Seviyesi < 150) ) { Kar_Alma_Seviyesi = 150; } //Kar Alma Seviyesi Belirlenir.
if ( (Kar_Zarar >= 300) && (Kar_Alma_Seviyesi < 200) ) { Kar_Alma_Seviyesi = 200; } //Kar Alma Seviyesi Belirlenir.
if ( (Kar_Zarar >= 350) && (Kar_Alma_Seviyesi < 250) ) { Kar_Alma_Seviyesi = 250; } //Kar Alma Seviyesi Belirlenir.
if ( (Kar_Zarar >= 400) && (Kar_Alma_Seviyesi < 300) ) { Kar_Alma_Seviyesi = 300; } //Kar Alma Seviyesi Belirlenir.
}
//-----------------------------------------------------------------------------------------------------------------
//Stop ve Kar Alma Seviyeleri kontrol edilir. Duruma göre pozisyon kapatılır.
if (Pozisyon_Yonu == "A") //Pozisyon Alış Yönde ise
{
if (VIP30 < Stop_Seviyesi) { Sinyal = 1; } //Stop Seviyesi Geçilmiş ise Pozisyon Kapatılır.
if (Kar_Zarar >= Kar_Limiti) { Sinyal = 1; } //Maksimum Kar Limitine Gelinmiş ise Pozisyon Kapatılır.
if ( (Kar_Alma_Seviyesi > 0) && (VIP30 <= (islem_Fiyati + (Kar_Alma_Seviyesi/1000))) ) { Sinyal = 1; } //Kar Alma Seviyesi Geçilmiş ise Pozisyon Kapatılır.
}
if (Pozisyon_Yonu == "S") //Pozisyon Satış Yönde ise
{
if (VIP30 > Stop_Seviyesi) { Sinyal = 1; } //Stop Seviyesi Geçilmiş ise Pozisyon Kapatılır.
if (Kar_Zarar >= Kar_Limiti) { Sinyal = 1; } //Maksimum Kar Limitine Gelinmiş ise Pozisyon Kapatılır.
if ( (Kar_Alma_Seviyesi > 0) && (VIP30 >= (islem_Fiyati - (Kar_Alma_Seviyesi/1000))) ) { Sinyal = 1; } //Kar Alma Seviyesi Geçilmiş ise Pozisyon Kapatılır.
}
//Stop ve Kar Alma Seviyeleri kontrol edilir. Duruma göre pozisyon kapatılır. BİTTİ
//-----------------------------------------------------------------------------------------------------------------

// Strateji İşlemleri Yapılır. BİTTİ
//-----------------------------------------------------------------------------------------------------------------

//-----------------------------------------------------------------------------------------------------------------
// AL - SAT İşlemleri Yapılır.
if (Sistem.HaftaSonu == false) { //Hafta Sonu Kontrolü Yapılır.
if (Sistem.BaglantiVar == true) { //iDeal Bağlantı Kontrolü Yapılır.
if (Sistem.SaatAraligi("09:10", "12:30") || Sistem.SaatAraligi("13:55", "17:45") ) { //Zaman Kontrolü Yapılır, Seans Saatleri

if ( (Sinyal == 1) && (Lot_Miktari != 0) && (Pozisyon_Yonu != "F") ) // Sinyal ve Parametre Kontrolü Yapılır.
{
Sistem.EmirHesapAdi = HesapAdi;
Sistem.EmirAltHesap = AltHesapAdi;
Sistem.EmirSembol = SozlesmeAdi;
if (Pozisyon_Yonu == "A") { Sistem.EmirIslem = "Satış"; } else { Sistem.EmirIslem = "Alış"; }
Sistem.EmirMiktari = Lot_Miktari;
Sistem.EmirSuresi = "GUN"; // GUN, SNS, IKG
Sistem.EmirTipi = "NORMAL"; // NORMAL, KPY, KIE, GIE, SAR
Sistem.EmirFiyati = "Aktif";
Sistem.EmirFiyatTipi = "PYS"; // PYS, LMT, EIF, KAP
Sistem.EmirGonder();

//Sistem Durumu ve Yapılan İşlem Hakkında Bilgi Maili Atılır.
string Mesaj = (""
+ "<table width=350 border=0>"
+ "<tr><td align=left><strong>P O Z İ S Y O N - B İ L G İ L E R İ</strong></td></tr>"
+ "</table>"
+ "<table width=350 border=0 align=left>"
+ "<tr><td width=130><strong>Hesap Adı</strong></td><td width=210>: " + HesapAdi + "</td></tr>"
+ "<tr><td><strong>Pozisyon Yönü</strong></td><td>: " + Pozisyon_Yonu + "</td></tr>"
+ "<tr><td><strong>İşlem Fiyatı</strong></td><td>: " + islem_Fiyati.ToString() + "</td></tr>"
+ "<tr><td><strong>Lot Miktarı</strong></td><td>: " + Lot_Miktari.ToString() + "</td></tr>"
+ "<tr><td>&nbsp;</td><td>&nbsp;</td></tr>"
+ "<tr><td><strong>VIP30 Anlık Fiyat</strong></td><td>: " + VIP30.ToString() + "</td></tr>"
+ "<tr><td><strong>Kar Alma Seviyesi</strong></td><td>: " + Kar_Alma_Seviyesi.ToString() + " Puan</td></tr>"
+ "<tr><td><strong>Kar - Zarar (Puan)</strong></td><td>: " + Kar_Zarar.ToString() + " Puan</td></tr>"
+ "<tr><td><strong>Kar - Zarar (TL)</strong></td><td>: " + ((Kar_Zarar/10)*Lot_Miktari).ToString() + " TL</td></tr>"
+ "<tr><td>&nbsp;</td><td>&nbsp;</td></tr>"
+ "<tr><td><strong>Yapılan İşlem</strong></td><td>: Pozisyon Kapatıldı.</td></tr>"
+ "<tr><td><strong>Tarih-Saat</strong></td><td>: " + Sistem.Tarih + " - " + Sistem.Saat + "</td></tr>"
+ "<tr><td>&nbsp;</td><td>&nbsp;</td></tr>"
+ "</table>");
Sistem.MailServerAdres = "smtp.live.com"; Sistem.MailServerPort = 587; // Yahoo! smtp.mail.yahoo.com 587 - GMail smtp.gmail.com 587 - Hotmail smtp.live.com 587
Sistem.MailKonu = "iDeal Pozisyon Kontrol Robotu Durum Bilgisi / " + Sistem.Tarih + " - " + Sistem.Saat;
Sistem.MailMetin = Mesaj;
Sistem.MailGonderenAdres = "mail adresi @msn.com"; Sistem.MailGonderenSifre = "********"; // Yıldız olan yere mail adresinin şifresi yazılır
Sistem.MailAliciEkle(EPosta);
Sistem.MailGonder();
//Sistem Durumu veya Yapılan işlemler hakkında bilgi Mail Atılır. BİTTİ

Pozisyon_Yonu = "F"; //Pozisyon Kapatıldığı için Parametre Değerine Flat ifadesi atanır.
//Sistem.Parametreler[1] = "Lot Miktarı =0"; //Pozisyon Kapatıldığı için Parametre Değerine 0 atanır.
Kar_Alma_Seviyesi = 0; //Pozisyon Kapatıldığı için Parametre Değerine 0 atanır.

} // AL - SAT İşlemleri Yapılır. BİTTİ
//-----------------------------------------------------------------------------------------------------------------

}//HaftaSonu
}//Bağlantı
}//Saat

//-----------------------------------------------------------------------------------------------------------------
// Ekrana Robot ile ilgili Çeşitli Bilgiler Yazılır.
Sistem.ZeminYazisiEkle("Pozisyon Yönü ", 1, 165, 43, Renk_Siyah, "Tahoma", 7);
Sistem.ZeminYazisiEkle("Lot miktarı ", 1, 165, 55, Renk_Siyah, "Tahoma", 7);
Sistem.ZeminYazisiEkle("İşlem Fiyatı ", 1, 165, 67, Renk_Siyah, "Tahoma", 7);
Sistem.ZeminYazisiEkle("Stop Seviyesi ", 1, 165, 79, Renk_Siyah, "Tahoma", 7);
Sistem.ZeminYazisiEkle("Kar Alma Seviyesi ", 1, 165, 91, Renk_Siyah, "Tahoma", 7);
Sistem.ZeminYazisiEkle("Kar-Zarar ", 1, 165, 103, Renk_Siyah, "Tahoma", 7);
//Sisteme ait Sonuçlar ve Strateji Ekrana Yazılır.
if (Pozisyon_Yonu == "A") { Sistem.ZeminYazisiEkle(": Alış ", 1, 265, 43, Renk_Mavi, "Tahoma", 7); } // Piyasa Yönü
if (Pozisyon_Yonu == "S") { Sistem.ZeminYazisiEkle(": Satış ", 1, 265, 43, Renk_Kirmizi, "Tahoma", 7); } // Piyasa Yönü
if (Pozisyon_Yonu == "F") { Sistem.ZeminYazisiEkle(": Pozisyon Kapalı ", 1, 265, 43, Renk_Mor, "Tahoma", 7); } // Piyasa Yönü
Sistem.ZeminYazisiEkle(": " + Lot_Miktari.ToString(), 1, 265, 55, Renk_Mor, "Tahoma", 7); // Lot Miktarı
Sistem.ZeminYazisiEkle(": " + islem_Fiyati.ToString(), 1, 265, 67, Renk_Mor, "Tahoma", 7); // İşlem Fiyatı
Sistem.ZeminYazisiEkle(": " + Stop_Seviyesi.ToString(), 1, 265, 79, Renk_Kirmizi, "Tahoma", 7); // Stop Seviyesi
if ( (Kar_Alma_Seviyesi > 0) && (Pozisyon_Yonu == "A") ) { Sistem.ZeminYazisiEkle(": " + Kar_Alma_Seviyesi.ToString() + " Puan | " + ((Kar_Alma_Seviyesi/10)*Lot_Miktari).ToString() + " TL | " + (islem_Fiyati + (Kar_Alma_Seviyesi/1000)).ToString(), 1, 265, 91, Renk_Yesil, "Tahoma", 7); } //Kar Alma Seviyesi
if ( (Kar_Alma_Seviyesi > 0) && (Pozisyon_Yonu == "S") ) { Sistem.ZeminYazisiEkle(": " + Kar_Alma_Seviyesi.ToString() + " Puan | " + ((Kar_Alma_Seviyesi/10)*Lot_Miktari).ToString() + " TL | " + (islem_Fiyati - (Kar_Alma_Seviyesi/1000)).ToString(), 1, 265, 91, Renk_Yesil, "Tahoma", 7); } //Kar Alma Seviyesi
if (Kar_Alma_Seviyesi == 0) { Sistem.ZeminYazisiEkle(": " + Kar_Alma_Seviyesi.ToString() + " Puan | " + ((Kar_Alma_Seviyesi/10)*Lot_Miktari).ToString() + " TL | ---", 1, 265, 91, Renk_Yesil, "Tahoma", 7); } //Kar Alma Seviyesi
if (Kar_Zarar >= 0) { Sistem.ZeminYazisiEkle(": " + Kar_Zarar.ToString() + " Puan | " + ((Kar_Zarar/10)*Lot_Miktari).ToString() + " TL", 1, 265, 103, Renk_Yesil, "Tahoma", 7); } //Kar Zarar Durumu Puan +
if (Kar_Zarar < 0) { Sistem.ZeminYazisiEkle(": " + Kar_Zarar.ToString() + " Puan | " + ((Kar_Zarar/10)*Lot_Miktari).ToString() + " TL", 1, 265, 103, Renk_Kirmizi, "Tahoma", 7); } //Kar Zarar Durumu Puan -

if (Pozisyon_Yonu != "F") // Pozisyon kapalı ise çizgiler kapatılır.
{
Sistem.Cizgiler[0].Deger = Sistem.Liste(islem_Fiyati); Sistem.Cizgiler[0].Aciklama = "İşlem Fiyatı"; Sistem.Cizgiler[0].Kalinlik = 2; Sistem.Cizgiler[0].Renk = Renk_Mavi;
Sistem.Cizgiler[1].Deger = Sistem.Liste(Stop_Seviyesi); Sistem.Cizgiler[1].Aciklama = "Stop Seviyesi"; Sistem.Cizgiler[1].Kalinlik = 2; Sistem.Cizgiler[1].Renk = Renk_Kirmizi;
//Kar Alma Çizgisi Ekrana Çizdirilir.
if ( (Pozisyon_Yonu == "A") && (Kar_Alma_Seviyesi >0) ) { Sistem.Cizgiler[2].Deger = Sistem.Liste(islem_Fiyati + (Kar_Alma_Seviyesi/1000)); Sistem.Cizgiler[2].Aciklama = "Kar Alma Seviyesi"; Sistem.Cizgiler[2].Kalinlik = 2; Sistem.Cizgiler[2].Renk = Renk_Yesil; }
if ( (Pozisyon_Yonu == "S") && (Kar_Alma_Seviyesi >0) ) { Sistem.Cizgiler[2].Deger = Sistem.Liste(islem_Fiyati - (Kar_Alma_Seviyesi/1000)); Sistem.Cizgiler[2].Aciklama = "Kar Alma Seviyesi"; Sistem.Cizgiler[2].Kalinlik = 2; Sistem.Cizgiler[2].Renk = Renk_Yesil; }
}
// Ekrana Robot ile ilgili Çeşitli Bilgiler Yazılır. BİTTİ
//-----------------------------------------------------------------------------------------------------------------

} //VIP30 Değişkeni 0 Sıfır kontrolü

//Kontrol Edilecek YENİ Pozisyon Bilgileri Parametrelere Aktarılır.
Sistem.Parametreler[0] = "Pozisyon Yönü =" + Pozisyon_Yonu; // Girilen pozisyonun yönü belirlenir Örnek: Satış = S Alış = A
Sistem.Parametreler[2] = "İşlem Fiyatı =" + islem_Fiyati.ToString(); // Lot Alış/Satış fiyatı belirlenir.
Sistem.Parametreler[3] = "Zarar Limiti =" + Zarar_Limiti.ToString(); // Zarar limiti Parametreye aktarılır.
Sistem.Parametreler[5] = "Kar Alma Seviyesi =" + Kar_Alma_Seviyesi.ToString(); // Pozisyondan alınacak olan kar seviyesi. Örnek: 300 Puan için = 300

thebaboli
27-08-2015, 13:18
9.000 puan kar görünce FLAT olan sistem örneği;



// kapanış fiyatlarını oku
var C = Sistem.GrafikFiyatSec("Kapanis");
var H = Sistem.GrafikFiyatSec("Yuksek");
var L = Sistem.GrafikFiyatSec("Dusuk");
var O = Sistem.GrafikFiyatSec("Acilis");

// hareketli ortalamaları hesapla
var MA1 = Sistem.MA(C, "Exp", 4);
var MA2 = Sistem.MA(C, "Exp", 10);

// strateji
var SonYon = "";
double Fiyat = 0;
var IslemBarNo = 0;
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if (MA1[i-1] < MA2[i-1] && MA1[i] >= MA2[i] && SonYon != "A") // AL
{
Sistem.Yon[i] = "A"; // alış
SonYon = Sistem.Yon[i];
Fiyat = O[i];
IslemBarNo = i;
}
else if (MA1[i-1] > MA2[i-1] && MA1[i] <= MA2[i] && SonYon != "S") // SAT
{
Sistem.Yon[i] = "S"; // satış
SonYon = Sistem.Yon[i];
Fiyat = O[i];
IslemBarNo = i;
}
else if (SonYon == "S") // satış pozisyonundayken FLAT
{
for (int k = IslemBarNo; k < i; k++)
{
var Seviye = C[k];
if (C[k] < Fiyat - 9.000)
{
Sistem.Yon[i] = "F"; // flat
SonYon = Sistem.Yon[i];
}
}
}
else if (SonYon == "A") // alış pozisyonundayken FLAT
{
for (int k = IslemBarNo; k < i; k++)
{
var Seviye = C[k];
if (C[i] > Fiyat + 9.000)
{
Sistem.Yon[i] = "F"; // flat
SonYon = Sistem.Yon[i];
}
}
}
}



http://i.hizliresim.com/yl6mlM.png (http://hizliresim.com/yl6mlM)

Teşekkürler Sezai bey :cool:


Bir farklı yöntemde şöyle olabilir ; (lütfen test ederek kullanın)




var a_tp_y = 5f ; // alışta kaç puan karda "kar al"
var a_s_y = 3f ; // alışta kaç puan zararda stop
var s_tp_y = 5f ; //satışta kaç puan karda "kar al"
var s_s_y = 3f ; //satışta kaç puan zararda stop

var V = Sistem.GrafikVerileri ;

var C = Sistem.GrafikFiyatOku(V, "Kapanis" ) ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek" ) ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk" ) ;
var O = Sistem.GrafikFiyatOku(V, "Acilis" ) ;

// hareketli ortalamaları hesapla
var MA1 = Sistem.MA(C, "Exp", 4);
var MA2 = Sistem.MA(C, "Exp", 10);




// strateji
var SonYon = "";
double Fiyat = 0;
for (int i = 1; i<V.Count; i++)
{


if ( MA1[i-1] < MA2[i-1] && MA1[i] >= MA2[i] && SonYon != "A" ) // AL
{
Sistem.Yon[i] = "A"; // alış
SonYon = Sistem.Yon[i];
Fiyat = C[i];
}


else if ( MA1[i-1] > MA2[i-1] && MA1[i] <= MA2[i] && SonYon != "S" ) // SAT
{
Sistem.Yon[i] = "S"; // satış
SonYon = Sistem.Yon[i];
Fiyat = C[i];
}


else if (SonYon == "A" && C[i] > ( Fiyat + a_tp_y ) ) // alışta kar realizasyonu
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
}


else if (SonYon == "A" && C[i] < ( Fiyat - a_s_y ) ) // alışta stop
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
}


else if (SonYon == "S" && C[i] < ( Fiyat - s_tp_y )) // satışta kar realizasyonu
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
}


else if (SonYon == "S" && C[i] > ( Fiyat + s_s_y ) ) // satışta stop
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
}


}





http://i.hizliresim.com/d2v2B7.png (http://hizliresim.com/d2v2B7)


optimizasyon kodu







var V = Sistem.GrafikVerileri ;

var C = Sistem.GrafikFiyatOku(V, "Kapanis" ) ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek" ) ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk" ) ;
var O = Sistem.GrafikFiyatOku(V, "Acilis" ) ;

// hareketli ortalamaları hesapla
var MA1 = Sistem.MA(C, "Exp", 4);
var MA2 = Sistem.MA(C, "Exp", 10);





for (var o1 = 0f ; o1 < 15f; o1 +=1f )
{

for (var o2 = 0f ; o2 < 5f; o2 +=1f )
{

for (var o3 = 0f ; o3 < 15f; o3 +=1f )
{

for (var o4 = 0f ; o4 < 5f; o4 +=1f )
{


var a_tp_y = o1 ; // alışta kaç puan karda kar al
var a_s_y = o2 ; // alışta kaç puan zarada stop
var s_tp_y = o3 ; //satışta kaç puan karda kar al
var s_s_y = o4 ; //satışta kaç puan zarada stop




// önceki taramadaki pozisyonları temizle
for (int i = 1; i < V.Count; i++)
Sistem.Yon[i] = "";


// strateji
var SonYon = "";
double Fiyat = 0;
for (int i = 1; i<V.Count; i++)
{


if ( MA1[i-1] < MA2[i-1] && MA1[i] >= MA2[i] && SonYon != "A" ) // AL
{
Sistem.Yon[i] = "A"; // alış
SonYon = Sistem.Yon[i];
Fiyat = C[i];
}


else if ( MA1[i-1] > MA2[i-1] && MA1[i] <= MA2[i] && SonYon != "S" ) // SAT
{
Sistem.Yon[i] = "S"; // satış
SonYon = Sistem.Yon[i];
Fiyat = C[i];
}


else if (SonYon == "A" && C[i] > ( Fiyat + a_tp_y ) ) // alışta kar realizasyonu
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
}


else if (SonYon == "A" && C[i] < ( Fiyat - a_s_y ) ) // alışta stop
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
}


else if (SonYon == "S" && C[i] < ( Fiyat - s_tp_y )) // satışta kar realizasyonu
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
}


else if (SonYon == "S" && C[i] > ( Fiyat + s_s_y ) ) // satışta stop
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
}

}



Sistem.Optimizasyon(o1, o2, o3, o4);

}
}
}
}




Teşekkürler Anonim abi :cool:

thebaboli
02-09-2015, 09:19
stoploss ve kar al yazan arkadaşımız anonime teşekkürler

çok yüklenmiş gibi olmayacaksam boş bir vakitte

şunu yazma ihitmalimiz nedir.

sistemi kar al ve stoploss olacak ancak bunu yaptıktan sonra sıstem 2. koşula kesişime bakacak. bir önceki kodda sistem satıştan kar al yaptıysa ılla al sınyalını beklıyor veya stop olduysa ıllakı al sınyalını beklıyor.

boyle olunca kos koca trendlerı kacırabılıyoruz.

ma 1-10 kesışımıne gore al sat yapıp

1000 puana stop ve kar al koydu dıyelım.

eğer kar al olursa

ma 2-8 kesişimine baz al bundada kar al ve stop koy

buda stop olursa ma1-10 kesişimine bak gibi gibi

yani 2 tane ınıkatorun kar al veya stop olma durumuna gore dıger ındıkatoru baz almaya baslayacak.

ancak ilk indikatorumuz tam tersi bir sınyal uretırse onu baz alacak.

demek istediğimi anladınız zor bir kod vakit bulundugunda yazılabılır mı ?


Değerli forumdaşlar, öncelikle ben teşekkür ederim sizlere, bu nezih / paylaşımcı ve seviyeli topic için. Birlikte birşeyler yapmaya çalışıyoruz. Hoş bir sada bırakabilirsek bakiyede, yeter.

Logic temelinde herşey 1 ve 0 dan ibarettir. İdeal kodlamasında bunu çokça kullanın lütfen. Mantığı basitleştirip, kodlamayı kolaylaştırır. Aşağıda bir deneme yaptım. Test edip sonuçlarını paylaşırsanız diğer kullanıcılar için faydalı olur kaaatindeyim.





//senaryo 1
var a_tp_y = 5f ; // alışta kaç puan karda "kar al"
var a_s_y = 3f ; // alışta kaç puan zararda stop
var s_tp_y = 5f ; //satışta kaç puan karda "kar al"
var s_s_y = 3f ; //satışta kaç puan zararda stop

// senaryo 2
var a_tp_y1 = 5f ; // alışta kaç puan karda "kar al"
var a_s_y1 = 3f ; // alışta kaç puan zararda stop
var s_tp_y1 = 5f ; //satışta kaç puan karda "kar al"
var s_s_y1 = 3f ; //satışta kaç puan zararda stop

var V = Sistem.GrafikVerileri ;

var C = Sistem.GrafikFiyatOku(V, "Kapanis" ) ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek" ) ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk" ) ;
var O = Sistem.GrafikFiyatOku(V, "Acilis" ) ;

// hareketli ortalamaları hesapla
var MA1 = Sistem.MA(C, "Exp", 4);
var MA2 = Sistem.MA(C, "Exp", 10);

var MA3 = Sistem.MA(C, "Exp", 6);
var MA4 = Sistem.MA(C, "Exp", 8);




var x1 = Sistem.Liste(0);
var x2 = Sistem.Liste(0);
for (int i = 1; i<V.Count; i++)
{
x1[i] = MA1[i] >= MA2[i] ? 1 : MA1[i] <= MA2[i] ? -1 : x1[i-1] ;
x2[i] = MA3[i] >= MA4[i] ? 1 : MA3[i] <= MA4[i] ? -1 : x2[i-1] ;
}




// STRATEJİ

var SonYon = "";
double Fiyat = 0;
for (int i = 1; i<V.Count; i++)
{

// senaryo 1

if ( x1[i] == 1 && x1[i-1] != 1 && SonYon != "A" ) // AL
{
Sistem.Yon[i] = "A"; // alış
SonYon = Sistem.Yon[i];
Fiyat = C[i];
}

else if ( x1[i] == -1 && x1[i-1] != -1 && SonYon != "S" ) // SAT

{
Sistem.Yon[i] = "S"; // satış
SonYon = Sistem.Yon[i];
Fiyat = C[i];

}

else if (SonYon == "A" && C[i] > ( Fiyat + a_tp_y ) ) // alışta kar realizasyonu
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
}


else if (SonYon == "A" && C[i] < ( Fiyat - a_s_y ) ) // alışta stop
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
}


else if (SonYon == "S" && C[i] < ( Fiyat - s_tp_y )) // satışta kar realizasyonu
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
}


else if (SonYon == "S" && C[i] > ( Fiyat + s_s_y ) ) // satışta stop
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
}





// senaryo 2

if ( x2[i] == 1 && x2[i-1] != 1 && SonYon == "F" ) // AL
{
Sistem.Yon[i] = "A"; // alış
SonYon = Sistem.Yon[i];
Fiyat = C[i];
}

else if ( x2[i] == -1 && x2[i-1] != -1 && SonYon == "F" ) // SAT

{
Sistem.Yon[i] = "S"; // satış
SonYon = Sistem.Yon[i];
Fiyat = C[i];

}

else if (SonYon == "A" && C[i] > ( Fiyat + a_tp_y1 ) ) // alışta kar realizasyonu
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
}


else if (SonYon == "A" && C[i] < ( Fiyat - a_s_y1 ) ) // alışta stop
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
}


else if (SonYon == "S" && C[i] < ( Fiyat - s_tp_y1 )) // satışta kar realizasyonu
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
}


else if (SonYon == "S" && C[i] > ( Fiyat + s_s_y1 ) ) // satışta stop
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
}




}


Teşekkürler Anonim abi :cool:

thebaboli
02-09-2015, 11:11
İyi bir yazılımcı olmamakla birlikte, faydalı olacağını düşündüğüm kodları/bilgileri/tecrübeleri paylaşmaya çalışıyorum. Çoğumuz için oldukça basit görünebilir, ama yine de bilmeyenler için faydalı olur.


// : Bu işareti koyup açıklama satırına istediğimiz şeyi(satırsonuna kadar) yazabiliriz. Bu satır, kod özelliği taşımaz (kodun çalışmasını etkilemez) .



/*
.....
.....
*/

Bu şekilde kullanım ise /*...*/ aralığı içindeki herşey açıklama olarak kabul eder. Bu aralık, kod özelliği taşımaz (kodun çalışmasını etkilemez) .

Bu özellikler, kodları esnek kullanmamızda, açıklamalar eklememizde oldukça iyidir.


....sistemlerden biri flat olduğunda flat yönünde poz alınması durumunu nasıl sağlayacağız? .....




// biri flatken diğerinin yönünde kalınması isteniyorsa

x1[i] = ( a1[i] == 1 && a2[i] == 1) ? 1 :
( a1[i] == 1 && a2[i] == 0) ? 1 :
( a1[i] == 1 && a2[i] == -1) ? 0 :

( a1[i] == 0 && a2[i] == 1) ? 1 :
( a1[i] == 0 && a2[i] == 0) ? 0 :
( a1[i] == 0 && a2[i] == -1) ? -1 :

( a1[i] == -1 && a2[i] == 1) ? 0 :
( a1[i] == -1 && a2[i] == 0) ? -1 :
( a1[i] == -1 && a2[i] == -1) ? -1 : x1[i-1] ;

// ikisi long ise long, ikisi şort ise şort, aksi durumda flat olunması için

/*

x1[i] = ( a1[i] == 1 && a2[i] == 1) ? 1 :
( a1[i] == 1 && a2[i] == 0) ? 0:
( a1[i] == 1 && a2[i] == -1) ? 0 :

( a1[i] == 0 && a2[i] == 1) ? 0 :
( a1[i] == 0 && a2[i] == 0) ? 0 :
( a1[i] == 0 && a2[i] == -1) ? 0 :

( a1[i] == -1 && a2[i] == 1) ? 0 :
( a1[i] == -1 && a2[i] == 0) ? 0 :
( a1[i] == -1 && a2[i] == -1) ? -1 : x1[i-1] ;
*/



Yukarıdaki kod parçasında, x1 lerden birincisi (sistemlerden biri flat olduğunda flat yönünde poz alınması durumu) aktif, ikincisi pasiftir. Çünkü ikinci x1 /*...*/ arasına alınmıştır. 2 nciyi serbest bırakır ( /* ve */ ları siler ) birinciyi /* */ arasına alırsanız tersi olur (ikisi long ise long, ikisi şort ise şort, aksi durumda flat olunması durumu) .




ve(&&)/veya(||) mantıksal operatörlerde girdi ve çıktılar.

http://i.hizliresim.com/QlzArA.jpg (http://hizliresim.com/QlzArA)

Teşekkürler Anonim abi :cool:

thebaboli
06-09-2015, 02:15
Getiri eğrisine yumuşatmalı MA

Bunu dene istersen daha saglıklı sonuçlar alabılırsın KOSA.

Getiri eğrisini MA ile yumuşattım sert hareketleri yavaşlattım.

Daha sonra bu yumusatılmış kar grafiğine MA koydum bu kesişime göre sistem flata geçiyor. TOma gibi % yi baz almadığı için kar grafiği henüz cok düşükkende sık sinyal üretimi sapıtmıyor.

the baboli kod kısmına bunuda koy lazım olur. (benim adım hıdır elimden gelen budur)

http://i.hizliresim.com/lypOAE.png


// verileri oku
var Periyot1 = Sistem.Periyot;
var Sembol1 = Sistem.Sembol ;
var V = Sistem.GrafikVerileriniOku(Sembol1 , Periyot1) ;
var C = Sistem.GrafikFiyatOku(V, "Kapanis") ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek") ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk") ;


// ma'ları hesapla
var MA1 = Sistem.MA(C, "Exp", 10);
var MA2 = Sistem.MA(C, "Exp", 378);


// belirlediğin stratejiye göre getiri eğirisini çizdir
var IslemMiktari1 = Sistem.Liste(V.Count, 0);
var Pozisyon1 = Sistem.Liste(V.Count, 0);
var KarZarar1 = Sistem.Liste(V.Count,0);


float SonPozisyon1 = 0;
float SonFiyat1 = 0 ;
float ToplamKarZarar1 = 0;


for (int i = 1; i < V.Count ; i++)
{

if ( MA1[i] >= MA2[i] &&
SonPozisyon1 <= 0 )
{
if (SonPozisyon1 == 0)
{
IslemMiktari1[i] = 1;
SonFiyat1 = V[i].Close;
SonPozisyon1 = SonPozisyon1 + IslemMiktari1[i];
ToplamKarZarar1 = ToplamKarZarar1 - SonFiyat1 * IslemMiktari1[i];
}
else if (SonPozisyon1 < 0)
{
IslemMiktari1[i] = 2;
SonFiyat1 = V[i].Close;
SonPozisyon1 = SonPozisyon1 + IslemMiktari1[i];
ToplamKarZarar1 = ToplamKarZarar1 - SonFiyat1 * IslemMiktari1[i];
}

}


else if ( MA1[i] < MA2[i] &&
SonPozisyon1 >= 0 )
{
if (SonPozisyon1 == 0)
{
IslemMiktari1[i] = -1;
SonFiyat1 = V[i].Close;
SonPozisyon1 = SonPozisyon1 + IslemMiktari1[i];
ToplamKarZarar1 = ToplamKarZarar1 - SonFiyat1 * IslemMiktari1[i];
}
else if (SonPozisyon1 > 0)
{
IslemMiktari1[i] = -2;
SonFiyat1 = V[i].Close;
SonPozisyon1 = SonPozisyon1 + IslemMiktari1[i];
ToplamKarZarar1 = ToplamKarZarar1 - SonFiyat1 * IslemMiktari1[i];
}

}
Pozisyon1[i] = SonPozisyon1;
KarZarar1[i] = ToplamKarZarar1 + V[i].Close * Pozisyon1[i];
}


var s = Sistem.MA(KarZarar1, "Simple", 500) ; // kar zarar eğrisini yumusatır.
var t = Sistem.MA(s, "Simple", 105) ; // kar zarar eğrisine çizilen ma




Sistem.Cizgiler[0].Deger = KarZarar1; //panel 3 Buna gerek yok karşılaştırmak için kullanabılırsın.
Sistem.Cizgiler[1].Deger = t; // panel 2
Sistem.Cizgiler[2].Deger = s; // panel 2




// getiri eğrisini de dikkate alan yeni stratejiyi uygula
var SonYon = "";

for (int i = 1; i<V.Count; i++)
{


if ( KarZarar1[i] >= t[i] && MA1[i] >= MA2[i] && SonYon != "A" ) // AL
{
Sistem.Yon[i] = "A"; // alış
SonYon = Sistem.Yon[i];

}


else if ( KarZarar1[i] >= t[i] && MA1[i] < MA2[i] && SonYon != "S" ) // SAT
{
Sistem.Yon[i] = "S"; // satış
SonYon = Sistem.Yon[i];

}


else if (SonYon == "A" && KarZarar1[i] < t[i] ) // flat
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
}

else if (SonYon == "S" && KarZarar1[i] < t[i] ) // flat
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
}



}


Sistem.GetiriHesapla("01.01.2006", 0.0000);
Sistem.Cizgiler[9].Deger = Sistem.GetiriKZ; //panel 3- 9 numara



Teşekkürler Erhan :cool:

thebaboli
06-09-2015, 02:17
İlgili topicde kodunu yazacağım birazdan. ( Renko based )


http://i.hizliresim.com/7bd87r.png (http://hizliresim.com/7bd87r)




İlaveten toma ekledim. Kutu boyları default 1000 ve 2000 puan . s,s1 ve tom çizgileri üzerinden çeşitli senaryolara göre sistem kurulabilir. ( > ise long, < ise şort, == ise flat vs vs ) . Hele birde tp/stop ilave edilirse, dadından yenirmi :) . Denemek lazım.






var V = Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V, "Kapanis" ) ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek" ) ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk" ) ;
var O = Sistem.GrafikFiyatOku(V, "Acilis" ) ;


var p = 1f;
var BrickSize = Sistem.Liste(V.Count, p) ;
var Brick1 = Sistem.Liste(V.Count, 0) ;
var Brick2 = Sistem.Liste(V.Count, 0) ;
var s = Sistem.Liste(V.Count, 0) ;


var p1 = 2f;
var BrickSize1 = Sistem.Liste(V.Count, p1) ;
var Brick11 = Sistem.Liste(V.Count, 0) ;
var Brick21 = Sistem.Liste(V.Count, 0) ;
var s1 = Sistem.Liste(V.Count, 0) ;


for (int i = 1; i < V.Count; i++)
{
Brick1[i] =
C[i] > ( Brick1[i-1] + BrickSize[i] ) ? Brick1[i-1] + BrickSize[i] :
C[i] < ( Brick1[i-1] - BrickSize[i] ) ? Brick1[i-1] - BrickSize[i] :
Brick1[i-1] ;

Brick2[i] = Brick1[i] != Brick1[i-1] ? Brick1[i-1] :
Brick2[i-1] ;
s[i] = Brick1[i] ;

Brick11[i] =
s[i] > ( Brick11[i-1] + BrickSize1[i] ) ? Brick11[i-1] + BrickSize1[i] :
s[i] < ( Brick11[i-1] - BrickSize1[i] ) ? Brick11[i-1] - BrickSize1[i] :
Brick11[i-1] ;

Brick21[i] = Brick11[i] != Brick11[i-1] ? Brick11[i-1] :
Brick21[i-1] ;
s1[i] = Brick11[i] ;


}


var tom = Sistem.TOMA(s1, 3, 2 ) ;



Sistem.Cizgiler[0].Deger = s ; // panel2
Sistem.Cizgiler[1].Deger = s1 ; // panel2
Sistem.Cizgiler[2].Deger = tom ; // panel2



Teşekkürler Anonim abi :cool:

thebaboli
06-09-2015, 02:17
fxsniper
(Sn Tiberius'un *.dll örneğinden derlenmiştir )

http://i.hizliresim.com/lyp72J.png (http://hizliresim.com/lyp72J)




var V = Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V, "Kapanis");


var sayi1 = 57 ;
var sayi2 = 16 ;


var mtm = Sistem.Liste(V.Count, 0) ;
var absmtm = Sistem.Liste(V.Count, 0) ;

for (int i = sayi2; i < V.Count; i++)
{
mtm[i] = C[i] - C[i-1];
absmtm[i] = Math.Abs(mtm[i]);
}


var var1 = Sistem.MA(mtm, "Exp", sayi1);
var var2 = Sistem.MA(var1, "Exp", sayi2);
var var2a = Sistem.MA(absmtm, "Exp", sayi1);
var var2b = Sistem.MA(var2a, "Exp", sayi2);

var list = Sistem.Liste(V.Count, 0) ;
var x1 = Sistem.Liste(V.Count, 0) ;

for (int i = sayi2; i < V.Count; i++)
{
list[i] = var2b[i] != 0 ? (500 * var2[i]) / (var2b[i]) : list[i-1] ;
x1[i] = list[i] > 0 ? 1 : list[i] < 0 ? -1 : x1[i-1] ;
}

// sistem
var SonYon = "";

for (int i = 1; i<V.Count; i++)
{


if ( x1[i] == 1 && SonYon != "A" ) // AL
{
Sistem.Yon[i] = "A";
SonYon = Sistem.Yon[i];

}



else if ( x1[i] == -1 && SonYon != "S" ) // SAT
{
Sistem.Yon[i] = "S";
SonYon = Sistem.Yon[i];

}



else if ( x1[i] == 0 && (SonYon == "A" || SonYon == "S") ) // FLAT
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];

}


}


Sistem.GetiriHesapla("31/12/2004", 0.01875);
var KarZarar = Sistem.GetiriKZ;



var KarZararAy = Sistem.Liste(0);
float KarZarar1 = 0;
int BarNo1 = 1;
float Fark = 0;
for (int i = 1; i < Sistem.BarSayisi; i++)
{

//if (V[i].Date.DayOfWeek == DayOfWeek.Monday && V[i-1].Date.DayOfWeek != DayOfWeek.Monday)
if (V[i].Date.Month != V[i-1].Date.Month)


{
Fark = KarZarar[i-1] - KarZarar1;
for (int j = BarNo1; j < i; j++)
KarZararAy[j] = Fark;
KarZarar1 = KarZarar[i-1];
BarNo1 = i;
}
if (i == Sistem.BarSayisi-1)
{
Fark = KarZarar[i] - KarZarar1;
for (int j = BarNo1; j < Sistem.BarSayisi; j++)
KarZararAy[j] = Fark;
}
}
var KarList = Sistem.Liste(0);
var ZararList = Sistem.Liste(0);
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if (KarZararAy[i] > 0)
KarList[i] = KarZararAy[i];
else if (KarZararAy[i] < 0)
ZararList[i] = KarZararAy[i];
}


Sistem.Cizgiler[0].Deger = KarZarar;
Sistem.Cizgiler[1].Deger = KarList;
Sistem.Cizgiler[2].Deger = ZararList;






Bir diğer fxsniper kodu

http://www.financnik.cz/forum/file.php?13,file=5913



http://i.hizliresim.com/QlNYWA.png (http://hizliresim.com/QlNYWA)







var V = Sistem.GrafikVerileri ;



var CCI_Period = 14;
var T3_Period = 5;
var b = 0.618f;


var cci = Sistem.CommodityChannelIndex(V, CCI_Period ) ;


var b2 = b*b;
var b3 = b2*b;
var c1 = -b3;
var c2 = (3*(b2 + b3));
var c3 = -3*(2*b2 + b + b3);
var c4 = (1 + 3*b + b3 + 3*b2);


var n = 1 + 0.5f*(T3_Period - 1);
var w1 = 2 / (n+ 1);
var w2 = 1 - w1;


var cci1 = Sistem.Liste(0) ;
var cciHup= Sistem.Liste(0) ;
var cciHdn= Sistem.Liste(0) ;
var e1 = Sistem.Liste(0) ;
var e2 = Sistem.Liste(0) ;
var e3 = Sistem.Liste(0) ;
var e4 = Sistem.Liste(0) ;
var e5 = Sistem.Liste(0) ;
var e6 = Sistem.Liste(0) ;


for (int i = 1; i < V.Count; i++)
{



e1[i] = w1*cci[i] + w2*e1[i-1];
e2[i] = w1*e1[i] + w2*e2[i-1];
e3[i] = w1*e2[i] + w2*e3[i-1];
e4[i] = w1*e3[i] + w2*e4[i-1];
e5[i] = w1*e4[i] + w2*e5[i-1];
e6[i] = w1*e5[i] + w2*e6[i-1];
cci1[i] = c1*e6[i] + c2*e5[i] + c3*e4[i] + c4*e3[i] ;

cciHup[i] = cci1[i] >= 0 ? cci1[i] : 0;
cciHdn[i] = cci1[i] < 0 ? cci1[i] : 0;
}



Sistem.Cizgiler[0].Deger = cciHup; // panel2
Sistem.Cizgiler[1].Deger = cciHdn; // panel2









Teşekkürler Anonim abi :cool:

stradivarius
07-09-2015, 01:28
ARADA unutulmus sanirim. ben ekleyeyim.



Farklı periyotlardaki sistemlerden tek sistem oluşturma

örnekte, 5 dk ve 1 dk sistem kullanılmıştır



var V = Sistem.GrafikVerileri ;

var ad1 = "sys1" ;
var sembol1 = "VIP'VIP-X030";
var periyot1 = "1" ;
var V1 = Sistem.GrafikVerileriniOku(sembol1, periyot1);

var ad2 = "sys5" ;
var sembol2 = "VIP'VIP-X030";
var periyot2 = "5" ;
var V2 = Sistem.GrafikVerileriniOku(sembol2, periyot2);



var a21 = Sistem.SistemGetir(ad2, sembol2, periyot2) ;
var a22= Sistem.Liste(V2.Count, 0) ;
var a23= Sistem.Liste(V2.Count, 0) ;
for (int i = 1 ; i < V2.Count; i++)
{
a22[i] = a21.Yon[i] == "A" ? 1 : a21.Yon[i] == "S" ? -1 : a21.Yon[i] == "F" ? 0: a22[i-1] ;
a23[i] = a22[i-1] ; // repaint yapmaması için önceki bar mevcut bara çekildi
}
var a2 = Sistem.DonemCevir(V1, V2, a23 ) ;



var a11 = Sistem.SistemGetir(ad1, sembol1, periyot1) ;
var a1= Sistem.Liste(V1.Count, 0) ;
var a0= Sistem.Liste(V1.Count, 0) ;
var x1= Sistem.Liste(V1.Count, 0) ;

for (int i = 1 ; i < V1.Count; i++)
{
a1[i] = a11.Yon[i] == "A" ? 1 : a11.Yon[i] == "S" ? -1 : a11.Yon[i] == "F" ? 0: a1[i-1] ;

// biri flatken diğerinin yönünde kalınması isteniyorsa

x1[i] = ( a1[i] == 1 && a2[i] == 1) ? 1 :
( a1[i] == 1 && a2[i] == 0) ? 1 :
( a1[i] == 1 && a2[i] == -1) ? 0 :

( a1[i] == 0 && a2[i] == 1) ? 1 :
( a1[i] == 0 && a2[i] == 0) ? 0 :
( a1[i] == 0 && a2[i] == -1) ? -1 :

( a1[i] == -1 && a2[i] == 1) ? 0 :
( a1[i] == -1 && a2[i] == 0) ? -1 :
( a1[i] == -1 && a2[i] == -1) ? -1 : x1[i-1] ;

// ikisi long ise long, ikisi şort ise şort, aksi durumda flat olunması için

/*

x1[i] = ( a1[i] == 1 && a2[i] == 1) ? 1 :
( a1[i] == 1 && a2[i] == 0) ? 0:
( a1[i] == 1 && a2[i] == -1) ? 0 :

( a1[i] == 0 && a2[i] == 1) ? 0 :
( a1[i] == 0 && a2[i] == 0) ? 0 :
( a1[i] == 0 && a2[i] == -1) ? 0 :

( a1[i] == -1 && a2[i] == 1) ? 0 :
( a1[i] == -1 && a2[i] == 0) ? 0 :
( a1[i] == -1 && a2[i] == -1) ? -1 : x1[i-1] ;
*/




}



var SonYon = "";

for (int i = 1; i<Sistem.BarSayisi; i++)
{


if ( x1[i] == 1 && SonYon != "A" ) // AL
{
Sistem.Yon[i] = "A";
SonYon = Sistem.Yon[i];

}



else if ( x1[i] == -1 && SonYon != "S" ) // SAT
{
Sistem.Yon[i] = "S";
SonYon = Sistem.Yon[i];

}



else if ( x1[i] == 0 && (SonYon == "A" || SonYon == "S") ) // FLAT
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];

}


}

Sistem.GetiriHesapla("31/12/2003", 0.01875); // işlem başına 37.5 puan kayma
var KarZarar = Sistem.GetiriKZ;



var KarZararAy = Sistem.Liste(0);
float KarZarar1 = 0;
int BarNo1 = 1;
float Fark = 0;
for (int i = 1; i < Sistem.BarSayisi; i++)
{
// if (V[i].Date.DayOfWeek == DayOfWeek.Monday && V[i-1].Date.DayOfWeek != DayOfWeek.Monday)
if (V[i].Date.Month != V[i-1].Date.Month)
//if (V[i].Date.Year != V[i-1].Date.Year )
{
Fark = KarZarar[i-1] - KarZarar1;
for (int j = BarNo1; j < i; j++)
KarZararAy[j] = Fark;
KarZarar1 = KarZarar[i-1];
BarNo1 = i;
}
if (i == Sistem.BarSayisi-1)
{
Fark = KarZarar[i] - KarZarar1;
for (int j = BarNo1; j < Sistem.BarSayisi; j++)
KarZararAy[j] = Fark;
}
}
var KarList = Sistem.Liste(0);
var ZararList = Sistem.Liste(0);
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if (KarZararAy[i] > 0)
KarList[i] = KarZararAy[i];
else if (KarZararAy[i] < 0)
ZararList[i] = KarZararAy[i];
}


Sistem.Cizgiler[0].Deger = KarZarar; // panel 2
Sistem.Cizgiler[1].Deger = KarList; // panel3
Sistem.Cizgiler[2].Deger = ZararList; // panel3

thebaboli
07-09-2015, 14:52
Emeği geçenlere teşekkürler :cool:


ARKADAŞLAR NİHAYET BİTTİ.

dün baya bir kurcalamıştım bugunde baktım biraz yani farklı sonucları test etmeye calıstım sizlerde tecrübelerinizi aktarırsınız.
Tecrübeler:

K/Z EĞRİSİ AŞAĞI KESTİĞİNDE FLATA GEÇEN SİSTEMLER:

1- İlk denemelerim bu yöndeydi. Bu yontem max dd riskinide %10 %20 civarında düşürüyor Ancak muhtemel trend hareketinide geç algılıyor totelde karda iyileşme iyi bir kombinansyonla %10 iken çoğu zaman %0 etkisi var hatta bazan -%10 -%20 civarında getiride düşüşlerede yol açıyor.

2-Stock haliyle k/z egrisine göre flata geçen sistemlerin 8 yıllık kar grafiklerini incelediğimde stok haldeki sistemle eşit başlayan kar zarar eğrisi bir süre sonra stock haldeki ana parametremiz diğerini geçiyor ciddi bir kar elde ediyor bir sure sonra ciddi bir max dd süreci yaşıyor Bu süre zarfında ise k/z eğrisine bakan sistem flatta kalıyor. Bir süre sonrada iki sistemin karları eşit seviyeye iniyor. Yani stok haldeki sistem yüksek riskle çalışıyor. yüksek kar potansıyelıde sunuyor ancak ne zman yuksek kar etse ciddi bir zarar başlıyor. İkisi eşit seviyeye geliyor.

3-Bir süre daha ilerledikten sonra yine stok haldeki sistem farkı açmaya başlıyor ciddi bir fark atıyor 20 000 puan gibi. aradan 1-2 sene geçiyor stok haldeki sistem zarar ürettiğinde k/z egrisi bakan sistem sadece flat kalabildiği için mevcut karını koruyabiliyor. stok haldeki puan kaybetsede hala üst seviyelerde oluyor. Böyle ilerleyip gidiyor.

4-Burada stok haldeki sistemi geçememesinin sebebi şu; kar ederken ikiside aynı karı ediyor fakat zarar ederken biri tum zararı komple alırken diğer zararın bir kısmını alıyor. Hal böyle olunca k/z eğrisine bakan sistem ne yaparsa yapsın stok haldeki sistemi geçebilmesi için yeterli matematiğe avantaja sahip değil. ANCAK stok haldeki sistemin cok ciddi max dd ve cok sık max dd yer ise ozman k/z egrisine bakan sistem avantaj saglayabiliyor.

5-Çok iyi bir kombinansyonla kullanılabilir. Sık sık max dd yiyen sistemlerde de avantaj yaratabilir.

K/Z EĞRİSİ AŞAĞI KIRILDIGINDA MEVCUT PARAMETREYİ TERS İŞLETEN SİSTEMLER

1-Burada ise adeta bir yarış var gibi. İki kar zarar grafiği birbiri ile sürekli çatışma halinde, yarışa aynı çizgiden başlıyorlar. bir süre sonra stok haldeki sistem k/z eğrisine bakan sistemi geçiyor. Daha sonra max dd süreci yaşıyor bu sırada tam tersine k/z eğrisine bakan sistem ciddi bir atağa kalkıyor stok haldeki sistemin k/z eğrisini geçiyor.

2-Burada en büyük sıkıntılardan bir tanesi k/z eğrisine bakarak ters işlem yapan sistemde max dd riskiyle karşı karşıya kalıyor. stok haldeki sistem max dd süreci bittikten sonraki ilk yukarı hareketine katılamıyor ona katılamadığı için o sırada ciddi puan kayıpları yaşıyor kısa süreliğinede olsa.

3-İki sisteminde kar zarar grafikleri 3 5 sene sonra tekrar aynı seviyeye birbirine hizalı şekle geliyor.

4-Test sonunda iyi bir kombinansyon yaratılırsa k/z eğrisine bakan sistem %10 civarında getiri farkı atabiliyor. Kötü bir kombinansyonda ise -%10 kayıpla bitiriyor.

5-Buradaki önemli hususlardan bir taneside yine stok haldeki sistem sık sık max dd süreci yaşıyorsa k/z eğrisine bakarak ters işleme giren sistem çok avantajlı duruma düşebilir. Ancak cok sık max dd yaşanmıyor ise k/z eğrisine göre ters işlem yapan sistem ile stok sistem arasında hissedilebilir pek fark yok. max dd ye katkısı %5 civarında

K/Z EĞRİSİ AŞAĞI KIRILDIGINDA İKİNCİ TREND FOLLOW PARAMETREYE BAKAN SİSTEMLER

1-Bu testte ise k/z eğrisine bakan sistemin ciddi bir üstünlüğü söz konusu elbetteki bu üstünlüğü yaratırken bazı dezavantajlar da var işin için de.

2-Testlere göre k/z eğrisine bakan sistemle eşit başlıyor bir süre sonra piyasa sıkışıyor. Bu sure zarfında stok sistem zarar üretirken k/z eğrisine bakıp yeni frekansı kullanan sistem ya kar ediyor yada yataya sarıyor. Ancak kayıpları önlüyor.

3-Ayrıca burada ikinci bir avantajıda Flat kalan veyahutta ters işlem açan sistemler gibi mevcut trend'e geç girme eğilimi neredeyse yok. Cunku k/z eğrisi aşağı kesmiş olsa bile 2. frekans parametresi hala trendlere baktığı için mevcut trendlere terste veya flatta girme durumu söz konusu dahi olmuyor.

4-Burada dezavantajlardan bir tanesi şu hem stok sistem hemde 2. frekansta kalan sistem parametresi cok nadiren görülsede aynı yerde yatay veyahutta zarar üretebiliyorlar.

5-Örnek verecek olursak ornegın ana parametre sıkıştı ve zarar üretmeye başladı hemen 2. frekans devreye girdi daha kısa vadeli olan trendlere bakarak kar üretmeye calısıyor.

ANcak piyasa öyle sıkışık ki. 2.frekansa bakan cok küçük trendlerı giren sistemin dahi kar üretemeyeceği kadar sıkışık piyasa. işte bu durumda malesef 2 sistemde birşey üretemiyor. Hal böyle olunca ya yataya sarıyor yada 2. frenaksın zararlı işlemleri sonucu k/z grafiği aşağı gidiyor bunun en bariz örnegı eylül ayının hareketi.

Ana parametre zaten orta uzun vadeye baktıgı için onun kar etmesi zaten imkansız 2. frekans olan kısa vadeye bakan sistem devreye giriyor. Ancak 2. frekansın kar edebilmesi için gerekli olan yukarı aşağı hareket yine olmayınca 2. frekansın actıgı işlemlerde fayda etmiyor.

6-Dezavantajı ise işlem sayısını arttırması.

7-Ana parametreniz uzun trendlere 2. frekans kısa parametrelere bakacak sekılde tasarlanırsa fayda düzeyi çok yüksek ancak ana parametre kısa vadeli ike 2. frekansı uzun vadeli yaptıgınızda max dd ye fayda düzeyi yüksek olsada getiriye fayda saglamıyor. Bu sebeple benim tavsiyem ana parametre uzun trendlere bakmalı.

yinede tüm onerılere ragmen siz aklınıza gelen her turlu parametreyle durumu test edin derim. benım cıkarımlarım 1 2 denemeden ibaret dolayısyıla kesin sonuçları yoktur. Bir kanaat veya istatistik vermez.


ÖNERİLER:

1-BENCE HER YAPILAN SİSTEMİN İÇİNDE K/Z EĞRİSİNE BAKIP YENİ BİR FREKANSA BAKAN BİR STRATEJİ OLMALI HER KLASIK SİSTEM EN AZ 10 000 LIK OLACAK DEDİK. EN AZINDAN 2. FREKANSA BAKARAK BU DURUMUN SIKLIĞINI AZALTABİLİRSİNİZ. HATTA NEREDEYSE KESİN AZALTIRSINIZ.

2-ANCAK 2.FREKANSA BAKSA BİLE SİSTEMİNİZ HER 2 FREKANSINDA ZARAR ÜRETEBİLDİĞİ AŞIRI SIKIŞIK PİYASA HAREKETLERİ YİNE GÖRÜLMEKTE. BU DURUM İÇİN BENİM ÖNERİM 3. BİR FILITRE YANİ 2. FREKANSA BAKTIKTAN SONRA ELDE EDİLEN KAR GRAFİĞİNE BİR 3. FİLİTRE UYGULANARAK YA YENİ BİR PARAMETRE YAZILACAK YADA FLATA GEÇECEK BİR KODLAMA İLE ANA PARAMETRE ZARAR ÜRETTİĞİNDE 2. FREKANS 2. FREKANSTA KAR ÜRETMEZ VEYA ZARAR ÜRETİRSE FLATA GEÇ VEYA 3. FREKANSA GEÇ ŞEKLİNDE GİRİLMELİ. HENUZ BU KONUMA GELEMEDIK HERHALDE 3. FREKANS BENİ AŞAR. BU DURUMUN CİDDİ ANLAMDA SAGLIKLI KAR GRAFİKLERİ ELDE EDECEĞİMİZİ DÜŞÜNÜYORUM.

3-Tüm bu kombinansyonları denerken işlem sayısını göz ardı etmeyın malum malıyetler peşimizi burakmıyor. k/z eğrisine bakarak frekans değişikliğinin pozitif yönleri çok ancak işlem sayısıyla bunu iyi orantılayıp en saglıklı işlem sayısını optimize etmelisiniz.

4-overfit olma ihtimali yüksek olan bir sistemde özelikle kullanılabilir eğer sistem overfit ise zarar eder zararlı duruma geçtiğinde otoamtık olarak 2. frekans ciddi zarar eğiiminden kurtarır sizi.


KOD HAKKINDA BİLGİ:

ONCELIKLE SAYIN ANONIME TEŞEKKÜRLER CUNKU ONUN PAYLASTIGI KOD UZERINDEN DERLEME YAPARAK ELDE ETTİM.

BEN ÖRNEK OLMASI AÇISINDAN PARABOLICLE YAPTIM

MUMKUN OLDUGUNCA ESKİ VERİLERLE KULLANMALISINIZ CUNKU K/Z EĞRİSİ 0 İKEN VEYA NEGATİF İKEN TOMA STOP ÇİZGİSİ ÇEKEMİYOR. ORTAYA SAÇMA SAPAN BİR HAREKET ÇIKIYOR. BU YUZDEN ANA PARAMETRENİZ KAR ÜRETİYOR OLMALI EN AZINDAN İLK BAŞTA YOKSA TOMA DÜZGÜN İŞLEMİYOR.

TOMA YERİNE MA VB BAŞKA İNDİKATORLERDE KULLANILABILIR ANCAK BEN TOMAYI DAHA SAGLIKLI BULUYORUM. ma koydugunuzda sık sık kesişimler olabılıyor.

istedğiniz indikatorle istediğiniz toma stop seviyesiyle değişiklikler yaprak farklı kombınansyonları deneyın. Tek dikkat etmeniz gereken yer işlem sayınız cunku bir çok denemede ben işlem sayımı arttırdım. iyileşmenin saglanabılmesı için genellıkle işlem sayının arttıgını anladım

örnek kod ve resmi:

http://i.hizliresim.com/mzZ4k4.png


sinan hocam diğer tarafa alıntılarsın.


/*
* Created by Erhan Açıkgöz - Anonim .
* User: erhanacikgoz1
* Date: 06.09.2015
* Time: 17:00
*
* hisse.net anonimede katkılarından dolayı ayrıca teşekkürler.
*/


// verileri oku
var Periyot1 = Sistem.Periyot;
var Sembol1 = Sistem.Sembol ;
var V = Sistem.GrafikVerileriniOku(Sembol1 , Periyot1) ;
var C = Sistem.GrafikFiyatOku(V, "Kapanis") ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek") ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk") ;


// ANA SİSTEM PARAMETRENİZ (BEN VERİLER İLE KESİŞEN BİR İNDİKATOR VERDİM SİZE)
var MA1 = Sistem.Parabolic(0.005, 0.001);// SADECE VERİYE BAKAN İNDİKATOR DE C > VEYA C < MA1 SEKLINDE KULLANIN 2 PARAMETRE KESISIMINDE MA1 > MA2 GİBİ KULLANIN

// K/Z EĞRİSİ AŞAĞI KIRILDIGINDA KULLANILACAK PARAMETRENİZ. İSTERSENİZ 2 FARKLI MA YI KULLANIN
var MA2 = Sistem.Parabolic(0.022, 0.0090); // İSTERSENİZ TEK MA3 Ü MA1 VEYA MA2 İLE KESİŞTİRİN. VEYA BAMBASKA BİR İNDİKATOR



// belirlediğin stratejiye göre getiri eğirisini çizdir
var IslemMiktari1 = Sistem.Liste(V.Count, 0);
var Pozisyon1 = Sistem.Liste(V.Count, 0);
var KarZarar1 = Sistem.Liste(V.Count,0);


float SonPozisyon1 = 0;
float SonFiyat1 = 0 ;
float ToplamKarZarar1 = 0;


for (int i = 1; i < V.Count ; i++)
{

if ( MA1[i] < C[i] &&
SonPozisyon1 <= 0 )
{
if (SonPozisyon1 == 0)
{
IslemMiktari1[i] = 1;
SonFiyat1 = V[i].Close;
SonPozisyon1 = SonPozisyon1 + IslemMiktari1[i];
ToplamKarZarar1 = ToplamKarZarar1 - SonFiyat1 * IslemMiktari1[i];
}
else if (SonPozisyon1 < 0)
{
IslemMiktari1[i] = 2;
SonFiyat1 = V[i].Close;
SonPozisyon1 = SonPozisyon1 + IslemMiktari1[i];
ToplamKarZarar1 = ToplamKarZarar1 - SonFiyat1 * IslemMiktari1[i];
}

}


else if ( MA1[i] > C[i] &&
SonPozisyon1 >= 0 )
{
if (SonPozisyon1 == 0)
{
IslemMiktari1[i] = -1;
SonFiyat1 = V[i].Close;
SonPozisyon1 = SonPozisyon1 + IslemMiktari1[i];
ToplamKarZarar1 = ToplamKarZarar1 - SonFiyat1 * IslemMiktari1[i];
}
else if (SonPozisyon1 > 0)
{
IslemMiktari1[i] = -2;
SonFiyat1 = V[i].Close;
SonPozisyon1 = SonPozisyon1 + IslemMiktari1[i];
ToplamKarZarar1 = ToplamKarZarar1 - SonFiyat1 * IslemMiktari1[i];
}

}
Pozisyon1[i] = SonPozisyon1;
KarZarar1[i] = ToplamKarZarar1 + V[i].Close * Pozisyon1[i];
}


var t = Sistem.TOMA(KarZarar1, 2, 2) ; // K/Z EĞRİSİNE ÇİZİLEN TOMA PARAMETRESİ




Sistem.Cizgiler[0].Deger = KarZarar1; //panel 2 ANA SİSTEMİNİZİN K/Z EĞRİSİ 0 nolu acıklama
Sistem.Cizgiler[1].Deger = t; // panel 2 K/Z EĞRİSİ İÇİNE GİRECEK TOMANIN EĞRİSİ 1 nolu acıklama





// GETİRİ EĞRİSİNİ DİKKATE ALARAK FREKANS DEĞİŞİKLİĞİ YAP (getiri eğrisi t değişkeninden küçükse/büyükse neye bakacak buraya gireceksiniz)
var SonYon = "";

for (int i = 1; i<V.Count; i++)
{


if ( KarZarar1[i] >= t[i] && MA1[i] < C[i] && SonYon != "A" ) // AL
{
Sistem.Yon[i] = "A"; // alış
SonYon = Sistem.Yon[i];

}


else if ( KarZarar1[i] >= t[i] && MA1[i] > C[i] && SonYon != "S" ) // SAT
{
Sistem.Yon[i] = "S"; // satış
SonYon = Sistem.Yon[i];

}


else if (KarZarar1[i] <= t[i] && MA2[i] < C[i] && SonYon != "A" ) // AL
{
Sistem.Yon[i] = "A";
SonYon = Sistem.Yon[i];
}

else if (KarZarar1[i] <= t[i] && MA2[i] > C[i] && SonYon != "S" ) // SAT
{
Sistem.Yon[i] = "S";
SonYon = Sistem.Yon[i];
}



}


Sistem.GetiriHesapla("01.01.2006", 0.0000);
Sistem.Cizgiler[9].Deger = Sistem.GetiriKZ; //panel 3- 9 numara gerçek k/z

thebaboli
09-09-2015, 11:57
Özelden gelen, ana sistem ve alt sistem kodlarına ilişkin yardım talepleri için, genel bir kod yazdım. Burdan türeterek farklı senaryolarınızı ( 3n cü , 4 ncü alt sistemler de dahil) uygulayabilirsiniz. Dönemcevir ile de, farklı periyotları kullanabilirsiniz.

sys1 = ana sisteminiz (long, şort, flat sonuçları var)
sys2 = alt sisteminiz (long, şort, flat sonuçları var)

strateji = sys1'in getiri eğrisine uygulanan tomaya göre; getirieğrisisys1 > toma ise ana sistem devrede, getirieğrisisys1 < toma ise alt sistem devrede,





var ad1 = "sys1" ;
var sembol1 = "VIP'VIP-X030";
var periyot1 = "30" ;
var V1 = Sistem.GrafikVerileriniOku(sembol1, periyot1);
var a11 = Sistem.SistemGetir(ad1, sembol1, periyot1) ;
var a1= Sistem.Liste(V1.Count, 0) ;
var a1y= Sistem.Liste(V1.Count, 0) ;

for (int i = 1 ; i < V1.Count; i++)
{
a1[i] = a11.Cizgiler[0].Deger[i] ;
a1y[i] = a11.Yon[i] == "A" ? 1 : a11.Yon[i] == "S" ? -1 : a11.Yon[i] == "F" ? 0: a1y[i-1] ;
}

var toma =Sistem.TOMA(a1, 3, 2) ;

var ad2 = "sys2" ;
var sembol2 = "VIP'VIP-X030";
var periyot2 = "30" ;
var V2 = Sistem.GrafikVerileriniOku(sembol2, periyot2);
var a21 = Sistem.SistemGetir(ad2, sembol2, periyot2) ;
var a2y= Sistem.Liste(V2.Count, 0) ;
for (int i = 1 ; i < V2.Count; i++)
a2y[i] = a21.Yon[i] == "A" ? 1 : a21.Yon[i] == "S" ? -1 : a21.Yon[i] == "F" ? 0: a2y[i-1] ;


var x1 = Sistem.Liste(0);

for (int i = 1 ; i < V1.Count; i++)
{

x1[i] =
a1[i] > toma[i] && a1y[i] == 1 ? 1 :
a1[i] > toma[i] && a1y[i] == -1 ? -1 :
a1[i] > toma[i] && a1y[i] == 0 ? 0 :

a1[i] < toma[i] && a2y[i] == 1 ? 1 :
a1[i] < toma[i] && a2y[i] == -1 ? -1 :
a1[i] < toma[i] && a2y[i] == 0 ? 0 :
x1[i-1] ;


}



// sistem
var SonYon = "";

for (int i = 1; i<V1.Count; i++)
{


if ( x1[i] == 1 && SonYon != "A" ) // AL
{
Sistem.Yon[i] = "A";
SonYon = Sistem.Yon[i];

}



else if ( x1[i] == -1 && SonYon != "S" ) // SAT
{
Sistem.Yon[i] = "S";
SonYon = Sistem.Yon[i];

}



else if ( x1[i] == 0 && (SonYon == "A" || SonYon == "S") ) // FLAT
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];

}


}


Sistem.GetiriHesapla("31/12/2004", 0 );
var KarZarar = Sistem.GetiriKZ;


Sistem.Cizgiler[0].Deger = a1; // ana sistem getiri eğrisi
Sistem.Cizgiler[1].Deger = toma;
Sistem.Cizgiler[2].Deger = KarZarar; // bileşke sistem getiri eğrisi





Teşekkürler Anonim abi :cool:

thebaboli
15-09-2015, 15:31
pc adını kullanmak isteyenler için




string pc_name= System.Environment.MachineName;
Sistem.Debug(pc_name.ToString()) ;




Aşağıdaki kodu, sisteminizin/robotunuzun başına eklerseniz hem lisans hem de pc adı kontrolü yapar, herhangi biri doğru değilse çalışmaz.




if ( Sistem.LisansKontrol("ideal_kullanıcı_adınız") == false || Environment.MachineName != "bilgisayarınızın_adı" )
{
return Sistem ;
}



Teşekkürler Anonim abi :cool:

thebaboli
17-09-2015, 16:05
Merhabalar

FxSniper ve TomaPUAN isimli iki yeni indikatör eklenmiştir.
Ayrıca bu iki yeni indikatörü Sistem modülünde de aşağıda gösterilen fonksiyonlarla kullanabilirsiniz.

Yeni versiyonu www.directfn.com.tr/terminal/ideal.exe adresinden indirebilirsiniz.

Saygılarımızla

http://i.hizliresim.com/EqkrYg.png (http://hizliresim.com/EqkrYg)

http://i.hizliresim.com/QlmvAj.png (http://hizliresim.com/QlmvAj)


Bu arada, forumdan bir kullanıcımızın talebi vardı.
Parabolic indikatörü için sadece BAR formatında veri okutulabiliyordu. (Bu indikatör H ve L değerlerini kullandığı için)
Parabolic için, LİSTE okutabilmeye olana veren fonksiyon da eklendi.

Kullanım şekli: Sistem.Parabolic(Liste, 0.02, 0.2)

Yeni versiyon aynı adreste güncellenmiştir.

Teşekkürler Sezai bey :cool:


Erhan

gece gece sistem yazdırdın bana

:he:
ben yazana kadar ideal versiyon bile değiştirmiş :notr:


var Bar = Sistem.GrafikVerileri; // tüm bar varilerini içeren listeyi Bar değişkenine ata
var BarSayisi = Sistem.BarSayisi; // grafikteki bar sayısını değişkene aktar
var bb = 20; //Sistem.Parametreler[0]; // parametre kısmından kullanılacak değeri gir
// hazır sistem hesaplama fonksiyonları liste olarak değer döndürür
var hhv = Sistem.Ref(Sistem.HHV(bb, "Yuksek"),-1);
var llv = Sistem.Ref(Sistem.LLV(bb, "Dusuk"),-1);
var Veriler = Sistem.GrafikVerileriniOku(Sistem.Sembol,Sistem.Pe riyot);
var C = Sistem.GrafikFiyatOku(Veriler,"Kapanis");
var MA = Sistem.MA(C, "Simple", 1 ) ;

float fark = 2;
var xa = Sistem.Liste(0) ;
string SonYon = "";




for (int i = 20 ; i < BarSayisi ; i++)
{

if (MA[i] > hhv[i]) { SonYon = "A"; Sistem.Yon[i] = "A"; }
if (MA[i] < llv[i]) { SonYon = "S"; Sistem.Yon[i] = "S"; xa[i] = C[i] + fark;}

if (SonYon =="A" ) xa[i] = hhv[i] - fark;
if (SonYon =="S" ) xa[i] = llv[i] + fark;


}
// hesaplanan verileri çizgilere aktar ve açıklama ekle
Sistem.Cizgiler[0].Deger = xa;
Sistem.Cizgiler[0].Aciklama = "HHV-LLV ";

http://badgs.webege.com/20150917001051.png

Teşekkürler Bearbull abi :cool:

thebaboli
19-09-2015, 22:04
tp/stop puanlarını mevcut sisteme uygulamak

sys1 isimli 20 dk periyotlu sistem örneklenmiştir.




var a_tp_y = 5 ; // o1
var a_s_y = 2 ; //o2
var s_tp_y = 4 ; //o3
var s_s_y = 3 ; //o4




var ad = "sys1" ;
var sembol = "VIP'VIP-X030";
var periyot = "20" ;
var V = Sistem.GrafikVerileriniOku(sembol, periyot);
var C = Sistem.GrafikFiyatOku(V, "Kapanis" ) ;


var a01 = Sistem.SistemGetir(ad, sembol, periyot ) ;
var x1= Sistem.Liste(V.Count, 0) ;
for (int i = 1 ; i < V.Count; i++)
x1[i] = a01.Yon[i] == "A" ? 1 : a01.Yon[i] == "S" ? -1 : a01.Yon[i] == "F" ? 0: x1[i-1] ;




// sistem
var SonYon = "";
double Fiyat = 0;
for (int i = 1; i<V.Count; i++)
{

if ( x1[i] == 1 && x1[i-1] != 1 && SonYon != "A" ) // AL
{
Sistem.Yon[i] = "A"; // alış
SonYon = Sistem.Yon[i];
Fiyat = C[i];
}

else if ( x1[i] == -1 && x1[i-1] != -1 && SonYon != "S" ) // SAT

{
Sistem.Yon[i] = "S"; // satış
SonYon = Sistem.Yon[i];
Fiyat = C[i];

}

else if (SonYon == "A" && C[i] > ( Fiyat + a_tp_y ) ) // alışta kar realizasyonu
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
}


else if (SonYon == "A" && C[i] < ( Fiyat - a_s_y ) ) // alışta stop
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
}


else if (SonYon == "S" && C[i] < ( Fiyat - s_tp_y )) // satışta kar realizasyonu
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
}


else if (SonYon == "S" && C[i] > ( Fiyat + s_s_y ) ) // satışta stop
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
}


}


Sistem.GetiriHesapla("31/12/2004", 0.01875);
var KarZarar = Sistem.GetiriKZ;



var KarZararAy = Sistem.Liste(0);
float KarZarar1 = 0;
int BarNo1 = 1;
float Fark = 0;
for (int i = 1; i < Sistem.BarSayisi; i++)
{

//if (V[i].Date.DayOfWeek == DayOfWeek.Monday && V[i-1].Date.DayOfWeek != DayOfWeek.Monday)
if (V[i].Date.Month != V[i-1].Date.Month)


{
Fark = KarZarar[i-1] - KarZarar1;
for (int j = BarNo1; j < i; j++)
KarZararAy[j] = Fark;
KarZarar1 = KarZarar[i-1];
BarNo1 = i;
}
if (i == Sistem.BarSayisi-1)
{
Fark = KarZarar[i] - KarZarar1;
for (int j = BarNo1; j < Sistem.BarSayisi; j++)
KarZararAy[j] = Fark;
}
}
var KarList = Sistem.Liste(0);
var ZararList = Sistem.Liste(0);
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if (KarZararAy[i] > 0)
KarList[i] = KarZararAy[i];
else if (KarZararAy[i] < 0)
ZararList[i] = KarZararAy[i];
}


Sistem.Cizgiler[0].Deger = KarZarar; // panel 2 - düz
Sistem.Cizgiler[1].Deger = KarList; // panel 3 - dikey
Sistem.Cizgiler[2].Deger = ZararList; // panel 3 - dikey






Teşekkürler Anonim abi :cool:


sizin OPT sistem üzerinden ufak değişiklikler yapalım bakalım olacak mı?


-*-*-*-**-*-*-*-*-*-*-*-*-*-**--*-*--*-*-*-*--*-*-*-*-*--

Mevcut sisteme kar al/ stop (% bazlı) optimizasyon kodu

( sys1 isimli 20 dk periyotlu sistem örneklenmiştir )







var ad = "sys1" ;
var sembol = "VIP'VIP-X030";
var periyot = "20" ;
var V = Sistem.GrafikVerileriniOku(sembol, periyot);
var C = Sistem.GrafikFiyatOku(V, "Kapanis" ) ;

var a01 = Sistem.SistemGetir(ad, sembol, periyot ) ;
var x1= Sistem.Liste(V.Count, 0) ;
for (int i = 1 ; i < V.Count; i++)
x1[i] = a01.Yon[i] == "A" ? 1 : a01.Yon[i] == "S" ? -1 : a01.Yon[i] == "F" ? 0: x1[i-1] ;



for (var o1 = 0.25f ; o1 < 15f; o1 +=0.25f )
{

for (var o2 = 0.25f ; o2 < 5f; o2 +=0.25f )
{

for (var o3 = 0.25f ; o3 < 15f; o3 +=0.25f )
{

for (var o4 = 0.25f ; o4 < 5f; o4 +=0.25f )
{


float a_tp_y = o1 ;
float a_s_y = o2 ;
float s_tp_y = o3 ;
float s_s_y = o4 ;




// önceki taramadaki pozisyonları temizle
for (int i = 1; i < V.Count; i++)
Sistem.Yon[i] = "";


var SonYon = "";
double Fiyat = 0;
for (int i = 1; i<V.Count; i++)
{

if ( x1[i] == 1 && x1[i-1] != 1 && SonYon != "A" ) // AL
{
Sistem.Yon[i] = "A"; // alış
SonYon = Sistem.Yon[i];
Fiyat = C[i];
}

else if ( x1[i] == -1 && x1[i-1] != -1 && SonYon != "S" ) // SAT

{
Sistem.Yon[i] = "S"; // satış
SonYon = Sistem.Yon[i];
Fiyat = C[i];

}

else if (SonYon == "A" && C[i] > ( Fiyat + (Fiyat * a_tp_y / 100 )) ) // alışta kar realizasyonu
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
}


else if (SonYon == "A" && C[i] < ( Fiyat - (Fiyat * a_s_y/100 ) )) // alışta stop
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
}


else if (SonYon == "S" && C[i] < ( Fiyat - (Fiyat * s_tp_y/100) )) // satışta kar realizasyonu
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
}


else if (SonYon == "S" && C[i] > ( Fiyat + (Fiyat * s_s_y/100) ) ) // satışta stop
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
}


}



Sistem.Optimizasyon("A_Kar_Al " + o1, " A-Stop " + o2, " S_Kar_al " + o3, " S-Stop " + o4);

}
}
}
}





Teşekkürler Bearbull abi :cool:

Bear_Bull
19-09-2015, 22:15
Baboli ortadaki gönderiyi atlamışsın
ben aldım geldim.

anonime teşekkürler.



Mevcut sisteme kar al/ stop (puan bazlı) optimizasyon kodu

( sys1 isimli 20 dk periyotlu sistem örneklenmiştir )







var ad = "sys1" ;
var sembol = "VIP'VIP-X030";
var periyot = "20" ;
var V = Sistem.GrafikVerileriniOku(sembol, periyot);
var C = Sistem.GrafikFiyatOku(V, "Kapanis" ) ;

var a01 = Sistem.SistemGetir(ad, sembol, periyot ) ;
var x1= Sistem.Liste(V.Count, 0) ;
for (int i = 1 ; i < V.Count; i++)
x1[i] = a01.Yon[i] == "A" ? 1 : a01.Yon[i] == "S" ? -1 : a01.Yon[i] == "F" ? 0: x1[i-1] ;



for (var o1 = 0f ; o1 < 15f; o1 +=1f )
{

for (var o2 = 0f ; o2 < 5f; o2 +=1f )
{

for (var o3 = 0f ; o3 < 15f; o3 +=1f )
{

for (var o4 = 0f ; o4 < 5f; o4 +=1f )
{


var a_tp_y = o1 ;
var a_s_y = o2 ;
var s_tp_y = o3 ;
var s_s_y = o4 ;




// önceki taramadaki pozisyonları temizle
for (int i = 1; i < V.Count; i++)
Sistem.Yon[i] = "";


var SonYon = "";
double Fiyat = 0;
for (int i = 1; i<V.Count; i++)
{

if ( x1[i] == 1 && x1[i-1] != 1 && SonYon != "A" ) // AL
{
Sistem.Yon[i] = "A"; // alış
SonYon = Sistem.Yon[i];
Fiyat = C[i];
}

else if ( x1[i] == -1 && x1[i-1] != -1 && SonYon != "S" ) // SAT

{
Sistem.Yon[i] = "S"; // satış
SonYon = Sistem.Yon[i];
Fiyat = C[i];

}

else if (SonYon == "A" && C[i] > ( Fiyat + a_tp_y ) ) // alışta kar realizasyonu
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
}


else if (SonYon == "A" && C[i] < ( Fiyat - a_s_y ) ) // alışta stop
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
}


else if (SonYon == "S" && C[i] < ( Fiyat - s_tp_y )) // satışta kar realizasyonu
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
}


else if (SonYon == "S" && C[i] > ( Fiyat + s_s_y ) ) // satışta stop
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
}


}



Sistem.Optimizasyon(o1, o2, o3, o4);

}
}
}
}

Bear_Bull
19-09-2015, 23:56
çok sayıda data biriktirmek isteyenler



İdeal data sayılarını 1 milyon olarak ayarlayıp
Akşamları ekteki 2 adet Explorer {sorgu} dosyasını istedikleri LİSTE üzerinde çalıştırıp
{isterlerse kendilerine özel liste yapabilirler}
istedikleri her ensturuman için istedikleri kadar datayı depolayabilirler


Bear_Bull' dan Bayram hediyesi olsun :yes:

data tamamlama kullanım tarifi
1 grafik açılır
Grafik üstünde "S" basılır
sorgu seçilir
http://badgs.webege.com/20150919231740.png

LİSTE den tamamlayacak listeyi seçilip ekran dolana kadar beklenir ve SOrgu ekranı kapatılır
datalarınız tamamlanmıştır.



http://badgs.webege.com/20150919231953.png






http://badgs.webege.com/20150919231606.png
Kodları tekrar veriyorum

EXP_GRAFIK_DATA_TAMAMLA



//var periyot = Sistem.Periyot;
var Sembol = Sistem.Sembol;
var yuzeysel = Sistem.YuzeyselVeriOku(Sembol);
//Sistem.SorguBaslik[0] = "Düşük";
//Sistem.SorguBaslik[1] = "Yüksek";
Sistem.SorguBaslik[0] = "SON";
Sistem.SorguBaslik[1] = "5 dk";
Sistem.SorguBaslik[2] = "60 dk";
Sistem.SorguBaslik[3] = "Gün";
//Sistem.SorguBaslik[4] = "Hafta";Sistem.SorguBaslik[5] = "Ay";Sistem.SorguBaslik[6] = "3 Ay";Sistem.SorguBaslik[7] = "YIL";
//var dsk = Sistem.GrafikVerileri[Sistem.BarSayisi-1].Low;
//var yks = Sistem.GrafikVerileri[Sistem.BarSayisi-1].High;
var son = Sistem.SonFiyat(Sembol); //GrafikVerileri[Sistem.BarSayisi-1].Close;


if ( son > 0 )
{
Sistem.GrafikVerisiIndir(Sembol, "5" );
Sistem.GrafikVerisiIndir(Sembol, "60" );
Sistem.GrafikVerisiIndir(Sembol, "G" );
//Sistem.GrafikVerisiIndir(Sembol, "H" );
//Sistem.GrafikVerisiIndir(Sembol, "A" );
//Sistem.GrafikVerisiIndir(Sembol, "U" );
//Sistem.GrafikVerisiIndir(Sembol, "Y" );

Sistem.SorguAciklama = "Data Tamamlandı " + Sembol ;
Sistem.SorguDeger[0] = son;
Sistem.SorguDeger[1] = son;
Sistem.SorguDeger[2] = son;
Sistem.SorguDeger[3] = son;
//Sistem.SorguDeger[4] = son;Sistem.SorguDeger[5] = son;Sistem.SorguDeger[6] = son;Sistem.SorguDeger[7] = son;
Sistem.SorguOndalik[0] = 5;
Sistem.SorguOndalik[1] = 5;
Sistem.SorguOndalik[2] = 5;
Sistem.SorguOndalik[3] = 5;
Sistem.SorguOndalik[4] = 5;
Sistem.SorguOndalik[5] = 5;

}
else
{
Sistem.SorguAciklama = "*** Data YOK ***";
Sistem.SorguDeger[0] = son;
}

Sistem.SorguEkle();



1 dk.lıklarıda tamamlasın isteyenler için

EXP_GRAFIK_DATA_1_5_60_G



//var periyot = Sistem.Periyot;
var Sembol = Sistem.Sembol;
var yuzeysel = Sistem.YuzeyselVeriOku(Sembol);
//Sistem.SorguBaslik[0] = "Düşük";
//Sistem.SorguBaslik[1] = "Yüksek";
Sistem.SorguBaslik[0] = "SON";
Sistem.SorguBaslik[1] = "5 dk";
Sistem.SorguBaslik[2] = "60 dk";
Sistem.SorguBaslik[3] = "Gün";
Sistem.SorguBaslik[4] = "1 DK";
//Sistem.SorguBaslik[5] = "Ay";
//Sistem.SorguBaslik[6] = "3 Ay";
//Sistem.SorguBaslik[7] = "YIL";
//var dsk = Sistem.GrafikVerileri[Sistem.BarSayisi-1].Low;
//var yks = Sistem.GrafikVerileri[Sistem.BarSayisi-1].High;
var son = Sistem.SonFiyat(Sembol); //GrafikVerileri[Sistem.BarSayisi-1].Close;


if ( son > 0 ) // && Sistem.ZamanKontrolSaniye(Sembol)>1)
{
Sistem.GrafikVerisiIndir(Sembol, "5" );
Sistem.GrafikVerisiIndir(Sembol, "60" );
Sistem.GrafikVerisiIndir(Sembol, "G" );
Sistem.GrafikVerisiIndir(Sembol, "1" );
//Sistem.GrafikVerisiIndir(Sembol, "A" );
//Sistem.GrafikVerisiIndir(Sembol, "U" );
//Sistem.GrafikVerisiIndir(Sembol, "Y" );

Sistem.SorguAciklama = "Data Tamamlandı " + Sembol ;
Sistem.SorguDeger[0] = son;
Sistem.SorguDeger[1] = son;
Sistem.SorguDeger[2] = son;
Sistem.SorguDeger[3] = son;
Sistem.SorguDeger[4] = son;//Sistem.SorguDeger[5] = son;Sistem.SorguDeger[6] = son;Sistem.SorguDeger[7] = son;

Sistem.SorguOndalik[0] = 5;
Sistem.SorguOndalik[1] = 5;
Sistem.SorguOndalik[2] = 5;
Sistem.SorguOndalik[3] = 5;
Sistem.SorguOndalik[4] = 5;
Sistem.SorguOndalik[5] = 5;
}
else
{
Sistem.SorguAciklama = "*** Data YOK ***";
Sistem.SorguDeger[0] = son;
}

Sistem.SorguEkle();

thebaboli
19-09-2015, 23:58
bir arkadaş için şöyle bir optimizasyon kodu yazmıştım, belki işe yarar.
belli bir tarıhten başlayıp
belli bir süreyi
belli bir süre zıplatarak tarıyor.
olmadı bunun için bir modül ekleriz.





var Tarih = new DateTime(2013,1,1,0,0,0); // başlangıç tarihi : yıl,ay,gün,saat,dakika,saniye
var Sure = 6; // 6 aylık süreyi adım adım tarar
var Aralik = 1; // 1 ay adımlarla

var V = Sistem.GrafikVerileri;
var C = Sistem.GrafikFiyatOku(V, "Kapanis");

var Baslangic = Tarih;
var Bitis = Baslangic.AddMonths(Sure);

while (Bitis < DateTime.Now)
{
Baslangic = Baslangic.AddMonths(Aralik);
Bitis = Baslangic.AddMonths(Sure);

for (int P1 = 20; P1 < 101; P1+=20)
{
var X1 = Sistem.RSI(P1);
for (int P2 = 20; P2 < 101; P2+=20)
{
var X2 = Sistem.MA(X1 , "Exp", P2);

// önceki taramadaki pozisyonları temizle
for (int i = 1; i < V.Count; i++)
Sistem.Yon[i] = "";

// strateji
var SonYon = "";
for (int i = 1; i < V.Count; i++)
{
if (V[i].Date < Baslangic) continue; // Tarih1 öncesini pas geç
if (V[i].Date > Bitis) continue; // Tarih2 sonrasını pas geç

if ( X1[i] > X2[i] )
{
Sistem.Yon[i] = "A";
SonYon = Sistem.Yon[i];
}
if ( X1[i] < X2[i] )
{
Sistem.Yon[i] = "S";
SonYon = Sistem.Yon[i];
}
}
Sistem.Optimizasyon(P1 ,P2,Baslangic.ToString("yyyy/MM"));
}
}





indikatörü belleğe yükleyip optimizasyonu hızlandırmak




var V = Sistem.GrafikVerileri;
var C = Sistem.GrafikFiyatOku(V, "Kapanis");


var TS = new Dictionary<string,List<float>>();
var TSA = new Dictionary<string,List<float>>();
for (int P1 =20; P1 < 501; P1+=20)
{
var key1=P1.ToString();
var A1=Sistem.RSI(P1);
A1 = Sistem.MA(A1 , "Exp", 2);
TS[key1]=A1;
for (int P2 = 20; P2 < 501; P2+=20)
{
var A2 = Sistem.MA(A1 , "Exp", P2);
var key2=P1.ToString()+"|"+P2.ToString();
TSA[key2]=A2;
}
}

for (int P1 = 20; P1 < 500; P1+=10)
{
var X1 = Sistem.Momentum(P1);
for (int P2 = 20; P2 < 500; P2+=20)
{
var X2 = Sistem.MA(X1 , "Exp", P2);
for (int R1 = 20; R1 < 501; R1+=20)
{
var key1=R1.ToString();
var Z1=TS[key1];
for (int R2 = 20; R2 < 501; R2+=20)
{
var key2=R1.ToString()+"|"+R2.ToString();
var Z2=TSA[key2];

// önceki taramadaki pozisyonları temizle
for (int i = 1; i < V.Count; i++)
Sistem.Yon[i] = "";

// strateji
var SonYon = "";
for (int i = 200; i < V.Count; i++)
{
if ( X1[i] > X2[i] && Z1[i] > Z2[i] && SonYon != "A" )
{
Sistem.Yon[i] = "A";
SonYon = Sistem.Yon[i];
}
if ( X1[i] < X2[i] && Z1[i] < Z2[i] && SonYon != "S" )
{
Sistem.Yon[i] = "S";
SonYon = Sistem.Yon[i];
}
}
Sistem.Optimizasyon(P1 ,P2," - ", R1, R2 );
}
}

}
}



Teşekkürler Tiberius :cool:

thebaboli
21-09-2015, 12:11
tp/stop yüzdelerini mevcut sisteme uygulamak

sys1 isimli 20 dk periyotlu sistem ve tp/stoplar için ise % 2 örneklenmiştir.





var a_tp_y = 2f ; // alış tp yüzdesi
var a_s_y = 2f ; // alış stop yüzdesi
var s_tp_y = 2f ; //satış tp yüzdesi
var s_s_y = 2f ; //satış stop yüzdesi




var ad = "sys1" ;
var sembol = "VIP'VIP-X030";
var periyot = "20" ;
var V = Sistem.GrafikVerileriniOku(sembol, periyot);
var C = Sistem.GrafikFiyatOku(V, "Kapanis" ) ;


var a01 = Sistem.SistemGetir(ad, sembol, periyot ) ;
var x1= Sistem.Liste(V.Count, 0) ;
for (int i = 1 ; i < V.Count; i++)
x1[i] = a01.Yon[i] == "A" ? 1 : a01.Yon[i] == "S" ? -1 : a01.Yon[i] == "F" ? 0: x1[i-1] ;




// sistem
var SonYon = "";
double Fiyat = 0;
for (int i = 1; i<V.Count; i++)
{

if ( x1[i] == 1 && x1[i-1] != 1 && SonYon != "A" ) // AL
{
Sistem.Yon[i] = "A"; // alış
SonYon = Sistem.Yon[i];
Fiyat = C[i];
}

else if ( x1[i] == -1 && x1[i-1] != -1 && SonYon != "S" ) // SAT

{
Sistem.Yon[i] = "S"; // satış
SonYon = Sistem.Yon[i];
Fiyat = C[i];

}

else if (SonYon == "A" && C[i] > ( Fiyat + (Fiyat * a_tp_y / 100 )) ) // alışta kar realizasyonu
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
}


else if (SonYon == "A" && C[i] < ( Fiyat - (Fiyat * a_s_y/100 ) )) // alışta stop
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
}


else if (SonYon == "S" && C[i] < ( Fiyat - (Fiyat * s_tp_y/100) )) // satışta kar realizasyonu
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
}


else if (SonYon == "S" && C[i] > ( Fiyat + (Fiyat * s_s_y/100) ) ) // satışta stop
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
}


}



Sistem.GetiriHesapla("31/12/2004", 0.01875);
var KarZarar = Sistem.GetiriKZ;



var KarZararAy = Sistem.Liste(0);
float KarZarar1 = 0;
int BarNo1 = 1;
float Fark = 0;
for (int i = 1; i < Sistem.BarSayisi; i++)
{

//if (V[i].Date.DayOfWeek == DayOfWeek.Monday && V[i-1].Date.DayOfWeek != DayOfWeek.Monday)
if (V[i].Date.Month != V[i-1].Date.Month)


{
Fark = KarZarar[i-1] - KarZarar1;
for (int j = BarNo1; j < i; j++)
KarZararAy[j] = Fark;
KarZarar1 = KarZarar[i-1];
BarNo1 = i;
}
if (i == Sistem.BarSayisi-1)
{
Fark = KarZarar[i] - KarZarar1;
for (int j = BarNo1; j < Sistem.BarSayisi; j++)
KarZararAy[j] = Fark;
}
}
var KarList = Sistem.Liste(0);
var ZararList = Sistem.Liste(0);
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if (KarZararAy[i] > 0)
KarList[i] = KarZararAy[i];
else if (KarZararAy[i] < 0)
ZararList[i] = KarZararAy[i];
}


Sistem.Cizgiler[0].Deger = KarZarar; // panel 2 - düz
Sistem.Cizgiler[1].Deger = KarList; // panel 3 - dikey
Sistem.Cizgiler[2].Deger = ZararList; // panel 3 - dikey



Teşekkürler Anonim :cool:

thebaboli
22-09-2015, 01:53
Tiberius ustadım,fxsnıper indikatorunde optimize yaptığımda 2800 işlem sayısının altına düşemiyor,bu indikatorun doğasımı boyledir,rica etsem optimizasyon kodu alabilirmiyim belki hata bendedir


kodu ekledim.
bunu drift ekletti.
metacılar çok kullanıyormuş.
en uygun parametreleri drift bilir sanırım, ona sormak lazım





var V = Sistem.GrafikVerileri;
var C = Sistem.GrafikFiyatOku(V, "Kapanis");



for (int P1 = 2; P1 < 21; P1+=1)
{
for (int P2 = 20; P2 < 501; P2+=20)
{
var X1 = Sistem.FxSniper(P1, P2);
for (int P3 = 20; P3 < 501; P3+=20)
{
var X2 = Sistem.MA(X1 , "Exp", P3);

// önceki taramadaki pozisyonları temizle
for (int i = 1; i < V.Count; i++)
Sistem.Yon[i] = "";

// strateji
var SonYon = "";
for (int i = 200; i < V.Count; i++)
{
if ( X1[i] > X2[i] && SonYon != "A" ) //
{
Sistem.Yon[i] = "A";
SonYon = Sistem.Yon[i];
}
if ( X1[i] < X2[i] && SonYon != "S" )
{
Sistem.Yon[i] = "S";
SonYon = Sistem.Yon[i];
}
}
Sistem.Optimizasyon(P1 ,P2, P3);
}
}
}



Teşekkürler Tiberius :cool:

thebaboli
22-09-2015, 14:21
Mevcut sistemde al/sat noktalarını iyileştirme

Mevcut sistemdeki al/sat noktalarından sonra daha iyi yerlerden fırsat verdiğini görebiliyoruz. Aşağıdaki optimizasyon kodu bunu analiz etmektedir. ( mevcudun "puans" kadar üzerinden şort olmak ya da "puanl" kadar altından long olmak ) . Mevcut sistemimiz optimizasyon ile oluşturulmuşsa zaten en iyi al/sat noktaları yakalandığı için bu kodda (opt) en iyi değerler 0 olacaktır. Ama daha düşük işlem sayılarında farklı seçenekler ortaya çıkabilmektedir.

(sys1 isimli 20 dk periyotlu sistem örneklenmiştir)

opt kodu




// opt kodu

var ad = "sys1" ;
var sembol = "VIP'VIP-X030";
var periyot = "20" ;
var V = Sistem.GrafikVerileriniOku(sembol, periyot);
var C = Sistem.GrafikFiyatOku(V, "Kapanis" ) ;

var a01 = Sistem.SistemGetir(ad, sembol, periyot ) ;


for (var o1 = 0f ; o1 < 0.5f ; o1 +=0.025f ) // 25 puan adımla 500 puana tara
{

for (var o2 = 0f ; o2 < 0.5f; o2 +=0.025f ) // 25 puan adımla 500 puana tara
{




var puanl = o1 ;
var puans = o2 ;

var x1= Sistem.Liste(V.Count, 0) ;
var Fiyat= Sistem.Liste(V.Count, 0) ;
var x1a= Sistem.Liste(V.Count, 0) ;
var x1b= Sistem.Liste(V.Count, 0) ;
for (int i = 1 ; i < V.Count; i++)
{
x1a[i] = a01.Yon[i] == "A" ? 1 : a01.Yon[i] == "S" ? -1 : a01.Yon[i] == "F" ? 0: x1a[i-1] ;

Fiyat[i] = ( ( x1a[i] == 1 && x1a[i-1] != 1 ) || ( x1a[i] == -1 && x1a[i-1] != -1 ) ) ? C[i] : Fiyat[i-1];

x1[i] =
x1a[i] == 1 && C[i] <= ( Fiyat[i] - puanl ) ? 1 :
x1a[i] == -1 && C[i] >= ( Fiyat[i] + puans ) ? -1 :
x1a[i] == 0 ? 0 :
x1[i-1] ;

}







// önceki taramadaki pozisyonları temizle
for (int i = 1; i < V.Count; i++)
Sistem.Yon[i] = "";

var SonYon = "";

for (int i = 1; i<Sistem.BarSayisi; i++)
{


if ( x1[i] == 1 && SonYon != "A" ) // AL
{
Sistem.Yon[i] = "A";
SonYon = Sistem.Yon[i];

}



else if ( x1[i] == -1 && SonYon != "S" ) // SAT
{
Sistem.Yon[i] = "S";
SonYon = Sistem.Yon[i];

}



else if ( x1[i] == 0 && (SonYon == "A" || SonYon == "S") ) // FLAT
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];

}


}


Sistem.Optimizasyon(o1, o2 );

}
}








sys kodu




// sistem kodu

var ad = "sys1" ;
var sembol = "VIP'VIP-X030";
var periyot = "20" ;
var V = Sistem.GrafikVerileriniOku(sembol, periyot);
var C = Sistem.GrafikFiyatOku(V, "Kapanis" ) ;

var a01 = Sistem.SistemGetir(ad, sembol, periyot ) ;





var puanl = 0.125f ;
var puans = 0 ;

var x1= Sistem.Liste(V.Count, 0) ;
var Fiyat= Sistem.Liste(V.Count, 0) ;
var x1a= Sistem.Liste(V.Count, 0) ;
var x1b= Sistem.Liste(V.Count, 0) ;
for (int i = 1 ; i < V.Count; i++)
{
x1a[i] = a01.Yon[i] == "A" ? 1 : a01.Yon[i] == "S" ? -1 : a01.Yon[i] == "F" ? 0: x1a[i-1] ;

Fiyat[i] = ( ( x1a[i] == 1 && x1a[i-1] != 1 ) || ( x1a[i] == -1 && x1a[i-1] != -1 ) ) ? C[i] : Fiyat[i-1];


x1[i] =
x1a[i] == 1 && C[i] <= ( Fiyat[i] - puanl ) ? 1 :
x1a[i] == -1 && C[i] >= ( Fiyat[i] + puans ) ? -1 :
x1a[i] == 0 ? 0 :
x1[i-1] ;

}









var SonYon = "";

for (int i = 1; i<Sistem.BarSayisi; i++)
{


if ( x1[i] == 1 && SonYon != "A" ) // AL
{
Sistem.Yon[i] = "A";
SonYon = Sistem.Yon[i];

}



else if ( x1[i] == -1 && SonYon != "S" ) // SAT
{
Sistem.Yon[i] = "S";
SonYon = Sistem.Yon[i];

}



else if ( x1[i] == 0 && (SonYon == "A" || SonYon == "S") ) // FLAT
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];

}


}









Teşekkürler Anonim :cool:

erhanacikgoz1
28-09-2015, 18:37
herhangibir bölgedeki 9 dijitle oluşmuş kusuratlı sayılardan kurtulmak isterseniz veyahutta hesaplamalarınızda hatalara sebebiyet veriyor ise

aşağıdaki kodlar iş görebilir.

İlerde bir gün birilerinin ihtiyacı olacak. o yüzden paylastım.


erhan bey üstadım bunu dener misin ?

Sistem.GetiriHesapla("04/11/2006", 0 );
var Kar = Sistem.GetiriKZ;
for (int i = 1; i < Sistem.BarSayisi; i++)
Kar[i] = Sistem.SayiYuvarla(Kar[i],0.025);


Truncate fonksiyonunu kullanabilirsin ama işini göreceğini sanmam.
ondalık kısmı tamamen atar.

Sistem.GetiriHesapla("04/11/2006", 0 );
var Kar = Sistem.GetiriKZ;
for (int i = 1; i < Sistem.BarSayisi; i++)
Kar[i] = Math.Truncate(Kar[i]);


Round fonksiyonu işini görebilir.
ondalık basamak sayısını kendin girersin.
örnekte noktadan sonra 2 basamak bırakır.


for (int i = 1; i < Sistem.BarSayisi; i++)
Kar[i] = Math.Round(Kar[i], 2);

thebaboli
01-10-2015, 00:03
IDEAL Yeni versiyona Yeni bir fonksiyon eklenmiştir.

Fonksiyon Adı: Sistem.StopVeyaKarFlatYuzde(StopYuzde, KarYuzde)

Örnek: Sistem.StopVeyaKarFlatYuzde(3.5,5.8) = Sistem, pozisyona girdikten sonra %5.8 KAR görürse pozisyon kapatılır. VEYA Pozisyona girdikten sonra görülen en yüksek (short ise en düşük) değerden %3.5 terse dönerse pozisyon kapatılır.

Yazdığınız sistem veya Robotlarda belli bir YÜZDE KAR elde edildiği an VEYA pozisyona girdikten sonra görülen en yüksek kar noktasından belli bir YÜZDE GERİ DÖNÜŞ olduğunda FLAT olmayı bu fonksiyonu kodunuza ekleyerek sağlayabilirsiniz.

Aşağıda, 2 Hareketli Ortalamanın kesişimi stratejisine dayalı bir sisteme bu fonksiyonun uygulanmış örneği paylaşılmıştır.
Alttaki fotoğraf normal sisteme, üstteki fotoğraf ise Bu fonksiyon ile (%5.8 Kar görünce VEYA en yüksek noktadan %3.5 geri dönerse) FLAT olan sisteme aittir.

NOT-1: Sistemlerinizde GetiriKZ kullanıyorsanız, bu fonksiyonu GetiriKZ den önce yazmanız lazım. YÖN listesin son halini bu fonksiyon verir.
NOT-2: Parametrelerden herhangi birini SIFIR girerek, tek bir FLAT koşulu kullanabilirsiniz. Örneğin SADECE %x KAR edince FLAT olsun, başka bir flat koşulu olmasın diyorsanız Fonksiyonun ilk (YuzdeStop) parametresini "0" girmeniz yeterli.
Sistem.StopVeyaKarFlatYuzde(0, KarYuzde) şeklinde...
(Elbetteki tersi senaryo da mümkün: SADECE En yüksek/düşük noktadan Yüzde x geri dönerse FLAT olsun istiyorsanız, bu kez ikinci parametreyi SIFIR girmeniz gerek)
NOT-3:Her iki parametre de SIFIR olarak verilirse, sistemini orjinal stratejinizi çalıştırır.
NOT-4:Bizler test ettik ve kullanıma sunduk elbette ama sizlerin de, gerçek ortamda çalışan sistem/robot kodlarınızda kullanmadan önce mutlaka test etmenizi önemle hatırlatırız.

Versiyon buradan indirilebilir: www.directfn.com.tr/terminal/ideal.exe

Saygılarımızla



var V = Sistem.GrafikVerileri;
var C = Sistem.GrafikFiyatSec("Kapanis");


var A1 = Sistem.MA(C, "Exp", 50);
var A2 = Sistem.MA(C, "Exp", 100);

var SonYon = "";
for (int i = 1 ; i < Sistem.BarSayisi; i++)
{
if (A1[i] > A2[i] && SonYon != "A" )
{
SonYon = "A";
Sistem.Yon[i] = "A";
}
else if (A1[i] < A2[i] && SonYon != "S" )
{
SonYon = "S";
Sistem.Yon[i] = "S";
}
}

Sistem.StopVeyaKarFlatYuzde(3.5,5.8); //Parametre1=YuzdeStop, Parametre2 = YuzdeKarAl



http://i.hizliresim.com/PB4AA5.png (http://hizliresim.com/PB4AA5)


Teşekkürler Sezai bey :cool:


yazılıma meraklı arkadaşlar için;
stop veya kar al fonksiyonunun ideal içindeki kodu aşağıdadır.
bundan esinlenerek sistem kodlarınıza benzer eklemeler yapabilirsiniz.




public void StopVeyaKarFlatYuzde(object yuzdestopX, object yuzdekarX)
{
try
{
float yuzdestop = yuzdestopX.ToString()._ToFloat() / 100;
float karstop = yuzdekarX.ToString()._ToFloat() / 100;
float stopval = 0;
float karval = 0;
string sonyon = "";

for (int i = 0; i < Yon.Count; i++)
{
if (Yon[i] != "")
{
stopval = GrafikVerileri[i].Close;
karval = GrafikVerileri[i].Close;
sonyon = Yon[i];
}
else if (Yon[i] == "" && (sonyon == "A" || sonyon == "S"))
{
if (sonyon == "A")
{
stopval = Math.Max(stopval, GrafikVerileri[i].High);
if (yuzdestop > 0)
{
if (GrafikVerileri[i].Close < stopval * (1 - yuzdestop))
{
Yon[i] = "F";
sonyon = "";
}
}
if (karstop > 0)
{
if (GrafikVerileri[i].Close > karval * (1 + karstop))
{
Yon[i] = "F";
sonyon = "";
}
}
}
else if (sonyon == "S")
{
stopval = Math.Min(stopval, GrafikVerileri[i].Low);
if (yuzdestop > 0)
{
if (GrafikVerileri[i].Close > stopval * (1 + yuzdestop))
{
Yon[i] = "F";
sonyon = "";
}
}
if (karstop > 0)
{
if (GrafikVerileri[i].Close < karval * (1 - karstop))
{
Yon[i] = "F";
sonyon = "";
}
}
}
}
}
}
catch { }
}




Yeni Fonksiyonun PUAN bazlı olanı da eklenmiştir. Aşağıda eklenmiş olan iki fonksiyonun da kullanımı gösterilmiştir.
Sn Bear_Bull, Sorgu ekranıyla ilgili müdahale de yapıldı bu versiyonda.

Versiyonu Buradan alabilirsiniz.

www.directfn.com.tr/terminal/ideal.exe

Saygılarımla

http://i.hizliresim.com/J6rGvJ.png (http://hizliresim.com/J6rGvJ)


Birde bu stop ve karalın optimizasyonuda olsa tadından yenmez:)


onuda ben hediye edeyim {Sn Exfake nin gönderdiğine ilaveler yapmıştım}

ilk önce sadece 1 saniye çalıştırıp durdurun sonra

parametreler kısmından 1-3-5-7-9-11-13-15-17-19 kısımları doldurun
yada sistemin başında yazan şeyleri parametreler kısmına tek tek kopyalayın.
tekrar çalıştırın

// OPT_OZEL_Bear_Bull



Sistem.Parametreler[0] = "OPT Bar sayısı ";
Sistem.Parametreler[2] = "Büyük Periyotun Küçüğü ";
Sistem.Parametreler[4] = "Büyük Periyotun Büyüğü ";
Sistem.Parametreler[6] = "Küçük Periyotun Küçüğü ";
Sistem.Parametreler[8] = "Küçük Periyotun Büyüğü ";
Sistem.Parametreler[10] = "Take Profit Kar al Küçük [ 1/1000 yazın] ";
Sistem.Parametreler[12] = "Take Profit Kar al Büyük [ 1/1000 yazın] ";
Sistem.Parametreler[14] = "Zarar Stop ol Küçük [puan] ";
Sistem.Parametreler[16] = "Zarar Stop ol Büyük [puan] ";
Sistem.Parametreler[18] = "zarar stop adım [puan] ";




int BarSayisi = Convert.ToInt16(Sistem.Parametreler[1]); //optimizasyon penceresindeki Bar Sayısı textbox’ı ile aynı olmalı
int BuyukperK = Convert.ToInt16(Sistem.Parametreler[3]);
int BuyukperB = Convert.ToInt16(Sistem.Parametreler[5]);
int KucukperK = Convert.ToInt16(Sistem.Parametreler[7]);
int KucukperB = Convert.ToInt16(Sistem.Parametreler[9]);
var TPKAK = Convert.ToInt32(Sistem.Parametreler[11]);
var TPKAB = Convert.ToInt32(Sistem.Parametreler[13]);
int ZSOK= Convert.ToInt32(Sistem.Parametreler[15]);
int ZSOB = Convert.ToInt32(Sistem.Parametreler[17]);
int ZSOA = Convert.ToInt32(Sistem.Parametreler[19]);

// TPKAK = Sistem.SayiYuvarla(TPKAK , 0.001); // TPKAB = Sistem.SayiYuvarla(TPKAB , 0.001);

var Veriler = Sistem.GrafikVerileri;
if (BarSayisi > Veriler.Count) BarSayisi = Veriler.Count - 1; //burası yanlışlıkla grafikteki bar sayısından fazla bir rakam girmeyin diye
var K = Sistem.GrafikFiyatOku(Veriler, "Kapanis");
var KP = Sistem.GrafikFiyatOku(Veriler, "Ortalama");
string tablobaslik = "Sembol;Periyot;Sistem;Bas. Sermaye;Son Sermaye;Kar/Zarar;Kar/Zarar %;Komisyon;Kayma;Net Sermaye;Net Kar/Zarar; Net K/Z %;";
tablobaslik += "En Buyuk Kar;En Buyuk Zarar;Maks. Drawdown;Maks. DD %;CAR;CAR/MDD;IBK;Kontrat;Long;Short;Flat;Stop;ZRR_STP;L_K_a l;S_K_Al;Sure";
//Yukardaki iki satır excel tablosunun başlıklarını oluşturmak içindir. Burada yapacağınız değişikliği aşağıdaki ozettablo değişkeninede yapmalısınız.
//yoksa tutarsızlık oluşur.
using (System.IO.StreamWriter dosya = new System.IO.StreamWriter(@"c:\\ideal\\rapor\\" + Sistem.Name + "_Opt_Rapor.csv", false)) dosya.WriteLine(tablobaslik);
//üstteki satır her Hesapla butonuna tıkladığınızda Optimizasyon_MA.csv dosyasını sıfırlar, yoksa oluşturur ve başlıkları yazar.

for (int BuyukPeriyot = BuyukperK ; BuyukPeriyot <= BuyukperB ; BuyukPeriyot++)
{
for (int tpsk = TPKAK ; tpsk <= TPKAB ; tpsk ++)
{
// int tplk = tpsk;
for (int stpzrr = ZSOK; stpzrr <= ZSOB; stpzrr +=ZSOA )
{
for (int KucukPeriyot = KucukperK ; KucukPeriyot <= KucukperB ; KucukPeriyot++)
{

if (KucukPeriyot >= BuyukPeriyot) continue;
var time = DateTime.Now;
var MA1 = Sistem.MA(KP, "Simple", KucukPeriyot);//örnek kodda 2 ma kesişmesi kullandık
var MA2 = Sistem.MA(K, "Exp", BuyukPeriyot);//siz buraya kendi sisteminizi monte edeceksiniz, Allah kolaylık versin..
for (int i = 1; i < Veriler.Count; i++)
Sistem.Yon[i] = ""; //önceki sinyalleri sıfırladık.
float Sermaye = 1000f; //buraya başlangıç bakiyesini yazıyoruz.
float KomOran = 0.00009f; //komisyon oranını yazıyoruz. puan hesabı yapıyorsanız bunlara 0 yazın
int Kontrat = 1; //sabit 10 kontrat ile işlem yapıyoruz
float Kayma = 12; //kayma aynı şekilde komisyon gibi
var SermayeEgrisi = Sistem.Liste(Sermaye);//burdan sonrası sistem bilgi ekran şeysi kodlarının aynısı olduğundan hızlıca geçiyorum
var NetSerEgrisi = Sistem.Liste(Sermaye);
var AlVeTut = Sistem.Liste(0);
var KomEgrisi = Sistem.Liste(0);
var KaymaEgrisi = Sistem.Liste(0);
var IslemMiktari = Sistem.Liste(0);
var Pozisyon = Sistem.Liste(0);
var KarZarar = Sistem.Liste(0);
var Komisyon = Sistem.Liste(0);
float SonPozisyon = 0;
float SonFiyat = 0;
float ToplamKarZarar = 0;
float ToplamKomi = 0;
float HedefFiyat = 0;
float StopFiyat = 0;
int LongSayar = 0;
int ShortSayar = 0;
int FlatSayar = 0;
int StopSayar = 0;
int IslemBar = 1;
int BasBar = Veriler.Count - BarSayisi;
for (int i = BasBar; i < Veriler.Count; i++)
{
if (MA1[i - 1] < MA2[i - 1] && MA1[i] >= MA2[i] && SonPozisyon <= 0)
{//*****al koşulu bölgesi*****
if (SonPozisyon == 0) IslemMiktari[i] = Kontrat;
else if (SonPozisyon < 0) IslemMiktari[i] = Kontrat * 2;
Sistem.Yon[i] = "A";
LongSayar++;
IslemBar = i;
SonFiyat = Veriler[i].Close;
HedefFiyat = SonFiyat + tpsk ;
StopFiyat = SonFiyat - stpzrr/1000 ;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
ToplamKomi = SonFiyat * KomOran * IslemMiktari[i];
KomEgrisi[i] = KomEgrisi[i - 1] + Math.Abs(ToplamKomi) * 100;
KaymaEgrisi[i] = KaymaEgrisi[i - 1] + Math.Abs(Kayma * IslemMiktari[i] / 10);
}
else if (MA1[i - 1] > MA2[i - 1] && MA1[i] <= MA2[i] && SonPozisyon >= 0)
{//*****sat koşulu bölgesi*****
if (SonPozisyon == 0) IslemMiktari[i] = Kontrat * -1;
else if (SonPozisyon > 0) IslemMiktari[i] = Kontrat * -2;
Sistem.Yon[i] = "S";
ShortSayar++;
IslemBar = i;
SonFiyat = Veriler[i].Close;
HedefFiyat = SonFiyat - tpsk ;
StopFiyat = SonFiyat + stpzrr/1000 ;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
ToplamKomi = SonFiyat * KomOran * IslemMiktari[i];
KomEgrisi[i] = KomEgrisi[i - 1] + Math.Abs(ToplamKomi) * 100;
KaymaEgrisi[i] = KaymaEgrisi[i - 1] + Math.Abs(Kayma * IslemMiktari[i] / 10);
}
else if (Veriler[i].High >= HedefFiyat && SonPozisyon > 0)
{//*****long flat koşulu bölgesi*****
Sistem.Yon[i] = "F";
FlatSayar++;
IslemMiktari[i] = Kontrat * -1;
SonFiyat = HedefFiyat;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
ToplamKomi = SonFiyat * KomOran * IslemMiktari[i];
KomEgrisi[i] = KomEgrisi[i - 1] + Math.Abs(ToplamKomi) * 100;
KaymaEgrisi[i] = KaymaEgrisi[i - 1] + Math.Abs(Kayma * IslemMiktari[i] / 10);
}
else if (Veriler[i].Low <= HedefFiyat && SonPozisyon < 0)
{//*****short flat koşulu bölgesi*****
Sistem.Yon[i] = "F";
FlatSayar++;
IslemMiktari[i] = Kontrat * 1;
SonFiyat = HedefFiyat;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
ToplamKomi = SonFiyat * KomOran * IslemMiktari[i];
KomEgrisi[i] = KomEgrisi[i - 1] + Math.Abs(ToplamKomi) * 100;
KaymaEgrisi[i] = KaymaEgrisi[i - 1] + Math.Abs(Kayma * IslemMiktari[i] / 10);
}
else if (Veriler[i].Low <= StopFiyat && SonPozisyon > 0)
{//*****long stop koşulu bölgesi*****
Sistem.Yon[i] = "F";
StopSayar++;
IslemMiktari[i] = Kontrat * -1;
SonFiyat = StopFiyat;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
ToplamKomi = SonFiyat * KomOran * IslemMiktari[i];
KomEgrisi[i] = KomEgrisi[i - 1] + Math.Abs(ToplamKomi) * 100;
KaymaEgrisi[i] = KaymaEgrisi[i - 1] + Math.Abs(Kayma * IslemMiktari[i] / 10);
}
else if (Veriler[i].High >= StopFiyat && SonPozisyon < 0)
{//*****short stop koşulu bölgesi*****
Sistem.Yon[i] = "F";
StopSayar++;
IslemMiktari[i] = Kontrat * 1;
SonFiyat = StopFiyat;
SonPozisyon = SonPozisyon + IslemMiktari[i];
ToplamKarZarar = ToplamKarZarar - SonFiyat * IslemMiktari[i];
ToplamKomi = SonFiyat * KomOran * IslemMiktari[i];
KomEgrisi[i] = KomEgrisi[i - 1] + Math.Abs(ToplamKomi) * 100;
KaymaEgrisi[i] = KaymaEgrisi[i - 1] + Math.Abs(Kayma * IslemMiktari[i] / 10);
}
else { KomEgrisi[i] = KomEgrisi[i - 1]; KaymaEgrisi[i] = KaymaEgrisi[i - 1]; }
Pozisyon[i] = SonPozisyon;
//KarZarar[i] = (ToplamKarZarar + SonFiyat * Pozisyon[i]) * 100; //pozisyon kapanışına göre
KarZarar[i] = (ToplamKarZarar + Veriler[i].Close * Pozisyon[i]) * 100; //anlık görüntü
Komisyon[i] = Math.Abs(ToplamKomi) * 100;
SermayeEgrisi[i] = Sermaye + KarZarar[i];
NetSerEgrisi[i] = Sermaye + KarZarar[i] - KaymaEgrisi[i] - KomEgrisi[i];
AlVeTut[i] = Sermaye + (Veriler[i].Close - Veriler[1].Close) * 1000;
}

var KarZararIs = Sistem.Liste(0);
float KarZararIs1 = 0;
int BarNoIs1 = 1;
float FarkIs = 0;
for (int i = BasBar; i < Veriler.Count; i++)
{
if (Sistem.Yon[i] == "A" || Sistem.Yon[i] == "S")
{
FarkIs = KarZarar[i] - KarZararIs1;
for (int j = BarNoIs1; j < i; j++)
KarZararIs[j] = FarkIs;
KarZararIs1 = KarZarar[i];
BarNoIs1 = i;
}
if (i == Veriler.Count - 1)
{
FarkIs = KarZarar[i] - KarZararIs1;
for (int j = BarNoIs1; j < Veriler.Count; j++)
KarZararIs[j] = FarkIs;
}
}
var MaksSE = Sistem.Liste(0);
var DD = Sistem.Liste(0);
var MDD = Sistem.Liste(0);
var MaksIKZ = Sistem.Liste(0);
var MinIKZ = Sistem.Liste(0);
float MDDY = 0;
for (int i = BasBar; i < Veriler.Count; i++)
{
if (SermayeEgrisi[i] <= MaksSE[i - 1]) MaksSE[i] = MaksSE[i - 1]; else MaksSE[i] = SermayeEgrisi[i];
if (SermayeEgrisi[i] < MaksSE[i]) DD[i] = SermayeEgrisi[i] - MaksSE[i];
if (DD[i] >= MDD[i - 1]) MDD[i] = MDD[i - 1]; else { MDD[i] = DD[i]; MDDY = (MaksSE[i] - Math.Abs(MDD[i])) / MaksSE[i] - 1; }
if (KarZararIs[i] <= MaksIKZ[i - 1]) MaksIKZ[i] = MaksIKZ[i - 1]; else MaksIKZ[i] = KarZararIs[i];
if (KarZararIs[i] >= MinIKZ[i - 1]) MinIKZ[i] = MinIKZ[i - 1]; else MinIKZ[i] = KarZararIs[i];
}
float CAR = (float)Math.Pow(SermayeEgrisi[SermayeEgrisi.Count - 1] / Sermaye, 365f / (Veriler[Veriler.Count - 1].Date - Veriler[1].Date).Days) - 1;
float CARMDD = CAR / MDDY;
string ozettablo = "";
ozettablo += Sistem.Sembol + ";" + Sistem.Periyot + ";" + "MA-" + KucukPeriyot + "-" + BuyukPeriyot + ";";
ozettablo += Sermaye.ToString("N2") + ";";
ozettablo += SermayeEgrisi[SermayeEgrisi.Count - 1].ToString("N2") + ";";
ozettablo += KarZarar[KarZarar.Count - 1].ToString("N2") + ";" + ((SermayeEgrisi[SermayeEgrisi.Count - 1] / Sermaye) - 1).ToString("P2") + ";";
ozettablo += KomEgrisi[KomEgrisi.Count - 1].ToString("N2") + ";";
ozettablo += KaymaEgrisi[KaymaEgrisi.Count - 1].ToString("N2") + ";";
ozettablo += NetSerEgrisi[NetSerEgrisi.Count - 1].ToString("N2") + ";";
ozettablo += (NetSerEgrisi[NetSerEgrisi.Count - 1] - Sermaye).ToString("N2") + ";" + ((NetSerEgrisi[NetSerEgrisi.Count - 1] / Sermaye) - 1).ToString("P2") + ";";
ozettablo += MaksIKZ[MaksIKZ.Count - 1].ToString("N2") + ";";
ozettablo += MinIKZ[MinIKZ.Count - 1].ToString("N2") + ";";
ozettablo += MDD[MDD.Count - 1].ToString("N0") + ";" + MDDY.ToString("P2") + ";"; //+ Kontrat.ToString("N0") + ";";
ozettablo += CAR.ToString("N2") + ";" + CARMDD.ToString("N2") + ";";
ozettablo += (SermayeEgrisi[SermayeEgrisi.Count - 1] / (LongSayar + ShortSayar)).ToString("N2") + ";" + Kontrat.ToString("N0") + ";";
ozettablo += LongSayar + ";" + ShortSayar + ";";
ozettablo += FlatSayar + ";" + StopSayar + ";";
ozettablo += stpzrr + ";";
ozettablo += tpsk + ";";
ozettablo += tpsk + ";";
ozettablo += (DateTime.Now - time).Milliseconds + " ms..";
//yukarıdaki ozettablo değişkenine hesaplanan bütün değerleri ekliyoruz. buralarda değişiklik yaparken dikkat, tutarsızlıklara neden olabilir.
//bu ozettablo csv dosyasına satır satır yazılan optimizasyon sonuçlarıdır
using (System.IO.StreamWriter dosya = new System.IO.StreamWriter(@"c:\\ideal\\rapor\\" + Sistem.Name + "_Opt_Rapor.csv", true)) dosya.WriteLine(ozettablo);
//üsteki kod, var olan Optimizasyon_MA.csv dosyasına ozettablo değişkenini satır satır yazar.
Sistem.Optimizasyon("MA", KucukPeriyot, BuyukPeriyot, tpsk ,tpsk,stpzrr );
}
}
}
}
// }




optimizasyon yapacağımız sistemin başına opt yazıp kaydediyorum.

al-sat şartlarının(strateji) hemen üstüne,

for (double P1 = 1; P1<3; P1+=0.1)
{
for (double P2 = 1; P2<6; P2+=0.1)
{

en altada;


Sistem.StopVeyaKarFlatYuzde(P1,P2); //Param1=Stop, Param2 = KarAl
Sistem.Optimizasyon( P1 , P2);
}
}

thebaboli
06-10-2015, 05:51
teşekkürler Sezai bey

kopyaladığım yerde
count-1 varmış değişiklik yapınca atlamışım :(

geçici sinyal için kolay bir örnek {çok kısa 2 satır} alabilir miyim?



Son barı önceden tanımlayıp o şekilde kullanmak da bir çözüm. Örnek bir robot (sisteminin grafiğe uygulanmış hali de) aşağıda..



var Periyot = "60";
var Sembol = "VIP'VIP-X030";
var Veriler = Sistem.GrafikVerileriniOku(Sembol, Periyot);
var C = Sistem.GrafikFiyatOku(Veriler,"Kapanis");
var A = Sistem.Sum(C,5);
var B = Sistem.Liste(Veriler.Count,0);
int SonBar = Veriler.Count-1;
var Miktar = 0;


for (int i=3; i<Veriler.Count; i++)
B[i] = A[i]+A[i-1]-A[i-2]-A[i-3];

var Pozisyon = Sistem.PozisyonKontrolOku(Sembol);
var Islem ="";


var SartAL= B[SonBar] > 3.73;
var SartSAT= B[SonBar] < -3.73;


if (Pozisyon == 0 && SartAL)
{
Islem = "ALIS";
Miktar = 1;
}
else if (Pozisyon < 0 && SartAL)
{
Islem = "ALIS";
Miktar = 2;
}
else if (Pozisyon == 0 && SartSAT)
{
Islem = "SATIS";
Miktar = 1;
}
else if (Pozisyon > 0 && SartSAT)
{
Islem = "SATIS";
Miktar = 2;
}
var SonFiyat = Sistem.SonFiyat(Sembol);
// emri gönder
if (Islem != "")
{
if (Islem == "ALIS")
Sistem.PozisyonKontrolGuncelle(Sembol, Pozisyon+Miktar);
else if (Islem == "SATIS")
Sistem.PozisyonKontrolGuncelle(Sembol, Pozisyon-Miktar);

Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = Islem;
Sistem.EmirMiktari = Miktar;
Sistem.EmirSuresi = "GUN"; // GUN, SNS, IKG
Sistem.EmirTipi = "KPY"; // KPY, KIE, GIE, SAR
Sistem.EmirFiyatTipi = "PYS";
Sistem.EmirFiyati = SonFiyat; // PYS, LMT, EIF, KAP
Sistem.EmirGonder();
}




Teşekkürler Sezai bey :cool:

thebaboli
06-10-2015, 18:04
Merhabalar,

Yeni versiyonu kullanıma sunmuş bulunuyoruz.
Sistem.RobotViopAktif fonksiyonuna yeni bir parametre eklenmiştir.

Sistem.RobotViopAktif("SistemAdı", "Baz Sembol", "Emir Sembol", "Periyot", "Adet","SANIYE");
Saniye değeri girilmişse, son barda sinyal gelmişse, barın kapanmasına o kadar SANİYE kala emir gönderilecektir.

Aşağıdaki fotolarda da gösterdiğim gibi, sistem LONG durumda iken robotu çalıştırdım ve robot LONG'a geçti.
Sonra son barda SAT sinyali geldi. Bar kapanmasına 5 saniye kala emri göndermesi için, fonksiyonun SANİYE parametresine 5 girdim ve Bar kapanmadan (yeni barın açılmasını beklemeden) Robot sinyali işledi.

abonelerimize, SANAL MODDA çok iyi test etmeden, gerçek ortamda bu fonksiyonu kullanmamalarını önemle hatırlatırız.

Aşağıdaki detayları bilgilerine sunarım;

-SANİYE verisi girilmiş ise, herhangi bir barda sinyal geldiği zaman, barın kapanması beklenmeden emir (barın kapanmasına, girilen kadar saniye kala) gönderilir.
-Grafik periyodunuz ne olursa olsun, son barda sinyal gelmişse: SAAT 12:30 ve 17:45 olmasına SANİYE değeri kadar süre kala emir iletilir... (yarım gün tatil günlerde seans 12:30 da değil 12:45 de bitiyor. Bu durumda bu fonksiyon kullanılıyorsa 12:29:xx olunca (son barda sinyal de varsa) emir iletilir. Buna dikkat edilmesi lazım.
-Sistemde kullanılan Saat verisi, yayın saatidir. Saatte bazen 1-2 saniyelik senkronizasyon kaymaları olabileceği, sistemin çalışması ve tüm hesapların yapılıp robota sinyalin iletilmesinin de zaman alacağı hesaba katılarak planlama yapılmalıdır.
-SANİYE değerine 60'dan daha büyük bir değer girilemez.
-Bu fonksiyon, VIOP Seans başlangıç/bitiş saatleri filtresi içerir.
-Son barın kapanmasına X saniye kala emrin iletilmesinden sonra, kalan çok kısa sürededeki veri değişimleri repiant olayına ve dolayısıyla yeniden sinyal/emir üretilmesine neden olabilir.

Versiyonu buradan alabilirsiniz.: www.directfn.com.tr/terminal/ideal.exe

Saygılarımızla

http://i.hizliresim.com/8Q90LW.png (http://hizliresim.com/8Q90LW)

http://i.hizliresim.com/jjvPND.png (http://hizliresim.com/jjvPND)


SANİYE değerini "7" olarak girdiğim 60 dakikalık periyotta çalışan robotum, piyasanın kapanmasına 7 saniye kala Son barda gelmiş olan sinyalin gereğini yapıp SATIŞ emrini yolladı.
Gün sonunda, son barda sinyal varsa emri göndermesi testi de başarılı oldu.

http://i.hizliresim.com/kJ1ZDD.png (http://hizliresim.com/kJ1ZDD)


Merhabalar,

Son yapılan güncellemeyi içeren versiyonu aşağıdaki adresten indirebilirsiniz;

www.directfn.com.tr/terminal/ideal.exe



var Islem = Sistem.RobotViopAktif("Sistemizinin Adı", "Grafik Baz Sembol", "Emir Verilecek Sembol", Periyot", ADET, SANIYE, 0/1); //0=Tüm barlarda, 1=SADECE SEANS/GÜN SONUNDA


Son parametre 0 ise, Girilen SANİYE kadar önce emir iletimi, sinyal gelmiş TÜM BARLARDA geçerli.
Son Parametre 1 ise, Sadece 12:30 ve 17:45 den önce, son barda SİNYAL VARSA, girilen SANİYE kadar önce emir iletilir.

İyi çalışmalar

Teşekkürler Sezai bey :cool:


arkadaşlar ya ben iyi anlatamıyorum,
ya da yazıları dikkatli okumuyorsunuz.

şef hocam,
sen sistem stratejinde ne kadar hatalı işlem yapsan da
emir göndermeyi aşağıdaki kod ile yaparsan
döngüye yakalanmazsın.

var Anahtar = Sistem.Name + ", AYNI BAR KONTROL";
var Saniye = Sistem.ZamanKontrolSaniye(Anahtar);
if (Saniye > 7)
{
var Islem = Sistem.RobotViopAktif("AS4", "VIP'VIP-X030" , Sistem.AktifViopKontrat, "1", 4, 7, 0);
if (Islem !="")
{
Sistem.ZamanKontrolGuncelle(Anahtar);
// Mail Gönder
}
}


RobotViopAktif
fonksiyonunu aynı bar için uygulamazsanız
robot bar kapandığında emir gönderir.
siz isterseniz stratejiniz içinde her nano saniye yön değiştirin,
bar kapandığındaki sinyal ne ise o dikkate alınır.

aynı bar içinde son yedi saniye emir gönder derseniz,
yukarıdaki kod emir gönderdikten sonra 7 saniye boyunca emir göndermeyi keser
ve yeni bar açılır.
yeni bar açılınca da yeni barın bitimine 7 saniye kalana kadar robot pasif durur.


son 7 sn de emri gönderdi, sonra sinyal kayboldu, buna uymak için yeni barın açılışı ile pozunu düzelteceği emri gönderecek, ve sonra barın son 7sn ne kadar pasif duracak. doğru anlamış mıyım?


aynen .

thebaboli
07-10-2015, 18:29
Muhtemelen 97425 göreceğimiz en yüksek oldu bu rallide. Pivot direncide vardı orda gitti dokundu oraya. Yarın sat verir benim sistem. inşallah yanılırım :D . İşi abartıp Tiberiusa son yön longsa boğa , şortsa ayı fotosu nasıl ekletilebilir diye soracam da çekiniyorum . Çekinmemdeki sebep yapılabiliyor demesi :D .

http://i.hizliresim.com/yRAGyy.png (http://hizliresim.com/yRAGyy)




if (SonYon == "A")
Sistem.ResimEkle("d:\\boga.png",1,0,40);
else if (SonYon == "S")
Sistem.ResimEkle("d:\\ayi.png",1,0,40);
else
Sistem.ResimEkle("d:\\ucurum.png",1,0,40);


:)

Teşekkürler Sezai bey :cool:


Sezai bey ykoc un isteğine birde zemin yazısı eklemek istedim ama nerede hata yaptım acaba?

i


var Renk1 = Sistem.Renk(255, 255,215,0);
if (SonYon == "A") Sistem.ZeminYazisiEkle("BOĞA", 1, 450, 50, Renk1, "Algerian", 34);
else if (SonYon == "S") Sistem.ZeminYazisiEkle("AYI", 1, 450, 50, Renk1, "Algerian", 34);
else Sistem.ZeminYazisiEkle("BEKLE", 1, 450, 50, Renk1, "Algerian", 34);

Teşekkürler Bearbull abi :cool:

Exfake
08-10-2015, 17:27
Optimizasyon ile uğraşırken ihtiyaç duyduğum basit bir kodu paylaşıyım.

http://i.hizliresim.com/QW4DkZ.png (http://hizliresim.com/QW4DkZ)



var veri = Sistem.GrafikVerileriniOku("VIP'VIP-X030","5"); //Grafik bilgilerini giriniz.
var tarih = DateTime.Parse("02.01.2015 9:10"); //Aradığınız tarihi giriniz. Formul Test butonuna tıklayınız.
var mesaj = "";
var yok = false;
for(int i=1;i<veri.Count;i++)
{
if(veri[i].Date.Year == tarih.Year)
{
if(veri[i].Date.Month == tarih.Month)
{
if(veri[i].Date.Day == tarih.Day)
{
if(veri[i].Date.Hour == tarih.Hour)
{
if(veri[i].Date.Minute == tarih.Minute)
{
mesaj = tarih.ToString() + " tarihi, grafiğinizde "+i.ToString("N0")+" numaralı bardır.\r\nSon bardan geriye "+(veri.Count-i).ToString("N0")+" adet bar bulunmaktadır.";
yok = false;
break;
}
else yok = true;
}
else yok = true;
}
else yok = true;
}
else yok = true;
}
else yok = true;
}
if(yok) mesaj = "Aradığınız tarih bulunamadı.\r\nBar eksik veya tatil gününe denk gelmiş olabilir.";
Sistem.Mesaj(mesaj);

Exfake
09-10-2015, 19:07
Merhaba,
Bişeyler karaladım ama maalesef istediğim gibi olmadı :notr:, umarım birilerinin işine yarar. :wink:
Bu örnek optimizasyon kodu:


User.TaramaSayisi = 2; //Tam taramayı kaç kere tekrar edecek
User.TaramaBoyutu = 1000; //1 taramada kaç tekrar yapacak
User.AlgoParam = "Default"; //Hangi parametrelerle çalışacak
User.Optimize(5,50); //1. optimize işlemini ekliyoruz
User.Optimize(5,50); //2. optimize işlemini ekliyoruz
User.OptimizeBaslat(); //Başlatıyoruz

var Kapanis = Sistem.GrafikFiyatSec("Kapanis"); //Sisteminizin sabit değişkenlerini for döngülerinin dışına tanımlıyorsunuz

for(int z = 0; z<User.TaramaSayisi;z++) //Tam tarama döngüsü
{
for (int x = 0; x < User.AjanSayisi && User.Devam(x, User.gFitness, User.gFeasible); x++) //İlk parçacık sürüsünü hesaplatıyoruz
{
User.IlkSuruyuGonder(x);//ilk sürünün listelerini oluşturuyoruz
/**************Bu aralığa kendi sisteminizi yazıyorsunuz******************/
var MA1 = Sistem.MA(Kapanis, "Exp", User.RandomOpts[x][0]); //Yukarıda eklediğimiz optimize işlemini ma1'e tanımlıyoruz
var MA2 = Sistem.MA(Kapanis, "Exp", User.RandomOpts[x][1]); //Yukarıda eklediğimiz optimize işlemini ma2'ye tanımlıyoruz
Sistem.KesismeTara(MA1, MA2);
Sistem.GetiriHesapla("01.01.2015",0);
Sistem.Optimizasyon("MA", (int)User.RandomOpts[x][0], (int)User.RandomOpts[x][1]); //Yukarıda eklediğimiz optimizeleri sistem.optimizasyon modülüne tanımlıyoruz
User.KZList[x] = Sistem.GetiriKZ[Kapanis.Count-1]; //Sistemin getirisini algoritmaya gönderiyoruz
/************************************************** ***********************/
User.IlkSonuclariAl(x); //ilk sürünün sonuçlarını alıyoruz
}

for (int i = User.AjanSayisi; User.Devam(i, User.gFitness, User.gFeasible); ) //Sürünün geri kalanını hesaplatıyoruz
{
for (int x = 0; x < User.AjanSayisi && User.Devam(i, User.gFitness, User.gFeasible); x++, i++) //Sürüyü ajansayısına bölerek hesaplatıyoruz
{
User.TumSuruyuGonder(x);//listeleri oluşturuyoruz
/**************Bu aralığa kendi sisteminizi yazıyorsunuz******************/
var MA1 = Sistem.MA(Kapanis, "Exp", (int)User.RandomOpts[x][0]); //Yukarıda eklediğimiz optimize işlemini ma1'e tanımlıyoruz
var MA2 = Sistem.MA(Kapanis, "Exp", (int)User.RandomOpts[x][1]); //Yukarıda eklediğimiz optimize işlemini ma2'ye tanımlıyoruz
Sistem.KesismeTara(MA1, MA2);
Sistem.GetiriHesapla("01.01.2015",0);
Sistem.Optimizasyon("MA", (int)User.RandomOpts[x][0], (int)User.RandomOpts[x][1]); //Yukarıda eklediğimiz optimizeleri sistem.optimizasyon modülüne tanımlıyoruz
User.KZList[x] = Sistem.GetiriKZ[Kapanis.Count-1]; //Sistemin getirisini algoritmaya gönderiyoruz
/************************************************** ***********************/
User.TumSonuclariAl(x);//sonuçları alıyoruz
}
}
}


Bu kullanma kılavuzu. (https://drive.google.com/open?id=1iRdRon_C-vp7E4zJPgoeSeN43clyDbveUxWWJwQ3d6Q)
Bu Dll dosyası. (https://drive.google.com/open?id=0B0VMBB05UaPWZzBxTHgyQVdyUWs)
Bu Dll'in kaynak kodu. (https://drive.google.com/open?id=0B0VMBB05UaPWYXlHNkp2R1d6XzQ)
Buda meraklısı için algoritmanın orjinal kaynak kodu. (http://www.hvass-labs.org/projects/swarmops/cs/)
Hadi kolay gelsin.. :oley:

thebaboli
10-10-2015, 01:49
Gün bilgilerini kullanan Örnek
Günlerden Pazartesi ise VE RSI 50'den büyükse AL
Günlerden CUMA ise SAT
RSI 65'den büyükse ve sistem AL'da değilse AL
RSI 40'dan küçükse ve sistem SAT'ta değilse SAT
Sinyal gelen barlarda AL için Barın Düşük değerini, Satış ise barın Yüksek fiyatını ekrana yaz



var Veriler = Sistem.GrafikVerileri;
var gunler = new List<string>();
var RSI = Sistem.RSI(14);

var AlisRenk = Sistem.Renk(255, 0, 255, 255);
var SatisRenk = Sistem.Renk(255,255, 128, 100);

for (int i = 0; i < Veriler.Count; i++)
gunler.Add("");

var SonYon="";
for (int i = 1; i < Veriler.Count; i++)
{
gunler[i] = Veriler[i].Date.DayOfWeek.ToString();
if (gunler[i] == "Monday" && RSI[i] > 50 && SonYon!="A")
{
Sistem.Yon[i] = "A";
SonYon = "A";
var Yazi = "Alış=" + Sistem.GrafikVerileri[i].Close.ToString();
Sistem.YaziEkle(Yazi, 1, i, Sistem.GrafikVerileri[i].Low, AlisRenk, "Tahoma", 8);
}
else if (RSI[i] > 65 && SonYon!="A")
{
Sistem.Yon[i] = "A";
SonYon = "A";
var Yazi = "Alış=" + Sistem.GrafikVerileri[i].Close.ToString();
Sistem.YaziEkle(Yazi, 1, i, Sistem.GrafikVerileri[i].Low, AlisRenk, "Tahoma", 8);
}
else if (gunler[i] == "Friday" && SonYon!="S")
{
Sistem.Yon[i] = "S";
SonYon = "S";
var Yazi = "Satış=" + Sistem.GrafikVerileri[i].Close.ToString();
Sistem.YaziEkle(Yazi, 1, i, Sistem.GrafikVerileri[i].High, SatisRenk, "Tahoma", 8);
}
else if (RSI[i] < 40 && SonYon!="S")
{
Sistem.Yon[i] = "S";
SonYon = "S";
var Yazi = "Satış=" + Sistem.GrafikVerileri[i].Close.ToString();
Sistem.YaziEkle(Yazi, 1, i, Sistem.GrafikVerileri[i].High, SatisRenk, "Tahoma", 8);
}
}
Sistem.Cizgiler[0].Deger = RSI;
Sistem.Cizgiler[1].Deger = Sistem.Liste(50);



http://i.hizliresim.com/OBk524.png (http://hizliresim.com/OBk524)

Teşekkürler Sezai Bey :cool:

thebaboli
10-10-2015, 18:44
Sayın ideal yetkilileri, aynı barda birden fazla işlem yapmasına engel olacak bir fonksiyon yazılamaz mı? bu hem burada olduğu gibi sistemsel hata bile olsa önüne geçer, al-sat a girmenin önüne geçer. bunu aynı barda alma yerine 1dak. içinde işlem yapma şeklinde de uygulayabiliriz.
bunun daha önemli bir nedeni var. diğer arkadaşlar tarafından niçin gündeme taşınmadığına da şaşırıyorum, yada başka bir şekilde sorunu aşıyorlar. al yada sat şartı tek fonksiyon ise m[i]>0 ise yanına m[i-1]<0 terimini de yanına ilave ederek, flat durumunda sistemin al-sata girmesine engel oluyoruz. al-sat şartları 5-6 tane ise bunların [i-1] terimlilerini ve ile ekleyemeyiz. bu durumun tek barda sağlanması çok zor olur. bunun yerine aynı barda işlem açmayı engelleyecek bir fonksiyon tanımlansa süper olur.


dün bearbull hoca sanırım bunu zaman kontrol ile halletmeyi düşündü,
bende jeton düşmedi, kusura bakma bearbull üstat.

şef hocam öncelikle aynı bar içinde emir gönderme fonksiyonu 60 saniye öncesini kabul etmiyor.
buna dikkat edelim.
ikinci olarak emir gönder fonksiyonu sürekli olarak sistemle uyumlu olmaya ayarlı.
yani bar kapanışına 7 saniye kala emri gönder derseniz,
bu son 7 saniye içinde sinyal değişikliği olursa emir göndermeye devam eder.

7 saniye kala emri göndersin,
sonraki sinyallerin emrini yollamasın,
yeni bar açılışında sistem ile aynı yönü sağlasın diyorsanız,
bunu zaman kontrol ile yapabilirsiniz.

zaman kontrolle ilgili aşağıdaki kodu atıyorum, debug amaçlı.
bir şart sağlanırsa 7 saniye süresince kod çalışmayacak.
bu kodu robot olarak çalıştırınca amaç daha iyi anlaşılacaktır.
örnek kod 30 saniyede bir 7 saniye mola veriyor.



var Anahtar = Sistem.Name + ", AYNI BAR KONTROL";
var Saniye = Sistem.ZamanKontrolSaniye(Anahtar);
if (Saniye > 7)
{
Sistem.Mesaj(Anahtar + Saniye.ToString());
if (Saniye > 30)
{
Sistem.ZamanKontrolGuncelle(Anahtar);
}
}





aşağıdaki kod bar kapanmaya 7 saniye kala sinyal değişmişse emri gönderir.
7 saniye boyunca sinyal değişimini dikkate almaz.
yeni bar oluşunca tekrar sinyalin yönüne göre hareket eder.
sanırım lyrk üstadın da vurguladığı buna benzer birşeydi.
lütfen önce sanal modda test edin.




var Anahtar = Sistem.Name + ", AYNI BAR KONTROL";
var Saniye = Sistem.ZamanKontrolSaniye(Anahtar);
if (Saniye > 7)
{
var Islem = Sistem.RobotViopAktif("AS4", "VIP'VIP-X030" , Sistem.AktifViopKontrat, "1", 4, 7, 0);
if (Islem !="")
{
Sistem.ZamanKontrolGuncelle(Anahtar);
// Mail Gönder
}
}


Teşekkürler :cool:

thebaboli
12-10-2015, 15:41
Sistem.IzleyenStopYuzde
Sistem.IzleyenStopPuan

fonksiyonları eklenmiştir.
stop çizgisini grafik üzerinde görebilirsiniz.

kolaylıklar dileriz.

http://i.hizliresim.com/8Qg8X1.png (http://hizliresim.com/8Qg8X1)



izleyen stop fonksiyonlarının çağırılması ve
ekranda gösterilmesi ile ilgili örnek kod



var V = Sistem.GrafikVerileri;
var C = Sistem.GrafikFiyatSec("Kapanis");

var XX = C;
var X1 = Sistem.MA(XX, "Exp", 10);
var X2 = Sistem.MA(XX, "Exp", 50);

var IZLEYENSTOP = Sistem.Liste(0);

var SonYon = "";
for (int i = 1 ; i < Sistem.BarSayisi; i++)
{
IZLEYENSTOP[i] = Sistem.IzleyenStopYuzde(1.5, i);
if (IZLEYENSTOP[i] == 0) IZLEYENSTOP[i] = C[i];

if (X1[i] > X2[i] && SonYon != "A" ) // alış
{
SonYon = "A";
Sistem.Yon[i] = "A";
}
if (X1[i] < X2[i] && SonYon != "S" ) // satış
{
SonYon = "S";
Sistem.Yon[i] = "S";
}
}

Sistem.Cizgiler[0].Deger = X1;
Sistem.Cizgiler[1].Deger = X2;
Sistem.Cizgiler[2].Deger = IZLEYENSTOP;
Sistem.Cizgiler[3].Deger = C;

var Yesil = Sistem.Renk(80,0,200,0);
var Kirmizi = Sistem.Renk(80,200,0,0);
Sistem.DolguEkle(3, 2, Yesil, Kirmizi);



Örnek:
Sistem.IzleyenStopYuzde fonksiyonunun strateji içinde kullanımı
Üç indikatör kullanılmıştır




var V = Sistem.GrafikVerileri;
var C = Sistem.GrafikFiyatSec("Kapanis");

var XX = C;
var X1 = Sistem.MA(XX, "Exp", 10);
var X2 = Sistem.MA(XX, "Exp", 50);

var YY = Sistem.RSI(100);
var Y1 = Sistem.MA(YY, "Exp", 10);
var Y2 = Sistem.MA(YY, "Exp", 500);

var ZZ = Sistem.IMI(80);
var Z1 = Sistem.MA(ZZ, "Exp", 10);
var Z2 = Sistem.MA(ZZ, "Exp", 500);


var IZLEYENSTOP = Sistem.Liste(0);

var SonYon = "";
var FlatOncesiYon = "";
for (int i = 1 ; i < Sistem.BarSayisi; i++)
{
var IndikatorAlis = X1[i] > X2[i] && Y1[i] > Y2[i] && Z1[i] > Z2[i];
var IndikatorSatis = X1[i] < X2[i] && Y1[i] < Y2[i] && Z1[i] < Z2[i];

IZLEYENSTOP[i] = Sistem.IzleyenStopYuzde(1.1, i);
if (IZLEYENSTOP[i] == 0) IZLEYENSTOP[i] = C[i];

if (C[i] < IZLEYENSTOP[i] && SonYon == "A") // alıştan flate
{
FlatOncesiYon = SonYon;
SonYon = "F";
Sistem.Yon[i] = "F";
}
else if (C[i] > IZLEYENSTOP[i] && SonYon == "S") // satıştan flate
{
FlatOncesiYon = SonYon;
SonYon = "F";
Sistem.Yon[i] = "F";
}
else if (IndikatorAlis && SonYon != "A" && FlatOncesiYon != "A") // alış
{
FlatOncesiYon = "";
SonYon = "A";
Sistem.Yon[i] = "A";
}
else if (IndikatorSatis && SonYon != "S" && FlatOncesiYon != "S") // satış
{
FlatOncesiYon = "";
SonYon = "S";
Sistem.Yon[i] = "S";
}
}

Sistem.Cizgiler[0].Deger = X1;
Sistem.Cizgiler[1].Deger = X2;
Sistem.Cizgiler[2].Deger = IZLEYENSTOP;
Sistem.Cizgiler[3].Deger = C;

var Yesil = Sistem.Renk(80,0,200,0);
var Kirmizi = Sistem.Renk(80,200,0,0);
Sistem.DolguEkle(3, 2, Yesil, Kirmizi);




abi herhangi bir indikatöre uygulayabilecekmiyiz izleyen stobu ?



evet üstat.
StopVeyaKarFlatYuzde aynı işi yapıyor.
Dolayısyla stratejiyi eski kolay fonksiyonla yapabilirsin.
bu yeni fonskiyonu ekranda stop çizgisini görmek için kullanabilirsin.
hiç stratejiye katmana gerek olmayabilir.


Sistem.KarAlYuzde
Sistem.KarAlPuan
fonksiyonları eklendi.
çizgi olarak grafik üzerine atabilirsiniz.

http://i.hizliresim.com/yRM3zN.png (http://hizliresim.com/yRM3zN)



Örnek:
KarAlYuzde ve IzleyenStopYuzde çizgilerinin grafik üzerinde gösterimi
Strateji içinde kullanımı





var V = Sistem.GrafikVerileri;
var C = Sistem.GrafikFiyatSec("Kapanis");

var XX = C;
var X1 = Sistem.MA(XX, "Exp", 10);
var X2 = Sistem.MA(XX, "Exp", 50);

var YY = Sistem.RSI(100);
var Y1 = Sistem.MA(YY, "Exp", 10);
var Y2 = Sistem.MA(YY, "Exp", 200);

var ZZ = Sistem.IMI(80);
var Z1 = Sistem.MA(ZZ, "Exp", 10);
var Z2 = Sistem.MA(ZZ, "Exp", 200);


var IZLEYENSTOP = Sistem.Liste(0);
var KARAL = Sistem.Liste(0);


var SonYon = "";
var FlatOncesiYon = "";
for (int i = 1 ; i < Sistem.BarSayisi; i++)
{
var IndikatorAlis = X1[i] > X2[i] && Y1[i] > Y2[i] && Z1[i] > Z2[i];
var IndikatorSatis = X1[i] < X2[i] && Y1[i] < Y2[i] && Z1[i] < Z2[i];

IZLEYENSTOP[i] = Sistem.IzleyenStopYuzde(1.5, i);
if (IZLEYENSTOP[i] == 0) IZLEYENSTOP[i] = C[i];

KARAL[i] = Sistem.KarAlYuzde(2.5, i);
if (KARAL[i] == 0) KARAL[i] = C[i];

if ((C[i] < IZLEYENSTOP[i] || C[i] >= KARAL[i]) && SonYon == "A") // alıştan flate
{
FlatOncesiYon = SonYon;
SonYon = "F";
Sistem.Yon[i] = "F";
}
else if ((C[i] > IZLEYENSTOP[i] || C[i] <= KARAL[i]) && SonYon == "S") // satıştan flate
{
FlatOncesiYon = SonYon;
SonYon = "F";
Sistem.Yon[i] = "F";
}
else if (IndikatorAlis && SonYon != "A" && FlatOncesiYon != "A") // alış
{
FlatOncesiYon = "";
SonYon = "A";
Sistem.Yon[i] = "A";
}
else if (IndikatorSatis && SonYon != "S" && FlatOncesiYon != "S") // satış
{
FlatOncesiYon = "";
SonYon = "S";
Sistem.Yon[i] = "S";
}
}

Sistem.Cizgiler[0].Deger = X1;
Sistem.Cizgiler[1].Deger = X2;
Sistem.Cizgiler[2].Deger = IZLEYENSTOP;
Sistem.Cizgiler[3].Deger = C;
Sistem.Cizgiler[4].Deger = KARAL;


var Yesil = Sistem.Renk(80,0,200,0);
var Kirmizi = Sistem.Renk(80,200,0,0);
Sistem.DolguEkle(3, 2, Yesil, Kirmizi);





arkadaşlar,
kar realizsayonu için flate geçip
belli bir puan sonrasında tekrar trend yönüne giren sistem örneği aşağıdadır.
ilgilenen arkadaşların sanalda iyice test edip kurgusal hata bulurlarsa bizi bilgilendirmelerini rica ederiz.
üç indikatör kullanılmıştır.

http://i.hizliresim.com/bY5VYb.png (http://hizliresim.com/bY5VYb)



var V = Sistem.GrafikVerileri;
var C = Sistem.GrafikFiyatSec("Kapanis");

var XX = C;
var X1 = Sistem.MA(XX, "Exp", 10);
var X2 = Sistem.MA(XX, "Exp", 50);

var YY = Sistem.RSI(100);
var Y1 = Sistem.MA(YY, "Exp", 10);
var Y2 = Sistem.MA(YY, "Exp", 200);

var ZZ = Sistem.IMI(80);
var Z1 = Sistem.MA(ZZ, "Exp", 10);
var Z2 = Sistem.MA(ZZ, "Exp", 200);


var IZLEYENSTOP = Sistem.Liste(0);
var KARAL = Sistem.Liste(0);


var SonYon = "";
var FlatOncesiYon = "";
var FlatFiyat = 0.0f;
for (int i = 1 ; i < Sistem.BarSayisi; i++)
{
var IndikatorAlis = X1[i] > X2[i] && Y1[i] > Y2[i] && Z1[i] > Z2[i];
var IndikatorSatis = X1[i] < X2[i] && Y1[i] < Y2[i] && Z1[i] < Z2[i];

IZLEYENSTOP[i] = Sistem.IzleyenStopYuzde(1.5, i);
if (IZLEYENSTOP[i] == 0) IZLEYENSTOP[i] = C[i];

KARAL[i] = Sistem.KarAlYuzde(2.0, i);
if (KARAL[i] == 0) KARAL[i] = C[i];

if (SonYon == "F" && FlatOncesiYon == "A" && C[i] > FlatFiyat * 1.005f ) // kar alındıktan sonra tekrar alış trendine girme
{
FlatOncesiYon = "";
SonYon = "A";
Sistem.Yon[i] = "A";
}
else if (SonYon == "F" && FlatOncesiYon == "S" && C[i] < FlatFiyat * 0.995f ) // kar alındıktan sonra tekrar alış trendine girme
{
FlatOncesiYon = "";
SonYon = "A";
Sistem.Yon[i] = "A";
}
else if ((C[i] < IZLEYENSTOP[i] || C[i] >= KARAL[i]) && SonYon == "A") // alıştan flate
{
FlatOncesiYon = SonYon;
FlatFiyat = C[i];
SonYon = "F";
Sistem.Yon[i] = "F";
}
else if ((C[i] > IZLEYENSTOP[i] || C[i] <= KARAL[i]) && SonYon == "S") // satıştan flate
{
FlatOncesiYon = SonYon;
FlatFiyat = C[i];
SonYon = "F";
Sistem.Yon[i] = "F";
}
else if (IndikatorAlis && SonYon != "A" && FlatOncesiYon != "A") // alış
{
FlatOncesiYon = "";
SonYon = "A";
Sistem.Yon[i] = "A";
}
else if (IndikatorSatis && SonYon != "S" && FlatOncesiYon != "S") // satış
{
FlatOncesiYon = "";
SonYon = "S";
Sistem.Yon[i] = "S";
}
}

Sistem.Cizgiler[0].Deger = X1;
Sistem.Cizgiler[1].Deger = X2;
Sistem.Cizgiler[2].Deger = IZLEYENSTOP;
Sistem.Cizgiler[3].Deger = C;
Sistem.Cizgiler[4].Deger = KARAL;

var Yesil = Sistem.Renk(80,0,200,0);
var Kirmizi = Sistem.Renk(80,200,0,0);
Sistem.DolguEkle(3, 2, Yesil, Kirmizi);



Merhabalar

iDeal versiyonu güncellenmiştir.

Aşağıdaki dört yeni fonksiyon eklenmiştir.

Sistem.IzleyenStopYuzde
Sistem.IzleyenStopPuan
Sistem.KarAlYuzde
Sistem.KarAlPuan

Versiyonu buradan alabilirsiniz: www.directfn.com.tr/terminal/ideal.exe


Saygılarımla



Teşekkürler :cool:

thebaboli
13-10-2015, 00:12
Momentum ve ADX indikatörleri için LİSTE okutma imkanı eklendi Sayın stradivarus.

Sistem.ADX(Liste,14)
Sistem.Momentum (Liste, 14)

Versiyonu buradan alabilirsiniz: www.directfn.com.tr/terminal/ideal.exe

Örnek: RSI'ın ADX'i..
http://i.hizliresim.com/WEnvWQ.png (http://hizliresim.com/WEnvWQ)

Teşekkürler Sezai Bey :cool:

thebaboli
13-10-2015, 10:04
üstat
bu görüntü doğru mu ?

http://i.hizliresim.com/n273Pl.png (http://hizliresim.com/n273Pl)


görüntü doğruysa kod bu.



var V = Sistem.GrafikVerileri;
var C = Sistem.GrafikFiyatSec("Kapanis");

var bbalt = Sistem.BollingerDown("Simple", 20, 2);
var bborta = Sistem.BollingerMid("Simple", 20, 2);
var bbust = Sistem.BollingerUp("Simple", 20, 2);

var SonYon = "";
var Fiyat = 0.0f;
for (int i =100; i<V.Count; i++)
{
if (C[i] < Fiyat * 0.997f && SonYon == "A") // alıştan flate
{
SonYon = "F";
Sistem.Yon[i] = "F";
}
else if (C[i] > Fiyat * 1.003f && SonYon == "S") // satıştan flate
{
SonYon = "F";
Sistem.Yon[i] = "F";
}
else if (C[i-1] < bbalt[i-1] && C[i] >= bbalt[i] && SonYon != "A" ) // alış
{
Sistem.Yon[i] = "A";
SonYon = "A";
Fiyat = C[i];
}
else if (C[i-1] > bbust[i-1] && C[i] <= bbust[i] && SonYon != "S" ) // satış
{
Sistem.Yon[i] = "S";
SonYon = "S";
Fiyat = C[i];
}
}

Sistem.Cizgiler[0].Deger = bbust;
Sistem.Cizgiler[1].Deger = bborta;




optimize edersen güzel birşey çıkabilir.
bollinger deki 2 parametre
stop değeri
hatta kar al koymak lazım
4 döngülü optimizasyon lazım buna

Teşekkürler :cool:

thebaboli
13-10-2015, 23:30
hocam daha türkçe terimler daha türkçe :D POC dahada açalım

zır cahil benden bir fıkır daha var dün rüyalarıma girdi :D

nedense bendeki fikirler hep ruyama giriyor.

Bir çok sistemci olmak üzere bir çokta manuelcinin vobta veyahutta diğer yatırım ensturumanların da başına gelen korkulu ruyamız nedir ?

kayma maliyeti falan yanında halt etsin. nedir ?

tabiki GAP lerdir.

BU gapler insanı anasından dogduguna sistemcileride sistemci olmaktan cıkartıyor. Gezi gapı bir çok kişinin batışıdır yine seçim. bir çok kişinin batışıdır. Aynı sekılde sistemlerde hem bu tur cok buyuk gaplerden hemde küçük 2000 3000 puanlık gaplerde elimizden hiçbirşey gelmiyor.

Yani sistemcilerin en büyük sorunu bu tur gapler yüzünden 5 ayda kazandıgı parayı geri vermesidir. en dandık sıstem bıle 3 aşağı 5 yukarı bır senede karlı cıkartıyor ama bu tur gaplerde yakaladımı affetmıyor goruyor o karıda

Daha önceki konusmalarımızdanda hatırlıyorum ustam gaplere optımıze etmek dogru degıl buyuk gaplerdekı dususlerı saymasakta olur falan gıbı konusmustuk hatırlıyorsanız.

Şimdi gapın ne zman gelecegı bellı degıl oyle ya gezi parkını hangi vatandaş daha onceden bilipte sistemini kapatabilirdiki kaldı ki sistem kapatmanın dogru bır davranıs olmadıgını bıldıgımız halde.

Farkettiyseniz bir çok vob yatırımcı hatta bunun içinde bir kaç sistemciyide sokabiliriz. Elımde ertesi gune pozda girersem rahat uyuyamıyorum der buradaki "KORKU" olası gaplerdir. Ve bir çok yaıtırımcı aksama dogru pozunu kapatıp flat ile ertesi güne başlar.

Şimdi bence bu olayıda ortadan kaldırabılmenın yeri ve zamanı geldi.

Elbetteki illa bu yapılsın gıbı bır talebım yok bu tamamıyle size kalmıs birşey.

Bizler her halukuarda bu işe oldugu seklıyle devam edecegız buna mecburuz cunku sıstemcılık işine önem veriyoruz.

Ben diyorumki eğer yapılabılırse tamamıyle opsiyona dayalı olmak kaydıyla.

Robot fonskiyonuna opsiyonel bir parametre daha eklenmesı yonunde olacak.

Az cok tahmın etmişsinizdir. Önce mevcut fonsıyonumuzu hatırlayalım.

var Islem = Sistem.RobotViopAktif("Sistemizinin Adı", "Grafik Baz Sembol", "Emir Verilecek Sembol", Periyot", ADET, SANIYE, 0/1); //0=Tüm barlarda, 1=SADECE SEANS/GÜN SONUNDA

Eğer yapılabılırse;


var Islem = Sistem.RobotViopAktif("Sistemizinin Adı", "Grafik Baz Sembol", "Emir Verilecek Sembol", Periyot", ADET, SANIYE, 0/1, FLAT/ACIK); //0=Tüm barlarda, 1=SADECE SEANS/GÜN SONUNDA

// FLAT yazarsak saat 5:44 te sistemi otomatık her gun sonu olarak flata geçer ertesi günü ilk işlemde tekrar aynı poza girer.
// ACIK yazarsak hersey simdi oldugu gibi ilerler.

düşünün taşının mantıklıysa yapın farklı sekılde düşünüyorsanız söylemediğimi varsayın unutun gitsin.

Ben şöyle düşünüyorum bu tur onerılerı sunulan her bir onerı ve gelişim belkı bugun hiçkimsenin işine yaramaz ama yarın mutlaka birinin işine yarayacaktır.

saygılarımla...



erhan bunu sistem ile yaparsan robotun ve sistemin aynı yönde hareket eder.
bu şekilde optimizasyon yapabilirsin.
sistemde yaptığın hesaplama gerçeği yansıtır.
resimde hergün sonu flate geçiyor.

http://i.hizliresim.com/LE4aW1.png (http://hizliresim.com/LE4aW1)


yapman gereken şey;
5 dakikalık sistemde saat 17:40 ise flat yap
değilse normal stratejini uygula diyorsun.
örnekte mavi renkli bölge


var V = Sistem.GrafikVerileri;
var C = Sistem.GrafikFiyatSec("Kapanis");

var AX = Sistem.RSI(200);
var A1 = Sistem.MA(AX, "Exp", 1);
var A2 = Sistem.MA(AX, "Exp", 500);

var SonYon = "";
for (int i = 1 ; i < Sistem.BarSayisi; i++)
{
if (V[i].Date.Hour == 17 && V[i].Date.Minute == 40)
{
SonYon = "F";
Sistem.Yon[i] = "F";
}
else if (A1[i] > A2[i] && SonYon != "A" ) // alış
{
SonYon = "A";
Sistem.Yon[i] = "A";
}

else if (A1[i] < A2[i] && SonYon != "S" ) // satış
{
SonYon = "S";
Sistem.Yon[i] = "S";
}
}

Teşekkürler :cool:

thebaboli
14-10-2015, 13:33
Sn ykoc'un talebi üzerine, Getiri Hesapla fonksiyona yeni bir liste daha eklenmiştir.işlem bazında Kar/Zarar gösteren listenin ismi GetiriKZPoz.

Örnek kullanım:


Sistem.GetiriHesapla("10/10/2010",0.000);
Sistem.Cizgiler[0].Deger = Sistem.GetiriKZPoz;

http://i.hizliresim.com/bY2bBV.png (http://hizliresim.com/bY2bBV)



ykoc üstadın talebi doğrultusunda aylık K/Z eğrisi eklenmiştir.
aylık bazda ne yaptığınız görülebilir.

ykoc hocam bu nasıl bir sistem böyle, her ay üstüne koymuş, maşallah.





Sistem.Cizgiler[15].Deger = Sistem.GetiriKZPoz;
Sistem.Cizgiler[16].Deger = Sistem.GetiriKZAy;

var RenkY = Sistem.Renk(120, 0, 200, 0);
var RenkD = Sistem.Renk(120, 200, 0, 0);
Sistem.DolguEkle(15 , 16, RenkY, RenkD);



http://i.hizliresim.com/ZJVdB3.png (http://hizliresim.com/ZJVdB3)


GetiriHesapla fonksiyonuna GetiriKZYil ve GetiriKZGun listeleri de eklenmiştir.

http://i.hizliresim.com/a0DXEg.png (http://hizliresim.com/a0DXEg)


Yeni güncellemeler sonrası, Sistem.GetiriHesapla fonksiyonu kodlarınıza eklendiğinde, çizgilere aşağıdaki listeleri alabiliyorsunuz;



Sistem.GetiriHesapla("01/01/2010", 0.00);

Sistem.Cizgiler[0].Deger = Sistem.GetiriKZ;
Sistem.Cizgiler[1].Deger = Sistem.GetiriKZGun;
Sistem.Cizgiler[2].Deger = Sistem.GetiriKZAy;
Sistem.Cizgiler[3].Deger = Sistem.GetiriKZYil;
Sistem.Cizgiler[4].Deger = Sistem.GetiriKZPoz;
Sistem.Cizgiler[5].Deger = Sistem.GetiriMiktar;
Sistem.Cizgiler[6].Deger = Sistem.GetiriPozisyon;



GetiriHesapla fonksiyonu dönüşlerine, PERFORMANS ANALİZ tablosundaki bazı değerleri de ekledik.

En çok kullanılan bazı değerleri aşağıdaki komutlarla okutabilir, bu verileri grafik ekranının zemininde yazdırabilirsiniz.



Sistem.GetiriKarIslem;
Sistem.GetiriZararIslem;
Sistem.GetiriKarIslemOran;
Sistem.GetiriToplamIslem;
Sistem.GetiriKarMiktar;
Sistem.GetiriZararMiktar;
Sistem.ProfitFactor;
Sistem.GetiriNetKar;


NOT: Sistem---Performans tablosundaki değerlere göre İşlem Sayılarında küçük farklar görülebilir.
İşlem açma kapama fiyatları aynı olan işlemleri bu fonksiyonlarda, karlı işlemler altına aldık.

Aşağıdaki örnek kodu sisteminizde kullanabilirsiniz..



Sistem.GetiriHesapla("01/01/2010",0.000);

var Renk1 = Sistem.Renk(150, 255, 255, 0);
var Renk2 = Sistem.Renk(255, 0, 255, 0);
var Renk3 = Sistem.Renk(255, 255, 0, 80);

Sistem.ZeminYazisiEkle("Toplam İşlem Sayısı = " + " " +Sistem.GetiriToplamIslem.ToString("0"), 1, 320, 20, Renk1, "Tahoma", 10);
Sistem.ZeminYazisiEkle("Kazandıran İşlem Sayısı = " + " " + Sistem.GetiriKarIslem.ToString("0"), 1, 320, 35, Renk1, "Tahoma", 10);
Sistem.ZeminYazisiEkle("Kaybettiren İşlem Sayısı = " + " " + Sistem.GetiriZararIslem.ToString("0"),1, 320, 50, Renk1, "Tahoma", 10);
Sistem.ZeminYazisiEkle("Karlı İşlem Miktarı = " + " " + Sistem.GetiriKarMiktar.ToString("0.000"), 1, 320, 85, Renk1, "Tahoma", 10);
Sistem.ZeminYazisiEkle("Zararlı İşlem Miktarı = " + " " + Sistem.GetiriZararMiktar.ToString("0.000"),1, 320, 100, Renk1, "Tahoma", 10);
Sistem.ZeminYazisiEkle("Karlı İşlem Oranı = " + " " + Sistem.GetiriKarIslemOran.ToString("0.00"), 1, 320, 115, Renk1, "Tahoma", 10);
Sistem.ZeminYazisiEkle("Profit Factor = " + " " + Sistem.ProfitFactor.ToString("0.00"),1, 620, 50, Renk3, "Tahoma", 12);
Sistem.ZeminYazisiEkle("Net Kar = " + " " + Sistem.GetiriNetKar.ToString("0.000"),1, 620, 30, Renk2, "Tahoma", 15);





Teşekkürler :cool:

thebaboli
15-10-2015, 13:35
Sistem olarak yazdiginiz tum indikatorleri ve fonsiyonlari robot diline ceviripte tanimalaniz gerekiyor

Kodunuz bastan sona degismeli anlayacaginiz icindeki hersey

Neden boyle bir seye gerek duyuyorsunuz ki

Sistemi robota cevirmek gercek biraz problemli yeni baslayanlar icin.gerekte yok tek satirla robota cevirebiliyoruz sistemler

Ama eski usulde butun sistem kodlamani ayri ayri robot sekline donusecek fonksiyonlarin kullanilmasi gerekiyor

Sanırım ne istediğimi ifade edemedim, elimdeki robotu güncellemek istiyorum, ve sistemi olan bir robot değil.

mesela bu bir robot kodu parçası;


// alış
if (Sistem.YukariKestiyse(MA1, MA2))
{
if (Pozisyon == 0)
{
var Miktar = 1;
Sistem.PozisyonKontrolGuncelle(Sembol, Pozisyon+Miktar);
Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = "Alış";
Sistem.EmirMiktari = Miktar;
Sistem.EmirSuresi = "GUN"; // GUN, SNS, IKG
Sistem.EmirTipi = "KPY"; // KPY, KIE, GIE, SAR
Sistem.EmirFiyatTipi = "PYS"; // PYS, LMT, EIF, KAP
Sistem.EmirGonder();
}
else if (Pozisyon < 0)
{
var Miktar = -2*Pozisyon;
Sistem.PozisyonKontrolGuncelle(Sembol, Pozisyon+Miktar);
Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = "Alış";
Sistem.EmirMiktari = Miktar;
Sistem.EmirSuresi = "GUN"; // GUN, SNS, IKG
Sistem.EmirTipi = "KPY"; // KPY, KIE, GIE, SAR
Sistem.EmirFiyatTipi = "PYS"; // PYS, LMT, EIF, KAP
Sistem.EmirGonder();
}
}

// satış
if (Sistem.AsagiKestiyse(MA1, MA2))
{
if (Pozisyon == 0)
{
var Miktar = 1;
Sistem.PozisyonKontrolGuncelle(Sembol, Pozisyon-Miktar);
Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = "Satış";
Sistem.EmirMiktari = Miktar;
Sistem.EmirSuresi = "GUN"; // GUN, SNS, IKG
Sistem.EmirTipi = "KPY"; // KPY, KIE, GIE, SAR
Sistem.EmirFiyatTipi = "PYS"; // PYS, LMT, EIF, KAP
Sistem.EmirGonder();
}
else if (Pozisyon > 0)
{
var Miktar = 2*Pozisyon;
Sistem.PozisyonKontrolGuncelle(Sembol, Pozisyon-Miktar);
Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = "Satış";
Sistem.EmirMiktari = Miktar;
Sistem.EmirSuresi = "GUN"; // GUN, SNS, IKG
Sistem.EmirTipi = "KPY"; // KPY, KIE, GIE, SAR
Sistem.EmirFiyatTipi = "PYS"; // PYS, LMT, EIF, KAP
Sistem.EmirGonder();
}
}

ve buda bir robot kodu parçası


// emri gönder
if (Islem != "")
{
if (Islem == "ALIS")
Sistem.PozisyonKontrolGuncelle(Sembol, Pozisyon+Miktar);
else if (Islem == "SATIS")
Sistem.PozisyonKontrolGuncelle(Sembol, Pozisyon-Miktar);

Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = Islem;
Sistem.EmirMiktari = Miktar;
Sistem.EmirSuresi = "GUN"; // GUN, SNS, IKG
Sistem.EmirTipi = "KPY"; // KPY, KIE, GIE, SAR
Sistem.EmirFiyatTipi = "PYS"; // PYS, LMT, EIF, KAP
Sistem.EmirGonder();
}

Robot kodu derken bu emri gönder kısmını kastedmiştim. üzerine kurum adı kullanıcı adı, çalışacağı saat aralığı ,sinyalden önce satış yapan ve diğer eklenen pekçok gerekli her şeyi içeren , denenmiş, sorunsuz bir emir gönderme kodu. Herşey konular içinde var ama ayrı ayrı , çoğu daha sonradan düzeltilmiş değiştirilmiş . arada bişey kaçırdığınızda ki dikkatle okuyorum, yapmak istediğiniz çorba oluyor.
net temiz bitane olsa çok iyi olacak.



Doğru anladıysam, ihtiyacınız olan böyle birşey..

Saat aralığı vs gibi güvenlik kontrolleri, işlem yapınca mail gönderimi yapması, poz kontrolde sistemin adını da kullanma vs vs
Stratejisiyle birlikte örnek çalışan robot kodu



var LotSize = 4.0;
var Sembol = "VIP'F_XU0301015S0";
var Periyot = "5";

var V = Sistem.GrafikVerileriniOku(Sembol, Periyot);

var AX = Sistem.GrafikFiyatOku(V, "Kapanis");
var A1 = Sistem.MA(AX, "Exp", 10);
var A2 = Sistem.MA(AX, "Exp", 100);


// tara
var SartAl = false;
var SartSat = false;
var SonYon = "";
for (int i = 1 ; i < V.Count - 1; i++)
{
if (( (A1[i] > A2[i] ) ) && SonYon != "A" ) // alış
{
SonYon = "A";
if (i == V.Count - 2) SartAl = true;
}
if (((A1[i] < A2[i] )) && SonYon != "S") // satış
{
SonYon = "S";
if (i == V.Count - 2) SartSat = true;
}
}



var Islem = "";
var Miktar = 0.0;
var SonFiyat = Sistem.SonFiyat(Sembol);
var Pozisyon = Sistem.PozisyonKontrolOku(Sistem.Name + " , " + Sembol);

//SİNYAL ÜRETME VE GÜVENLİK KONTROLLERİ
if (SonFiyat > 0 && (Sistem.SaatAraligi("09:10", "12:30") || Sistem.SaatAraligi("13:50", "17:45")) && V[V.Count-1].Date.Day == DateTime.Now.Day)
{
if (SartAl && Pozisyon <= 0) // alış
{
Islem = "ALIS";
if (Pozisyon == 0) // pozisyonum yoksa 1 lot al
Miktar = LotSize;
else if (Pozisyon < 0) // short isem stop and reverse , 2 lot al
Miktar = LotSize + Math.Abs(Pozisyon);
}
else if (SartSat && Pozisyon >= 0) // satış
{
Islem = "SATIS";
if (Pozisyon == 0) // pozisyonum yoksa 1 lot sat
Miktar = LotSize;
else if (Pozisyon > 0) // long isem stop and reverse , 2 lot sat
Miktar = LotSize + Math.Abs(Pozisyon);
}
}

// Emir Gönder !!!
if (Islem != "")
{
if (Islem == "ALIS")
Sistem.PozisyonKontrolGuncelle(Sistem.Name + " , " + Sembol, LotSize);
else if (Islem == "SATIS")
Sistem.PozisyonKontrolGuncelle(Sistem.Name + " , " + Sembol, -LotSize);

Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = Islem;
Sistem.EmirMiktari = Miktar;
Sistem.EmirSuresi = "GUN"; // GUN, SNS, IKG
Sistem.EmirTipi = "KPY"; // KPY, KIE, GIE, SAR
Sistem.EmirFiyatTipi = "PYS"; // PYS, LMT, EIF, KAP
Sistem.EmirGonder();
// mail
Sistem.MailServerAdres = "smtp.mail.yahoo.com";
Sistem.MailServerPort = 587;
Sistem.MailKonu = "İşlem Gerçekleşti";
Sistem.MailMetin = Miktar.ToString() + " " + Islem;
Sistem.MailGonderenAdres = "yahoo.com.tr";
Sistem.MailGonderenSifre = "xxx";
Sistem.MailAliciEkle("[email protected]");
Sistem.MailGonder();
}


Teşekkürler :cool:

thebaboli
16-10-2015, 14:38
Sistem.GetiriHesapla("01/10/2010", 0.000);

var MutluGun = 0;
var MutsuzGun = 0;
for (int i=1; i<Sistem.GetiriKZGun.Count; i++)
{
if (Sistem.GetiriKZGun[i] > Sistem.GetiriKZGun[i-1])
MutluGun++;
if (Sistem.GetiriKZGun[i] < Sistem.GetiriKZGun[i-1])
MutsuzGun++;
}
var NetMutlu = MutluGun-MutsuzGun;
var Renk1 = Sistem.Renk(255, 255, 255, 255);
Sistem.ZeminYazisiEkle("Kaç Günüm Mutlu Geçti1 = "+NetMutlu.ToString(), 1, 400, 30, Renk1, "Tahoma", 24);
var Renk2 = Sistem.Renk(255, 5, 255, 100);
Sistem.ZeminYazisiEkle("Mutlu Gün = "+MutluGun.ToString(), 1, 403, 70, Renk2, "Tahoma", 20);
var Renk3 = Sistem.Renk(255, 255, 50, 0);
Sistem.ZeminYazisiEkle("Mutsuz Gün = "+MutsuzGun.ToString(), 1, 403, 100, Renk3, "Tahoma", 20);



http://i.hizliresim.com/G55Yo3.png (http://hizliresim.com/G55Yo3)

Teşekkürler :cool:

thebaboli
16-10-2015, 15:44
arkadaşlar sizi bir zahmetten kurtarıp başka bir zahmete sokuyoruz.
yazdırma işlemlerini renk değişkeni tanımlamadan da yapabilirsiniz.
yeni versiyon bilahare duyurulacak.

renk kodları çoğu programlama dilinde aynıdır.
anonim dostumuz listeyi bir ara paylaşmıştı.
internette de bulabilirsiniz.


örnek
Color.Green yeşildir
Color.Red Kırmızı
Color.White Beyaz
Color.Gold
Color.Lime Açık Yeşil
Color.Orange Turuncu
Color.Black Siyah







Sistem.ZeminYazisiEkle("Kaç Günüm Mutlu Geçti1 = "+NetMutlu.ToString(), 1, 400, 30, Color.Gold, "Tahoma", 24);
Sistem.ZeminYazisiEkle("Mutlu Gün = "+MutluGun.ToString(), 1, 403, 70, Color.Lime, "Tahoma", 20);
Sistem.ZeminYazisiEkle("Mutsuz Gün = "+MutsuzGun.ToString(), 1, 403, 100, Color.Red, "Tahoma", 20);

Teşekkürler :cool: