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