Hocam bir sorum daha olacak:
Öncelikle hayýrlý akþamlar. Ýdeal' de ilk 10 kademedeki ALIÞ ve SATIÞ toplamýný RSI gibi grafik altýnda dalgalanan bir osilatör olarak takip etmek istiyorum. Bunu nasýl yapabilirim? Ýdeal' in açýklamalarýnda þu formül var, ama bu da tahtadaki tüm alýþ ve satýþ toplamlarýný veriyor.
var Derinlik = Sistem.DerinlikVerisiOku(Sistem.Sembol);
var C = Sistem.GrafikFiyatSec("Kapanis");
var Alistoplam = 0;
var Satistoplam = 0;
for (int i = 0; i < 6; i++) { Alistoplam += Derinlik.Bids[i].Size; Satistoplam += Derinlik.Asks[i].Size; }
derinliðin altýnda zaten hazýr olarak 10 kademenin ve tavan/taban a kadar olan bekleyen emirlerin
lot ve ortalama fiyat olarak veren hazýr kolon var onlarýn ideal isimleri bulunarak
Sistem.Yuzeyselveri den alýnabilir, ancak anlýk olduðundan ve bir yere kaydedilmediðinden bu veriye indikatör oluþturmak imkansýz. aslýnda yapýlabilir ama bu seferde Dfnideal olarak özel sembol oluþturulup ilk önce kaydedilmesi oradan okutularak indikatör baðlamak imkan dahilinde olabilir buda hepten karýþýk hale getirir.
siz 5 kademenin toplamý için yazmýþsýnýz, yazdýðýnýz kod ile DFN Sembol e kaydedilip grafik haline getirilebilir.
þöyle bir sorun çýkartabilir bekleyen emirler sürekli deðiþecek ama DFN sembol e kaydederken 1 dk gibi (son anda ne varsa ) kaydedilebilecek.
Bear_Bull
@BearBull26
Hocam,
Formülü þu þekilde kaydetsem çalýþýr mý?
var Derinlik = Sistem.DerinlikVerisiOku(Sistem.Sembol);
var C = Sistem.GrafikFiyatSec("Kapanis");
var Alistoplam = 0;
var Satistoplam = 0;
for (int i = 0; i < 10; i++) { Alistoplam += Derinlik.Bids[i].Size; Satistoplam += Derinlik.Asks[i].Size; }
Sistem.Cizgiler[0].Deger = Alistoplam;
Sistem.Cizgiler[1].Deger = Satistoplam;
Amacým kademe robotunu derinlikteki deðiþime göre çalýþtýrmak. Trend indikatörüm if ( Satistoplam > Alistoplam ise her gridi kestiðinde 10 lot AL, 5 kademe yukarýya SATIÞ yaz), else if ( Alistoplam < Satistoplam ise her gridi aþaðýya kestiðinde portföyden 10 lot SAT, 5 kademe aþaðýya ALIÞ yaz) þeklinde düzenleme yapmak istiyorum.
Nasýl yapabilirim?
derinliðin altýnda zaten hazýr olarak 10 kademenin ve tavan/taban a kadar olan bekleyen emirlerin
lot ve ortalama fiyat olarak veren hazýr kolon var onlarýn ideal isimleri bulunarak
Sistem.Yuzeyselveri den alýnabilir, ancak anlýk olduðundan ve bir yere kaydedilmediðinden bu veriye indikatör oluþturmak imkansýz. aslýnda yapýlabilir ama bu seferde Dfnideal olarak özel sembol oluþturulup ilk önce kaydedilmesi oradan okutularak indikatör baðlamak imkan dahilinde olabilir buda hepten karýþýk hale getirir.
siz 5 kademenin toplamý için yazmýþsýnýz, yazdýðýnýz kod ile DFN Sembol e kaydedilip grafik haline getirilebilir.
þöyle bir sorun çýkartabilir bekleyen emirler sürekli deðiþecek ama DFN sembol e kaydederken 1 dk gibi (son anda ne varsa ) kaydedilebilecek.[/QUOTE]
Hocam bir sorum olacak:
her alýþ iþleminde
Alýþlartoplamý = Alýþlartoplamý + SonAlýþ ;
þeklinde yazailmek için sanýrým
var AlislarToplami =
var SonAlis = yazýp bunlarý tanýmlamam gerekecek sanýrým. Nasýl tanýmlayabilirim? Ne yazýk ki Ýdeal Matriks gibi deðil. Her iþlem önce tek tek tanýmlanma zorunluluðu taþýyor.
Ýdeal Algo Destek bölümü saðolsunlar bana þöyle bir kademe robotu göndermiþler. Burada anlamadýðým 3 konu var:
1) 5 tane sözlük tanýmlanmýþ. Bunlarýn her birisi farklý bir hisse için mi, yoksa tek bir hisse için mi? 2) örneðin formüldeki Sozluk[0] = new List<double> {21.20,21.45,1,1};//iþleme gir/karal/stop / adet satýrýndan ben 21,20TL de iþleme gir, 21,45 TL de kar al, 1% düþerse STOP ol, 1 lot AL olarak anladým(Lütfen unutmayýnýz ben Ýdeal yazýlým dilini ve c# bilmiyorum). Ama aþaðý satýrlara bakýyorum, 1% tanýmlanmamýþ. Birisi bana giriþteki tanýmlamanýn Türkçesini yazarsa, memnun olurum.
2) Yine formülde
if (sonfiyat <= AlisFiyat && Pozisyon == 0 && Rezerv == "") // AL
{
Rezerv = "AL";
Miktar = Lot;
IslemFiyat = Sistem.SonFiyat(EmirSembol);
}
Bunun anlamý tahtadaki ALIÞ Fiyatý aktife geçerse, AL anlamýna mý geliyor? Sanýrým bu formülde grid tanýmlanmamýþ. Sadece pasifteki ALIIÞ fiyatý aktife geçerse AL, diyor. Peki her kademe aktife geçtikçe alacak mý? Örneðin klasik gridbotta varsayalým 4-5 kademeye denk gelen yatay çizgiyi kesikçe alsýn, satsýn, diyoruz. Burada da öyle mi olacak?
3) Ayný seviyeyi tekrar tekrar kestiðinde mükerrer ALIM-SATIM yapmamasý için sisteme Anahtar ve var Pozisyon = Sistem.PozisyonKontrolOku þartlarýný tanýmlýyoruz. Örneðin Ýdeal algomarketteki þu formülde https://www.algomarket.com.tr/Form%C3%BCl/Detay/86
var Anahtar = Sistem.Name + "," + EmirSembol;
var Pozisyon = Sistem.PozisyonKontrolOku(Anahtar); ve iþlem sonunda da Sistem.PozisyonKontrolGuncelle(Anahtar, Lot); þeklinde tanýmlanmýþ.
Ýdeal' in bana gönderdiði formülde de var Anahtar = line + " , " +Sistem.Name + " , " + EmirSembol;
double IslemFiyat = 0;
DateTime IslemTarih;
var Rezerv = "";
var Pozisyon = Sistem.PozisyonKontrolOku(Anahtar, out IslemFiyat, out IslemTarih, out Rezerv);
þeklinde tanýmlayýp iþlem bitiminde de
Sistem.PozisyonKontrolGuncelle(Anahtar, Miktar + Pozisyon, IslemFiyat, Rezerv); diyerek kapatmýþ. Biz bir formül yazarsak hangi kalýbý kullanacaðýz ve iki kalýp arasýndaki fark nedir?
BANA GÖNDERÝLEN FORMÜLÜ AÞAÐIDA PAYLAÞIYORUM. SORULARIMI CEVAPLAYABÝLÝRSENÝZ, MEMNUN OLURUM.
var Sozluk = new Dictionary<float,List<double>>();
Sozluk[0] = new List<double> {21.20,21.45,1,1};//iþleme gir/karal/stop / adet
Sozluk[1] = new List<double> {11.16,11.21,1,1};//iþleme gir/karal/stop / adet
Sozluk[2] = new List<double> {11.12,11.17,1,1};//iþleme gir/karal/stop / adet
Sozluk[3] = new List<double> {11.08,11.13,1,1};//iþleme gir/karal/stop / adet
Sozluk[4] = new List<double> {11.04,11.09,1,1};//iþleme gir/karal/stop / adet
Sozluk[5] = new List<double> {11.00,11.05,1,1};//iþleme gir/karal/stop / adet
for (var No=0; No < Sozluk.Count; No++)
{
var EmirSembol = "IMKBH'ISCTR";
var AlisFiyat = (decimal)Sozluk.ElementAt(No).Value[0];
var HedefFiyat = (decimal)Sozluk.ElementAt(No).Value[1];
var StopFiyat = (decimal)Sozluk.ElementAt(No).Value[2];
var Lot = Sozluk.ElementAt(No).Value[3];
var line=No;
var Anahtar = line + " , " +Sistem.Name + " , " + EmirSembol;
double IslemFiyat = 0;
DateTime IslemTarih;
var Rezerv = "";
var Pozisyon = Sistem.PozisyonKontrolOku(Anahtar, out IslemFiyat, out IslemTarih, out Rezerv);
var basicitem = Sistem.YuzeyselVeriOku(EmirSembol);
var sonfiyat = (decimal)basicitem.LastPrice;
var bidfiyat = (decimal)basicitem.BidPriceDec;
var askfiyat = (decimal)basicitem.AskPriceDec;
if (sonfiyat == 0) continue;
if (bidfiyat == 0) continue;
if (askfiyat == 0) continue;
var Islem = "";
var Miktar = 0.0;
if (sonfiyat <= AlisFiyat && Pozisyon == 0 && Rezerv == "") // AL
{
Rezerv = "AL";
Miktar = Lot;
IslemFiyat = Sistem.SonFiyat(EmirSembol);
}
else if (Pozisyon > 0 && askfiyat >= HedefFiyat && Rezerv == "AL") // KARLA KAPAT
{
Rezerv = "";
Miktar = -Lot;
}
else if (Pozisyon > 0 && bidfiyat < StopFiyat && Rezerv == "AL") // STOP
{
Rezerv = "STOP";
Miktar = -Lot;
}
if (Miktar > 0) Islem = "ALIS";
if (Miktar < 0) Islem = "SATIS";
if (Islem != "")
{
Sistem.PozisyonKontrolGuncelle(Anahtar, Miktar + Pozisyon, IslemFiyat, Rezerv);
Sistem.EmirSembol = EmirSembol;
Sistem.EmirIslem = Islem;
Sistem.EmirSuresi = "KIE";
Sistem.EmirTipi = "Piyasa";
Sistem.EmirMiktari = (int)Math.Abs(Miktar);
Sistem.EmirGonder();
}
}
1 parça parça yazarak sanal çalýþtýrýp deneyebilirsiniz.
2 yazým dilini ve program yazmayý bilmiyorum diyorsunuz çok fazla detaya giriyorsunuz istediðiniz þartlarda yazýlýmý usta birinin bile hatasýz yapmasý zor
3 en kolayý grid bot ideal içindeki hazýr bot lar olur sizin için
yazdýklarýnýz içinde bekleyen emirlerin büyüklüðü ve küçüklüðü ile al/sat a dönen yapý istiyorsunuz
lot sayýlarý deðiþtikçe aldan sata, sattan ala ani dönüþler repaint gibi olur ve çok can yakabilir istenmeyen bir sürü emir gerçekleþtirebilir.
bu þekilde diyelim yazabildiniz ve çalýþtýrdýnýz, getiri eðrisi oluþturmayý düþünmeyin unutun. hesaplatamazsýnýz tamamen hatalý olur.
Bear_Bull
@BearBull26
Yazdýklarýnýzýn tamamýný okumadým,
Merak edip koda baktým, bakmýþken sorularý anladýðým kadarýyla cevaplayayým dedim.
1) Hayýr tek bir hisseye ait iþleme girilecek/çýkýlacak bilgileri içeriyor o sözlük bilgisi.1) 5 tane sözlük tanýmlanmýþ. Bunlarýn her birisi farklý bir hisse için mi, yoksa tek bir hisse için mi? 2) örneðin formüldeki Sozluk[0] = new List<double> {21.20,21.45,1,1};//iþleme gir/karal/stop / adet satýrýndan ben 21,20TL de iþleme gir, 21,45 TL de kar al, 1% düþerse STOP ol, 1 lot AL olarak anladým(Lütfen unutmayýnýz ben Ýdeal yazýlým dilini ve c# bilmiyorum). Ama aþaðý satýrlara bakýyorum, 1% tanýmlanmamýþ. Birisi bana giriþteki tanýmlamanýn Türkçesini yazarsa, memnun olurum.
iþlem yapýlacak sembol sabit olarak verilmiþ zaten kodda: var EmirSembol = "IMKBH'ISCTR";
2)listedeki 3.eleman fiyat bilgisi, yüzde ifade deðil. Kodda doðrudan bidfiyat ile kýyaslanmýþ:
else if (Pozisyon > 0 && bidfiyat < StopFiyat && Rezerv == "AL") // STOP
Anlýk fiyat(sonfiyat) listelerde tanýmlanan ilk deðerin altýnda olanlar için alýþ gönderir. Örneðin sonfiyat:10 ise 6 tane alýmý peþ peþe gönderir, ve karal/stop koþullarýnýn gerçekleþmesini beklemeye baþlar.2) Yine formülde
if (sonfiyat <= AlisFiyat && Pozisyon == 0 && Rezerv == "") // AL
{
Rezerv = "AL";
Miktar = Lot;
IslemFiyat = Sistem.SonFiyat(EmirSembol);
}
Bunun anlamý tahtadaki ALIÞ Fiyatý aktife geçerse, AL anlamýna mý geliyor? Sanýrým bu formülde grid tanýmlanmamýþ. Sadece pasifteki ALIIÞ fiyatý aktife geçerse AL, diyor. Peki her kademe aktife geçtikçe alacak mý? Örneðin klasik gridbotta varsayalým 4-5 kademeye denk gelen yatay çizgiyi kesikçe alsýn, satsýn, diyoruz. Burada da öyle mi olacak?
Orasý sizin kullanýmýnýza/ihtiyacýnýza baðlý.3) Ayný seviyeyi tekrar tekrar kestiðinde mükerrer ALIM-SATIM yapmamasý için sisteme Anahtar ve var Pozisyon = Sistem.PozisyonKontrolOku þartlarýný tanýmlýyoruz. Örneðin Ýdeal algomarketteki þu formülde https://www.algomarket.com.tr/Form%C3%BCl/Detay/86
var Anahtar = Sistem.Name + "," + EmirSembol;
var Pozisyon = Sistem.PozisyonKontrolOku(Anahtar); ve iþlem sonunda da Sistem.PozisyonKontrolGuncelle(Anahtar, Lot); þeklinde tanýmlanmýþ.
Ýdeal' in bana gönderdiði formülde de var Anahtar = line + " , " +Sistem.Name + " , " + EmirSembol;
double IslemFiyat = 0;
DateTime IslemTarih;
var Rezerv = "";
var Pozisyon = Sistem.PozisyonKontrolOku(Anahtar, out IslemFiyat, out IslemTarih, out Rezerv);
þeklinde tanýmlayýp iþlem bitiminde de
Sistem.PozisyonKontrolGuncelle(Anahtar, Miktar + Pozisyon, IslemFiyat, Rezerv); diyerek kapatmýþ. Biz bir formül yazarsak hangi kalýbý kullanacaðýz ve iki kalýp arasýndaki fark nedir?
Tarif etmek için düzgün kelimeleri bulamadým þu anda(yazdým yazdým sildim)
var Anahtar = line + " , " +Sistem.Name + " , " + EmirSembol; denildiðinde line kýsmý sözlükteki her satýr için deðiþeceði için hepsi için ayrý log atýlmasýný saðlýyor.
Örneðin
1.satýra istinaden þu fiyattan þu kadar pozisyon açtým
2.satýra istinaden þu fiyattan þu kadar pozisyon açtým ....
Yer Ýmleri