Eğilim çizgisinin eğim açısının hesaplanması. - sayfa 15

 
Daniil Kurmyshev :

Ah, peki, o zaman açık) Sonra kodu iade ediyorum, belki Renat Akhtyamov'dan başka biri için faydalı olacaktır, bu arada, bunun için forumlarda oturmuyorum)))

//------------------------------------------------ ------------------------------------

// xAçı ////////////////////////////////////////// /////////////////////////

//------------------------------------------------ ------------------------------------

double xAngle(double x1,double y1,double x2,double y2) // x1,x2 Zaman[] - y1,y2 Fiyat

{

if(x1==0 || x2==0 || y1==y2){return(0);}

if(y1==y2) {dönüş(0);}

//---

double PriceMAX=ChartGetDouble(0,CHART_PRICE_MAX,0);

double PriceMIN=ChartGetDouble(0,CHART_PRICE_MIN,0);

double Bar1proc=(double)(ChartGetInteger(0,CHART_WIDTH_IN_BARS,0)*_Period*60)/100;

double Fiyat1proc=((FiyatMAX-FiyatMIN)/_Puan)/100;

x1=iBarShift(NULL,0,(tarihsaat)x1);

x2=iBarShift(NULL,0,(tarihsaat)x2);

double x1x2=MathAbs(x1-x2)*_Period*60;

double y1y2=MathAbs(y1-y2)/_Point;

çift x1x2_proc=x1x2/Bar1proc;

çift y1y2_proc=y1y2/Fiyat1proc;

//---

double teta=MathArctan(y1y2_proc/x1x2_proc)*(180/3.1415926535);

if(y2<y1){theta=NormalizeDouble(theta*(-1),2);}

dönüş(teta);

}

//+------------------------------------------- --------------------+

Saf haliyle, açıyı hesaplamak için, otomatik modda, grafiğin ölçeğine göre ayarlama işlevi, kendim kullanıyorum, kusursuz çalışıyor) Trend stratejisine gelince, gücü ve yaklaşık süresini tahmin edebilirsiniz. açıya göre eğilim.

Burada:

double Bar1proc=(double)(ChartGetInteger(0,CHART_WIDTH_IN_BARS,0)*_Period*60)/100;

double Fiyat1proc=((FiyatMAX-FiyatMIN)/_Puan)/100;

100'e bölme gereksizdir. Son formülde, teta hesaplanırken onlar (100) pay ve paydaya yerleştirilir. Ve küçülüyorlar.


Burada:

double Fiyat1proc=((FiyatMAX-FiyatMIN)/_Puan)/100;

double y1y2=MathAbs(y1-y2)/_Point;

_Point ile bölme gereksizdir. 100'e bölmekle aynı şey.

Son formülde double y1y2_proc=y1y2/Fiyat1proc;

Pay ve paydadaki _Noktası iptal edilir.

Bu basitleştirmeler ilk olarak hesaplamaları (işlemci yükünü) azaltır ve ikinci olarak muhtemelen nihai sonucun doğruluğunu artırır.


===============================

Veya grafik aracının bağlantı noktalarındaki piksel değerlerini belirlemek için ChartTimePriceToXY işlevini kullanmayı deneyin.

Yatay ve dikey piksel sayısı sayesinde trigonometrik fonksiyonların hesaplanması daha kolaydır. Çubukların ve noktaların dönüştürülmesi olmadan.

Çok daha kolay olmalı.


//------------------------------------------------ ------------------------------------

// xAçı ////////////////////////////////////////// /////////////////////////

//------------------------------------------------ ------------------------------------

double xAngle(datetime x1,double y1,datetime x2,double y2) // x1,x2 Time[] - y1,y2 Fiyat

{

if(x1==0 || x2==0 || y1==y2){return(0);}

int _x1, _y1, _x2, _y2;

ChartTimePriceToXY(0,0,x1,y1, _x1, _y1);

ChartTimePriceToXY(0,0,x2,y2, _x2, _y2);

double teta=MathArctan((double)MathAbs(_y1-_y2)/(double)MathAbs(_x1-_x2))*(180/3.1415926535);

if(y2<y1){theta=NormalizeDouble(theta*(-1),2);}

dönüş(teta);

}

