manuel yumurtacı vardı bırde o nerelerde acaba
Printable View
manuel yumurtacı vardı bırde o nerelerde acaba
Daha fazla kodlama ile her şey mümkün arkadaşlar..
Gönderilen emrin OrderNo sunu tespit etmek mümkün.
OrderNo verilerek emir iptal etmek mümkün.
Aşağıdaki linkte HesapOku fonksiyonları kullanımları var.
Sonrasında class yapıları da mevcut.
1-gönderilen emrin bilgileri kaydedilir.
2-hesapoku ile çekilen verilerde 1.madde bilgileri ile eşleşen kaydın orderno su çekilir kaydedilen yere buda işlenir.
3-algoritmada gereken noktada emir iptal edilir.
http://www.hisse.net/forum/showthrea...12740&page=843
Basit bir örnek de ekleyelim havada kalmasın.
PHP Code:
var BistHesap = Sistem.BistHesapOku();
if (BistHesap != null)
{
var BekleyenList = BistHesap.BekleyenEmirler;
//Bekleyen Emirler içerisinde Sembol Adı GARAN olan, Yönü Satış olan Emrin numarasını bul
foreach (var p in BekleyenList )
if (p.Symbol== "IMKBH'GARAN" && p.BuySell=="Satış") // filtre değişkenlerini istediğiniz yerden alıp atayın..
Sistem.Mesaj("Emir Numarası: "+p.OrderNo.ToString() + " Sembol :"+p.Symbol.ToString() + " İşlem Yönü :"+p.BuySell.ToString() + " Lot :"+p.Balance.ToString() );
//daha fazlası için yukardaki linkten ImkbOrderRecord yada VipOrderRecord classlarından field isimlerine bakabilirsiniz.
}
Kimya sektörünü listeleyen Sorgu Sistem örneği, daha kolay yolu vardır belki.
Sorgu dışında kullanacaksanız, ihtiyaca uygun düzenlersiniz.
PHP Code:
foreach (string line in File.ReadLines(@"c:\iDeal\Config\ImkbEndeksSenetler.txt") )
{
if (line.Contains("XKMYA") && line.Split('=')[0]==Sistem.Sembol.Replace("IMKBH'",""))
{
Sistem.SorguAciklama =line;
Sistem.SorguEkle();
}
}
Ozamanlar baya sikinti yasamistik dediginiz gibi bir surude kodlama ve aninda geri donus gerekiyordu bizde yaklasik 20 30 adet sistem her 1 dakikada ortalama 2 islem acacakti
2 carpi 20 40 adet emir her 1 dakikada
Bir nevi hftnin en kucuk versionu gibi araci kurumdan bu sorgulari almak zaten problem server sikinti yasiyor disardan emirlere ve robotlara bir isim takip hangi robotun hangi emri gonderdigi hesaplattirmak gerekiyordu filan
1. Robotu. Emir nosu stoploss kar al seviyesi cekilecek fakat ayni anda diger robotlardan 3 tanesi daha emir gonderiyor her birinin stop kar al seviyeleri farkli 1. Robot kac numarali referanslarla emir yazdi ? 2. Ribotun ki hangi nolu emirler. İste bu yuzden disardan tumunu kontrol edip belirli bir ana kontrol programi yaratip emirleri 1. Ribottan baslayarak gonderirsek emir nolara hesaplattirarak bu 1. Robotun emir nosu filan demek gerekiyordu.
Bu isinaltindan kalkamadik bnim kod bilgim olsa ustune giderdim oda olmayinca klasik sistemi gelistirdik bizde
Belkise senin dedigin yontemlerle bu yapilabilirdi. Zaten yapnak istedigim seyi kodlasak bile araci kurumun saglayicilariyla filan gerekli izinler filan almak gerekiyordu bir suru kulfet bizi asti bu is daha turkiye bunlara hazir degil :)
Bu asamalara gecebilmek bu imkanlari kullanabilmek lazim, kecinin kodlama bilgisi cok saglam oldugundan rahat yazabiliyor.
Sistemler bu sekilde cok daha gelismis ve ileri seviyelere tasinmis olacak ve gorunuyor ki giderek bu tip sistemler mecburi ihtiyac olacak daha iyi performans icin ve belkide piyasada tutunabilmek icin.
keçi hocam , teşekkürler cevap için
bir sorum daha var ,
emir nosunu aldığımız/bildiğimiz emre düzeltme yada iptal yollama örneği varmı.
cxSistem altına eklenmiştir diye düşünüp yapılıyor diye yazmıştım ama şimdi kontrol ettim cxSistem altında sanırım yok hala :)
Bundan dolayı maalesef sizler için örnek kod paylaşamıyorum.
En başından beri unsupported bir yöntem kullanıyorum ve açıkladığımda başıma bir iş gelmesinden korkuyorum:) Artık kullanamayacağım hale gelmesi vb. gibi.
(Birde işin ideal fikri haklar ihlali kısmı var, kullandığım yapı exe içerisindeki kodlardan kopya..
Bu kodlara nasıl ulaşılacağına dair detaylı bir post atmıştım daha önce. Ordan yürüyebilenler için anahtar kelime ImkbCancelOrder)
nasıl yapıldığını kabaca anlatayım.
C:\iDeal\Config\TradeKurumlar.Txt dosyasında kurumlara ait web servis adresleri bulunuyor.
Örneğin Gedik https://gob.gedik.com/gendexweb/jsps...ternet_api.jsp adresini kullanıyor.
ideal ile aracı kurum servisleri arasındaki haberleşme bu adres üzerinden gerçekleşiyor.
Peki bunu nasıl yapıyor?
C:\iDeal\TradeLog içerisinde log atılan web servis paramları var.Manuel bir işlem yapıp düşen loga bakabilirsiniz..
örneğin emir iptelinde gönderilen param;
komut=HISSEEMIRSIL¶meter1=accountX.AccountName ¶meter2=11111111¶meter3=accountX.Password& parameter7=123456789¶meter38=176.88.88.88
gibi..(güvenlik nedeniyle log atarken parola-şifre gibi değerler yazılmıyor bunlarıda işleyeceksiniz.)
bunu adres sonunda "url?param" formatına dönüştürüp chrome da dahi çalıştırsanız komut çalışır :)
demekki ihtiyacınız olan csharp kodu, string işlemler yoluyla elde ettiğiniz adresi Request eden bir kod iletişim için yeterli.
(Fakat şunu belirtyelim aracı kuruma göre değişen farklı olaylar var.Bunlar için ideal içerisinde farklı caseler var, bunları görmeden ezbere bu işi yapmak sakıncalı.)
HttpWebRequest mn = (HttpWebRequest)WebRequest.Create(url);
gibi.
Aracı kurumların kendi yönetim yazılımları var, örneğin gendeks, bunu kullanan tüm kurumların çalışma mantığı ise aynıdır.
Özetle ideal ile aracı kurum servisleri arasındaki tüm iletişim protokolüne kodlarıda gördüğüm için hakimim ve bu yönemi kullanarak hallediyorum kendi işlerimi ve manuel yapılan her işi otomatikleştirebiliyorum..
İptal ve iyileştirme için idealin sistem altına metod koymasını talep ederseniz yapacaklardır bence.Manuelde sakıncası olmayan bir şeyin otomatikde de sakıncası olamaz.
talep var , ben 1 senedir talep ediyorum , daha önce de istendiği forumda da vardı zaten .
bir şekilde yapılmıyor .
günün birinde memlette api üzerinden data sağlayıcı api den emir iletimi yapan aracı kurum olursa işler değişir muhtemelen
İdealin sorgu ekranı için;
Haftalık,aylık,yıllık,3 yıllık,5 yıllık,10 yıllık yüzdesel değişimlerini gösterecek liste formülünü arıyorum.
Yardım için teşekkür ederim.
Api üzerinden emir iletimi var ve herkese açık zaten:)
Elinizde kullanım dökümanı olmadığı için yok sanıyorsunuz.
Önceki post da karışık anlatmış olabilirim.
elinizde bir "web adresi" var.
https//kokadres?user=keci&sifre=1234&emirno=123456
bu adresi tek satır kodla request ediyorsunuz. isterseniz geri dönüşüde okuyup sonucu alıyorsunuz.
komutu çalıştırmak için gereken kod 2 satır sadece.
aracı kuruma göre değiştiği için manuel işlem yapıp size uygun paramlara loglardan bakın. 1 lot ile denemeler yapıp işe yarayıp yaramadığını anlayabilirsiniz. hatta koddan önce chrome ile test edip sonucu da görebilirsiniz.
PHP Code:
var C = Sistem.GrafikFiyatSec("Kapanis");
//Son 1000 bardaki yüzdesi
var Roc1000 = Sistem.PriceRocPercent(C, 1000);
Sistem.SorguBaslik[0] = "Açılış";
Sistem.SorguBaslik[1] = "Yüksek";
Sistem.SorguBaslik[2] = "Düşük";
Sistem.SorguBaslik[3] = "Kapanış";
Sistem.SorguBaslik[4] = "Hacim";
Sistem.SorguBaslik[5] = "Lot";
Sistem.SorguBaslik[6] = "Önceki Kapanış";
Sistem.SorguBaslik[7] = "Gün %";
Sistem.SorguBaslik[8] = "Bu Hafta %";
Sistem.SorguBaslik[9] = "1 Hafta %";
Sistem.SorguBaslik[10] = "Bu Ay %";
Sistem.SorguBaslik[11] = "1 Ay %";
Sistem.SorguBaslik[12] = "3 Ay %";
Sistem.SorguBaslik[13] = "6 Ay %";
Sistem.SorguBaslik[14] = "Bu Yıl %";
Sistem.SorguBaslik[15] = "1 Yıl %";
Sistem.SorguBaslik[16] = "1000 %";
Sistem.SorguDeger[0] = Sistem.GrafikVerileri[Sistem.BarSayisi-1].Open;
Sistem.SorguDeger[1] = Sistem.GrafikVerileri[Sistem.BarSayisi-1].High;
Sistem.SorguDeger[2] = Sistem.GrafikVerileri[Sistem.BarSayisi-1].Low;
Sistem.SorguDeger[3] = Sistem.GrafikVerileri[Sistem.BarSayisi-1].Close;
Sistem.SorguDeger[4] = Sistem.GrafikVerileri[Sistem.BarSayisi-1].Vol;
Sistem.SorguDeger[5] = (float)Sistem.LotGun(Sistem.Sembol);
Sistem.SorguDeger[6] = Sistem.GrafikVerileri[Sistem.BarSayisi-2].Close;
Sistem.SorguDeger[7] = Sistem.YuzdeGun(Sistem.Sembol);
Sistem.SorguDeger[8] = Sistem.YuzdeBuHafta(Sistem.Sembol);
Sistem.SorguDeger[9] = Sistem.YuzdeBirHafta(Sistem.Sembol);
Sistem.SorguDeger[10] = Sistem.YuzdeBuAy(Sistem.Sembol);
Sistem.SorguDeger[11] = Sistem.YuzdeBirAy(Sistem.Sembol);
Sistem.SorguDeger[12] = Sistem.YuzdeUcAy(Sistem.Sembol);
Sistem.SorguDeger[13] = Sistem.YuzdeAltiAy(Sistem.Sembol);
Sistem.SorguDeger[14] = Sistem.YuzdeBuYil(Sistem.Sembol);
Sistem.SorguDeger[15] = Sistem.YuzdeBirYil(Sistem.Sembol);
Sistem.SorguDeger[16] = Roc1000;
Sistem.SorguEkle();
Teşekkürler Keçi bey...On yıllık veya 5 yıllığı veya 3 yıllığınasıl yazıyoruz
Hata veriyor
Aşağıdaki gibi deneyebilirsiniz.
Hata verenler açıklamada yazıyor olacak.
16. kolonda son 1000 bardaki yüzdesi bulunuyor.
Benzer kullanımla farklı periyot yüzdelerini bulabilirsiniz.Bunun için eklemiştim bunu.
PHP Code:
try{
Sistem.GrafikVerisiIndir(Sistem.Sembol, Sistem.Periyot);
}
catch(Exception err)
{
Sistem.Mesaj(Sistem.Sembol+" - "+err.ToString());
}
try{
Sistem.SorguBaslik[0] = "Açılış";
Sistem.SorguBaslik[1] = "Yüksek";
Sistem.SorguBaslik[2] = "Düşük";
Sistem.SorguBaslik[3] = "Kapanış";
Sistem.SorguBaslik[4] = "Hacim";
Sistem.SorguBaslik[5] = "Lot";
Sistem.SorguBaslik[6] = "Önceki Kapanış";
Sistem.SorguBaslik[7] = "Gün %";
Sistem.SorguBaslik[8] = "Bu Hafta %";
Sistem.SorguBaslik[9] = "1 Hafta %";
Sistem.SorguBaslik[10] = "Bu Ay %";
Sistem.SorguBaslik[11] = "1 Ay %";
Sistem.SorguBaslik[12] = "3 Ay %";
Sistem.SorguBaslik[13] = "6 Ay %";
Sistem.SorguBaslik[14] = "Bu Yıl %";
Sistem.SorguBaslik[15] = "1 Yıl %";
Sistem.SorguBaslik[16] = "1000 %";
Sistem.SorguDeger[0] = Sistem.GrafikVerileri[Sistem.BarSayisi-1].Open;
Sistem.SorguDeger[1] = Sistem.GrafikVerileri[Sistem.BarSayisi-1].High;
Sistem.SorguDeger[2] = Sistem.GrafikVerileri[Sistem.BarSayisi-1].Low;
Sistem.SorguDeger[3] = Sistem.GrafikVerileri[Sistem.BarSayisi-1].Close;
Sistem.SorguDeger[4] = Sistem.GrafikVerileri[Sistem.BarSayisi-1].Vol;
Sistem.SorguDeger[5] = (float)Sistem.LotGun(Sistem.Sembol);
Sistem.SorguDeger[6] = Sistem.GrafikVerileri[Sistem.BarSayisi-2].Close;
Sistem.SorguDeger[7] = Sistem.YuzdeGun(Sistem.Sembol);
Sistem.SorguDeger[8] = Sistem.YuzdeBuHafta(Sistem.Sembol);
Sistem.SorguDeger[9] = Sistem.YuzdeBirHafta(Sistem.Sembol);
Sistem.SorguDeger[10] = Sistem.YuzdeBuAy(Sistem.Sembol);
Sistem.SorguDeger[11] = Sistem.YuzdeBirAy(Sistem.Sembol);
Sistem.SorguDeger[12] = Sistem.YuzdeUcAy(Sistem.Sembol);
Sistem.SorguDeger[13] = Sistem.YuzdeAltiAy(Sistem.Sembol);
Sistem.SorguDeger[14] = Sistem.YuzdeBuYil(Sistem.Sembol);
Sistem.SorguDeger[15] = Sistem.YuzdeBirYil(Sistem.Sembol);
var C = Sistem.GrafikFiyatSec("Kapanis");
var Roc1000 = Sistem.PriceRocPercent(C, 1000); //Son 1000 bardaki yüzdesi
Sistem.SorguDeger[16] = Roc1000[Sistem.BarSayisi-1];
}
catch(Exception err){
Sistem.SorguAciklama="Hata Oluştu : " + err.Message;
}
Sistem.SorguEkle();
Teşekkür ederim...
LG-D855 cihazımdan hisse.net mobile app kullanarak gönderildi.
hocam 3 aylık ev ödevi verdin çıktın:)
idealin kendi emir metodunda karşıdan cevabı bekliyor , genelde 30 ms gibi bir kayıp demek . birden fazla taraflı emirlerde sıkıntı oluyor bu yüzden. sırf bu sebepten bile uğraşılır. piyasa yapıcılığa bile soyunulur
idealde şöyle basit bi sistem yazabilirmiyiz hisseler için.
yıllıklandırılmış net kar + yıllıklandırılmış efk / piyasa değeri
çıkan sonucu indikator yapabilirmiyiz.
yıllıklandırılmış demek şöyle hesaplanıyor.
bu çeyrek gelen bılanco karını bir önceki yılın aynı çeyreğiyle topluyor
yani 2017/2ç 1000 TL
2106/2ç 1000 Tl diyelim.
yıllıklandırılmış 2017/2ç = 2000 TL gibi. yanlıs hatırlamıyorsam
daha once hesaplamışım pardon şöyleymiş formul
http://www.hisse.net/forum/showthrea...0#post10784410
üstteki alıntıyı yapabılırmıyız kızlar :D
İyi geceler...İdeal Sorgu için Zirve veya dibe göre değişimi 100 günlük lük veya herhangi bir periyotta verebilecek formül lazım.Teşekkürler...
örnek sorguda Herhangi bir periyotta son 500 barda dip ve zirvesine %10 yaklaşan hisseleri sorgulayabirsin.
bar sayısını ve yüzdesel yaklaşımı kod içersinde degiştirebilirsin
Kod:Sistem.SorguBaslik[0] = "Kapanış";
Sistem.SorguBaslik[1] = "Zirve";
Sistem.SorguBaslik[2] = "Dip";
var tara = 500; //Sistem.BarSayisi-1; //Parametreler[0];
var Veriler = Sistem.GrafikFiyatSec("Kapanis");
var HHV = Sistem.HHV(tara,"Yuksek");
var LLV = Sistem.LLV(tara,"Dusuk");
var Son = Veriler[Sistem.BarSayisi-1];
var Zirve = HHV[Sistem.BarSayisi-1];
var Dip = LLV[Sistem.BarSayisi-1];
var FarkZirve = Zirve * 0.90;
var FarkDip = Dip * 1.10;
// filtrele
if (Son < FarkDip || Son > FarkZirve )
{
Sistem.SorguDeger[0] = Sistem.GrafikVerileri[Sistem.BarSayisi-1].Close;
Sistem.SorguDeger[1] = Zirve;
Sistem.SorguDeger[2] = Dip;
if (Son < FarkDip )
Sistem.SorguAciklama = tara+" barda Dibe Geldi/yakın";
else if (Son > FarkZirve)
Sistem.SorguAciklama = tara+" barda Zirveye Geldi/yakın";
}
else
{
Sistem.SorguAciklama = "Dip/tepe %10 marj dışında";
Sistem.SorguDeger[0] = Sistem.GrafikVerileri[Sistem.BarSayisi-1].Close;
Sistem.SorguDeger[1] = Zirve;
Sistem.SorguDeger[2] = Dip;
}
Sistem.SorguEkle();
yanlış anlamadı isem şu şekilde olacak.
1-Periyotları tutan bir dizi tanımlanır. Bu diziyi kullanan bir for döngüsü daha olur.
2-DosyaAdi tanımını alttaki for döngüsünün altına taşırsınız. içeriğinde periyot ve sembol adına yer verirsiniz.
Böylece istediğiniz kadar süredeki veriyi, Metastock_Sembol_Periyot.txt isimlendirmesi ve gruplandırması ile bir klasörde toplamış olabilirsiniz. kod düzenlemesi için yakın zamanda vakit ayırmam zor.
geri donusunuz icin tesekkurler sayin Keci.
Sayın oralet teşekkür ederim.Hata veriyor acaba sebebi ne olabilir?
c:\Users\Administrator\AppData\Local\Temp\2\0jutuu 0e.0.cs(12,17) : error CS1514: { expected
c:\Users\Administrator\AppData\Local\Temp\2\0jutuu 0e.0.cs(12,17) : error CS1519: Invalid token '-' in class, struct, or interface member declaration
c:\Users\Administrator\AppData\Local\Temp\2\0jutuu 0e.0.cs(13,1) : error CS1519: Invalid token '{' in class, struct, or interface member declaration
Hata bu...
Sistem.SorguBaslik[0] = "Kapanış";
Sistem.SorguBaslik[1] = "Zirve";
Sistem.SorguBaslik[2] = "Dip";
var tara = 250;//Sistem.BarSayisi-1; //Parametreler[0];
var Veriler = Sistem.GrafikFiyatSec("Kapanis");
var HHV = Sistem.HHV(tara,"Yuksek");
var LLV = Sistem.LLV(tara,"Dusuk");
var Son = Veriler[Sistem.BarSayisi-1];
var Zirve = HHV[Sistem.BarSayisi-1];
var Dip = LLV[Sistem.BarSayisi-1];
var FarkZirve = Zirve * 0.97;
var FarkDip = Dip * 1.03;
// filtrele
if (Son < FarkDip || Son > FarkZirve )
{
Sistem.SorguDeger[0] = Sistem.GrafikVerileri[Sistem.BarSayisi-1].Close;
Sistem.SorguDeger[1] = Zirve;
Sistem.SorguDeger[2] = Dip;
if (Son < FarkDip )
Sistem.SorguAciklama = tara+" günlükte Dibe Geldi/yakın";
else if (Son > FarkZirve)
Sistem.SorguAciklama = tara+" günlükte Zirveye Geldi/yakın";
}
else
{
Sistem.SorguAciklama = "Dip/tepe %3 marj dışında";
Sistem.SorguDeger[0] = Sistem.GrafikVerileri[Sistem.BarSayisi-1].Close;
Sistem.SorguDeger[1] = Zirve;
Sistem.SorguDeger[2] = Dip;
}
Sistem.SorguEkle();
oralet kım jarmen mı
Benim tek derdim manuel girdiğim emri kar kitleyerek robotun takip etmesi oda olmuyor malesef yıl olmuş 2017 elimde telefonla pozu açayım işime bakarım robot pozu algılasın her 100 puanın 50 puanını izleyen kar al yaparak yoluna devam etsin
sayın gencparaci
ben de sizin ggibi pozisyonumu kendim açmak istiyorum sonrasında stop u veya karl veya ilerleyen kar al ı robota bırakmak istiyorum ,alış veya satış seviyemi manuel olarak da girebilirim ,
Bullish Engulfing ve Bearish Engulfing
ideal formullerini paylaşabilecek arkadaş olursa seviniriz
doğru sorguyu çalıştırdığınızda ekrana gelecek döküm aşağıdaki gibidir.
o sistemin içinde ne RSI ne de MOM değerleri var
yani RSI-MOM çıkması imkansız.
%3 dışında olanlar çıkmasın derseniz
bu kod parçacığını sistemden siliniz.
else
{
Sistem.SorguAciklama = "Dip/tepe %3 marj dışında";
Sistem.SorguDeger[0] = Sistem.GrafikVerileri[Sistem.BarSayisi-1].Close;
Sistem.SorguDeger[1] = Zirve;
Sistem.SorguDeger[2] = Dip;
}
http://666kb.com/i/dm331ri3wztaneet7.png
şu kod daha önce paylaşılmıştı işinize yarayabilir.
Parametreler kısmını MANUEL doldurmanız gerekmektedir.
//Pozisyon Kontrol Robotu / Girilen Pozisyonun Otomatik Kontrolünü Sağlar Kontrolsüz Zarar Etmenizi Önler
//########################################### YAZAN ###### ERDAL KARAKAŞ
var Sembol_VIP30 = "VIP'VIP-X030";
//Kontrol Edilecek Pozisyon Bilgileri Parametrelerden Alınır.
string Pozisyon_Yonu = Sistem.Parametreler[0]; // Girilen pozisyonun yönü belirlenir Örnek: Satış = S Alış = A
float Lot_Miktari = Convert.ToSingle(Sistem.Parametreler[1]); //Alış/Satış yapılan Aktif Lot Miktarı belirlenir.
float islem_Fiyati = Convert.ToSingle(Sistem.Parametreler[2]); //Lot Alış/Satış fiyatı belirlenir.
float Zarar_Limiti = Convert.ToSingle(Sistem.Parametreler[3])/1000; //Pozisyonda maksimum edilecek zarar seviyesi. Örnek: 300 Puan için = 300
float Kar_Limiti = Convert.ToSingle(Sistem.Parametreler[4]); //Pozisyonda maksimum kar seviyesi belirlenir. Örnek: 1250 Puan için = 1250
float Kar_Alma_Seviyesi = Convert.ToSingle(Sistem.Parametreler[5]); //Pozisyondan alınacak olan kar seviyesi
//string HesapAdi = Sistem.Parametreler[8];
//string AltHesapAdi = Sistem.Parametreler[9];
string SozlesmeAdi = Sistem.Parametreler[10];
var Renk_Kirmizi = Sistem.Renk(250, 250, 0, 0); //Kırmızı
var Renk_Siyah = Sistem.Renk(0, 300, 0, 0); //Siyah
var Renk_Mavi = Sistem.Renk(250, 50, 50, 250); //Mavi
var Renk_Mor = Sistem.Renk(250, 191, 62, 255); //Mor
var Renk_Gri = Sistem.Renk(255, 160, 160, 160); //Gri
var Renk_Yesil = Sistem.Renk(250, 0, 160, 50); //Yeşil
//Anlık VIOP değeri alınır.
float VIP30 = Sistem.SonFiyat(Sembol_VIP30);
if (VIP30 != 0 )
{
//-------------------------------------------------------------------------------------
// Strateji İşlemleri Yapılır.
float Kar_Zarar = 0;
float Stop_Seviyesi = 0;
var Sinyal = 0; // Al, Sat veya Stop sinyali olduğunda değer 1 olur ve pozisyona göre işlem yapılır.
if (Pozisyon_Yonu == "A")
{
Stop_Seviyesi = islem_Fiyati - Zarar_Limiti; //Stop Seviyesi Hesaplanır.
Kar_Zarar = Sistem.SayiYuvarla(((VIP30 - islem_Fiyati) * 1000),1); //Anlık Kar Zarar Durumu Hesaplanır ve Virgülden sonrası yuvarlanır.
}
if (Pozisyon_Yonu == "S")
{
Stop_Seviyesi = islem_Fiyati + Zarar_Limiti; //Stop Seviyesi Hesaplanır.
Kar_Zarar = Sistem.SayiYuvarla(((islem_Fiyati - VIP30) * 1000),1); //Anlık Kar Zarar Durumu Hesaplanır ve Virgülden sonrası yuvarlanır.
}
if ( (Pozisyon_Yonu == "A") || (Pozisyon_Yonu == "S") ) //Robotun Pozisyonda ise hesaplama yapılır.
{
if ( (Kar_Zarar >= 150) && (Kar_Alma_Seviyesi < 50) ) { Kar_Alma_Seviyesi = 50; } //50 TL kar alır //Kar Alma Seviyesi Belirlenir.
if ( (Kar_Zarar >= 200) && (Kar_Alma_Seviyesi < 100) ) { Kar_Alma_Seviyesi = 100; } //100 TL kar alır //Kar Alma Seviyesi Belirlenir.
if ( (Kar_Zarar >= 300) && (Kar_Alma_Seviyesi < 200) ) { Kar_Alma_Seviyesi = 200; } //200 TL kar alır //Kar Alma Seviyesi Belirlenir.
if ( (Kar_Zarar >= 500) && (Kar_Alma_Seviyesi < 250) ) { Kar_Alma_Seviyesi = 250; } //250 TL kar alır //Kar Alma Seviyesi Belirlenir.
}
//-----------------------------------------------------------------------------------------
//Stop ve Kar Alma Seviyeleri kontrol edilir. Duruma göre pozisyon kapatılır.
if (Pozisyon_Yonu == "A") //Pozisyon Alış Yönde ise
{
if (VIP30 < Stop_Seviyesi) { Sinyal = 1; } //Stop Seviyesi Geçilmiş ise Pozisyon Kapatılır.
if (Kar_Zarar >= Kar_Limiti) { Sinyal = 1; } //Maksimum Kar Limitine Gelinmiş ise Pozisyon Kapatılır.
if ( (Kar_Alma_Seviyesi > 0) && (VIP30 <= (islem_Fiyati + (Kar_Alma_Seviyesi/1000))) ) { Sinyal = 1; } //Kar Alma Seviyesi Geçilmiş ise Pozisyon Kapatılır.
}
if (Pozisyon_Yonu == "S") //Pozisyon Satış Yönde ise
{
if (VIP30 > Stop_Seviyesi) { Sinyal = 1; } //Stop Seviyesi Geçilmiş ise Pozisyon Kapatılır.
if (Kar_Zarar >= Kar_Limiti) { Sinyal = 1; } //Maksimum Kar Limitine Gelinmiş ise Pozisyon Kapatılır.
if ( (Kar_Alma_Seviyesi > 0) && (VIP30 >= (islem_Fiyati - (Kar_Alma_Seviyesi/1000))) ) { Sinyal = 1; } //Kar Alma Seviyesi Geçilmiş ise Pozisyon Kapatılır.
}
//Stop ve Kar Alma Seviyeleri kontrol edilir. Duruma göre pozisyon kapatılır. BİTTİ
//-------------------------------------------------------------------------------------
// Strateji İşlemleri Yapılır. BİTTİ
//----------------------------------------------------------------------------------
//--------------------------------------------------------------------------------
// AL - SAT İşlemleri Yapılır.
if (Sistem.HaftaSonu == false) { //Hafta Sonu Kontrolü Yapılır.
if (Sistem.BaglantiVar == true) { //iDeal Bağlantı Kontrolü Yapılır.
if (Sistem.SaatAraligi("09:30", "18:14") ) { //Zaman Kontrolü Yapılır, Seans Saatleri
if ( (Sinyal == 1) && (Lot_Miktari != 0) && (Pozisyon_Yonu != "F")) // Sinyal ve Parametre Kontrolü Yapılır.
{
//Sistem.EmirHesapAdi = HesapAdi;
//Sistem.EmirAltHesap = AltHesapAdi;
Sistem.EmirSembol = SozlesmeAdi;
if (Pozisyon_Yonu == "A") { Sistem.EmirIslem = "Satış"; } else { Sistem.EmirIslem = "Alış"; }
Sistem.EmirMiktari = Lot_Miktari;
Sistem.EmirSuresi = "GUN"; // GUN, SNS, IKG
Sistem.EmirTipi = "NORMAL"; // NORMAL, KPY, KIE, GIE, SAR
Sistem.EmirFiyati = "Aktif";
Sistem.EmirFiyatTipi = "PYS"; // PYS, LMT, EIF, KAP
Sistem.EmirGonder();
Pozisyon_Yonu = "F"; //Pozisyon Kapatıldığı için Parametre Değerine Flat ifadesi atanır.
Sistem.Parametreler[1] = "0"; //Pozisyon Kapatıldığı için Parametre Değerine 0 atanır.
Kar_Alma_Seviyesi = 0; //Pozisyon Kapatıldığı için Parametre Değerine 0 atanır.
} // AL - SAT İşlemleri Yapılır. BİTTİ
//-----------------------------------------------------------------------------------------------------------------
}//HaftaSonu
}//Bağlantı
}//Saat
//----------------------------------------------------------------------------------
// Ekrana Robot ile ilgili Çeşitli Bilgiler Yazılır.
Sistem.ZeminYazisiEkle("Pozisyon Yönü ", 1, 165, 43, Renk_Siyah, "Tahoma", 7);
Sistem.ZeminYazisiEkle("Lot miktarı ", 1, 165, 55, Renk_Siyah, "Tahoma", 7);
Sistem.ZeminYazisiEkle("İşlem Fiyatı ", 1, 165, 67, Renk_Siyah, "Tahoma", 7);
Sistem.ZeminYazisiEkle("Stop Seviyesi ", 1, 165, 79, Renk_Siyah, "Tahoma", 7);
Sistem.ZeminYazisiEkle("Kar Alma Seviyesi ", 1, 165, 91, Renk_Siyah, "Tahoma", 7);
Sistem.ZeminYazisiEkle("Kar-Zarar (Puan) ", 1, 165, 103, Renk_Siyah, "Tahoma", 7);
Sistem.ZeminYazisiEkle("Kar-Zarar (TL) ", 1, 165, 115, Renk_Siyah, "Tahoma", 7);
//Sisteme ait Sonuçlar ve Strateji Ekrana Yazılır.
if (Pozisyon_Yonu == "A") { Sistem.ZeminYazisiEkle(": Alış ", 1, 265, 43, Renk_Mavi, "Tahoma", 7); } //Piyasa Yönü
if (Pozisyon_Yonu == "S") { Sistem.ZeminYazisiEkle(": Satış ", 1, 265, 43, Renk_Kirmizi, "Tahoma", 7); } //Piyasa Yönü
if (Pozisyon_Yonu == "F") { Sistem.ZeminYazisiEkle(": Pozisyon Kapalı ", 1, 265, 43, Renk_Mor, "Tahoma", 7); } //Piyasa Yönü
Sistem.ZeminYazisiEkle(": " + Lot_Miktari.ToString(), 1, 265, 55, Renk_Mor, "Tahoma", 7); //Lot Miktarı
Sistem.ZeminYazisiEkle(": " + islem_Fiyati.ToString(), 1, 265, 67, Renk_Mor, "Tahoma", 7); //İşlem Fiuyatı
Sistem.ZeminYazisiEkle(": " + Stop_Seviyesi.ToString(), 1, 265, 79, Renk_Kirmizi, "Tahoma", 7); //Stop Seviyesi
Sistem.ZeminYazisiEkle(": " + Kar_Alma_Seviyesi.ToString() + " Puan", 1, 265, 91, Renk_Yesil, "Tahoma", 7); //Kar Alma Seviyesi
if (Kar_Zarar >= 0) { Sistem.ZeminYazisiEkle(": " + Kar_Zarar.ToString() + " Puan", 1, 265, 103, Renk_Yesil, "Tahoma", 7); } //Kar Zarar Durumu Puan +
if (Kar_Zarar < 0) { Sistem.ZeminYazisiEkle(": " + Kar_Zarar.ToString() + " Puan", 1, 265, 103, Renk_Kirmizi, "Tahoma", 7); } //Kar Zarar Durumu Puan -
if (Kar_Zarar >= 0) { Sistem.ZeminYazisiEkle(": " + ((Kar_Zarar/10)*Lot_Miktari).ToString() + " TL", 1, 265, 115, Renk_Yesil, "Tahoma", 7); } //Kar Zarar Durumu Puan +
if (Kar_Zarar < 0) { Sistem.ZeminYazisiEkle(": " + ((Kar_Zarar/10)*Lot_Miktari).ToString() + " TL", 1, 265, 115, Renk_Kirmizi, "Tahoma", 7); } //Kar Zarar Durumu Puan -
if (Pozisyon_Yonu != "F") // Pozisyon kapalı ise çizgiler kapatılır.
{
Sistem.Cizgiler[0].Deger = Sistem.Liste(islem_Fiyati); Sistem.Cizgiler[0].Aciklama = "İşlem Fiyatı"; Sistem.Cizgiler[0].Kalinlik = 2; Sistem.Cizgiler[0].Renk = Renk_Mavi;
Sistem.Cizgiler[1].Deger = Sistem.Liste(Stop_Seviyesi); Sistem.Cizgiler[1].Aciklama = "Stop Seviyesi"; Sistem.Cizgiler[1].Kalinlik = 2; Sistem.Cizgiler[1].Renk = Renk_Kirmizi;
//Kar Alma Çizgisi Ekrana Çizdirilir.
if ( (Pozisyon_Yonu == "A") && (Kar_Alma_Seviyesi >0) ) { Sistem.Cizgiler[2].Deger = Sistem.Liste(islem_Fiyati + (Kar_Alma_Seviyesi/1000)); Sistem.Cizgiler[2].Aciklama = "Kar Seviyesi"; Sistem.Cizgiler[2].Kalinlik = 2; Sistem.Cizgiler[2].Renk = Renk_Yesil; }
if ( (Pozisyon_Yonu == "S") && (Kar_Alma_Seviyesi >0) ) { Sistem.Cizgiler[2].Deger = Sistem.Liste(islem_Fiyati - (Kar_Alma_Seviyesi/1000)); Sistem.Cizgiler[2].Aciklama = "Kar Seviyesi"; Sistem.Cizgiler[2].Kalinlik = 2; Sistem.Cizgiler[2].Renk = Renk_Yesil; }
}
// Ekrana Robot ile ilgili Çeşitli Bilgiler Yazılır. BİTTİ
//---------------------------------------------------------------------------------------
} //VIP30 Değişkeni 0 Sıfır kontrolü
//Kontrol Edilecek YENİ Pozisyon Bilgileri Parametrelere Aktarılır.
Sistem.Parametreler[0] = Pozisyon_Yonu; // Girilen pozisyonun yönü belirlenir Örnek: Satış = S Alış = A
Sistem.Parametreler[2] = islem_Fiyati.ToString(); //Lot Alış/Satış fiyatı belirlenir.
Sistem.Parametreler[5] = Kar_Alma_Seviyesi.ToString(); //Pozisyondan alınacak olan kar seviyesi. Örnek: 300 Puan için = 300
Sayın Bearbull ben bunu dahada geliştirmiştim ama olmuyor idealden de destek aldım gerçek hesap okuma sorunu yüzünden olmuyor
Açık kod olarak kimseyle paylaşmadığım bir şey bu aşağıdaki.
kendime yazmıştım 1 zamanlar.
poz yokken belli aralıklarla işlem yapacak mısın diye soruyor
ALIŞ
veya
SATIŞ
lot
fiyat
kar limiti
zarar limiti
hepsini yazıp bırakıyordum
işlem herhangi bir sebeple FLAT olduğunda
en başa dönüp tekrar işlem yapacakmısın diye sormaya başlıyordu.
tek dezavantajı ekranda SORU sorup cevaplamazsan arkada çalışan tüm robot kodları devre dışı kalıyor.
tek robot bunu kullandığımda herhangi bir sorun çıkmıyordu.
http://666kb.com/i/dm351bm28x1zikk8r.png
bahsedilen yöntem daha özelleştirilebilir bir biçimde programımda mevcut.
mesela biraz önce kar alma türü ekledim. 1. tür örnek ismini verdim.
kar 1000 puana ulastıgında gerçek hesapta 800 puana stoploss koyuyor.
kar 1500 e ulastıgında 1000 puana stop vesaire şeklinde gidiyor elle istediğiniz noktayı gordugunde istediğiniz yere stopu çekmesini girebiliyorsunuz. aynı zamanda kar limitii max puan girdiğiniz kar toplamda 5000 e ulasırsa tamamen kapan flata geçiyor manuel işleminiz. yani stop olmadan 5000 e giderse pozu anında nakıte geçiriyor.
bunları kaydediyorsunuz ömür boyu kullanım için tek tıklamayla oluşturdugunuz kar alma serisini aktifleştirebiliyorsunuz.
her seferınde tek tek birdaha birdaha girmenize gerek kalmadan.
;)
https://i.hizliresim.com/vp9Prv.png
ben bir ideal çalışanı olsaydım yapacagım ilk iş bu olurdu
ideal kullanıcılqrın en çok ihtiyaç duydukları grafik üzerinden stop emri , hareketli stop ,a take profit hareketli take profit emri girebilmeyi yapardım ve bu bir robot olmamalı aracı kurumu robot anlaşması olmayan bir sürü kullanıcı var , grafik üzerinde girmiş oldugum stop ,hareketli stop take profit hareketli take profit emnirlerini grafik üzerinden sürükle bırak yapabilmeliyim
aynı metatrader deki gibi - stop veya take profit emri girmek , girilen stop veya take profit emirlerinde değişiklik yapmak çok kolay olmalı
DialogBox lar yanıt alana kadar tüm sistemi durdururlar hocam.
Ama bunun aslında basit bir çözümü var :)
DialogBoxları asenkron açmak..
dialog yine anlık çıksın, soru sorulduktan sonra işleyiş kesilmeden devam etsin.
fakat emir işlemleri için işleyişden bağımsız bir timer yapın robot içinde.
3 saniyede bir sorulan soruya cevabı alınıp işlenmemiş bir emir varmı diye kontrol edip, varsa emirleri giren...
if (Sistem.ZamanKontrolSaniye("EmirIslemleri") >= 3)
{
//dosyadan yanıtları okuyan ve gerekeni yapan kodlar...
}
gibi..
PHP Code:
//Lib.cs Using:
using System.Threading.Tasks;
using System.Windows.Forms;
//Libc.cs Method:
public void AsycBox(string Message, string Title)
{
Task.Run(() =>
{
var dialogResult= MessageBox.Show(Message, Title, MessageBoxButtons.OKCancel);
if (dialogResult == System.Windows.Forms.DialogResult.OK)
MessageBox.Show("OK tıklandı"); //Buraya dosyaya alınan yanıtı yazan birşeyler...
else
MessageBox.Show("iptal tıklandı");//Buraya dosyaya alınan yanıtı yazan birşeyler...
});
}
//ideal Sistem içinden kullanım örneği:
Lib.AsycBox("islem yapılsınmı","dikkat");
---------
sayın keçi yardımcı olma sansınız olursa seviniriz
Bullish Engulfing ve Bearish Engulfing
ideal formullerini paylaşabilecek arkadaş olursa seviniriz
ben bir ideal çalışanı olsaydım yapacagım ilk iş bu olurdu
ideal kullanıcılqrın en çok ihtiyaç duydukları grafik üzerinden stop emri , hareketli stop ,a take profit hareketli take profit emri girebilmeyi yapardım ve bu bir robot olmamalı aracı kurumu robot anlaşması olmayan bir sürü kullanıcı var , grafik üzerinde girmiş oldugum stop ,hareketli stop take profit hareketli take profit emnirlerini grafik üzerinden sürükle bırak yapabilmeliyim
aynı metatrader deki gibi - stop veya take profit emri girmek , girilen stop veya take profit emirlerinde değişiklik yapmak çok kolay olmalı