https://i.hizliresim.com/FcITnw.jpg
Sadece bende mi böyle ?
Printable View
https://i.hizliresim.com/FcITnw.jpg
Sadece bende mi böyle ?
Arkadaşlar selamlar.
For döngüsü bir tane olunca sıkıntı yok fakat iki tane for döngüsü iç içe olunca sistemi koymak çok çok zor oluyor. Program yanıt vermiyor vs.
Çözümünü bilen var mı acaba?
İki tarih arasındaki farkı ölçmek için aşağıdaki formülü kullanabilirsiniz.
Dip zirve analizi, Zirveden uzaklık vs. içinde değişiklilik yapılarak kullanılabilir. Her periyotta bar sayısını ölçmeden veya hesaplatmadan sonuçları verir.
PHP Code:
//var V = Sistem.GrafikVerileriniOku(Sistem.Sembol,Sistem.Periyot);
//
// ------Sistem
///
Sistem.GetiriHesapla("31/12/2004", 0.035 ); // Şu tarihten başlayarak kz hesapla ve her işlemin kaymasına bu puanı düş.
var KarZarar = Sistem.GetiriKZ;// ortaya çıkacak kz eğrisine KarZarar isimli değişkene ata
Sistem.Cizgiler[2].Deger = KarZarar;
// YIL, AY,GUN,SAAT,DK,SN,
var Tarih1 = new DateTime(2016, 1, 4, 0, 0, 0);
var Tarih2 = new DateTime(2019, 1, 4, 0, 0, 0);
int BarSayac = 0;
for (int i = 0; i < V.Count; i++)
{
if (V[i].Date > Tarih2) break;
if (V[i].Date >= Tarih1) BarSayac++;
}
int SonBaraSay = 0;
for (int i = 0; i < V.Count; i++)
{
if (V[i].Date >= Tarih2) SonBaraSay++;
}
int ilkTarih= 0;
for (int i = 0; i < V.Count; i++)
{
if (V[i].Date >= Tarih1) ilkTarih++;
}
var O=Sistem.Liste(0);
var C=Sistem.Liste(0);
var R = Sistem.Liste(0);
var Range = Sistem.Liste(0);
for (int i=ilkTarih; i<V.Count; i++)
{
C[i] = KarZarar[i-SonBaraSay+1];
O[i] = KarZarar[i-ilkTarih+1];
R[i] = C[i] - O[i] ;
Range = R[i];
if (V[i].Date == Tarih1)
Sistem.DikeyCizgiEkle(i, Color.Turquoise, 2, 3);
if (V[i].Date == Tarih2)
Sistem.DikeyCizgiEkle(i, Color.Turquoise, 2, 3);
}
//TEST
Sistem.ZeminYazisiEkle(Range.ToString("0.000"),2, 10, 25, Color.Silver, "Tahoma", 12);
else if (SonYon == "A" && C[i] > Fiyat * 1.01) // % 1 kar realizasyonu
bu % sel olarak kar al kodu olarak kullanıyorum aynısının puan olarak misal 100 puan da olanını nasıl yazabilrim teşekkürler...
LowestSince: al-sat sinyalinden sonraki en düşük değeri verir
Highestsince: al-sat sinyalinden sonraki en yüksek değeri verir
Bu fonksiyonların idealdeki karşılığı hangileridir. Yapmak istedigim şey şudur
Alım Şartı : Sat sinyalinden sonra görülen en düşük değerden X puan yüselince al.
Satım Şartı : Al sinyalinden sonra görülen en yüksek değerden Y puan düşünce sat.
------
İdealde yer alan şu fonksiyonların görevi nedir acaba
HHLL(14)
Teşekürler
HH ve LL arasındaki farkı hesaplarmış.
https://www.hisse.net/eforum/showthr...3#post12909913
Slmlar abiler
Iki indikatorlu bir strateji var bunu sistem haline getirmek İstiyorum kalip olarak ornek verebilirmisiniz şimdiden teşekkür ler [emoji120]
G3221 cihazımdan hisse.net mobile app kullanarak gönderildi.
Merhaba aşağıdaki kodun ideal koduna uyarlanmış hali nedir acaba yardımcı olan olursa sevinirim. Ayrıca Sinyal tetikleme için zigzag göstergesinden başka bir gösterge öneren olursa memnun olurum.
kod:
B:=If(Outside() AND Ref(H,-1)>Ref(H,-2),H, If((Outside() OR Inside()) AND C>O,L, If((Outside() OR Inside()) AND O>C,H,If(H>Ref(H,-1),H,If(L<Ref(L,-1),L,If(Ref(H,-1)>Ref(H,-2),H,If(Ref(L,-1)<Ref(L,-2),L,C)))))));
Trig:=If(PeakBars(1,B,Se)>TroughBars(1,B,21),1,0);
SIGNAL:=Trig<>Ref(Trig,-1);
TradeBars:=BarsSince(SIGNAL);
//verileri oku
var V = Sistem.GrafikVerileri;
var C = Sistem.GrafikFiyatOku(V, "Kapanis");
// hesapla
var HH = Sistem.HHV(30, "Yuksek");
var LL = Sistem.LLV(30, "Dusuk");
var MA = Sistem.MA(C, "Exp", 110);
var MAMA = Sistem.MA(MA, "Exp", 110);
var SonYon = "";
var Sinyal = "";
double SonFiyat = 0.0;
// Strateji
for (int i = 100; i < V.Count; i++)
{
if (HH[i] > HH[i - 1] && MA[i] > MAMA[i]) Sinyal = "A";
else if (LL[i] < LL[i - 1] && MA[i] < MAMA[i]) Sinyal = "S";
// Yön Kalıbı
if (Sinyal == "A" && SonYon != "A")
{
Sistem.Yon[i] = "A";
SonYon = Sistem.Yon[i];
SonFiyat = V[i].Close;
}
if (Sinyal == "S" && SonYon != "S")
{
Sistem.Yon[i] = "S";
SonYon = Sistem.Yon[i];
SonFiyat = V[i].Close;
}
if (Sinyal == "F" && SonYon != "F")
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
SonFiyat = V[i].Close;
}
}
LowestSince: al-sat sinyalinden sonraki en düşük değeri verir
Highestsince: al-sat sinyalinden sonraki en yüksek değeri verir
Bu fonksiyonların idealdeki karşılığı hangileridir. Yapmak istedigim şey şudur
Alım Şartı : Sat sinyalinden sonra görülen en düşük değerden X puan yüselince al.
Satım Şartı : Al sinyalinden sonra görülen en yüksek değerden Y puan düşünce sat
Üstekini yapabilmek için epey bir uğraştım fakat bulamadım. Elimde örnek olmayınca yapamıyorum. Yardıma ihtiyacım var.
Sistem.IzleyenStopYuzde/Puan fonksiyonlarini denediniz mi? Asagiya forumdan notlarim arasina aldigim icinde izleyen.stop fonksiyonu kullanilan bir ornegi kopyaladim. Fonksiyon bar kapanislarini baz aliyor.
Kar realizasyonu sonrası 5 bar dinlendiriliyor ve hangi konumda ise o yönde pozisyon açıyor.
var BeklemeSayisi = 5;
buradaki 5 rakamını değiştirerek dinlendirilecek bar sayısını belirleyebilirsiniz.
PHP Code:
var BeklemeSayisi = 5;
var KarMarj = 1.0; // yüzde
var StopMarj = 1.0; // yüzde
var V = Sistem.GrafikVerileri;
var C = Sistem.GrafikFiyatSec("Kapanis");
var XX = Sistem.RSI(100);
var X1 = Sistem.MA(XX, "Exp", 2);
var X2 = Sistem.MA(XX, "Exp", 500);
var IZLEYENSTOP = Sistem.Liste(0);
var KARAL = Sistem.Liste(0);
var SonYon = "";
var Fiyat = 0.0f;
var FlatBarNo = 0;
for (int i =1; i<V.Count; i++)
{
var AlisSinyal = X1[i] >= X2[i];
var SatisSinyal = X1[i] <= X2[i];
IZLEYENSTOP[i] = Sistem.IzleyenStopYuzde(StopMarj, i);
if (IZLEYENSTOP[i] == 0) IZLEYENSTOP[i] = C[i];
KARAL[i] = Sistem.KarAlYuzde(KarMarj, i);
if (KARAL[i] == 0) KARAL[i] = C[i];
if (AlisSinyal && SonYon != "A" && i >= FlatBarNo + BeklemeSayisi) // alış
{
SonYon = "A"; Sistem.Yon[i] = SonYon; Fiyat = C[i];
}
else if (SatisSinyal && SonYon != "S" && i >= FlatBarNo + BeklemeSayisi) // satış
{
SonYon = "S"; Sistem.Yon[i] = SonYon; Fiyat = C[i];
}
else if ((C[i] < IZLEYENSTOP[i] || C[i] > KARAL[i]) && SonYon == "A") // alıştan flate
{
SonYon = "F"; Sistem.Yon[i] = SonYon; Fiyat = C[i]; FlatBarNo = i;
}
else if ((C[i] > IZLEYENSTOP[i] || C[i] < KARAL[i]) && SonYon == "S") // satıştan flate
{
SonYon = "F"; Sistem.Yon[i] = SonYon; Fiyat = C[i]; FlatBarNo = i;
}
}
Sistem.Cizgiler[0].Deger = X1;
Sistem.Cizgiler[1].Deger = X2;
Sistem.Cizgiler[2].Deger = IZLEYENSTOP;
Sistem.Cizgiler[3].Deger = KARAL;
Cok teşekkür ederim biraz kurcaliyayim
G3221 cihazımdan hisse.net mobile app kullanarak gönderildi.
Evet bu formül bendede var inceledim. Fakat aradıgım şey burada yok.
Açık olarak yazmak gerekirse
Al : MA1[i] > MA2[i]
Al - Flat : Al sinyalinden sonra görülen en yüksek fiyattan 2000 puan düşerse flat ol
Sat : MA1[i] < MA2[i]
Sat-Flat : Sat sinyalinden sonra görülen en düşük fiyattan 2000 puan yükselirse flat ol
Asagidaki kod ise yarayabilir. Sisteminize " F[i]>TOMA[i] && SonYon == "S" " ve " F[i]<TOMA[i] && SonYon == "A" gibi IF satirlari ekleyerek FLAT a gecis yapilabilir.
PHP Code:
var V = Sistem.GrafikVerileri ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek");
var L = Sistem.GrafikFiyatOku(V, "Dusuk");
var YF=Sistem.Liste(0);
var DF=Sistem.Liste(0);
var F=Sistem.Liste(0);
var P=2; // 2000 puan
for (int i=20; i < V.Count ; i++)
{
YF[i]=H[i]-H[i-1];
DF[i]=L[i-1]-L[i];
if (DF[i]>YF[i])
F[i]=L[i];
else F[i]=H[i];
}
var TOMA = Sistem.TOMAPUAN(F,1, P);
Sistem.Cizgiler[0].Deger = TOMA;
PHP Code:
var alstop = 1f ; // alışta kaç puan zararda stop
var satstop = 1f ; //satışta kaç puan zararda stop
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" ) ;
// hareketli ortalamaları hesapla
var MA1 = Sistem.MA(C, "Exp", 40);
var MA2 = Sistem.MA(C, "Exp", 100);
// strateji
var SonYon = "";
double Fiyat = 0;
for (int i = 1; i<V.Count; i++)
{
if ( MA1[i-1] < MA2[i-1] && MA1[i] >= MA2[i] && SonYon != "A" ) // AL
{
Sistem.Yon[i] = "A"; // alış
SonYon = Sistem.Yon[i];
Fiyat = C[i];
}
else if ( MA1[i-1] > MA2[i-1] && MA1[i] <= MA2[i] && SonYon != "S" ) // SAT
{
Sistem.Yon[i] = "S"; // satış
SonYon = Sistem.Yon[i];
Fiyat = C[i];
}
// alışta stop
else if (SonYon == "A" && AL FLAT ) // Yüksekten 2000 puan düşünce flat
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
}
// satışta stop
else if (SonYon == "S" && SAT FLAT) // Düşükten 2000 puan yükselince flat
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
}
}
// hesaplanan verileri çizgilere aktar ve açıklama ekle
Sistem.Cizgiler[0].Deger = MA1;
Sistem.Cizgiler[1].Deger = MA2;
Forum bosluklari "*" olarak degistiriyor. kodu notepad e alip "*" degerleri " " olarak degistirilirse kod calisacaktir.
Flat sonrasi tekrar isleme giris yapilmazsa sistem uzun bir sureyi flat olarak gecirecektir:
PHP Code:
//var*alstop*=*1f*;***//*alışta*kaç*puan*zararda*stop
//var*satstop*=*1f*;***//satışta*kaç*puan*zararda*stop
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*YF=Sistem.Liste(0);
var*DF=Sistem.Liste(0);
var*F=Sistem.Liste(0);
var*P=2;*//*2000*puan
for*(int*i=1;*i*<*V.Count*;*i++)*
{
YF[i]=H[i]-H[i-1];
DF[i]=L[i-1]-L[i];*
if*(DF[i]>YF[i])
F[i]=L[i];
else*F[i]=H[i];
}
var*TOMA*=*Sistem.TOMAPUAN(F,1,*P);
***
//*hareketli*ortalamaları*hesapla
var*MA1*=*Sistem.MA(C,*"Exp",*40);
var*MA2*=*Sistem.MA(C,*"Exp",*100);
//*strateji
var*SonYon*=*"";
double*Fiyat*=*0;
for*(int*i*=*1;*i<V.Count;*i++)
{
***if*(*MA1[i-1]*<*MA2[i-1]*&&*MA1[i]*>=*MA2[i]*&&*SonYon*!=*"A"**)*//*AL
***{
******Sistem.Yon[i]*=*"A";**//*alış
******SonYon*=*Sistem.Yon[i];
******Fiyat*=**C[i];
*****
***}
***else*if*(*MA1[i-1]*>*MA2[i-1]*&&**MA1[i]*<=*MA2[i]*&&*SonYon*!=*"S"**)*//*SAT
***{
******Sistem.Yon[i]*=*"S";**//*satış
******SonYon*=*Sistem.Yon[i];
******Fiyat*=*C[i];
***}
//*alışta*stop*
***else*if*(SonYon*==*"A"*&&*F[i] < TOMA[i])*//*Yüksekten*2000*puan*düşünce*flat**
***{
******Sistem.Yon[i]*=*"F";***
******SonYon*=*Sistem.Yon[i];
***}
**//*satışta*stop
***else*if*(SonYon*==*"S"*&& F[i] > TOMA[i]) //*Düşükten*2000*puan*yükselince*flat
***{
******Sistem.Yon[i]*=*"F";***
******SonYon*=*Sistem.Yon[i];
***}
}
//*hesaplanan*verileri*çizgilere*aktar*ve*açıklama*ekle
Sistem.Cizgiler[0].Deger*=*MA1;
Sistem.Cizgiler[1].Deger*=*MA2;*
Sistem.Cizgiler[2].Deger = TOMA;
Bence oldu :) Bir kontrol edin bakalım..
PHP Code:
var bars = 500;//son kaç barı takip edecek
var puan = 2000f;//kaç puanda flat olacak
int p1=10; //ma kısa
int p2=20; //ma uzun
var C = Sistem.GrafikFiyatSec("Kapanis");
var H = Sistem.GrafikFiyatSec("Yuksek");
var L = Sistem.GrafikFiyatSec("Dusuk");
var a = Sistem.Liste(0);
var b = Sistem.Liste(0);
var m1 = Sistem.MA(p1, "Exp", "Kapanis");
var m2 = Sistem.MA(p2, "Exp", "Kapanis");
var SonYon = "";
for (int i = Sistem.BarSayisi-bars; i < Sistem.BarSayisi; i++)
{
//alışta değilse, bir önceki bar m1 > m2 ve ondan önceki barda da m1<m2 mi? aksi durumda m1>m2 iken flat olursa hemen yine alır..
if ( m1[i-1]>m2[i-1] && m1[i-2]<m2[i-2] && SonYon!="A")
{
SonYon = Sistem.Yon[i] = "A";
a[i]=C[i];//H[i];
}
if ( m1[i-1]<m2[i-1] && m1[i-2]>m2[i-2] && SonYon!="S")
{
SonYon = Sistem.Yon[i] = "S";
b[i] =C[i];//L[i];
}
if ( SonYon=="A") {
if (H[i-1]>a[i-1]) a[i] =H[i-1];
else a[i]=a[i-1];
}
if ( SonYon=="S") {
if (L[i-1]<b[i-1] || b[i-1]==0) b[i] =L[i-1];
else b[i]=b[i-1];
}
if (SonYon=="A" && C[i]<(a[i]-puan) ) {
SonYon = Sistem.Yon[i] = "F"; // alıştan flat
}
if (SonYon=="S" && C[i]>(b[i]+puan) ) {
SonYon = Sistem.Yon[i] = "F"; // satıştan flat
}
}//for son
if ( SonYon=="A") Sistem.ZeminYazisiEkle("FLAT SEVİYESİ = "+(a[Sistem.BarSayisi-1]-puan), 1, 200, 50, Color.Cyan, "Tahoma", 23);
if ( SonYon=="S") Sistem.ZeminYazisiEkle("FLAT SEVİYESİ = "+(b[Sistem.BarSayisi-1]+puan), 1, 200, 50, Color.Red, "Tahoma", 23);
Sistem.Cizgiler[0].Deger = a;
Sistem.Cizgiler[1].Deger = b;
Sistem.Cizgiler[2].Deger = m1;
Sistem.Cizgiler[3].Deger = m2;
PHP Code:
var bars = 500;//son kaç barı takip edecek
var puan = 2.000f;//kaç puanda flat olacak
int p1=50; //ma kısa
int p2=100; //ma uzun
var V = Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatSec("Kapanis");
var H = Sistem.GrafikFiyatSec("Yuksek");
var L = Sistem.GrafikFiyatSec("Dusuk");
var a = Sistem.Liste(0);
var b = Sistem.Liste(0);
var m1 = Sistem.MA(p1, "Exp", "Kapanis");
var m2 = Sistem.MA(p2, "Exp", "Kapanis");
var SonYon = "";
//for (int i = Sistem.BarSayisi-bars; i < Sistem.BarSayisi; i++) // SON 500 BAR
for (int i = 1; i<V.Count; i++) // TÜM BARLAR İÇİN
{
//alışta değilse, bir önceki bar m1 > m2 ve ondan önceki barda da m1<m2 mi? aksi durumda m1>m2 iken flat olursa hemen yine alır..
if ( m1[i-1]>m2[i-1] && m1[i-2]<m2[i-2] && SonYon!="A")
{
SonYon = Sistem.Yon[i] = "A";
a[i]=C[i];//H[i];
}
if ( m1[i-1]<m2[i-1] && m1[i-2]>m2[i-2] && SonYon!="S")
{
SonYon = Sistem.Yon[i] = "S";
b[i] =C[i];//L[i];
}
if ( SonYon=="A") // SON YÖN ALDA İSE
{
if (H[i-1]>a[i-1]) // YÜKSEK , KAPANIŞTAN BÜYÜKSE
a[i] =H[i-1]; // a ‘ ya YÜKSEK degerini ata
else a[i]=a[i-1]; // YÜKSEK , KAPANIŞTAN küçükse a’ yı kapanışa eşitle
}
if ( SonYon=="S") // Aldaki mantıgın aynısı
{
if (L[i-1]<b[i-1] || b[i-1]==0)
b[i] =L[i-1];
else b[i]=b[i-1];
}
if (SonYon=="A" && C[i]<(a[i]-puan) ) // alıştan flat
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
}
if (SonYon=="S" && C[i]>(b[i]+puan) ) // satıştan flat
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
}
}
if ( SonYon=="A") Sistem.ZeminYazisiEkle("FLAT SEVİYESİ = "+(a[Sistem.BarSayisi-1]-puan), 1, 200, 50, Color.Cyan, "Tahoma", 23);
if ( SonYon=="S") Sistem.ZeminYazisiEkle("FLAT SEVİYESİ = "+(b[Sistem.BarSayisi-1]+puan), 1, 200, 50, Color.Red, "Tahoma", 23);
Sistem.Cizgiler[0].Deger = a; // EN YÜKSEK DEGER
Sistem.Cizgiler[1].Deger = b; // EN DÜŞÜK DEĞER
Sistem.Cizgiler[2].Deger = m1; // MA 1
Sistem.Cizgiler[3].Deger = m2; // MA 2
Sayın sonli teşekür ederim bir kaç değişiklik yaparak formül çalıştı, istedigimde oldu.
a : en yüksek degeri gösterdiği gibi , hem de en yüksekten seçilen puan kadar düşünce flata geçiyor.
b : tam tersi
Sayın 3c1a nın yazmış oldugu formülde oldu. Aynı işlemi yapıyor.
Yardımlarınız için teşekür ederim sonli ce 3c 1a
Bu formüldeki bu yapıyı sisteminin içine gömecegim. Flata geçtiği noktalarda başka bir bir sistem çalışacak.
Başarılı olurmu bilmiyorum ama denemeler yapmam gerek.
Bu formüller sayesinde idealde başka yapıları öğrenmiş oldum.
Rica ederim, robot kullanmıyorum ama kodu test ederken flat durumda ve ortalama şartı hala geçerliyken yeniden poza giriş şartı olması lazım gibi geldi. Siz de flat durumdayken başka sistem devreye girecek demişsiniz zaten.. Maksadınız dediğim durum herhalde..
Geldik, gidiyoruz..
Arkadaşlar merhaba,
hisse tarafında kayma ve komisyon toplamı ne kadar düşmek gerekiyor?
Örneğin Garan hissesinde 0,01 kayma uygunmudur?
Komisyon olarak ise 10.000/5 ödüyorsak bunu da 0,0005 eklediğimizde toplam düşmemiz gereken 1 adet hissede 0,0105-TL mi ediyor..
1 kademe al da =0.01
1 kademe satta =0.01
1 kademe komisyon +bsmv vs =0.01
Bunlar minumum kayma ve komisyonlar. Al-satta daha fazla kayma yaşanabilir. Sığ hisseler olursa daha fazla olabilir.Hisse de Fiyatlar 20 - 50 olunca kademe aralığı da dahada genişlemektedir. 0.02 - 0.05 - gibi aralıga geçmektedir.
Bütün maliyetleri düştükten sonra kar eden sistem bulunması gerekir. Yoksa çok işlem yapan sistem aracı kuruma çalışır.
teşekkürler.. aslında ilk mesajında da gayet açıkmış fakat ben anlamak istemedim sanırım.. kurguladığım sistem dediğin şekilde çöp oluyor :)
0.02 her bir işlemde düşmem gerekecek.
işin içine girdikçe boğuluyor insan.. halbuki ilk programı kurup bakındığımda zengin oldum demiştim :kmk:
iyi akşamlar arkadaşlar şu kodu idealde yazabilirmiyiz,
Ref(RSI(14),-1)>Trough(1,RSI(14),.8) AND Ref(CLOSE,-1)<Trough(1,CLOSE,.2)
var A1 = Sistem.MA(50, "Simple", "Kapanis");
var A2 = Sistem.MA(100, "Simple", "Kapanis");
var SonYon = "";
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if (A1[i] > A2[i] && SonYon != "A")
{
Sistem.Yon[i] = "A";
SonYon = Sistem.Yon[i];
}
else if (A1[i] < A2[i] && SonYon != "S")
{
Sistem.Yon[i] = "S";
SonYon = Sistem.Yon[i];
}
}
Sistem.GetiriHesapla("01/01/2010", 0.00); //Belli bir tarihten itibaren Getiri eğirisi çizdirilir, işlemlerde 0 puan kayma dikkate alınır.
Sistem.Cizgiler[0].Deger = A1;
Sistem.Cizgiler[1].Deger = A2;
Sistem.Cizgiler[2].Deger = Sistem.GetiriKZ;
Sistem.Cizgiler[3].Deger = Sistem.GetiriMiktar;
Sistem.Cizgiler[4].Deger = Sistem.GetiriPozisyon;
bu getiri eğrini nereye eklemem gerekir sistem de en alta yapıstırınca çalışmıyor yardımcı olabilecek varmıdır?
Selam buradaki hata nereden kaynaklanıyor bir fikri olan var mı? Sanırım pivot3 ve pivot4 de bir hata var ama ne yapacağımı bulamadım...
// kapanış fiyatlarını oku
var C = Sistem.GrafikFiyatSec("Kapanis");
var L = Sistem.GrafikFiyatSec("Dusuk");
var H = Sistem.GrafikFiyatSec("Yuksek");
// hareketli ortalamaları hesapla
var MA1 = Sistem.MA(C, "Exp", 3);
var MA2 = Sistem.MA(C, "Exp", 9);
var MA3 = Sistem.MA(C, "Exp", 15);
var ADX = Sistem.ADX(15);
var pivot1 = Sistem.Liste(0);
var pivot2 = Sistem.Liste(0);
var pivot3 = Sistem.Liste(0);
var pivot4 = Sistem.Liste(0);
// strateji
var SonYon = "";
for (int i = 1; i<Sistem.BarSayisi; i++)
{
if (MA1[i] < MA1[i-1] && MA1[i-1] > MA1[i-2]) pivot1[i] = MA2[i];
else pivot1[i] = pivot1[i-1];
if (MA1[i] > MA1[i-1] && MA1[i-2] > MA1[i-1]) pivot2[i] = MA3[i];
else pivot2[i] = pivot2[i-1];
if (MA1[i] > pivot2[i] && MA1[i-1] < pivot2[i] && SonYon != "A") // AL
//if (MA1[i] > MA3[i] && SonYon != "A") // AL
{
Sistem.Yon[i] = SonYon = "A"; // alış
}
else if (MA1[i] < pivot1[i] && MA1[i-1] > pivot1[i] && SonYon != "F") // SAT
//else if (MA1[i] < MA2[i] && SonYon != "S") // SAT
{
Sistem.Yon[i] = SonYon = "F"; // satış
}
pivot3[i] = pivot1[i] + pivot1[i]*1/100
pivot4[i] = pivot2[i] + pivot2[i]*1/100
Sistem.Cizgiler[0].Deger = MA1;
Sistem.Cizgiler[1].Deger = MA2;
Sistem.Cizgiler[2].Deger = MA3;
Sistem.Cizgiler[3].Deger = ADX;
Sistem.Cizgiler[4].Deger = pivot1;
Sistem.Cizgiler[5].Deger = pivot2;
Sistem.Cizgiler[6].Deger = pivot3;
Sistem.Cizgiler[7].Deger = pivot4;
}
Merhaba arkadaşlar , ideal ile forex piyasalarında işlem yapabiliyor muyum?
İşlem yapan kurum var mı?
Merhaba,
Bir hissenin brüt takasta olup olmadığını anlama şansımız var mı acaba?
Sistem.YuzeyselVeriOku komutundan dönen bir alandan mesela?
Yüzeysel Veri Alanları
Symbol = "Kod";
Description = "Tanım";
Exchange = "Borsa";
MarketCode = "Piyasa";
SubMarket = "Piy.Alt";
Sector = "Sektör";
DecimalPoint = "Ondalık";
IndexType = "Endeks";
Grup = "Grup";
Seri = "Seri";
Yontem = "Yöntem";
Durum = "Durum";
LastPrice = "Son.Fyt";
LastSize = "Son.Lot";
LastSize2 = "Son.LotH";
LastVol = "Son.Hcm";
LastVol2 = "Son.HcmH";
Direction = "Yön";
BidPrice = "Al.Fyt";
BidSize = "Al.Lot";
BidVol = "Al.Hcm";
AskPrice = "Sat.Fyt";
AskSize = "Sat.Lot";
AskVol = "Sat.Hcm";
HighSession = "Yks";
HighSession1 = "Yks.Sea1";
HighDay = "Yks.Gün";
HighWeek = "Yks.Haf";
HighMonth = "Yks.Ay";
HighYear = "Yks.Yıl";
LowSession = "Dşk";
LowSession1 = "Dşk.Sea1";
LowDay = "Dşk.Gün";
LowWeek = "Dşk.Haf";
LowMonth = "Dşk.Ay";
LowYear = "Dşk.Yıl";
PrevCloseSession = "ÖncK";
PrevCloseDay = "ÖncK.Gün";
PrevCloseWeek = "ÖncK.Haf";
PrevCloseMonth = "ÖncK.Ay";
PrevCloseYear = "ÖncK.Yıl";
NetDifSession = "Frk";
NetDifDay = "Frk.Gün";
NetDifWeek = "Frk.Haf";
NetDifMonth = "Frk.Ay";
NetDifYear = "Frk.Yıl";
NetPerSession = "Frk%";
NetPerDay = "Frk%.Gün";
NetPerWeek = "Frk%.Haf";
NetPerMonth = "Frk%.Ay";
NetPerYear = "Frk%.Yıl";
SizeSession = "Lot";
SizeSession1 = "Lot.Sea1";
SizeDay = "Lot.Gün";
VolSession = "Hcm";
VolSession1 = "Hcm.Sea1";
VolDay = "Hcm.Gün";
WavrSession = "Aort";
WavrSession1 = "Aort.Sea1";
WavrDay = "Aort.Gün";
WavrPeriodic = "Aort.Per";
Wavr2Session = "AortH";
Wavr2Session1 = "AortH.Sea1";
Wavr2Day = "AortH.Gün";
LimitUp = "Tavan";
LimitDown = "Taban";
BazPrice = "Baz";
MarketMakerCode = "PY.Kod";
MarketMakerBid = "PY.Al";
MarketMakerAsk = "PY.Sat";
PriceStep = "Adım";
OpenSession = "Açl.Sea";
OpenDay = "Açl.Gün";
WaitingBidWavr = "B.A.Ort";
WaitingAskWavr = "B.S.Ort";
WaitingBidSize = "B.A.Lot";
WaitingAskSize = "B.S.Lot";
WaitingBidRate = "B.A.O";
WaitingAskRate = "B.S.O";
CanceledBidWavr = "I.A.Ort";
CanceledAskWavr = "I.S.Ort";
TickSession = "Tick";
TickDay = "Tick.Gün";
IzafiSession = "Izafi";
IzafiDay = "Izafi.Gün";
Date = "Tarih";
Time = "Saat";
BalanceSheetPeriod = "Dönem";
Capital = "Sermaye";
OzCapital = "OzSermaye";
PiyDegDefDeg = "Piy/Def";
NetProfit = "Kar";
PublicRatio = "Halk";
NumberOfShares = "Snt.Say";
PriceEarningRatio = "FK-S";
PriceEarningValue = "FK";
MarketValue = "Piy.Değ";
BookValue = "Def.Değ";
BorrowBid = "Öd.Al";
BorrowAsk = "Öd.Sat";
BorrowLast = "Öd.Son";
PrevSettlement = "Önc.Stl";
SettlementPrice = "Stl";
FixingPrice = "Sabit";
ExpiryDate = "Son.Trh";
DaysToExpiry = "K.Gün";
OpenInterest = "AçkP";
OpenInterestDif = "AçkP.Frk";
MoneyflowInput = "Para+";
MoneyflowOutput = "Para-";
MoneyflowTotal = "Para.Tpl";
MoneyflowNetDif = "Para";
MoneyflowNetPer = "Para%";
MoneyflowGraph = "Para.Grf";
GraphSession = "Grf";
GraphDay = "Grf.Gün";
GraphWeek = "Grf.Haf";
GraphWeek1 = "Grf.Haf1";
GraphMonth = "Grf.Ay";
GraphMonth1 = "Grf.Ay1";
GraphMonth3 = "Grf.Ay3";
GraphMonth6 = "Grf.Ay6";
GraphYear = "Grf.Yıl";
GraphYear1 = "Grf.Yıl1";
AI = "A.I";
BSP = "ASP";
BidRate = "Al.O";
AskRate = "Sat.O";
ASP = "SSP";
LastRate = "Son.O";
LastTakas = "Son.Tk";
CY = "CY";
DTM = "DTM";
DTC = "DTC";
RYLD = "R.Yld";
PrevRate = "Pr.O";
PrevPrice = "Pr.Fiy";
PrevDate = "Pr.Trh";
AV = "AV";
SY = "SY";
AVSP = "AVSP";
MinRate = "Min.O";
MaxRate = "Max.O";
AvrRate = "Avr.O";
BidTime = "Al.Saat";
AskTime = "Sat.Saat";
Vade = "Vade";
Valor = "Valor";
Day = "Gün";
Isin = "I.Kod";
Risk = "Risk";
Line = "Line";
AVRCY = "AVRCY";
FI182 = "FI182";
FI273 = "FI273";
FI365 = "FI365";
FI456 = "FI456";
FIGENEL = "FIGENEL";
Wavr2Week = "AortH.Haf";
Wavr2Month = "AortH.Ay";
Wavr2Year = "AortH.Yıl";
SizeWeek = "Lot.Haf";
SizeMonth = "Lot.Ay";
SizeYear = "Lot.Yıl";
VolWeek = "Hcm.Haf";
VolMonth = "Hcm.Ay";
VolYear = "Hcm.Yıl";
HighWeek1 = "Yks.Haf1";
LowWeek1 = "Dşk.Haf1";
PrevCloseWeek1 = "ÖncK.Haf1";
NetDifWeek1 = "Frk.Haf1";
NetPerWeek1 = "Frk%.Haf1";
Wavr2Week1 = "AortH.Haf1";
SizeWeek1 = "Lot.Haf1";
VolWeek1 = "Hcm.Haf1";
HighMonth1 = "Yks.Ay1";
LowMonth1 = "Dşk.Ay1";
PrevCloseMonth1 = "ÖncK.Ay1";
NetDifMonth1 = "Frk.Ay1";
NetPerMonth1 = "Frk%.Ay1";
Wavr2Month1 = "AortH.Ay1";
SizeMonth1 = "Lot.Ay1";
VolMonth1 = "Hcm.Ay1";
HighMonth3 = "Yks.Ay3";
LowMonth3 = "Dşk.Ay3";
PrevCloseMonth3 = "ÖncK.Ay3";
NetDifMonth3 = "Frk.Ay3";
NetPerMonth3 = "Frk%.Ay3";
Wavr2Month3 = "AortH.Ay3";
SizeMonth3 = "Lot.Ay3";
VolMonth3 = "Hcm.Ay3";
HighMonth6 = "Yks.Ay6";
LowMonth6 = "Dşk.Ay6";
PrevCloseMonth6 = "ÖncK.Ay6";
NetDifMonth6 = "Frk.Ay6";
NetPerMonth6 = "Frk%.Ay6";
Wavr2Month6 = "AortH.Ay6";
SizeMonth6 = "Lot.Ay6";
VolMonth6 = "Hcm.Ay6";
HighYear1 = "Yks.Yıl1";
LowYear1 = "Dşk.Yıl1";
PrevCloseYear1 = "ÖncK.Yıl1";
NetDifYear1 = "Frk.Yıl1";
NetPerYear1 = "Frk%.Yıl1";
Wavr2Year1 = "AortH.Yıl1";
SizeYear1 = "Lot.Yıl1";
VolYear1 = "Hcm.Yıl1";
Maturity = "Maturity";
Currency = "Currency";
Coupon = "Coupon";
Spread = "Spread";
Duration = "Duration";
ClosePrice = "Kapanis";
OptionPremiumDay = "Ops.Prim";
BaseSymbol = "Dayanak";
OptionType = "Ops.Tip";
OptionKind = "Ops.Tür";
StrikePrice = "Kull.Fyt";
GrupName = "Grup.Ad";
GrupNo = "Grup.No";
StartDate = "Başl.Trh";
Multiplier = "Çarpan";
DeliveryType = "Uzl.Tip";
PrevSymbol = "Önc.Sembol";
Action = "Aksiyon";
SessionName = "Sea.Ad";
Broker = "Kurum";
Barrier = "Bariyer";
TeorikVal = "Teo.Fyt";
TeorikDif = "Teo.Fark";
TeorikPer = "Teo.%";
DengeFiyat = "Dng.Fyt";
DengeMiktar = "Dng.Lot";
DengeBidKalan = "Dng.Al.K";
DengeAskKalan = "Dng.Sat.K";
DengeLastFark = "Dng.Frk";
DengeLastFarkY = "Dng.Frk%";
DengeLotFark = "Dng.Lot.Frk";
-----------------------
Yüzeysel veri setinin içini hep atıyorum. İçinde varmı bakın
Endeks viop da kullanılan tek satırlık emir kodunun benzeri, vadeli işlemlerdeki hisseler için varmıdır? Varsa örnek yazım nasıldır?
-------------------------------------------
Vadeli hisseler için benim bildigim yok fakat sezai beyin önerdigi şu robotu kullanabilirsiniz. Daha fazla bilgi içermektedir.
-----------------------
PHP Code:
ROBOT YENİ ÇİFT YÖN
// YENİ ÇİFT YÖNLÜ İŞLEM AÇAN ROBOT FORMÜLÜ . ÇİFT YÖNLÜ İŞLEM AÇABİLMESİ İÇİN SİSTEMİN ÇİFT YÖNLÜ OLARAK YAZILMASI GEREKİR.
var LotSize = 1; //işlem adedi
var SistemAdi = "Sistemim"; //sistemizin adı
var GrafikSembolu = "VIP'F_GARAN0420"; //sistemin sinyal ürettiği grafik sembolü
var GrafikPeriyodu = "1"; //grafiğin periyodu
var EmirSembol = "VIP'F_GARAN0420"; // başka sembol için açık orjinal kodu yazın (örnek: "VIP'F_GARAN0420")
var MySistem = Sistem.SistemGetir(SistemAdi, GrafikSembolu , GrafikPeriyodu ); //sistemin adı, grafik sembolü, grafiğin periyodu
if (MySistem == null)
{
Sistem.Mesaj(Sistem.Name + "Hatalı Çalışıyor !");
}
else
{
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);
var SonYon = Sistem.SonYonGetir(SistemAdi, GrafikSembolu , GrafikPeriyodu ); //sistemin adı, grafik sembolü, grafiğin periyodu
if (Sistem.Saat.CompareTo("09:30:00") <= 0 || Sistem.Saat.CompareTo("18:14:59") >= 0) // seans yok işlem yapma
{
}
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 = "GUN"; // GUN, KIE, IKG
Sistem.EmirTipi = "Piyasa"; // Piyasa, Limitli, Piyasadan Limite
Sistem.EmirFiyati = 1.00;
Sistem.EmirMiktari = Math.Abs(Miktar);
Sistem.EmirGonder();
}
}
}
Teşekkür ederim Atakan hocam.
merhaba arkadaşlar
ideal kullanmaya yeni başladım. hala çözemediğim bir kaç konu var. öncelikle yıllardır kullandığım 3 gösterge idealde yok. formül dili kullanmayı da bilmiyorum. tradingview formüllerini çevirebilecek olursanız çok memnun olurum.
1) MACD-AS: MACD nin bir türevi. Asprayin geliştirdiği MACD olarak bilinir. çok kısaca şöyle formüle edebilirsiniz.
MACD-AS=MACD-Sinyal çizgisi(MACD'nin 9 periyotluk üslü hateketli ortalaması)
Yeni Sinyal Çizgisi="MACD-AS"'ın 9 periyotluk üslü hareketli ortalaması
Not: Yeni oluşturulan göstergede bu üç parametreyi gösterge özelliklerine girip değiştirebilmeliyim. tradingview formülü şu şekilde:
study("MACD-AS")
fastperiod = input(12,title="fastperiod",type=integer,minval=1, maxval=500)
slowperiod = input(26,title="slowperiod",type=integer,minval=1, maxval=500)
signalperiod = input(9,title="signalperiod",type=integer,minval=1 ,maxval=500)
fastMA = ema(close, fastperiod)
slowMA = ema(close, slowperiod)
macd = fastMA - slowMA
signal = ema(macd, signalperiod)
macdAS = macd - signal
signalAS = ema(macdAS, signalperiod)
plot(macdAS, color=blue, linewidth=2)
plot(signalAS, color=red, linewidth=2)
plot(0, color=black)
2) DIOSC: +DI ile -DI arasındaki farkı gösteren histogram. Tradingview deki formülü şu şekilde:
study(title="DIOSC")
len = input(14, minval=1, title="DI Length")
showEma = input(true, title='Show Ema')
EmaLn = input(9, minval=1, title="EMA Length")
DI = change(high)- (-change(low))
trur = rma(tr, len)
diosc = fixnan(100 * rma(DI, len) / trur)
plot(diosc, color = diosc <= 0 ? red : green, style=histogram)
emaDI = ema(diosc, EmaLn)
plot(showEma ? emaDI : na, color=black, title="EMA")
3) ADX, ADXR, +DI ve -DI indikatörlerinin hepsini aynı gösterge üzerinde görmek istiyorum. Bunun benzeri yine tradingview de var. APEX - ADX/ADXR/DI+/DI- [v1] ismiyle geçiyor. formülü: study("APEX - ADX/ADXR/DI+/DI- [v1]", overlay = false)
source_main = close
adx_length = input(14, minval=1, title="ADX length")
adxr_length = input(14, minval=1, title="ADXR length")
adx_useRes = input(false, title="Check to turn ON Different Time Frame")
adx_time = input("5",type=resolution, title=" Time Frame")
adx_min = input(20, type=float, title="ADX Min.")
adx_max = input(100,type=float, title="ADX Max.")
dim_min = input(0, type=float, title="DI- Min.")
dim_max = input(100,type=float, title="DI- Max.")
dip_min = input(0, type=float, title="DI+ Min.")
dip_max = input(100,type=float, title="DI+ Max.")
adxr_min = input(0, type=float, title="ADXR Min.")
adxr_max = input(100,type=float, title="ADXR Max.")
// ----- Function for ADX / DI / DI / ADXR
calc_adx_di( len, len_adxr ) =>
TrueRange = max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1])))
DMPlus = high-nz(high[1]) > nz(low[1])-low ? max(high-nz(high[1]), 0): 0
DMMinus = nz(low[1])-low > high-nz(high[1]) ? max(nz(low[1])-low, 0): 0
STR = 0.0
SDMPlus = 0.0
SDMMinus = 0.0
STR := nz(STR[1]) - (nz(STR[1])/len) + TrueRange
SDMPlus := nz(SDMPlus[1]) - (nz(SDMPlus[1])/len) + DMPlus
SDMMinus := nz(SDMMinus[1]) - (nz(SDMMinus[1])/len) + DMMinus
DIPlus = 0.0
DIMinus = 0.0
ADX = 0.0
ADXR = 0.0
DIPlus := SDMPlus / STR * 100
DIMinus := SDMMinus / STR * 100
ADX := sma(abs(DIPlus-DIMinus) / (DIPlus+DIMinus)*100, len)
ADXR := ( ADX + ADX[len_adxr] ) / 2
[ ADX, DIPlus, DIMinus, ADXR ]
// ---- The big old calculation happening
[value_ADX, value_DIPlus, value_DIMinus, value_ADXR ] = calc_adx_di( adx_length, adxr_length )
per_value_ADX = adx_useRes?security(tickerid, adx_time , value_ADX) : value_ADX
per_value_DIPlus = adx_useRes?security(tickerid, adx_time , value_DIPlus) : value_DIPlus
per_value_DIMinus = adx_useRes?security(tickerid, adx_time , value_DIMinus): value_DIMinus
per_value_ADXR = adx_useRes?security(tickerid, adx_time , value_ADXR ) : value_ADXR
plot(per_value_DIPlus, color=lime, transp=20, Title="DI+", linewidth = 2)
plot(per_value_DIMinus, color=red, transp=20, Title="DI-", linewidth = 2)
plot(per_value_ADX, color=black, transp=20, Title="ADX", linewidth = 2)
plot(per_value_ADXR, color=blue, transp=20, Title="ADXR", linewidth = 2)
colorBackground = false
colorBackground := ( per_value_ADX > adx_min and per_value_ADX < adx_max ) and
( per_value_DIPlus > dip_min and per_value_DIPlus < dip_max ) and
( per_value_DIMinus > dim_min and per_value_DIMinus < dim_max ) and
( per_value_ADXR > adxr_min and per_value_ADXR < adxr_max )
bgcolor(colorBackground?lime:na, transp=80)