Burada if(y2<y1){theta=NormalizeDouble(theta*(-1),2);} sonuca göre işareti ayarlayın
 
Eugeni Neumoin :

Burada:

.........

Çok daha kolay olmalı.

Evet, tüm bunlar tamamen yararsızdır, çünkü farklı tablolarda farklı olabilen kullanıcı tarafından ayarlanan ölçeğe bağlıdır.

Tek doğru çözüm, birim zaman başına fiyattaki eğilimi ölçmektir.

"Saatte 0.0001 Eurodolar" trendi, herhangi bir ölçek ve hatta platformlar ne olursa olsun, herhangi bir kişi için tamamen aynı şeyi çekecektir.

 
George Merts :

Evet, tüm bunlar tamamen yararsızdır, çünkü farklı tablolarda farklı olabilen kullanıcı tarafından ayarlanan ölçeğe bağlıdır.

Tek doğru çözüm, birim zaman başına fiyattaki eğilimi ölçmektir.

"Saatte 0.0001 Eurodolar" trendi, herhangi bir ölçek ve hatta platformlar ne olursa olsun, herhangi bir kişi için tamamen aynı şeyi çekecektir.

Konunun konusuna dikkat etmemişim. Eğim etiketine paralel eğik etiketler yapmak için açıyı hesaplamak ilginçti. Yukarıda açıyı hesaplamak için basitleştirilmiş bir fonksiyon yazdım. Ölçekten tamamen bağımsızdır. Grafiğin ölçeğini ve diğer özelliklerini değiştirirken yazının bozulmaması için CHARTEVENT_CHART_CHANGE kullanabilirsiniz.

=========

Resimdeki gibi çizgilerin yanında yazıları göstermek istedim. Yukarıdaki fonksiyon ile şöyle ortaya çıktı:


 
Eugeni Neumoin :

Resimdeki gibi çizgilerin yanında yazıları göstermek istedim. Yukarıdaki fonksiyon ile şöyle ortaya çıktı:

Güzel!
 
Eugeni Neumoin :

Size katılıyorum, sizinle aynı fikirdeyim, hesaplamaları azaltmak için ayarlamalar ve hesaplamalarda gereksiz hareketler, bunu kendim sevmiyorum, ancak bu işlevi ilk oluşturduğumda, birkaç farklı yolu kontrol ettim ve sonra tekrar yapmadım. artık) ve pikseller konusunda size tamamen katılıyorum, kişisel olarak benim için en ideal açı hesabı bu şekilde, işte işlevim:

//------------------------------------------------ ------------------------------------

// xAnglePixels ///////////////////////////////////////// / ////////////////////

//------------------------------------------------ ------------------------------------

double xAnglePixels(datetime x1,double y1,datetime x2,double y2) // x1,x2 Time[] - y1,y2 Fiyat

{

if(x1==0 || x2==0 || y1==y2){return(0);}

//---

int x[2],y[2];

ChartTimePriceToXY(0,0,x1,y1,x[0],y[0]);

ChartTimePriceToXY(0,0,x2,y2,x[1],y[1]);

//---

if(x[1]<x[0]){dönüş(-1000);}

//---

double x1x2=MathAbs(x[0]-x[1]);

double y1y2=MathAbs(y[0]-y[1]);

//---

çift teta;

if(x1x2!=0){theta=MathArctan(y1y2/x1x2)*(180/3.1415926535);}

başka{teta=90;}

if(y2<y1){theta=NormalizeDouble(theta*(-1),2);}else{theta=NormalizeDouble(theta,2);}

dönüş(teta);

}

//------------------------------------------------ ---------------------------------

ps if(x[1]<x[0]){return(-1000);} işlevinde kendim kullandığım için kaldırılabilir) ve daha doğrusu, kullanıcının iki noktayı değiştirmiş olması gerekir. nesne .

