İdealgo nun yürüteceği stratejiyi yazdığını sistemlerle siz belirleyeceksiniz, idealgo çıkan sonuca göre hareket edecek. Herşeyi idealgoya yüklemeyin :yes:
Printable View
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);