dca mantığı gibi yapmak istediğimden repaint yapmasında sorun olmaz bence . Fiyat her alt bantı ihlal ettiğinde alım yapacak ve aldığını belli bir yüzde ile kar olarak satacak.
Printable View
bunu incelermisin renk değişimine göre
var Length = 1000;
var Bandwidth = 6;
var mult = 3;
var V = Sistem.GrafikVerileri;
var C = Sistem.GrafikFiyatSec("Kapanis");
var y = Sistem.Liste(0);
var up = Sistem.Liste(0);
var down = Sistem.Liste(0);
double sum_e = 0.0;
for (int i = V.Count - Length; i < V.Count; i++)
{
double sum = 0.0;
double sumw = 0.0;
for (int j = V.Count - Length; j < V.Count - 1; j++)
{
double w = Math.Exp(-(Math.Pow(i - j, 2) / (Bandwidth * Bandwidth * 2)));
sum += C[j] * w;
sumw += w;
}
double y2 = sum / sumw;
sum_e += (Math.Abs(C[i] - y2));
y[i] = (float)y2;
}
var valc = Sistem.Liste(0);
var RenkListesi = new List<Color>();
for (int i = 0; i < Sistem.BarSayisi; i++)
RenkListesi.Add(Color.Gold);
for (int i = V.Count - Length; i < V.Count; i++)
{
valc[i] = (i > 0) ? y[i] > y[i - 1] ? 0 : 1 : 0;
if (valc[i] == 0) RenkListesi[i] = Color.LimeGreen;
if (valc[i] == 1) RenkListesi[i] = Color.Red;
}
Sistem.Cizgiler[0].Deger = y;
Sistem.Cizgiler[0].RenkListesi = RenkListesi;
var V = Sistem.GrafikVerileri;
var C = Sistem.GrafikFiyatSec("Kapanis");
var L = Sistem.GrafikFiyatSec("Dusuk");
var H = Sistem.GrafikFiyatSec("Yuksek");
var O = Sistem.GrafikFiyatSec("Acilis");
double ygt = 0.6 / 100; // orjinal = 0.8
double bu = 0.05 / 100; // orjinal = 0.2
var hlc = Sistem.Liste(0);
var ad = Sistem.Liste(0);
var dd = Sistem.Liste(0);
for (int i = 1; i < Sistem.BarSayisi; i++)
{
hlc[i] = (H[i] + L[i] + C[i]) / 3;
}
var kyn = Sistem.MA(hlc, "Exp", 3);
var su = Sistem.MA(hlc, "Exp", 3);
for (int i = 2; i < Sistem.BarSayisi; i++)
{
if (kyn[i] * (1 - ygt) > ad[i - 1])
{
ad[i] = Math.Round(kyn[i] * (1 - ygt), 2);
}
else if (kyn[i] * (1 + ygt) < ad[i - 1])
{
ad[i] = Math.Round(kyn[i] * (1 + ygt), 2);
}
else
{
ad[i] = ad[i - 1];
}
if (su[i] * (1 - bu) > dd[i - 1])
{
dd[i] = Math.Round(su[i] * (1 - bu), 2);
}
else if (su[i] * (1 + bu) < dd[i - 1])
{
dd[i] = Math.Round(su[i] * (1 + bu), 2);
}
else
{
dd[i] = dd[i - 1];
}
}
Sistem.Cizgiler[0].Deger = ad;
Sistem.Cizgiler[1].Deger = dd;
CGBT ile zor anlaştım toplam kar hesaplamada ve toplam kar ile ek lot almada .....KONTROL EDEBİLİRMİSİNİZ....
foreach (var item in Sozluk)
{
var EmirSembol = item.Key;
var Anahtar = Sistem.Name + " , " + EmirSembol;
var IslemFiyat = 0.0;
DateTime IslemTarih;
var Rezerv = "";
var AlisFiyat = 0.0m;
var SatisFiyat = 0.0m;
var KademeFiyat = 0.0m;
var Pozisyon = Sistem.PozisyonKontrolOku(Anahtar, out IslemFiyat, out IslemTarih, out Rezerv);
var Lot = item.Value[2];
var Yuksek = item.Value[3];
var Dusuk = item.Value[4];
var basicitem = Sistem.YuzeyselVeriOku(EmirSembol);
var sonfiyat = (decimal)basicitem.LastPrice;
var bidfiyat = (decimal)basicitem.BidPriceDec;
var askfiyat = (decimal)basicitem.AskPriceDec;
if (sonfiyat == 0 || bidfiyat == 0 || askfiyat == 0)
continue;
decimal toplamKar = 0;
string DosyaDir = @"C:\iDeal\60DK" + EmirSembol.Split('\'')[1] + ".YapilanIslemler.txt";
if (System.IO.File.Exists(DosyaDir))
{
var satirler = System.IO.File.ReadAllLines(DosyaDir);
foreach (var satir in satirler)
{
var bilgiler = satir.Split('\t');
if (bilgiler.Length >= 3)
{
decimal alisFiyati = Convert.ToDecimal(bilgiler[2]);
decimal satisFiyati = Convert.ToDecimal(bilgiler[3]);
decimal kar = satisFiyati - alisFiyati;
toplamKar += kar;
}
}
}
if (!System.IO.Directory.Exists(@"C:\iDeal\60DK"))
System.IO.Directory.CreateDirectory(@"C:\iDeal\60D K");
if (!System.IO.File.Exists(DosyaDir))
System.IO.File.Create(DosyaDir).Close();
var ReadLines = System.IO.File.ReadAllLines(DosyaDir);
if (ReadLines.Length != 0)
{
KademeFiyat = (decimal)Convert.ToSingle(ReadLines.Last().Split(' \t')[1]);
AlisFiyat = (decimal)Convert.ToSingle(ReadLines.Last().Split(' \t')[2]);
SatisFiyat = (decimal)Convert.ToSingle(ReadLines.Last().Split(' \t')[3]);
}
else
{
AlisFiyat = askfiyat;
}
var Islem = "";
var Miktar = 0.0;
if (bidfiyat <= AlisFiyat && Pozisyon >= 0 && bidfiyat >= (decimal)Dusuk && bidfiyat <= (decimal)Yuksek) // AL
{
Rezerv = "Alis : " + bidfiyat.ToString("0.00");
if (toplamKar > KademeFiyat)
{
int ekLotMiktari = (int)(toplamKar / KademeFiyat);
Lot += ekLotMiktari;
toplamKar -= ekLotMiktari * KademeFiyat;
Sistem.PozisyonKontrolGuncelle(Anahtar, Lot, IslemFiyat, "Ek Lotlar Alışta Kullanıldı ve Pozisyon Güncellendi");
}
Miktar = Lot;
IslemFiyat = (double)bidfiyat;
}
else if (askfiyat >= SatisFiyat && Pozisyon > 0)
{
Rezerv = "Satis: " + askfiyat.ToString("0.00") + " Kar: " + ((askfiyat - AlisFiyat) * (decimal)Lot).ToString("0.00") + " Toplam Kar: " + toplamKar.ToString("0.00")
Miktar = -Lot;
IslemFiyat = (double)askfiyat;
}
if (Miktar > 0)
Islem = "Alis";
if (Miktar < 0)
Islem = "Satis";
if (Islem != "")
bu şekilde olması daha doğru olmazmı... yanlış düşündüğüm kısım varsa yardım pls.... (??? işaretli kısımlar)
foreach (var item in Sozluk)
{
var EmirSembol = item.Key;
var Anahtar = Sistem.Name + " , " + EmirSembol;
var IslemFiyat = 0.0;
DateTime IslemTarih;
var Rezerv = "";
var AlisFiyat = 0.0m;
var SatisFiyat = 0.0m;
var KademeFiyat = 0.0m;
var toplamKar = 0.0m;
var kar = 0.0m;
var Pozisyon = Sistem.PozisyonKontrolOku(Anahtar, out IslemFiyat, out IslemTarih, out Rezerv);
var Lot = item.Value[2];
var Yuksek = item.Value[3];
var Dusuk = item.Value[4];
var basicitem = Sistem.YuzeyselVeriOku(EmirSembol);
var sonfiyat = (decimal)basicitem.LastPrice;
var bidfiyat = (decimal)basicitem.BidPriceDec;
var askfiyat = (decimal)basicitem.AskPriceDec;
if (sonfiyat == 0 || bidfiyat == 0 || askfiyat == 0)
continue;
// Ilk Islem Sarti (Mevcut fiyat yuksek/dusuk arasinda ise ve poz yoksa, Al/Sat seviyesi kademe kadar belirlenir)
string DosyaDir = @"C:\iDeal\60DK" + EmirSembol.Split('\'')[1] + ".YapilanIslemler.txt"; // Dosya Adi
if (!System.IO.Directory.Exists(@"C:\iDeal\60DK"))
System.IO.Directory.CreateDirectory(@"C:\iDeal\60D K");
if (!System.IO.File.Exists(DosyaDir))
System.IO.File.Create(DosyaDir).Close(); // Dosya olusturulduktan sonra kapatilir.
var ReadLines = System.IO.File.ReadAllLines(DosyaDir);
if (ReadLines.Length != 0)
{ // işlem karı ve toplam kar için txt de alan oluşturdum ???
KademeFiyat = (decimal)Convert.ToSingle(ReadLines.Last().Split(' \t')[1]);
AlisFiyat = (decimal)Convert.ToSingle(ReadLines.Last().Split(' \t')[2]);
SatisFiyat = (decimal)Convert.ToSingle(ReadLines.Last().Split(' \t')[3]);
kar = SatisFiyat - AlisFiyat; // kar ve toplam kar ı bu kısımda mı hesaplatmalıyım????
kar = (decimal)Convert.ToSingle(ReadLines.Last().Split(' \t')[4]);
toplamKar += kar;
toplamKar = (decimal)Convert.ToSingle(ReadLines.Last().Split(' \t')[5]);
}
else
{
AlisFiyat = askfiyat;
}
var Islem = "";
var Miktar = 0.0;
if (bidfiyat <= AlisFiyat && Pozisyon >= 0 && bidfiyat >= (decimal)Dusuk && bidfiyat <= (decimal)Yuksek) // AL
{
Rezerv = "Alis : " + bidfiyat.ToString("0.00");
if (toplamKar > AlisFiyat) // ek lotları burada alış yaptırmak istedim ???
{
int ekLotMiktari = (int)(toplamKar / AlisFiyat);
Lot += ekLotMiktari;
toplamKar -= ekLotMiktari * AlisFiyat;
//Sistem.PozisyonKontrolGuncelle(Anahtar, Lot, IslemFiyat, "Ek Lotlar Alışta Kullanıldı ve Pozisyon Güncellendi");
// Yeni toplam karı rezerv kısmına ekleyelim ???
Rezerv += " Toplam Kar: " + toplamKar.ToString("0.00");
// Ek lotları rezerv kısmına ekleyelim ???
Rezerv += " Ek Lotlar: " + ekLotMiktari.ToString();
}
Miktar = Lot;
IslemFiyat = (double)bidfiyat;
}
else if (askfiyat >= SatisFiyat && Pozisyon > 0)
{
Rezerv = "Satis: " + askfiyat.ToString("0.00") + " Kar: " + ((askfiyat - AlisFiyat) * (decimal)Lot).ToString("0.00") + " Toplam Kar: " + toplamKar.ToString("0.00");
Miktar = -Lot;
IslemFiyat = (double)askfiyat;
}
if (Miktar > 0)
Islem = "Alis";
if (Miktar < 0)
Islem = "Satis";
if (Islem != "")