//-----------------

Bu arada, grafikteki yazılar için tam olarak kullandığım şey bu, daha önce bu göstergenin çalışmasına ilişkin örnekler gönderdim, orada görebilirsiniz.

//-----------------

Size özel teşekkürler ve saygılar)

 
Eugeni Neumoin :

Eğim etiketine paralel eğik etiketler yapmak için açıyı hesaplamak ilginçti. Yukarıda açıyı hesaplamak için basitleştirilmiş bir fonksiyon yazdım. Ölçekten tamamen bağımsızdır.

Evet, bu tamamen farklı bir konu. Buradaki görev trendi belirlemek değil, monitörde görüntülenen düz çizginin eğimini belirlemektir. Ve bu durumda, yol doğrudur. Resimde - her şey güzel.
 
George Merts :
Evet, bu tamamen farklı bir konu. Buradaki görev trendi belirlemek değil, monitörde görüntülenen düz çizginin eğimini belirlemektir. Ve bu durumda, yol doğrudur. Resimde - her şey güzel.
Sözlerinize dayanarak, fikre göre, trend çizgileri oluşturabiliriz, trendin yönünü gösterecekler ve bir tef ile dans etmeden oluşturulan çizgiye göre doğru açı belirtilecektir. Resimde bir örnek ekledim robotum tüm kurallara göre inşa ediyor ama özü görülüyor.
Dosyalar:
 
Daniil Kurmyshev :
Sözlerinize dayanarak, fikre göre, trend çizgileri oluşturabiliriz, trendin yönünü gösterecekler ve bir tef ile dans etmeden oluşturulan çizgiye göre doğru açı belirtilecektir. Resimde bir örnek ekledim robotum tüm kurallara göre inşa ediyor ama özü görülüyor.
Resim, hesaplamalarınızın görselleştirilmiş halidir. Görselleştirme oranlarını bozabilirsiniz (grafik ölçeğini değiştirin) ve resim önemli ölçüde değişecektir - çizgiler açıları derece olarak değiştirecektir. Ve ölçeği değiştirerek yaptığınız hesaplamaların sonuçları değişmeyecektir. Tabii ki, trend çizgilerini piksel cinsinden hesaplamadıysanız
 
Alexander Puzanov :
Resim, hesaplamalarınızın görselleştirilmiş halidir. Görselleştirme oranlarını bozabilirsiniz (grafik ölçeğini değiştirin) ve resim önemli ölçüde değişecektir - çizgiler açıları derece olarak değiştirecektir. Ve ölçeği değiştirerek yaptığınız hesaplamaların sonuçları değişmeyecektir. Tabii ki, trend çizgilerini piksel cinsinden hesaplamadıysanız
Size katılıyorum, ancak her TF'de trendlerin farklı olduğunu, küçük bir TF'de büyük görünenler, daha büyük bir TF'de küçüldüğünü ve eğimlerin değişeceğini, ancak değişen sadece trendin temsili olduğunu anlıyorsunuz. , açı ölçüm sistemi değil, boyut sistemi değişecekse, bundan iyi bir şey çıkmayacak.
 
Daniil Kurmyshev :
Size katılıyorum, ancak her TF'de trendlerin farklı olduğunu, küçük bir TF'de büyük görünenler, daha büyük bir TF'de küçüldüğünü ve eğimlerin değişeceğini, ancak değişen sadece trendin temsili olduğunu anlıyorsunuz. , açı ölçüm sistemi değil, boyut sistemi değişecekse, bundan iyi bir şey çıkmayacak.
Zaman dilimlerini değiştirmenin bununla hiçbir ilgisi yoktur - zaman dilimlerini değiştirdiğinizde hesaplamalarınız değişir. Ve ölçeği değiştirdiğinizde (+/- düğmelerini veya terminal panelindeki düğmeyi kullanarak, bazen sadece grafiği kaydırarak), hesaplamalarda hiçbir şey değişmez ve ° float xs nerede