Periyoda göre deðer aralýðý deðiþiyor, Günlük de 0.5 ler de bizim kod.
https://image.prntscr.com/image/CMbB...3S3pfS1RLA.png
https://prnt.sc/lng0jz
https://image.prntscr.com/image/HK7B...TQzJ3djJqw.png
https://prnt.sc/lnfyol
Printable View
Periyoda göre deðer aralýðý deðiþiyor, Günlük de 0.5 ler de bizim kod.
https://image.prntscr.com/image/CMbB...3S3pfS1RLA.png
https://prnt.sc/lng0jz
https://image.prntscr.com/image/HK7B...TQzJ3djJqw.png
https://prnt.sc/lnfyol
Kod:
var Anahtar = Sistem.Name + "_AYNI BAR KONTROL";
var Saniye = Sistem.ZamanKontrolSaniye(Anahtar);
if (Saniye >= 60)
{
Sistem.ZamanKontrolGuncelle(Anahtar);
//Sistem.Mesaj(DateTime.Now.ToString("HH:mm:ss"));
//var Islem = Lib.RobotViopAktifSeviye(Sistem, "SYS_1DK", "VIP'VIP-X030", Sistem.AktifViopKontrat, "1", 1);
//if (Islem != "")
//{
// mail gönder
//}
Lib.RobotViopAktifSeviye(Sistem, "SYS_1DK", "VIP'VIP-X030", Sistem.AktifViopKontrat, "1", 1);
}
orhan hocam,
robot ayný barda birden fazla iþlem açmasýn diye yukarýdaki þekilde test ediyorum,
ancak sinyal den sonraki barda da iþlem açtýðý oluyor.
"sinyal barýnda tek iþlem açmasý için Lib.cs de zaman kontrolu konulabilirmi?"
bir de mail göndermesi için iþlem deðiþkenine atadýðýmda hata veriyor.
teþekkürler...
Robot ayný barda birden fazla iþlem açýyorsa sistem hatalý yazýlmýþ demektir.
Hatalý geliþtirme yapmamak için doðru kalýbý kullanmak gerekir.
Seviyeli Sistemler için Doðru Kalýp aþaðýdaki gibidir:
PHP Code:
var V = Sistem.GrafikVerileri;
var C = Sistem.GrafikFiyatOku(V, "Kapanis");
var O = Sistem.GrafikFiyatOku(V, "Açýlýþ");
var H = Sistem.GrafikFiyatOku(V, "Yüksek");
var L = Sistem.GrafikFiyatOku(V, "Düþük");
var HH= Sistem.HHV(90,"Yuksek");
var LL = Sistem.LLV(90,"Dusuk");
var VIDYA= Sistem.VIDYA(300,9);
var AS = Sistem.Liste(0); var SS = Sistem.Liste(0);
var SonYon = "";double SonFiyat = 0.0;
for (int i = 200; i < V.Count; i++)
{
AS[i] = new float[] {
O[i]
, VIDYA[i-1]
}.Max();
SS[i] = new float[] {
O[i]
, VIDYA[i-1]
}.Min();
if ( H[i] >= AS[i] && SonYon != "A" )
{
Sistem.Yon[i] = "A";
Sistem.Seviye[i]= AS[i];
SonYon = Sistem.Yon[i];
}
else if ( L[i] <= SS[i] && SonYon != "S" )
{
Sistem.Yon[i] = "S";
Sistem.Seviye[i]= SS[i];
SonYon = Sistem.Yon[i];
}
}
Sistem.Cizgiler[0].Deger = VIDYA;
Seviyeli Sistemlerde En Çok Yapýlan 4 yanlýþ:
1- "O[i]" Açýlýþ deðerini listeye koymamak. bunu opsiyonel zannetmek.
2- Yön kalýbýnda Else yi koymamak. Seviyeli Sistemlerde bunu koymazsanýz repaint yapar ve 1 dk timer kullanma ihtiyacýnýz olduðunu zannedersiniz, sistemin ayný barda karar deðiþtirdiðini ve bunun yöntemin doðal bir hatasý olduðunu düþünürsünüz, kapanýþ bekleyen sistemlerde else olmamasý önemsizdir.
3- Örnek de "VIDYA[i-1]" e tekabül eden opsiyonel deðerlerde "i-1" yerine i kullanmak.
4- Yön kalýbýnda (if lerin içinde ) "i" geçen deðerleri "i-1" þeklinde yaparak düzelttiðini zannetmek.
Super BandPass Filter - John Ehlers, Temmuz 2016 Tarihinde yayýnlandý.
PHP Code:
//Super BandPass Filter - John Ehlers, Temmuz 2016 Tarihinde yayýnlandý.
//Veriler
var V = Sistem.GrafikVerileri;
var C = Sistem.GrafikFiyatSec("Kapanis");
var H = Sistem.GrafikFiyatSec("YUksek");
var L = Sistem.GrafikFiyatSec("Dusuk");
var O = Sistem.GrafikFiyatSec("Açýlýþ");
int count = 30;
int fastbarcount = 20;
int slowbarcount = 30;
double a1 = 5 / Convert.ToDouble(fastbarcount );
double a2 = 5 / Convert.ToDouble(slowbarcount );
var SuperPassBandFilter= Sistem.Liste(0);
var RMSpos= Sistem.Liste(0);
var RMSneg= Sistem.Liste(0);
double RMS;
double[] x = new double[C.Count];
for (int i = 2 ; i < C.Count; i++)
{
x[i] = (a1 - a2) * C[i] + (a2*(1 - a1) - a1*(1-a2)) * C[i-1] + ((1 - a1) + (1 - a2)) * x[i-1] - (1 - a1) * (1 - a2) * x[i-2];
SuperPassBandFilter[i] = (float)x[i];
RMS = 0;
if(i > count )
for (int j = count-1; j >= 0; j--)
{
RMS += x[i-j] * x[i-j];
}
RMSpos[i] = (float) Math.Sqrt(RMS/50);
RMSneg[i] = (float)-RMSpos[i];
}
Sistem.Cizgiler[0].Deger = SuperPassBandFilter;
Sistem.Cizgiler[1].Deger = RMSpos;
Sistem.Cizgiler[2].Deger = RMSneg;
https://image.prntscr.com/image/a91R...4raaTN0aRg.png
https://prnt.sc/lnj137
Soru orhan hocaya sorulmuş ama bende şöyle bir kod var.
Belki işinize yarar.
Selamlar / Saygılar
Kod:// BAR KAPANIŞINI BEKLEMEDEN İŞLEM YAPAN ROBOT KODU
// BU KODU KULLANMAK İÇİN SİSTEMİNİZİN REPAİNT YAPAN KODLARDAN ARINDIRILMASI GEREKİR
// BU KODU KULLANMAK TEHLİKELİ SONUÇLARA YOL AÇABİLİR
// KOD KONUSUNDA UZMAN DEĞİLSENİZ KULLANMAYIN
var LotSize = 1; //işlem adedi
var Sembol = "VIP'VIP-THYAO"; // ÖRNEK SEMBOL KODU
var Periyot = "1"; //1 dklık grafik
var SistemAdi = "CANLIBARDAISLEMYAPANROBOTKODU"; //sistem adını buraya girin çift tırnak içinde
// CANLI BARDA İŞLEM YAPAN FONKSİYON Sistem.SistemGetirCanli(SistemAdi , Sembol, Periyot);
var MySistem = Sistem.SistemGetirCanli(SistemAdi , Sembol, Periyot); //sistemin adı, grafik sembolü, grafiğin periyodu
if (MySistem == null)
{
Sistem.Mesaj(Sistem.Name + "Hatalı Çalışıyor !");
}
else
{
var EmirSembol = "VIP'F_THYAO1118"; // BURAYA SEMBOLÜNÜZÜN AÇIK YAZILIŞI
var SonFiyat = Sistem.SonFiyat(EmirSembol);
var Anahtar = Sistem.Name + "," + EmirSembol;
double IslemFiyat = 0;
DateTime IslemTarih;
var Miktar = 0.0;
var Rezerv = "";
var Pozisyon = Sistem.PozisyonKontrolOku(Anahtar, out IslemFiyat, out IslemTarih);
// CANLI BARDA İŞLEM YAPAN FONKSİYON Sistem.SistemGetirCanli(SistemAdi , Sembol, Periyot);
var SonYon = Sistem.SonYonGetirCanli(SistemAdi, Sembol, Periyot);
if (Sistem.Saat.CompareTo("10:00:00") <= 0 || Sistem.Saat.CompareTo("17:59:59") >= 0) // seans yok işlem yapma
{
}
//her günün sonunda poz varsa kapansın, ertesi sabah tekrar aynı yönde poz açılsın istenirse
// else if (Sistem.Saat.CompareTo("16:30:00") >= 0) // Gün Sonu Kapat
// {
// if (Pozisyon != 0)
// Miktar = -Pozisyon;
// }
else if (SonYon == "F" && Pozisyon != 0) // Flata Geç
Miktar = -Pozisyon;
else if (SonYon == "A" && Pozisyon != LotSize) // Al
Miktar = LotSize - Pozisyon;
else if (SonYon == "S" && Pozisyon != -LotSize) // Sat
Miktar = -LotSize - Pozisyon;
// Emir Gönder
var Islem = "";
if (Miktar > 0) {Islem = "ALIS"; Rezerv = "ALIŞ YAPILDI";}
if (Miktar < 0) {Islem = "SATIS"; Rezerv = "SATIŞ YAPILDI";}
if (Islem != "")
{
Sistem.PozisyonKontrolGuncelle(Anahtar, Miktar + Pozisyon, SonFiyat, Rezerv);
Sistem.EmirSembol = EmirSembol ;
Sistem.EmirIslem = Islem;
Sistem.EmirSuresi = "KIE"; // GUN, KIE, IKG
Sistem.EmirTipi = "Piyasa"; // Piyasa, Limitli, Piyasadan Limite
Sistem.EmirMiktari = Math.Abs(Miktar);
Sistem.EmirGonder();
// BURAYDA ROBOTUN İŞLEMLERİNİ ANLIK OLARAK TEXT'E YAZAN LOG TUTAN KOD VAR
//SANALDA TEST EDERKEN İNANILMAZ BİR KOLAYLIK SAĞLAR
File.AppendAllText( "C:\\ideal\\CANLIBARDAISLEMYAPANROBOTKODU.txt" , Sistem.Name + "-----" + EmirSembol + "-----" + DateTime.Now.ToString("HH:mm:ss") + Sistem.EmirIslem + "------ " + "Fiyat =" + SonFiyat.ToString() + "-----" + "Marj = " + "\r\n");
}
}
abi,
var SonYon = Sistem.SonYonGetirCanli(SistemAdi, Sembol, Periyot);
kodu
var GrafikSistem= Sistem.SistemGetir(SistemAdi, Sembol, Periyot);
var SonYon = GrafikSistem.Yon[GrafikSistem.GetLastYonNo()];
kodlarýnýn (Lib.cs de geçen ) muadilidir. bu ok.
Fakat kodda geçen
var MySistem = Sistem.SistemGetirCanli(SistemAdi , Sembol, Periyot);
kullanýmý hatalý. çünkü SistemGetirCanli diye bir metod idealde henüz yok.
Eðer henüz yayýnlanmamýþ beta bir sürümü kullanýyorsanýz SistemGetirCanli içerisinde RunSistem yapýlmamasýný rica edin yoksa gereksiz yere 2 kez sistem çalýþýr. (SistemGetirCanli +SonYonGetirCanli)