BistHesap = Sistem.BistHesapOku(6000) 6000 aracı kurumdaki hesap numarası mı oluyor
Printable View
BistHesap = Sistem.BistHesapOku(6000) 6000 aracı kurumdaki hesap numarası mı oluyor
6000 milisaniye
1 dk da bir kontrol için 60000 veya 600000 gibi olması lazım.,,,
ben aşağıdaki şekilde kontrol ettirdiğimden
float KONT = 60f; // Convert.ToSingle(Sistem.Parametreler[1].Split('=')[1].Trim() ) ; // 60 saniye
if (Sistem.ZamanKontrolSaniye(Sistem.Name) >= KONT ) // 60 saniyede 1 kez kontrol eder.
{ // ZamanKontrolSaniye
Sistem.ZamanKontrolGuncelle(Sistem.Name);
/// sistem veya bist hesap/bakiye okuma
}
BistHesap = Sistem.BistHesapOku(sayıdeğer) kullanmadım. / bilmiyorum.
teşekkürler
Aşağıdaki kısımda "Saat" kolonunda emrin gerçekleştiği saat bilgisini kod ile çekmek istiyorum.
ViopHesap.GerceklesenEmirler ile aşağıdaki alanları denedim ama doğru saati vermiyor hiç biri.
Bu bilgiyi nasıl alabiliriz
https://img001.prntscr.com/file/img0...4CtOlbvn2w.png
Alıntı:
public class VipOrderRecord
{
public string ValorDate = "";
public string OrderDate = "";
public string OrderTime = "";
public string EndDate = "";
Alıntı:
var ViopHesap = Sistem.ViopHesapOku();
if (ViopHesap != null)
{
var GerceklesenList = ViopHesap.GerceklesenEmirler;
Sistem.Debug("Symbol= " + GerceklesenList[55].Symbol);
Sistem.Debug("Price= " + GerceklesenList[55].Price);
Sistem.Debug("OrderTime= " + GerceklesenList[55].OrderTime);
Sistem.Debug("OrderDate= " + GerceklesenList[55].OrderDate);
Sistem.Debug("ValorDate= " + GerceklesenList[55].ValorDate);
Sistem.Debug("EndDate= " + GerceklesenList[55].EndDate);
}
keçi 5 yıl falan önce buralarda olan keçi ise kendisine bir minnet borcum var . Çok takıldığım bir konuda muhteşem yardım etmişti.
şimdi "dip tepe kovalama " stratejilerine kaldıysa üzülürüm
rica ederim bir faydam olduysa.
bist mantığında değerlendirmeyin.
dip tepe stratejilerini kripto gibi hızlı döngüleri olan kaldıraçlı piyasaar da uygulamak zorunluluktur.
kazanmanın en basit yolu topluluğun tasfiye olduğu noktadan ilk parti pozu açmak. kovalamaya da gerek yok çünkü liq map ler yayınlanıyor, görüyorsunuz, biliyorsunuz. yani seviyeler belli ve geleceği de belli.
market maker rakip değil düşmandır bu markette. size zarar vermeye çalışmaz direk yok etmeye oynarlar. onların bu zaafını nakite çevirmek kolaydır.
Örneğin resmi para birimim olan goat dan bugün bir örnek;
1 dk chartta dip aradığımızı varsayalım. hem hacim hemde oluşan wickten anlıyorsunuz 1 dk lıktaki ideal long dibini.
https://prnt.sc/3QqRk1jQx6Xf
benim yıllar önce dilim yandığı için öyle bakıyorum muhtemelen
gemi yürüyosa sorun yok tabi
sn. yuji,
gerçekleşen emirlerde şunu yapabiliyor muyuz?
örneğin, gridbot mantığında xx fiyattan alışımız gerçekleşti, al emri ile birlikte sat emirini de +x kademe üste yazdırdık. akabinde bu yazılı emrin gerçekleşip gerçekleşmediğini kontrol ederek gerçekleşirse al emri gönderebiliyor muyuz? çalışan bir kademe yapım var ama bir de böylesini denemek istiyorum ama olup olamayacağını kestiremediğimden ( kod bilgim zayıf) denemedim henüz.
merhaba
aşagıdaki kosullara uygun sorgu yapmak istiyorum
mesela 100 bar içinde
23 bar 200 ma nın altında - 5 bar 200 ma nın üastünde -69 bar 200 ma nın altında -3 bar 200 ma nın üastünde
olsun
sorgu açıklamasında aşafıdaki gibi bir şey görmek istiyorum görmek istiyorum
23 - 5 - 69 -3
(bu yapmak istediğim sorguda sıralama yapmak istemiyorum ) bir bakısta 100 bar içinde 200 ma nın altı ustunü görmek istiyorum
Kullandığım sistemlerin işlem sayı ve karlarını txt dosyasına kaydettirmek istiyorum. Birkaç deneme yaptım sonuca ulaşamadım. Yardımcı olursanız sevinirim.
Gerçekleşen emirleri aşağıdaki şekilde kullanabilirsiniz:
Bu kod user.dll de çalışıyor. Lib.cs'den emin değilim, denemedim. iDeal içerisinde kullandığınızda muhtemelen account değeri null dönecek ve rapor alamayacaksınız.Kod:var account = Sistem.ViopHesapOku();
if (account == null) return;
var orderLogs = new StringBuilder();
orderLogs.AppendLine(string.Empty);
var completedOrders = account.GerceklesenEmirler.OrderBy(o => o.OrderTime);
foreach (var order in completedOrders)
{
orderLogs.AppendLine(string.****("\t", order.OrderDate + " " + order.OrderTime,
order.Symbol,
order.BuySell.First() == 'A' ? order.Amount : -order.Amount,
order.Price));
}
Sistem.Mesaj(orderLogs.ToString());
Bazı aracı kurumlar Amount yerine GAmount kullanabiliyor. Veya bazıları gerçekleşen emirlerin konsolide edilmemiş halini yayınlayabiliyor. Dolayısıyla kodun aracı kurumun verisine göre yazılması gerekiyor.
NOT: Kod içerisinde J.o.i.n metodu yıldızlarla filtrelenmiş. Kodu kullanırken değiştirilmesi gerekiyor
p1:=Input("psar değeri ?",0.02,2,0.05);
p2:=Input("psar değeri%?",0.3,2,0.1);
M1:=Input("MostPERIOD",1,1000,8);
M2:=Input("Stop% ",0.001,100,3.5);
merhabalar bu kodu idealde nasıl tanımlayabilirim?
arkadaşlar bu kod değer üretmiyor , hata nerde olabilir.
var length = 21; // Hacim ortalaması için periyot
var per = 8; // Bollinger Bantları için periyot
var sapma2 = 1; // Bollinger Bantları için sapma çarpanı (2. bant)
var sapma3 = 3; // Bollinger Bantları için sapma çarpanı (3. bant)
var v = Sistem.GrafikVerileri;
var c = Sistem.GrafikFiyatOku(v, "Kapanis");
var h = Sistem.GrafikFiyatOku(v, "Yuksek");
var l = Sistem.GrafikFiyatOku(v, "Dusuk");
var o = Sistem.GrafikFiyatOku(v, "Acilis");
var volume = Sistem.Volume();
var avrg = Sistem.MA(volume, "Simple", length); // Hacim ortalaması (SMA)
var vold1 = Sistem.Liste(0);
var vold2 = Sistem.Liste(0);
var vold3 = Sistem.Liste(0);
var volu1 = Sistem.Liste(0);
var volu2 = Sistem.Liste(0);
var volu3 = Sistem.Liste(0);
for (int i = 1; i < v.Count; i++)
{
vold1[i] = volume[i] > avrg[i] * 1.5 && c[i] < o[i]; // Yüksek hacimli düşüş mumu
vold2[i] = volume[i] >= avrg[i] * 0.5 && volume[i] <= avrg[i] * 1.5 && c[i] < o[i]; // Orta hacimli düşüş mumu
vold3[i] = volume[i] < avrg[i] * 0.5 && c[i] < o[i]; // Düşük hacimli düşüş mumu
volu1[i] = volume[i] > avrg[i] * 1.5 && c[i] > o[i]; // Yüksek hacimli yükseliş mumu
volu2[i] = volume[i] >= avrg[i] * 0.5 && volume[i] <= avrg[i] * 1.5 && c[i] > o[i]; // Orta hacimli yükseliş mumu
volu3[i] = volume[i] < avrg[i] * 0.5 && c[i] > o[i]; // Düşük hacimli yükseliş mumu
}
var cold1 = Color.FromArgb(128, 0, 0); // Koyu kırmızı
var cold2 = Color.Red; // Kırmızı
var cold3 = Color.Orange; // Turuncu
var colu1 = Color.FromArgb(0, 100, 0); // Koyu yeşil
var colu2 = Color.Lime; // Açık yeşil
var colu3 = Color.FromArgb(127, 255, 212); // Su yeşili
var color = Sistem.Liste(0);
for (int i = 1; i < v.Count; i++)
{
color[i] = vold1[i] ? cold1 : vold2[i] ? cold2 : vold3[i] ? cold3 : volu1[i] ? colu1 : volu2[i] ? colu2 : volu3[i] ? colu3 : Color.Empty;
}
var ortaband = Sistem.MA(c, "Simple", per); // Orta bant (SMA)
var stdev = Sistem.StDev(c, per, 1); // Standart sapma (Usul = 1)
var ustBB = Sistem.Liste(0);
var altBB = Sistem.Liste(0);
var ustBB3 = Sistem.Liste(0);
var altBB3 = Sistem.Liste(0);
for (int i = 1; i < v.Count; i++)
{
ustBB[i] = ortaband[i] + sapma2 * stdev[i]; // Üst bant (2. sapma)
altBB[i] = ortaband[i] - sapma2 * stdev[i]; // Alt bant (2. sapma)
ustBB3[i] = ortaband[i] + sapma3 * stdev[i]; // Üst bant (3. sapma)
altBB3[i] = ortaband[i] - sapma3 * stdev[i]; // Alt bant (3. sapma)
}
Sistem.Cizgiler[0].Deger = ortaband; // Orta bant
Sistem.Cizgiler[1].Deger = ustBB; // Üst bant (2. sapma)
Sistem.Cizgiler[2].Deger = altBB; // Alt bant (2. sapma)
Sistem.Cizgiler[3].Deger = ustBB3; // Üst bant (3. sapma)
Sistem.Cizgiler[4].Deger = altBB3; // Alt bant (3. sapma)
var volume = Sistem.GrafikFiyatOku(v, "Hacim");
olmalı sanırım
Stdev hatalı
var stdev = Sistem.StDev(c, per); şeklinde deneyin. ortaband ve stdev hesaplamalarını avrg nin altına taşıyın
Alt kodları yorum satırına alıp çizgilerin tek tek çizdirildiğini sırayla kontrol ederek ilerleyin.
renklendirme olayını bilmiyorum vold1 ve vold2 koşulu oluşursa ne yapılacak belirtilmemiş.
/*
vold1 vold2 ve bar renklendirmeleri
*/
Sistem.Cizgiler[0].Deger = stdev;
Copilot gemini gibi uygulamalara yazıp cevap isteyin
Koddaki asıl sıkıntı listelerin değişken gibi kullanılması. For döngüsü içinde değer olarak kullanmak için [i] eklenmeli hepsine
Sent from my SM-S901E using Tapatalk
biraz sadeleştirdim ama yine değer üretmiyor
var v = Sistem.GrafikVerileri;
var c = Sistem.GrafikFiyatOku(v, "Kapanis");
var h = Sistem.GrafikFiyatOku(v, "Yuksek");
var l = Sistem.GrafikFiyatOku(v, "Dusuk");
var o = Sistem.GrafikFiyatOku(v, "Acilis");
var vol = Sistem.Volume();
// Hacim ortalaması (EMA)
var avrg = Sistem.MA(vol, "Exp", 10);
// Bollinger Bantları için orta bant (SMA) ve standart sapma
var ortaband = Sistem.MA(c, "Simple", 8);
var stdev = Sistem.StDev(c, 8);
// Hacim ve mum renkleri için liste oluşturma
var vold1 = Sistem.Liste(0);
var vold2 = Sistem.Liste(0);
var vold3 = Sistem.Liste(0);
var volu1 = Sistem.Liste(0);
var volu2 = Sistem.Liste(0);
var volu3 = Sistem.Liste(0);
for (int i = 1; i < Sistem.BarSayisi; i++)
{
vold1[i] = vol[i] > avrg[i] * 1.5 && c[i] < o[i]; // Yüksek hacimli düşüş mumu
vold2[i] = vol[i] >= avrg[i] * 0.5 && vol[i] <= avrg[i] * 1.5 && c[i] < o[i]; // Orta hacimli düşüş mumu
vold3[i] = vol[i] < avrg[i] * 0.5 && c[i] < o[i]; // Düşük hacimli düşüş mumu
volu1[i] = vol[i] > avrg[i] * 1.5 && c[i] > o[i]; // Yüksek hacimli yükseliş mumu
volu2[i] = vol[i] >= avrg[i] * 0.5 && vol[i] <= avrg[i] * 1.5 && c[i] > o[i]; // Orta hacimli yükseliş mumu
volu3[i] = vol[i] < avrg[i] * 0.5 && c[i] > o[i]; // Düşük hacimli yükseliş mumu
}
// Bollinger Bantları için sapma çarpanları
var sapma2 = 1; // 2. sapma
var sapma3 = 3; // 3. sapma
// Alt bantlar
var altBB = Sistem.Liste(0);
var altBB3 = Sistem.Liste(0);
for (int i = 1; i < Sistem.BarSayisi; i++)
{
altBB[i] = ortaband[i] - sapma2 * stdev[i]; // Alt bant (2. sapma)
altBB3[i] = ortaband[i] - sapma3 * stdev[i]; // Alt bant (3. sapma)
}
// Çizgileri çiz
Sistem.Cizgiler[0].Deger = ortaband; // Orta bant
Sistem.Cizgiler[1].Deger = altBB; // Alt bant (2. sapma)
Sistem.Cizgiler[2].Deger = altBB3; // Alt bant (3. sapma)
* 1.5 Değil
* 1.5f
olarak yazın
noktalı çarpan olan hepsine uygulayın.
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if (vol[i] > avrg[i] * 1.5f && c[i] < o[i])
Sistem.BarRengi(i, Color.OrangeRed, 3, 1); // Yüksek hacimli düşüş mumu
if (vol[i] >= avrg[i] * 0.5f && vol[i] <= avrg[i] * 1.5f && c[i] < o[i])
Sistem.BarRengi(i, Color.Cyan, 3, 1); // Orta hacimli düşüş mumu
if (vol[i] < avrg[i] * 0.5f && c[i] < o[i])
Sistem.BarRengi(i, Color.White, 3, 1); // Düşük hacimli düşüş mumu
if (vol[i] > avrg[i] * 1.5f && c[i] > o[i])
Sistem.BarRengi(i, Color.DarkGreen, 3, 1); // Yüksek hacimli yükseliş mumu
if (vol[i] >= avrg[i] * 0.5f && vol[i] <= avrg[i] * 1.5f && c[i] > o[i])
Sistem.BarRengi(i, Color.Azure, 3, 1); // Orta hacimli yükseliş mumu
if (vol[i] < avrg[i] * 0.5f && c[i] > o[i])
Sistem.BarRengi(i, Color.Blue, 3, 1); // Düşük hacimli yükseliş mumu
}
cuma yeni birşey farkettim
ideali update etmek istermisin popup ı çıkınca data alımı kesiliyor arkada robot çalıştığı halde
ideal işlem yapmakta olan robotları sıkıntıya sokacak birşey yapmazdı , bişeyler değişmiş herhalde
2024 başından itibaren vip30 1 dk lık olan varmı hazırda . bende arada 2-3 gedik oluşmuş
çok makbule geçer
dosya sitesine yükledim.
https://lifeboxtransfer.com/s/329655...9-8826e06d17ee
Çok teşekkürler
Bear & Bull Hocam,
Size Twitter' da DM gönderdim, ama sanırım Twitter' dan ayrılmışsınız. Benim sorum, örneğin algomarketteki veya sistem tanımlarındaki basit kademe robotunun getiri eğrisini nasıl görebiliriz? Bilgilendirebilirseniz, memnun olurum.
İdeal' de kodlama bilgim örnek Youtube videolarındaki kadar. Kısacası bilmiyorum.
Yardımlarınız için şimdiden teşekkür ederim.
merhaba
her alış işleminde
Alışlartoplamı = Alışlartoplamı + SonAlış ;
her satış işleminde
Satışlartoplamı = Satışlartoplamı + SonSatış;
işlemler kaydettirilirse
(Alışlartoplamı - Satışlartoplamı) - eldeki poz * Sonfiyat ile kar rakamı buldurulabilir.
bunlar Sistem.Liste(0) olarak tanımlanarak yapılırsa getiri eğrisi oluşturulabilir.
pek kolay bir işlem değil.
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.
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.
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.Alıntı:
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.Alıntı:
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ı.Alıntı:
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 ....