Sezai bey,klasik robot emirlerinde bar kapanış fiyatına göre kapanış fiyatından limitli emir gönderebilirmiyiz?Boyle bir özelik varsa örnek paylaşabilirmisiniz?Teşekkür ederim.
Sezai bey,klasik robot emirlerinde bar kapanış fiyatına göre kapanış fiyatından limitli emir gönderebilirmiyiz?Boyle bir özelik varsa örnek paylaşabilirmisiniz?Teşekkür ederim.
Aslında sadece iki satırda değişiklik oluyor.
Bu satırda PYS yerine LMT yazmak
Sistem.EmirFiyatTipi = "LMT"; // PYS, LMT, EIF, KAP
ve
Emre bir de fiyat bilgisi atamak
Sistem.EmirFiyati = C[V.Count-2];
ÖNEMLİ NOT: LİMİTLİ EMİR GÖNDERDİĞİNİZDE, ROBOT POZİSYONU İŞLEM YÖNÜNE GÖRE BELİRLER VE DEĞİŞTİRİR.YANİ İŞLEM GERÇEKLEŞMİŞ GİBİ HAREKET EDER.. EMRİN GERÇEKLEŞMEMESİ DURUMUNU ROBOT BİLEMEZ.
Kod:var LotSize = 1.0; var Sembol = "VIP'F_XU0300216S0"; var Periyot = "5"; var V = Sistem.GrafikVerileriniOku(Sembol, Periyot); var C = Sistem.GrafikFiyatOku(V, "Kapanis"); var Mov = Sistem.MA(C, "Exp", 50); // tara var SartAl = false; var SartSat = false; var SonYon = ""; for (int i = 1 ; i < V.Count; i++) { if (C[i] > Mov[i] && SonYon != "A" ) // alış { SonYon = "A"; if (i == V.Count - 2) SartAl = true; } if (C[i] < Mov[i] && SonYon != "S") // satış { SonYon = "S"; if (i == V.Count - 2) SartSat = true; } } // emir gönder var Islem = ""; var Miktar = 0.0; var Pozisyon = Sistem.PozisyonKontrolOku(Sistem.Name + " , " + Sembol); if (SartAl && Pozisyon <= 0) // alış { Islem = "ALIS"; if (Pozisyon == 0) // pozisyonum yoksa 1 lot al Miktar = LotSize; else if (Pozisyon < 0) // short isem stop and reverse , 2 lot al Miktar = LotSize + Math.Abs(Pozisyon); } else if (SartSat && Pozisyon >= 0) // satış { Islem = "SATIS"; if (Pozisyon == 0) // pozisyonum yoksa 1 lot sat Miktar = LotSize; else if (Pozisyon > 0) // long isem stop and reverse , 2 lot sat Miktar = LotSize + Math.Abs(Pozisyon); } // Emir Gönder !!! if (Islem != "") { if (Islem == "ALIS") Sistem.PozisyonKontrolGuncelle(Sistem.Name + " , " + Sembol, LotSize); else if (Islem == "SATIS") Sistem.PozisyonKontrolGuncelle(Sistem.Name + " , " + Sembol, -LotSize); Sistem.EmirSembol = Sembol; Sistem.EmirIslem = Islem; Sistem.EmirMiktari = Miktar; Sistem.EmirSuresi = "GUN"; // GUN, SNS, IKG Sistem.EmirTipi = "KPY"; // KPY, KIE, GIE, SAR Sistem.EmirFiyatTipi = "LMT"; // PYS, LMT, EIF, KAP Sistem.EmirFiyati = C[V.Count-2]; Sistem.EmirGonder(); Sinyalin oluştuğu (kapanmış barın) close değerimi emir fiyatı olarak atadım }
birim barlara dün robot bagladım. daha dogrusu sıstem baglayıp
tek robot koduyla işlem yapmak ıstedım.
sistemi şu ankı vadede calıstırdım.
ancak birim barda veri gelirken sistem sınyallerı kaybolup geri geliyor 1 dakıka içinde hemen hemen 30 kere falan.
bagladık tek satırlık robotta bır hata yapmadıgımı sanıyorum ancak robot hiç işlem acmadı.
sorum şu:
1-sinyallerın kaybolup gerı gelmesı sorun oluşturur mu ? oluşturuyorsa nasıl çözeriz çözülemez mi ?
2-tek satırlık robot kodu ile şu anki vade koduyla calısan bu robotu baglayamıyormuyuz yoksa sıstem sınyallerı kaybolup geri geldi diye mi robot işlem yapmadı.
Birim kodda robot denemeleri daha önce yaptım sorunsuz, ama tek satırlık robot fonksiyonu ile kullanmamıştım hiç
Tek satırlık robot kodu, viop seans saatleri dışında emir göndermeye engelli olduğu için yarın bir deneme yaparım ben de.
Sistemi uyguladığınız sistemin baz sembolü yakın vade kodu değil, F_XU030AAYYS0 şeklinde olan kod olması gerekiyor. Kaybolup geri gelme dediğinize göre stratejiyi vip-x030 koduna uygulattınız diye düşünüyorum.
robot kodu şu sezai bey.
sistemide grafik olarak F_XU0300216S0 da calıstırmıstım. Yarın F_XU030AAYYS0 göre düzenleyip deneyeyim olmazsa
var c = Sistem.SonFiyat(Sistem.AktifViopKontrat);
var fiyat = c;
fiyat= Sistem.SayiYuvarla(fiyat, 0.025);
var Islem =Sistem.RobotViopAktif("tomapuan", "VIP'F_XU0300216S0", "erhan","B", 1);// periyot, adet ,
if (Islem != "")
{ if (Islem != " ")
Sistem.MailServerAdres = "smtp.gmail.com";
Sistem.MailServerPort = 587;
Sistem.MailKonu = "Robot Bildilendirme";
Sistem.MailMetin = "Islem = " + Islem + " " +"Fiyat = " + fiyat + " " + "TOMA PUAN ROBOTU" ;
Sistem.MailGonderenAdres = "*****";
Sistem.MailGonderenSifre = "******";
Sistem.MailAliciEkle("*****@gmail.com");
Sistem.MailAliciEkle("******@yahoo.com");
Sistem.MailGonder();
}
Arkadaşlar sizde de şu an aynı sorun mevcut mu ? Şu anda varant kotasyonu derinlik ekranında gözükmesine rağmen kod içinde hem alış hemde satış kotasyonlarını okumuyor. Eğer Sezai Bey forumda ise , refresh bilgisinin terminallere yansıtılıp yansıtılmadığı hakkında bilgi verebilirse sevinirim.
Düzeltme : Gün içinde oluşmadı , kapanış sonrası için bu sorun mevcut.
Son düzenleme : Afgan; 17-02-2016 saat: 22:54.