Yazdığınız yer emir tetikleyen değil, izleyen stop seviyesini belirleyen yer gibi duruyor...
Uyarı: Backtest te bu durumu test edemezsiniz, seans esnasında sanalda test edebilirsiniz. Grafiğe sistemi attığınızda geçmişteki görüntü hatalı olur; çünkü sonfiyat sebebiyle geçmişte işlem olmuş yerleri olmamış yada işlem olmamış yerleri olmuş gibi görürsünüz. Bugünkü "son fiyat" geçmiş için de hep son fiyattır.. C[i] ise i numaralı barın kapanış fiyatıdır, yani her bar için ayrı bir değerdir. Ayrıca kâr al, stop vs kullanıyorsanız ve bu durum tetiklendiğinde al şartınız hala geçerliyse, sattığı gibi tekrar alacaktır!!! Bu durumu iyi kodlamanız gerekir.. Örneğin ema50 yukarı kesince al yapan ve %5 de kâr alan bir sistem olsun. İyi kodlanmazsa; %5 kâr aldığı noktada yine ema50 üzerinde olacağından sattığı gibi geri alacaktır..
Kodu alta sadece örnek olsun diye koyuyorum; test etmediğimden doğru çalışacağını garanti edemem ve gerçek işlemde kullanmayınız!!
PHP Code:var V = Sistem.GrafikVerileri;
var C = Sistem.GrafikFiyatOku(V, "Kapanis");
var sonfiyat = Sistem.SonFiyat(Sistem.Sembol);
var STOSK = Sistem.MA(Sistem.StochasticFast(220, 1), "Variable", 170);
var STOSD = Sistem.MA(STOSK, "Variable", 30);
var STOSK2 = Sistem.MA(Sistem.StochasticFast(300, 1), "Variable", 90);
var STOSD2 = Sistem.MA(STOSK2, "Variable", 100);
var STOSK3 = Sistem.MA(Sistem.StochasticFast(210, 1), "Variable", 140);
var STOSD3 = Sistem.MA(STOSK3, "Variable", 110);
var STOSK4 = Sistem.MA(Sistem.StochasticFast(80, 1), "Variable", 40);
var STOSD4 = Sistem.MA(STOSK4, "Variable", 50);
var TILL = Sistem.TillsonT3(C, 35, 1.2);
var TILL2 = Sistem.TillsonT3(C, 135, 0.7);
var TILL3 = Sistem.TillsonT3(C, 60, 1.5);
var TILL4 = Sistem.TillsonT3(C, 100, 0.2);
var MOST = Sistem.TOMA(3, 2, "Variable");
var RSI = Sistem.RSI(C,10);
var SartAL = false;
var SartSAT = false;
var SonYon = "";
var IZLEYENSTOP = Sistem.Liste(0);
var KARAL = Sistem.Liste(0);
var Fiyat = 0.0f;
for(int i=1; i < Sistem.BarSayisi;i++)
{
IZLEYENSTOP[i] = Sistem.IzleyenStopYuzde(3,i);
if (IZLEYENSTOP[i] == 0) IZLEYENSTOP[i] = C[i];
KARAL[i] = Sistem.KarAlYuzde(22.8,i);
if (KARAL[i] == 0) KARAL[i] = C[i];
SartAL = C[i] > MOST[i] ? TILL[i] > TILL[i-1] && RSI[i] < 40 && STOSK[i] > STOSD[i] : TILL2[i] > TILL2[i-1] && RSI[i] < 30 && STOSK2[i] > STOSD2[i];
SartSAT = C[i] > MOST[i] ? TILL3[i] < TILL3[i-1] && STOSK3[i] < STOSD3[i] : TILL4[i] < TILL4[i-1] && STOSK4[i] < STOSD4[i];
if(SartAL && SonYon != "A")
{
SonYon = "A";
Sistem.Yon[i] = "A";
Fiyat = C[i];
}
else if(SartSAT && SonYon != "F")
{
SonYon = "F";
Sistem.Yon[i] = "F";
}
else if ( SonYon == "A" && ( (sonfiyat < IZLEYENSTOP[i] || sonfiyat >= KARAL[i]) || (C[i] < IZLEYENSTOP[i] || C[i] >= KARAL[i]) ) ) // alıştan flate
{
SonYon = "F";
Sistem.Yon[i] = "F";
}
else if( SonYon == "A" && ( sonfiyat < Fiyat*0.99F || C[i] < Fiyat*0.99F) )
{
SonYon = "F";
Sistem.Yon[i] = "F";
}
}
Biçare gönüller! Ne giden son gemidir bu!
Hicranlı hayatın ne de son matemidir bu.
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;
1.jpg
formulde herhangi bir hata yok sasa ve da test ettim ve resimlerini ekledim.
Yer İmleri