Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
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ınBurada:
.........
Ç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.
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ı:
Resimdeki gibi çizgilerin yanında yazıları göstermek istedim. Yukarıdaki fonksiyon ile şöyle ortaya çıktı:
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)
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.
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
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.