
Originally Posted by
sonli
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.
Yer İmleri