herkese merhabalar,bol kazançlar arkadaşlar....bir kaç sayfa önce çoklu sistem birleştiren aşağıdaki kod paylaşılmıştı.bu kodu tek bir sistem gibi tek satırlık robot olarak kullanırsak repaint yapar mı acaba?daha önceki sistem birleştirme örneklerinde repainte maruz kalıyorduk.buda repaint yapar mı?
kod şöyleydi;
Dictionary<string, float> Sistemler = new Dictionary<string, float>();
Sistemler["S3"] = 1;
Sistemler["S5"] = 1;
Sistemler["S6"] = 2;
Sistemler["S7"] = 1;
Sistemler["S9"] = 1;
var V = Sistem.GrafikVerileri;
var C = Sistem.GrafikFiyatOku(V, "Kapanis");
for (int i = 300; i < V.Count; i++)
{
if (V[i].Date.Month != V[i - 1].Date.Month)
Sistem.DikeyCizgiEkle(i, Color.DimGray, 2, 2);
}
var SonPozDictionary = new Dictionary<string, int>();
// pozisyon hesapla
var PozList = Sistem.Liste(0);
foreach (var item in Sistemler)
{
var SembolSistem = Sistem.SistemGetir(item.Key, Sistem.Sembol, "1");
if (SembolSistem == null) continue;
var SonPozStr = "";
for (int i = V.Count - 1; i > 0; i--)
{
if (SembolSistem.Yon[i]!="")
{
SonPozStr = SembolSistem.Yon[i];
break;
}
}
int SonPozLot = 0;
if (SonPozStr == "A")
SonPozLot = Convert.ToInt32(item.Value);
else if (SonPozStr == "S")
SonPozLot = -Convert.ToInt32(item.Value);
SonPozDictionary[item.Key] = SonPozLot;
float Poz = 0;
for (int i = 0; i < V.Count; i++)
{
if (SembolSistem.Yon[i] == "A")
Poz = item.Value;
else if (SembolSistem.Yon[i] == "S")
Poz = -item.Value;
else if (SembolSistem.Yon[i] == "F")
Poz = 0;
PozList[i] += Convert.ToInt32(Poz);
}
}
Sistem.Cizgiler[0].Deger = PozList;
Sistem.Cizgiler[1].Deger = Sistem.Liste(0);
Sistem.DolguEkle(0, 1, Color.FromArgb(120, 0, 255, 0), Color.FromArgb(120, 255, 0, 0));
int Counter=0;
foreach (var item in SonPozDictionary)
{
var RenkPoz = Color.Gold;
if (item.Value > 0)
RenkPoz = Color.LimeGreen;
else if (item.Value < 0)
RenkPoz = Color.Red;
Counter++;
Sistem.GradientYaziEkle(item.Key , 1, 30, 60 + Counter * 25, RenkPoz, RenkPoz, "Tahoma", 18);
Sistem.GradientYaziEkle(" : " + Math.Abs(item.Value).ToString("0"), 1, 100, 60 + Counter * 25, RenkPoz, RenkPoz, "Tahoma", 18);
}
// al sat renklendir
var SonYon = "";
for (int i = 0; i < V.Count; i++)
{
if (PozList[i] > 0 && SonYon != "A")
Sistem.Yon[i] = "A";
else if (PozList[i] < 0 && SonYon != "S")
Sistem.Yon[i] = "S";
else if (PozList[i] == 0 && SonYon != "F")
Sistem.Yon[i] = "F";
if (Sistem.Yon[i] != "")
SonYon = Sistem.Yon[i];
}
// kar zarar hesapla
var Kasa = 0.0f;
var KZList = Sistem.Liste(0);
for (int i = 1; i < V.Count; i++)
{
if (PozList[i] != PozList[i - 1])
Kasa += -(PozList[i] - PozList[i - 1]) * C[i];
KZList[i] = Kasa + (PozList[i] * C[i]);
}
Sistem.Cizgiler[2].Deger = KZList;
// yazılar
Sistem.GradientYaziEkle(Sistem.Name, 1, 20, 30, Color.Gold, Color.Gold, "Tahoma", 30);
//Sistem.GradientYaziEkle(DateTime.Now.ToString("dd/MMM/yyyy"), 1, 20, 80, Color.Gold, Color.Gold, "Tahoma", 30);
//Sistem.GradientYaziEkle(KZList[KZList.Count - 1].ToString("0"), 1, 20, 130, Color.Gold, Color.Gold, "Tahoma", 30);
var Sure = (DateTime.Now - V[0].Date).TotalDays / 30.4;
// gün
var DateGun = DateTime.Now.AddDays(-1);
var DateGunBarNo = 0;
for (int i = V.Count - 1; i > 0; i--)
{
if (V[i].Date.Day <= DateGun.Day)
{
DateGunBarNo = i;
break;
}
}
var GetiriGun = Math.Round((KZList[KZList.Count - 1] - KZList[DateGunBarNo]) * 100, 1);
// 1 ay
var Date1Ay = DateTime.Now.AddDays(-30);
var Date1AyBarNo = 0;
for (int i = V.Count - 1; i > 0; i--)
{
if (V[i].Date <= Date1Ay)
{
Date1AyBarNo = i;
break;
}
}
var Getiri1Ay = KZList[KZList.Count - 1] - KZList[Date1AyBarNo];
// 2 ay
var Date2Ay = DateTime.Now.AddDays(-60);
var Date2AyBarNo = 0;
for (int i = V.Count - 1; i > 0; i--)
{
if (V[i].Date <= Date2Ay)
{
Date2AyBarNo = i;
break;
}
}
var Getiri2Ay = KZList[KZList.Count - 1] - KZList[Date2AyBarNo];
// 3 ay
var Date3Ay = DateTime.Now.AddDays(-90);
var Date3AyBarNo = 0;
for (int i = V.Count - 1; i > 0; i--)
{
if (V[i].Date <= Date3Ay)
{
Date3AyBarNo = i;
break;
}
}
var Getiri3Ay = KZList[KZList.Count - 1] - KZList[Date3AyBarNo];
// 6 ay
var Date6Ay = DateTime.Now.AddDays(-180);
var Date6AyBarNo = 0;
for (int i = V.Count - 1; i > 0; i--)
{
if (V[i].Date <= Date6Ay)
{
Date6AyBarNo = i;
break;
}
}
var Getiri6Ay = KZList[KZList.Count - 1] - KZList[Date6AyBarNo];
// 12 ay
var Date12Ay = DateTime.Now.AddDays(-365);
var Date12AyBarNo = 0;
for (int i = V.Count - 1; i > 0; i--)
{
if (V[i].Date <= Date12Ay)
{
Date12AyBarNo = i;
break;
}
}
var Getiri12Ay = KZList[KZList.Count - 1] - KZList[Date12AyBarNo];
Sistem.GradientYaziEkle(Sure.ToString("0.0") + " Ay", 3, 10, 20, Color.Silver, Color.Silver, "Tahoma", 18);
Sistem.GradientYaziEkle(KZList[KZList.Count - 1].ToString("0.000"), 3, 180, 20, Color.Gold, Color.Gold, "Tahoma", 18);
Sistem.GradientYaziEkle("30 Gün", 3, 10, 50, Color.Silver, Color.Silver, "Tahoma", 18);
Sistem.GradientYaziEkle(Getiri1Ay.ToString("0.000" ), 3, 180, 50, Color.Gold, Color.Gold, "Tahoma", 18);
Sistem.GradientYaziEkle("60 Gün", 3, 10, 80, Color.Silver, Color.Silver, "Tahoma", 18);
Sistem.GradientYaziEkle(Getiri2Ay.ToString("0.000" ), 3, 180, 80, Color.Gold, Color.Gold, "Tahoma", 18);
Sistem.GradientYaziEkle("90 Gün", 3, 10, 110, Color.Silver, Color.Silver, "Tahoma", 18);
Sistem.GradientYaziEkle(Getiri3Ay.ToString("0.000" ), 3, 180, 110, Color.Gold, Color.Gold, "Tahoma", 18);
Sistem.GradientYaziEkle("180 Gün", 3, 10, 140, Color.Silver, Color.Silver, "Tahoma", 18);
Sistem.GradientYaziEkle(Getiri6Ay.ToString("0.000" ), 3, 180, 140, Color.Gold, Color.Gold, "Tahoma", 18);
Sistem.GradientYaziEkle("Yıl", 3, 10, 170, Color.Silver, Color.Silver, "Tahoma", 18);
Sistem.GradientYaziEkle(Getiri12Ay.ToString("0.000 "), 3, 180, 170, Color.Gold, Color.Gold, "Tahoma", 18);
var Renk = Color.Gold;
if (GetiriGun > 0)
Renk = Color.LimeGreen;
else if (GetiriGun < 0)
Renk = Color.Red;
Sistem.GradientYaziEkle("BU GÜN", 3, 10, 230, Renk, Renk, "Tahoma", 18);
Sistem.GradientYaziEkle(GetiriGun.ToString("0.00") , 3, 180, 230, Renk, Renk, "Tahoma", 18);
var SonPoz = PozList[PozList.Count - 1];
Renk = Color.Gold;
if (SonPoz > 0)
Renk = Color.LimeGreen;
else if (SonPoz < 0)
Renk = Color.Red;
Sistem.GradientYaziEkle("POZISYON", 3, 10, 260, Renk, Renk, "Tahoma", 18);
Sistem.GradientYaziEkle(SonPoz.ToString("0"), 3, 180, 260, Renk, Renk, "Tahoma", 18);
Birleşik sistemin PozList Listesini, kapanmış olan en son bardaki değerine göre okutup kullanırsanız repaint yapmaz. (birleştirilen sistemleriniz de repaint yapmayan kodlardır diye varsayıyorum tabi)
Tek yapmanız gereken değişiklik var PozList = Sistem.Liste(0) satırını var PozList = Sistem.SayiListesi; şeklinde değiştirmek.
Bu durumda, aşağıdaki robot kodu, birleşik sistemi çağırır, kümüle pozisyon değerini ve yönü elde eder ve kendi pozisyonunu olması gereken pozisyona eşitleyecek şekilde emirler gönderir.
Kod:var MySistem = Sistem.SistemGetir("BirlesikSistem", "VIP'VIP-X030", "5"); if (MySistem == null) { Sistem.Mesaj("Sistem Dosyası Okunamadı !"); } else { var EmirSembol = Sistem.AktifViopKontrat; var Pozisyon = Sistem.PozisyonKontrolOku(Sistem.Name + " , " + EmirSembol); var OlmasiGerekenPoz = MySistem.SayiListesi[MySistem.SayiListesi.Count - 1 - 1]; // Emir Gönder if (OlmasiGerekenPoz != Pozisyon && Sistem.Saat.CompareTo("09:30:00") >= 0 && Sistem.Saat.CompareTo("18:14:59") <= 0) { var EmirMiktar = OlmasiGerekenPoz - Pozisyon; var Islem = (EmirMiktar > 0 ? "ALIS" : "SATIS"); Sistem.PozisyonKontrolGuncelle(Sistem.Name + " , " + EmirSembol, OlmasiGerekenPoz); Sistem.EmirSembol = EmirSembol; Sistem.EmirIslem = Islem; Sistem.EmirMiktari = Math.Abs(EmirMiktar); Sistem.EmirTipi = "Piyasa"; Sistem.EmirSuresi = "KIE"; Sistem.EmirGonder(); } }
Arkadaşlar Rsi 14 > 50 ise alım rsi 14 < 50 ise satım yapacak ancak alımda 4 bar satım sinyalinde ise 2 bar sinyali geciktirecek .
kodu yazabilcek varmı ?
var C = Sistem.GrafikFiyatSec("Kapanis");
var rsi = Sistem.RSI(14);
var SonYon="";
float Fiyat = 0.0f;
for (int i = 1; i<Sistem.BarSayisi; i++)
{
if (rsi[i] > 50 && SonYon != "A")
{
Sistem.Yon[i] = "A";
SonYon="A";
Fiyat = C[i+4];
}
else if (rsi[i]<50 && SonYon != "S")
{
Sistem.Yon[i] = "S"; // satış
SonYon="S";
Fiyat = C[i+2];
}
}
Sistem.Cizgiler[0].Deger = Sistem.Liste(50F);
Sistem.Cizgiler[1].Deger = Sistem.RSI(14);
sayın emlak
belki işinize yarayabilir
sanal modda deneyin ama
fazlaca acemiyim kod yazmada
teşekkürler alekss hocam. normalde matrikste c-2 yazarız ama burda + koyuyoruz demekki)
Yer İmleri