|
|
KIVANÇ BEYİN YAZDIGI PMAXKod:var Factor = 3f; var Pd = 10; var ATR = Sistem.AverageTrueRange(Pd); var C = Sistem.GrafikFiyatSec("OrtaNokta"); var K = Sistem.MA(C, "Exp", Pd); var STR = Sistem.Liste(0); var STS = Sistem.Liste(0); var FUB = Sistem.Liste(0); var FLB = Sistem.Liste(0); var PMax = Sistem.Liste(0); for (int i=1; i < Sistem.BarSayisi; i++) { STR[i] = K[i] + (Factor*ATR[i]); STS[i] = K[i] - (Factor*ATR[i]); FUB[i] = (STR[i] < FUB[i-1] || K[i-1] > FUB[i-1]) ? STR[i] : FUB[i-1]; FLB[i] = (STS[i] > FLB[i-1] || K[i-1] < FLB[i-1]) ? STS[i] : FLB[i-1]; PMax[i] = (PMax[i-1] == FUB[i-1] && K[i] < FUB[i]) ? FUB[i] : (PMax[i-1] == FUB[i-1] && K[i] > FUB[i]) ? FLB[i] : (PMax[i-1] == FLB[i-1] && K[i] > FLB[i]) ? FLB[i] : (PMax[i-1] == FLB[i-1] && C[i] < FLB[i] ? FUB[i] : FUB[i]); } Sistem.Cizgiler[0].Deger = PMax; Sistem.Cizgiler[1].Deger = K; Sistem.KesismeTara(K,PMax);
Sistemin canlı barda işlem yapması için; İndikatörlü sistem yazınca formülün al -sat şartını listeye atayacagız, listeyide sistem.seviyeye atayacagız şeklinde biliyorum. Bu konuda forumda fazla örnek yok. Bir kaç tane canlı barda işlem yapan sistem örnegi atarmısınız. Üste sayın sonli yazmış. Karal, stoba göre onunda inceleyecegim.
SONLİ Son fiyatı kullanarak canlı bar örneğini vermiş. Bendede Sistem seviye kullanarak bir tane Karal- stoplu canlı bar örneği var. Burada Sistem.Seviyeye indikatör sinyali yazılmış. Eğer doğruysa üsteki sorumun cevabını bulmuş oldum.
LÜTFEN BİLEN , KULLANAN BİR ARKADAŞ TEYİDİNİ YAPSIN. EKLENECEK BİR ŞEY VARSA EKLESİN.
// MARJLARI GİR
float KarAl = 2.000f; // kar al puan
float Stop = 0.700f; ; // stop puan
var V = Sistem.GrafikVerileri;
var C = Sistem.GrafikFiyatOku(V, "Kapanis");
var STO = Sistem.StochasticOsc(10,5);
var AVR = Sistem.MA(STO, "Exp", 5);
var SonYon = "";
float Fiyat = 0;
for (int i = 2; i < Sistem.BarSayisi; i++)
{
if (STO[i-1] < AVR[i-1] && STO[i] >= AVR[i] && SonYon !="A")
{
SonYon = "A";
Sistem.Yon[i] = "A";
Fiyat = C[i];
}
else if (STO[i-1] > AVR[i-1] && STO[i] <= AVR[i] && SonYon !="S")
{
SonYon = "S";
Sistem.Yon[i] = "S";
Fiyat = C[i];
}
else if (SonYon == "A" && C[i] >= Fiyat + KarAl) //Long kar realizasyonu
{
Sistem.Yon[i] = "F"; // flat
SonYon = Sistem.Yon[i];
Sistem.Seviye[i] = Fiyat + KarAl;
}
else if (SonYon == "A" && C[i] <= Fiyat - Stop) //Long stop
{
Sistem.Yon[i] = "F"; // flat
SonYon = Sistem.Yon[i];
Sistem.Seviye[i] = C[i] - Stop;
}
else if (SonYon == "S" && C[i] <= Fiyat - KarAl) // Short Kar realizasyonu
{
Sistem.Yon[i] = "F"; // flat
SonYon = Sistem.Yon[i];
Sistem.Seviye[i] = Fiyat - KarAl;
}
else if (SonYon == "S" && C[i] >= Fiyat + Stop) //Short Stop
{
Sistem.Yon[i] = "F"; // flat
SonYon = Sistem.Yon[i];
Sistem.Seviye[i] = C[i] - Stop;
}
}
Sistem.Cizgiler[0].Deger = STO;
Sistem.Cizgiler[1].Deger = AVR;
// verileri oku
var Sembol = Sistem.Sembol;
var Periyot = Sistem.Periyot;
var T = Sistem.GrafikVerileriniOku(Sembol,Periyot);
var C = Sistem.GrafikFiyatOku(T, "Kapanis");
var V = Sistem.GrafikVerileriniOku(Sistem.Sembol, "G");
// boş veri listeleri yarat
var H1 = Sistem.Liste(0);
var H2 = Sistem.Liste(0);
var H3 = Sistem.Liste(0);
var P = Sistem.Liste(0);
var L1 = Sistem.Liste(0);
var L2 = Sistem.Liste(0);
var L3 = Sistem.Liste(0);
// döngü ile haftalık pivot, prohigh, prolow hesapla
for (int i = 1; i < V.Count; i++)
{
// pivot önceki barın (H+L+C)/3 değeri
P[i] = ( V[i-1].High + V[i-1].Low + V[i-1].Close) / 3;
H1[i] = V[i-1].Close + ( V[i-1].High - V[i-1].Low )*1.1/12 ;
H2[i] = V[i-1].Close + ( V[i-1].High - V[i-1].Low )*1.1/6 ;
H3[i] = V[i-1].Close + ( V[i-1].High - V[i-1].Low )*1.1/4 ;
L1[i] = V[i-1].Close - ( V[i-1].High - V[i-1].Low )*1.1/12 ;
L2[i] = V[i-1].Close - ( V[i-1].High - V[i-1].Low )*1.1/6 ;
L3[i] = V[i-1].Close - ( V[i-1].High - V[i-1].Low )*1.1/4 ;
}
Sistem.Cizgiler[0].Deger = Sistem.DonemCevir(T, V, P);
Sistem.Cizgiler[1].Deger = Sistem.DonemCevir(T, V, L1);
Sistem.Cizgiler[2].Deger = Sistem.DonemCevir(T, V, L2);
Sistem.Cizgiler[3].Deger = Sistem.DonemCevir(T, V, L3);
Sistem.Cizgiler[4].Deger = Sistem.DonemCevir(T, V, H1);
Sistem.Cizgiler[5].Deger = Sistem.DonemCevir(T, V, H2);
Sistem.Cizgiler[6].Deger = Sistem.DonemCevir(T, V, H3);
BU FORMÜLDE nerede hata var bir türlü çizgileri çizdiremedim grafikte , üetelik hata da vermiyor
Bazı sistemlerde bar sayısının fazla olduğu grafiklerinden elde ettiğimiz bir değeri (örneğin getiri eğrisi) değiştirmeden bar sayısının az olduğu grafiklerde kullanmak isteyebiliriz. Bu durumda ilişkin kod :
Kod://çok datada ki bir değeri (örneğin getiri eğirisi) az datada devam ettirme kodu var V = Sistem.GrafikVerileri; var GrafikSistemAd= "sys"; var GrafikSistem = Sistem.SistemGetir(GrafikSistemAd, Sistem.Sembol, Sistem.Periyot); var GetiriList = GrafikSistem.GetiriKZ; var YeniGetiriList = Sistem.Liste(V.Count, 0); var RefGetiriDate = new DateTime(2020, 9 , 18, 19, 56, 0); // yıl, ay, gün, saat, dakika, saniye // kendi grafiğinizden değer gireceksiniz // çok data grafiğinden bakarak elde ettiğimiz referans barın bilgisi // (az data grafiğinde getiri eğirisinin hesaplanmaya başladığı yerlere yakın olması tercih edilir) var RefGetiri= 4280.600f ; // kendi grafiğinizden değer gireceksiniz // çok data grafiğinden bakarak elde ettiğimiz referans barın getiri değeri var farkgetiri = 0f ; //float for (int i = 0; i < GetiriList.Count; i++) { if ( V[i].Date == RefGetiriDate ) farkgetiri = RefGetiri - GetiriList[i] ; // referans bardaki çok data ve az data getiri farkı YeniGetiriList [i] = V[i].Date >= RefGetiriDate ? GetiriList[i] + farkgetiri : 0 ; } Sistem.Cizgiler[0].Deger = GetiriList ; // panel 2 Sistem.Cizgiler[1].Deger = YeniGetiriList; // panel 3
Yer İmleri