5 dakikalık periyod fiyatı, günlük bol. bandın üstüne ve altına defalarca inip çıkabilir.
Ne kadar iner çıkar. Bir günlükde, kaç 5 dk lık bar var ise o kadar olabilir. olasılık dahilindedir.
Bu şekilde sistem kullanımı tavsiye etmem.
Printable View
Time series forecast'in repaint yaptığını nasıl gözlemlediniz?
HUAWEI G7-L01 cihazımdan hisse.net mobile app kullanarak gönderildi.
var V = Sistem.GrafikVerileri;
var C = Sistem.GrafikFiyatSec("Kapanis");
var GDATA = Sistem.GrafikVerileriniOku(Sistem.Sembol, "G");
var GH = Sistem.GrafikFiyatOku(Sistem.Sembol, "G", "Kapanis");
var GHG = Sistem.BollingerUp(GH, "Simple", 20, 2);
GHG = Sistem.DonemCevir(Sistem.GrafikVerileri, GDATA, GHG);
var SonYon="";
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if ( C[i] > GHG [i] && SonYon!= "A")
{
Sistem.Yon[i] = "A";
SonYon="A";
}
else if ( C[i] < GHG [i] && SonYon != "S")
{
Sistem.Yon[i] = "S";
SonYon="S";
}
}
Sistem.Cizgiler[0].Deger = GHG;
sayın ideal ekibi
varant izleme ve opsiyon izleme modulu güzel olmuş elinize sağlık
bu modül de ilgili ensturmana sag klik le al sat menusu gelse sugar olur
bir de herhnagi bir sorgu çalıştırdık
sorgumuzun şartları gereği
5-6 ensturman buldu
bu ensturmanlar sag klic le grafiği açabilmek sugar olur
Bu kalıplar neden aynı olmaz((((
bool SartAl = .....; //Alış şartınız
bool SartAl = C[i] < LLV[i-1];
(örneğin i hatası veriyor.)
Lütfen gülmeyin)
mavilim ve T3 kodlarıyla bir algo oluşturmak istiyorum,
fiyat mavilimin üstünde olsun,
fiyat t3'i yukarı kırınca al,buraya kadar tamam ama şu kısım nasıl yapılabilinir? t3'ün yönü aşağı dönünce sat .
var close = Sistem.GrafikFiyatSec("Kapanis");
var M1 = Sistem.MA(close, "Weighted", 3);
var M2 = Sistem.MA(M1, "Weighted", 5);
var M3 = Sistem.MA(M2, "Weighted", 8);
var M4 = Sistem.MA(M3, "Weighted", 13);
var M5 = Sistem.MA(M4, "Weighted", 21);
var MAVW = Sistem.MA(M5, "Weighted", 34);
Sistem.Cizgiler[34].Deger = MAVW;
var period = 5;
float a = 0.70f;
var C = Sistem.GrafikFiyatSec("Kapanis");
var H = Sistem.GrafikFiyatSec("Yuksek");
var L = Sistem.GrafikFiyatSec("Dusuk");
var x = Sistem.Liste(0);
for (int i=1; i < Sistem.BarSayisi; i++)
x[i] = (H[i]+L[i]+2*C[i])/4;
var e1 = Sistem.MA(x, "variable", period);
var e2 = Sistem.MA(e1, "variable", period);
var e3 = Sistem.MA(e2, "variable", period);
var e4 = Sistem.MA(e3, "variable", period);
var e5 = Sistem.MA(e4, "variable", period);
var e6 = Sistem.MA(e5, "variable", period);
var c1 = -a * a * a;
var c2 = 3 * a * a + 3 * a * a * a;
var c3 = -6 * a * a - 3 * a -3 * a * a * a;
var c4 = 1 + 3 * a + a * a * a + 3 * a * a;
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];
Sistem.Cizgiler[0].Deger = T3;
Sistem.Cizgiler[0].Aciklama = "T3";
İdeal sistemde bulunan EhlersFilter() in açık kodu paylaşabilir misiniz ?
tabi TOMA gibi açık kod paylaşılamaz durumda değilse...
Değerli Forum üyeleri,
Bir konuda desteğinize ihtiyacım var;
Matriksteki bir indicatörü İdeal platformunda kullanabilecek duruma çevirmeme yardımcı olabilir misiniz?
Saygılarımla
Kod:public void CalculateEhlersFilter(List<cxBar> bars)
{
try
{
if (bars.Count <= 0) return;
int ti = 15;
var price = bars.Select(x => (x.Open + x.High + x.Low + x.Close) / 4).ToList();
var coef = new List<float>(new float[bars.Count]);
var ehler = new List<float>(new float[bars.Count]);
for (int i = 5; i < bars.Count; i++)
coef[i] = Math.Abs(price[i] - price[i - 5]);
for (int i = ti; i < bars.Count; i++)
{
float deger1 = 0;
float deger2 = 0;
for (int k = 0; k < 15; k++)
{
var m = i - k;
deger1 += coef[m] * price[m];
deger2 += coef[m];
}
if (deger2 != 0)
ehler[i] = deger1 / deger2;
}
}
catch { }
}
Kod:
var V = Sistem.GrafikVerileri;
var C = Sistem.GrafikFiyatSec("Kapanis");
var Yon = Sistem.Yon;
var MAVW = Sistem.MAM(C, "Weighted", 3, 5, 8, 12, 21, 34);
var T3 = Sistem.TillsonT3(5, 0.7);
// strateji
var SonYon = "";
var Sinyal = "";
for (int i = 10; i < V.Count; i++)
{
Sinyal = "";
if (C[i - 1] < MAVW[i] && C[i] >= MAVW[i]) Sinyal = "A";
else if (C[i - 1] > MAVW[i] && C[i] <= MAVW[i]) Sinyal = "S";
else if (SonYon == "A" && T3[i] <= T3[i - 1] && T3[i - 1] > T3[i - 2]) Sinyal = "F";
else if (SonYon == "S" && T3[i] >= T3[i - 1] && T3[i - 1] < T3[i - 2]) Sinyal = "F";
// Yön Kalıbı
if (Sinyal == "A" && SonYon != "A")
{
Yon[i] = "A";
SonYon = Yon[i];
}
if (Sinyal == "S" && SonYon != "S")
{
Yon[i] = "S";
SonYon = Yon[i];
}
if (Sinyal == "F" && SonYon != "F")
{
Yon[i] = "F";
SonYon = Yon[i];
}
}
Sistem.GetiriHesapla("01/01/2000", 0.0);
Sistem.Cizgiler[0].Deger = MAVW;
Sistem.Cizgiler[1].Deger = T3;
Sistem.Cizgiler[1].Deger = Sistem.GetiriKZ;
Kontrol ediniz.Kod: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 y1=Sistem.MA(22,"Exp","Ortalama");
var atr5=Sistem.AverageTrueRange(5);
var y2=Sistem.ListeFark(y1,atr5);
var y3=Sistem.ListeTopla(y1,atr5);
var y4=Sistem.Liste(0);
var y5=Sistem.Liste(0);
var y9=Sistem.Liste(0);
var y8=Sistem.Liste(0);
for (int i = 20; i<Sistem.BarSayisi; i++)
{
if ( y1[i]<y1[i-1] )
y4[i]=y2[i];
else if ( y2[i]>y2[i-1] )
y4[i]=y2[i];
else
y4[i]=y4[i-1];
if ( y1[i]>y1[i-1] )
y5[i]=y3[i];
else if ( y3[i]<y3[i-1] )
y5[i]=y3[i];
else
y5[i]=y5[i-1];
}
int y6=0;
int y7=0;
for (int i = 20; i<Sistem.BarSayisi; i++)
{
if ( y1[i]>y5[i-1] && y1[i-1]<=y5[i-2] )
y6=i;
if ( y4[i-1]>y1[i] && y4[i-2]<=y1[i-1] )
y7=i;
if (Sistem.Periyot=="G" || Sistem.Periyot=="H" || Sistem.Periyot=="A")
{
if (y6<y7)
y9[i]=y5[i];
else if ( y6>=y7)
y9[i]=y4[i];
}
else
{
if (y6<y7)
y9[i]=y5[i]/100;
else if ( y6>=y7)
y9[i]=y4[i]/100;
}
}
Sistem.Cizgiler[0].Deger=y9;
İdealde sistemlerinizi ve manuel ekleyeceğiniz indikatörü ayni panele yaziyorsunuz, grafikte "S" menusunden ulaştiğiniz sistem tanimlarina gonderdiğim formulu yapiştirdiktan sonra sağ tarafta 0 nolu cizgiyi işaretleyin ve yine ayni ekranda " indikator penceresinde goster" secenegini de işaretleyerek kaydedin. Artik herhangi bir grafige indikatör olarak uygulayabilirsiniz.
Sayın ideal yetkilisi arkadaşlar, benim gibi ekranı izleyemeyenler için idealgo yu kod ile yönetebilmek için ilave özellikler ekleme düşünceniz var mı? Geçen ay bu konuda bir soru sormuştum maalesef cevap alamadım.
Sayın Tiberius ilgilendiğiniz için size çok teşekkür ederim.
İdealgoya bağlı robotları teker teker aktif/pasif yapabilmek, yeni sembol ekleyebilmek, takip edilen sembolü ve işlem limitini değişterebilmek ve son olarakta referans alanınan sistemde değişiklik yapabilmek istiyorum.
İdealgo beni kod yükünden ve emrin ulaşıp ulaşma derdinden kurtardı. Çok kısa sürede de olsa repaint yapan bir sistemim daha var. Önceden repaint yaptığı için çok problem yaşıyor ve sinyal kaçırıyordum ama aynı sistem idealgo da şimdiye kadar repainte rağmen hiç bir sinyal sorununa neden olmadan başarıyla tüm emirleri gönderdi. Kullanması müthiş rahat ve sorunsuz. Diğer özelliklerini saymıyorum bile...
Fakat idealgo benim için yeni sorunlara neden oldu. Ben sabah pc yi açıyorum, kendi senaryoma göre idealgoyu ayarlayıp evden çıkıyorum ve gün sonu eve dönüyorum. İdealgo sadece grafik arayüzü kullandığı ve geri dönüt vermediği için gün içinde pc ye çok sık olarak teamviewer ile uzaktan bağlanmak durumunda kalıyorum. Hatta bu ay o kadar çok bağlamışım ki yıllardır bireysel kullanmama rağmen teamviewer ticari kullanım kullanım uyarısı verip kullanım süresini kısıtlamaya başladı.
Tek istediğim idealgo ile kod aracılığı ile konuşabilmek, robot bölümünün (diğer özellikleri için bir isteğim yok) benim belirlediğim sistemde, sembolde, miktarda temel alsat işlemleri için çalışmasını kod üzerinden kontrol edebilmek.
Excel i, metin dosyasını geçtim Lib.cs içinde oluşturduğum public değişkenleri/listeleri dahi okusa, değiştirse buna razıyım.
İdeal başlı başına çok gelişmiş ve esnek bir yapıya sahipken idealgo nun diğer bileşenlerle irtibatını kullanıcısına sadece grafik arayüzü ile sunmasını çok yadırgıyorum.
selam
Idealde Saatlik periyotta imkb 30 da bulunan hisselerden dusen trendi kran hisselerin listesini cikarabilir mi? (Son 100 barda 10 bar haric sekilde trend cizdirilerek). Listede cikan hisseler icin bizim belirledigimiz kistasa gore (RSI>30) hisseleri secip robota al sat islemi nasil yaptirilabilir?
sagolun...
1-Bir saate bir tarama yapsın
2-taramada çıkan 3 hisseye hesaptaki parayı paylaştırarak alım yapsın
3-Bizim belirleyebiileceğimiz oranda stop olsun..
3-% 2 kar alsın ... ulaşmazsa bu kara 1 saat sonra (yeni tarama öncesi) satsın
kullandığım 3 tane tarama formülü var...ve ben bunu günde 1 kez kullanabiliyorum gün sonu tarama yaparak ..Malum
buradaki bir çok arkadaş gibi sabah işteyiz..Aslında çok önce paylaşılan çoklu hisse robotta belirli hisselerde kullanabiliyorum
fakat hesap kontrol olmadığı için sınırlı işlemler oluyor..
saygılar...
Kod:var Semboller = new Dictionary<string, double>();
Semboller["IMKBH'AKBNK"] = 7;
Semboller["IMKBH'GARAN"] = 9;
Semboller["IMKBH'YKBNK"] = 11;
Semboller["IMKBH'SISE"] = 13;
Semboller["IMKBH'PGSUS"] = 15;
Semboller["IMKBH'KCHOL"] = 17;
Semboller["IMKBH'SAHOL"] = 19;
var Mesaj = "";
foreach (var item in Semboller)
{
var Sembol = item.Key;
var SembolLot = item.Value;
var Bars = Sistem.GrafikVerileriniOku(Sembol, "60");
var DusenTrend = Sistem.OtoTrendDusen(Bars, 100, 10);
var RSI = Sistem.RSI(Bars, 22);
var SonFiyat = Sistem.SonFiyat(Sembol);
var SonBarNo = Bars.Count - 1;
Mesaj += "\r\n" + Sembol + ", RSI = " + RSI[SonBarNo].ToString("0.00") + ", Trend = " + DusenTrend[SonBarNo].ToString("0.00") + ", Son Fyt = " + SonFiyat.ToString("0.00");
if (Bars[SonBarNo].High > DusenTrend[SonBarNo] && RSI[SonBarNo] > 30)
{
// emir gönder
var Anahtar = Sistem.Name + ", " + Sembol;
double IslemFiyat = 0;
DateTime IslemTarih;
var Miktar = SembolLot;
var Rezerv = "";
var Pozisyon = Sistem.PozisyonKontrolOku(Anahtar, out IslemFiyat, out IslemTarih);
if (Pozisyon == 0 && SembolLot > 0 && Sistem.Saat.CompareTo("10:00:05") >= 0 && Sistem.Saat.CompareTo("17:59:55") <= 0)
{
var Islem = "";
Islem = "ALIS";
Rezerv = "ALIŞ YAPILDI";
Sistem.PozisyonKontrolGuncelle(Anahtar, Miktar, SonFiyat, Rezerv);
Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = Islem;
Sistem.EmirSuresi = "KIE";
Sistem.EmirTipi = "Piyasa";
Sistem.EmirMiktari = Math.Abs(Miktar);
Sistem.EmirAciklama = "Gerçekleşti";
Sistem.EmirGonder();
}
}
}
Sistem.Mesaj(Mesaj);
İdeAlgo sürümünde gördüğüm eksiklikleri buraya 2 ana başlıkta feedback olarak düşmek isterim.
Basit ama bir okadar da önemli olan temel eksikler :
1)İdeAlgo penceresinin büyütüp küçültülememesi, tam ekran yapılamaması özellikle opt sonuçlarını karşılaştırma açısından kısıtlayıcı
2)Opt sonuçları "Getiri, işlem sayısı, profit factor vb. gibi parametre bazında küçükten büyüğe sıralanabilmeli
3)Gösterilecek opt sonuçları için en iyi 30 sonuç değil de kullanıcının belirleyeceği adette sonuç gösterilebilmeli ve sonuçlar hem sistem içinde genel opt tarama sonuçları olarak kaydedilebilmeli hem de excele aktarılabilmeli.
4)Lot miktarını belirlemek için S ikonu/Sistem Performansı penceresine gitmek gerekiyor, bunun yerine lot miktarı direk ideAlgo/Performans penceresinden de değiştirilebilmeli.
5)İdeAlgo optimizasyon kısmından optimize ettiğim 3 parametreli sistemimi grafiğe uyguladığımda toplam işlem adetini grafikte, listedekinden 35-40 adet fazla gösteriyor, benden başka böyle bi problem yaşayan oldu mu bilmiyorum ama bi hata varmış gibi geldi bana.
6)Sharpe Ratio ve Sortino Ratio performans metriklerine eklenmeli ve sistemin uygulandığı grafik üzerinde gösterilecek performans metrikleri de kullanıcı tarafından seçilebilmeli.
İleri seviye eksikler :
1)Sistem oluştururken belli koşullara göre lot arttırıp azaltmak sisteme dahil edilip backtest yapılamıyor, kompleks para yönetimi yok.
2)Pay tarafında oluşturulan sinyaller bot üzerinden aynı hissenin vadelisine iletilebiliyor ama bunu backtestte test edemiyoruz, örneğin THYAO'da yazdığım bi sistemin verdiği sinyalleri VIP-THYAO'da göremiyorum.
3)Optimizasyon kısmı için genetic algorithm ile walk-forward ve monte-carlo simülasyon yöntemlerinin olmaması büyük eksikler
4)Optimizasyon sadece max. getiri parametresini maximize edecek şekilde değil de kullanıcının performans metriklerinden istediklerine verdiği puanlamaya göre optimize edebilmeli
Sayin Tiberius, sagolun Hizir gibi yetistiniz.
var Semboller = new Dictionary<string, double>();
Semboller["IMKBH'AKBNK"] = 7;
Semboller["IMKBH'GARAN"] = 9;
Semboller["IMKBH'YKBNK"] = 11;
Semboller["IMKBH'SISE"] = 13;
Semboller["IMKBH'PGSUS"] = 15;
Semboller["IMKBH'KCHOL"] = 17;
Semboller["IMKBH'SAHOL"] = 19;
burdaki numaralar rastgelemi yaziliyor yoksa IMKB de her hissenin bu sekilde bir numarasi mi var.
Mesaj += "\r\n" + Sembol + ", RSI = " + RSI[SonBarNo].ToString("0.00") + ", Trend = " + DusenTrend[SonBarNo].ToString("0.00") + ", Son Fyt = " + SonFiyat.ToString("0.00");
buradaki kodlama sadece ekrana msj yazilmasi icin midir?
Herkese merhaba,
var K = Sistem.MA(C, "Simple", 22);
K = Sistem.Ref(K, -61);
Bu kod için 61 bar değilde değişken olarak saat başına öteleme yapılabilir mi ? örnek olarak 1 dakikalıkta kullanırken 09:58 değeri 10:01 e ötelenecek, saat 10:00 da değer 11:01 e, 10:30 11:01 e gibi... süre bazlı geri sayan öteleme gibi.
Evet mesaj satırı gözlem yapmak amacıyla eklendi.
Ancak kodda bir değişiklik yaptık. Trend oluşmamışsa kontrolu de ekledik.
var Semboller = new Dictionary<string, double>();
Semboller["IMKBH'AKBNK"] = 7;
Semboller["IMKBH'GARAN"] = 9;
Semboller["IMKBH'YKBNK"] = 11;
Semboller["IMKBH'SISE"] = 13;
Semboller["IMKBH'PGSUS"] = 15;
Semboller["IMKBH'KCHOL"] = 17;
Semboller["IMKBH'SAHOL"] = 19;
var Mesaj = "";
foreach (var item in Semboller)
{
var Sembol = item.Key;
var SembolLot = item.Value;
var Bars = Sistem.GrafikVerileriniOku(Sembol, "60");
var DusenTrend = Sistem.OtoTrendDusen(Bars, 100, 10);
var RSI = Sistem.RSI(Bars, 22);
var SonFiyat = Sistem.SonFiyat(Sembol);
var SonBarNo = Bars.Count - 1;
Mesaj += "\r\n" + Sembol + ", RSI = " + RSI[SonBarNo].ToString("0.00") + ", Trend = " + DusenTrend[SonBarNo].ToString("0.00") + ", Son Fyt = " + SonFiyat.ToString("0.00");
if (Bars[SonBarNo].High > DusenTrend[SonBarNo] && DusenTrend[SonBarNo] > 0 && RSI[SonBarNo] > 30)
{
// emir gönder
var Anahtar = Sistem.Name + ", " + Sembol;
double IslemFiyat = 0;
DateTime IslemTarih;
var Miktar = SembolLot;
var Rezerv = "";
var Pozisyon = Sistem.PozisyonKontrolOku(Anahtar, out IslemFiyat, out IslemTarih);
if (Pozisyon == 0 && SembolLot > 0 && Sistem.Saat.CompareTo("10:00:05") >= 0 && Sistem.Saat.CompareTo("17:59:55") <= 0)
{
var Islem = "";
Islem = "ALIS";
Rezerv = "ALIŞ YAPILDI";
Sistem.PozisyonKontrolGuncelle(Anahtar, Miktar, SonFiyat, Rezerv);
Sistem.EmirSembol = Sembol;
Sistem.EmirIslem = Islem;
Sistem.EmirSuresi = "KIE";
Sistem.EmirTipi = "Piyasa";
Sistem.EmirMiktari = Math.Abs(Miktar);
Sistem.EmirAciklama = "Gerçekleşti";
Sistem.EmirGonder();
}
}
}
Sistem.Mesaj(Mesaj);