Merhaba idealde stop ve kar al seviyeleri için bar kapanışını beklemeden emir göneremini kodlayabilecek kimseyi bulamadım ne twitterde ne de bu sistede. Siz yazabiliyor musunuz acaba?
|
|
super trendden yapılmış indikatör bir türlü ceviremedim yardımcı olabilirmisiniz
Kod:period:=input("ATR periodu",1,500,10); coeff:=input("coeff",0,20,3); MovPeriod:=input("Mov Periodu",1,500,10); K:=MOV((H+L)/2,MovPeriod,E); OFFSET:=coeff*ATRe(period); STR:=K+OFFSET; STS:=K-OFFSET; FUB:=IF(STR<PREV OR REF(K,-1)>PREV,STR,PREV); FLB:=IF(STS>PREV OR REF(K,-1)<PREV,STS,PREV); PMax:=IF(PREV=REF(FUB,-1) AND K<FUB,FUB,IF(PREV=REF(FUB,-1) AND K>FUB,FLB,IF(PREV=REF(FLB,-1) AND K>FLB,FLB,IF(PREV=REF(FLB,-1) AND K<FLB,FUB,FUB)))); PMax; KKod:var Factor = 3f; var Pd = 10; var MP = Sistem.GrafikFiyatSec("OrtaNokta"); // OrtaNokta var K= Sistem.MA(10, "Exp", "OrtaNokta"); var ATRX = Sistem.AverageTrueRange(1); var ATR = Sistem.MA(ATRX, "Simple", Pd); var C = Sistem.GrafikFiyatSec("OrtaNokta"); var STR = Sistem.Liste(0); var STS = Sistem.Liste(0); var FUB = Sistem.Liste(0); var FLB = Sistem.Liste(0); var ST = Sistem.Liste(0); var SuperTrend = 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]; ST[i] = (ST[i-1] == FUB[i-1] && K[i] < FUB[i]) ? FUB[i] : (ST[i-1] == FUB[i-1] && K[i] > FUB[i]) ? FLB[i] : (ST[i-1] == FLB[i-1] && K[i] > FLB[i]) ? FLB[i] : (ST[i-1] == FLB[i-1] && K[i] < FLB[i] ? FUB[i] : FUB[i]); } Sistem.Cizgiler[0].Deger = ST;
Merhaba idealde stop ve kar al seviyeleri için bar kapanışını beklemeden emir göneremini kodlayabilecek kimseyi bulamadım ne twitterde ne de bu sistede. Siz yazabiliyor musunuz acaba?
mesala bu sistemde sabit stop, iz süren stop, kar al tetiklendiğinde bar kapanışını beklemeden emir gönderimini nasıl yazabiliriz?
var V = Sistem.GrafikVerileri;
var C = Sistem.GrafikFiyatOku(V, "Kapanis");
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 ((C[i] < IZLEYENSTOP[i] || C[i] >= KARAL[i]) && SonYon == "A") // alıştan flate
{
SonYon = "F";
Sistem.Yon[i] = "F";
}
else if(C[i] < Fiyat * 0.99F && SonYon == "A")
{
SonYon = "F";
Sistem.Yon[i] = "F";
}
}
var C = Sistem.GrafikFiyatOku(V, "Kapanis"); satırının altına şunu ekleyiniz:
var sonfiyat = Sistem.SonFiyat(Sistem.Sembol);
Sonra alım satımda canlı fiyat kullanmak istediğiniz yere "C[i]" yerine "sonfiyat" değişkenini koyun.. Ancak bunu sanalda iyi test etmelisiniz, çünkü 1-2 kademe değişiminde sistemi al-sat döngüsüne sokabilirsiniz..
Biçare gönüller! Ne giden son gemidir bu!
Hicranlı hayatın ne de son matemidir bu.
Hocam arşivimde şöyle bir supertrend kodu var, bir de bunun üzerinden deneyin isterseniz...
PHP Code:
var V = Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V, "Acilis" ) ;
var H = Sistem.GrafikFiyatOku(V, "Yuksek" ) ;
var L = Sistem.GrafikFiyatOku(V, "Dusuk" ) ;
var O = Sistem.GrafikFiyatOku(V, "Acilis" ) ;
var Length = 60 ;
var mult = 5.0f ;
var avgTR = Sistem.AverageTrueRange(V, Length) ;
var newshortband = Sistem.Liste(V.Count, 0) ;
var newlongband = Sistem.Liste(V.Count, 0) ;
var shortband = Sistem.Liste(V.Count, 0) ;
var longband = Sistem.Liste(V.Count, 0) ;
var trend = Sistem.Liste(V.Count, 0) ;
var supt = Sistem.Liste(V.Count, 0) ;
for (int i = 1; i < V.Count; i++)
{
newshortband[i] = ( H[i] + L[i] ) / 2 + avgTR[i] * mult ;
newlongband[i] = ( H[i] + L[i] ) / 2 - avgTR[i] * mult ;
if( C[i-1] > longband[i-1] ) longband[i] = Math.Max(newlongband[i], longband[i-1]) ; else longband[i] = newlongband[i] ;
if( C[i-1] < shortband[i-1] ) shortband[i] = Math.Min(newshortband[i], shortband[i-1]) ; else shortband[i] = newshortband[i] ;
{
if( C[i] > shortband[i-1] ) trend[i] = 1 ; else if ( C[i] < longband[i-1] ) trend[i] = -1 ; else trend[i]= trend[i-1] ;
}
if( trend[i] == 1 ) supt[i] = longband[i] ; else supt[i] = shortband[i] ;
}
Sistem.Cizgiler[0].Deger = supt; // panel 1
Biçare gönüller! Ne giden son gemidir bu!
Hicranlı hayatın ne de son matemidir bu.
Selamlar. Aşağıdaki linkin işinize yarayacağını düşünüyorum:
https://twitter.com/caglarmenguc/sta...991489538?s=20
|
|
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.
Yer İmleri