Kod:study("Pseudo Polynomial Channel",overlay=true) length = input(14),morph = input(0.9,minval=0,maxval=1),mult = input(1.),flatten = input(1.) //---- x = n y = close m(a,b) => p = morph * a + (1-morph) * b k = nz(m(k[length],y),y) + (x-x[length])/(x[length*2]-x[length]) * (nz(m(k[length*2],y),y) - nz(m(k[length],y),y))/flatten k1 = sma(k,length) er = cum(abs(y-k1))/n * mult //---- a = k1 + er b = k1 - er //---- A = plot(a,color=#2196f3,linewidth=2,transp=0) plot(k1,color=#e65100,linewidth=2,transp=0) B = plot(b,color=#ff1100,linewidth=2,transp=0) fill(A,B,#2196f3,transp=95)
Uğraştım biraz ama beceremedim, sıkıntı m değil, onunla fonksiyon tanımlıyor gibi birşey.. x ile neyi ifade ettiğini tam anlayamadım..
m(a,b) yapısına şunu uygula diyor: morph * a + (1-morph) * b
x ve y(kapanış normalde) rastgele tanımlayıp çizsin gerisine sonra bakarım dedim ama yemedi
m çiziyor ama m1 olamadı..
var C = Sistem.GrafikFiyatSec("Kapanis");
int i=Sistem.BarSayisi-1;
int length=14;
float morph=0.9f;
int mult=1;
int flatten=1;
var x=Sistem.GrafikFiyatSec("Yuksek"); //muhtemelen anlık fiyat ya da bar no
var y=Sistem.Ref(C,-1);
var k=Sistem.Liste(0);
for (int j = 100; j < Sistem.BarSayisi; j++)
{
var m = morph*k[j-length] + (1-morph)*y[j] ;
if(m==0) m=y[j];
var m2 = morph*k[j-length*2] + (1-morph)*y[j] ;
if(m2==0) m2=y[j];
var m1= (x[j]-x[j-length])/( x[j-length*2]-x[j-length])*(m2-m)/flatten ;
//k = nz(m(k[length],y),y) + (x-x[length])/(x[length*2]-x[length]) * (nz(m(k[length*2],y),y) - nz(m(k[length],y),y))/flatten
k[j] = m + m1;
}
Sistem.Cizgiler[0].Deger = k;
Biçare gönüller! Ne giden son gemidir bu!
Hicranlı hayatın ne de son matemidir bu.
Şöyle birşey olabilir
Kod:// Pseudo Polynomial Channel var length = 14 ; // var lengthh = 2 * length ; var morph = 0.9f ; var mult = 1.0f ; var flatten = 1.0f ; 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 x = Sistem.BarSayisi ; var xx = -1 * ( x - x + length )/( x - lengthh - x + length ) ; //var xx = -1 * ( x - length )/( x - lengthh - x + length ) ; var k= Sistem.Liste(0); for (int i = 50; i < V.Count; i++) k[i] = morph * k[i-length]+ (1-morph) * C[i] + xx * ( morph * k[i-lengthh]+ (1-morph) * C[i] ) - ( morph * k[i-length]+ (1-morph) * C[i] ) / flatten ; var k1 = Sistem.MA(k, "Simple", length ) ; var k2= Sistem.Liste(0); for (int i = 50; i < V.Count; i++) { k2[i] = Math.Abs(C[i] - k1[i] ) ; } var er = Sistem.Sum(k2) / x * mult ; var a = Sistem.Liste(0); var b = Sistem.Liste(0); for (int i = 50; i < V.Count; i++) { a[i] = k1[i] + er ; b[i] = k1[i] - er ; } Sistem.Cizgiler[0].Deger= a ; //panel1 Sistem.Cizgiler[1].Deger= b ; //panel1
Savitzky-Golay kullanarak yumuşatmış eleman ama sizinki sanki sert olmuş gibi.
şöyle olursa en azından mid sapmaz gibi. sanırım sum olduğundan up ve down çizgileri farklı periyotlarda bar sayısı ve duyarlılık gibi nedenlerle farklılaşabilir. paramla ayarlanır gerçi onlarda.
bence framanın TTI ını alıp kanal yapmaktan daha iyi gibi, hemde bedava
PHP Code:/* https://www.tradingview.com/script/qusoEeMf-Pseudo-Polynomial-Channel/ */
var V = Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V, "Kapanis");
var length = 14;
var morph = 0.9f;
float mult = 1f;
var flatten = 1f;
var Up = Sistem.Liste(0);
var Down = Sistem.Liste(0);
var k = Sistem.Liste(0);
var kcum=0f;
for (int i = length*2 ; i < C.Count; i++)
{
k[i] = (morph * k[i-length] + (1-morph) * C[i] )
+ (i - (i+length) )
/ ( (i+length*2f) - (i+length) )
* (
(morph * k[i-length*2] + (1f-morph) * C[i] )
- (morph * k[i-length] + (1f-morph) * C[i] )
)
/ flatten;
}
var k1 = Sistem.MA(k, "Simple", length );
for (int i = length*2 ; i < C.Count; i++)
{
kcum += Math.Abs(C[i] - k1[i] );
float er = kcum / i * mult;
Up[i] = ( k1[i] + er);
Down[i] = ( k1[i] - er);
}
Sistem.Cizgiler[0].Deger = Up;
Sistem.Cizgiler[1].Deger = k1;
Sistem.Cizgiler[2].Deger = Down;
Biçare gönüller! Ne giden son gemidir bu!
Hicranlı hayatın ne de son matemidir bu.
Sağolasın hocam, bazen jeton düşmüyor) Ama bar numarasıymış, ilk koda bakarken öyle gibi gelmesine rağmen mantıksız gelmişti, not yazmıştım sadece.. Bölgeyi sadeleştirdiğinde -1 çıkıyor, kafa mı karıştırmak istemiş, onun mu kafa karışıkmış anlamadım
Son bölümü de anonim arkadaşın koduyla düzenledim..
Soran arkadaş için kodun son hali ve görüntüler aşağıda, flatten ve mult la oynamak lazım.. Şahsi fikrim Bollinger ve normal ortalamalara kasmak daha faydalı olur..
PHP Code:/*
//@version=2
study("Pseudo Polynomial Channel",overlay=true)
length = input(14),morph = input(0.9,minval=0,maxval=1),mult = input(1.),flatten = input(1.)
//----
x = n
y = close
m(a,b) =>
p = morph * a + (1-morph) * b
k = nz(m(k[length],y),y) + (x-x[length])/(x[length*2]-x[length]) * (nz(m(k[length*2],y),y) - nz(m(k[length],y),y))/flatten
k1 = sma(k,length)
er = cum(abs(y-k1))/n * mult
//----
a = k1 + er
b = k1 - er
//----
A = plot(a,color=#2196f3,linewidth=2,transp=0)
plot(k1,color=#e65100,linewidth=2,transp=0)
B = plot(b,color=#ff1100,linewidth=2,transp=0)
fill(A,B,#2196f3,transp=95)
*/
var y = Sistem.GrafikFiyatSec("Kapanis");
int i=Sistem.BarSayisi-1;
int length=14;
float morph=0.9f;
int mult=1;
int flatten=1;
var a=Sistem.Liste(0);
var b=Sistem.Liste(0);
var k=Sistem.Liste(0);
for (int j = 100; j < Sistem.BarSayisi; j++)
{
var m = morph*k[j-length] + (1-morph)*y[j] ;
if(m==0) m=y[j];
var m2 = morph*k[j-length*2] + (1-morph)*y[j] ;
if(m2==0) m2=y[j];
var m1= (-1)*(m2-m)/flatten ;
k[j] = m+m1 ;
}
var k1=Sistem.MA(k, "Simple", length);
var k2= Sistem.Liste(0);
for (int j = 100; j < Sistem.BarSayisi; j++)
k2[j] = Math.Abs(y[j] - k1[j] ) ;
var er = Sistem.Sum(k2)/i*mult ;
for (int j = 100; j < Sistem.BarSayisi; j++)
{
a[j] = k1[j] + er ;
b[j] = k1[j] - er ;
}
Sistem.Cizgiler[0].Deger = k1;
Sistem.Cizgiler[1].Deger = a;
Sistem.Cizgiler[2].Deger = b;
![]()
Biçare gönüller! Ne giden son gemidir bu!
Hicranlı hayatın ne de son matemidir bu.
Yer İmleri