Elit göstergeler :) - sayfa 183

 

DTosc mesajı...

Mladen,

Expers Klasöründe ......."Dizi Maksimum işlevi için yanlış başlangıç konumu 10148 " yazan bir mesaj alıyorum - gösterge yine de mükemmel davranıyor gibi görünüyor.

Herhangi bir açıklama lütfen?

Şimdiden teşekkürler.

 

ValeoFX

Hangi göstergeyle ilgili olduğunu bilmeden, genellikle böyle bir şeydir Limitin nerede belirlendiğini bulun ve şu şekilde değiştirin:

limit=MathMin(Bars-counted_bars,Bars-1);

Bu ifadedeki ikinci parametre (Bars-1), bu durumda limitin grafikteki çubuk sayısından büyük olmamasını sağlar.

Ancak, zaten fark ettiğiniz gibi, bu "iyi huylu" bir hatadır: yalnızca bir kez (gösterge yüklendiğinde veya zaman çerçevesi değiştiğinde) gerçekleşir ve diğer bazı hataların aksine, gösterge hesaplamasını durdurmaz, bu nedenle hepsi geri kalan hesaplama doğru yapılır ve değerler doğru hesaplanır

Saygılarımızla

mladen

ValeoFX:
Mladen,

Expers Klasöründe ......"Dizi Maksimum işlevi için yanlış başlangıç konumu 10148" yazan bir mesaj alıyorum - gösterge yine de mükemmel davranıyor gibi görünüyor.

Herhangi bir açıklama lütfen?

Şimdiden teşekkürler.
 

Teşekkürler...

mladen:
ValeoFX

Hangi göstergeyle ilgili olduğunu bilmeden, genellikle böyle bir şeydir Limitin nerede belirlendiğini bulun ve şu şekilde değiştirin:

limit=MathMin(Bars-counted_bars,Bars-1);

Bu ifadedeki ikinci parametre (Bars-1) bu durumda limitin grafikteki çubuk sayısından büyük olmamasını sağlar.

Ancak, zaten fark ettiğiniz gibi, bu "iyi huylu" bir hatadır: yalnızca bir kez (gösterge yüklendiğinde veya zaman çerçevesi değiştiğinde) gerçekleşir ve diğer bazı hataların aksine, gösterge hesaplamasını durdurmaz, bu nedenle hepsi geri kalan hesaplama doğru yapılır ve değerler doğru hesaplanır

Saygılarımızla

mladen

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

Üzgünüm Mladen, "Başlık" penceresinde (DTOsc) göstergenin adını aldım ve bir daha tekrarlamayı düşünmedim. Yine de açıklama için teşekkürler - hemen bakacağım.

124. satırda şunu buldum:

limit = MathMax(limit,MathMin(Barlar,iCustom(NULL,timeFrame,IndicatorFileName,"getBarsCount",0,0)*timeFrame/Period()));

Önerdiğinden farklı olduğu için, düzeltmek için ne yapmam gerektiğini detaylandırır mısın, lütfen?

Çok takdir edildi.

 

ValeoFX

Mesajın alt başlığına dikkat etmemişim kusura bakmayın

Her neyse, bu gönderiden birini kullanıyorsanız: https://www.mql5.com/en/forum/general o mesajı alıyorsunuz demektir.

Öte yandan, bu gönderiden birini kullanıyorsanız: https://www.mql5.com/en/forum/general (daha yenisi) o zaman o mesajı almayacaksınız.

İlk gönderidekini tam olarak ne zaman yaptığımı hatırlamıyorum ama o zamandan beri bazı kodlama stillerini değiştirdim (dolayısıyla bu hata mesajının olmaması) ve açıkçası, daha önce bu hata mesajını çok fazla umursamadım çünkü gerçekten değil herhangi bir şeyi değiştir. Bundan sonra, olası hatalar için boşluk bırakmamaya karar verdim, bu nedenle limiti belirlerken "güvenlik kontrolü"

______________________

Not: bu satır, çoklu zaman çerçevesi modunda çalışır. İhtiyaç duyulan mevcut zaman çerçevesindeki çubukların tam sayısını yeniden hesaplayabilmek için hedef zaman çerçevesinde kaç çubuğun değiştiğini 'sorur'. Böylece bu satır yalnızca mtf modundayken etkilidir.

 

mladen,

Kodlamada yeniyim. Ve zor. Ama EA yapmak için elimde sadece CodersGuru'nun kitabı varsa...... yeterli olmaz...

gönderi sayfama bakın 183

 

Tradefx1

Bulmaya çalıştığınız günlük trendden: onu yeniden tanımlamanız (yeniden yazmanız) gerekir. Şu anda şöyle yazılıyor:

int GetDailyTrend (int res){

double MA5_1 = double iMA(NULL,1440,5,0,1,0,1);

double MA5_0 = double iMA(NULL,1440,5,0,1,0,0);

double MA8_1 = double iMA(NULL,1440,8,0,1,0,1);

double MA8_0 = double iMA(NULL,1440,8,0,1,0,0);

if (MA5_1 MA8_0) res =1;//Cross up

if (MA5_1 > MA8_1 && MA5_0 < MA8_0) res =2;//Cross down

BarCount=Bars;

return (res);

}[/php]and you are calling it like this :

if (GetDailyTrend(1) && ...) Order = SIGBNAL_BUY;

if (GetDailyTrend(2) && ...) Order = SIGNAL_SELL;

[/php]The way it is used and called now expressions GetDailyTrend(1) and GetDailyTrend(2) are always true (in metatrader any value not equal to 0 is considered a true .

_________________________

Redefine the GetDailyTrend() to something like this:

[php]int GetDailyTrend ()

{

int res = 0;

double MA5_1 = double iMA(NULL,1440,5,0,1,0,1);

double MA5_0 = double iMA(NULL,1440,5,0,1,0,0);

double MA8_1 = double iMA(NULL,1440,8,0,1,0,1);

double MA8_0 = double iMA(NULL,1440,8,0,1,0,0);

if (MA5_1 MA8_0) res =1;//Cross up

if (MA5_1 > MA8_1 && MA5_0 < MA8_0) res =2;//Cross down

return (res);

}

And then use it this way :

[php]if (GetDailyTrend()==1 && ...) Order = SIGBNAL_BUY;

if (GetDailyTrend()==2 && ...) Order = SIGNAL_SELL;

___________

Kitap ve kodlama olarak: Kodlamayı öğrenmenin en iyi yolunun örneklerden ve çalışan programlardan geçtiğine her zaman inanmışımdır. İster inanın ister inanmayın, ancak Microsoft çalışanları öğrenmek için mükemmeldir (kodu düzgün bir şekilde yazarlar (bu, kodun nasıl yazılması gerektiğine dair kesin ekip kurallarına sahip oldukları anlamına gelir) çok temizdir ve bunu olabildiğince verimli hale getirmeye çalışırlar) .

Elit bölümde herkesin kullanabileceği çok sayıda örnek ve çalışan EA var (size bunu tavsiye edebilirim https://www.mql5.com/en/forum/180383 ) o başlıkta zaten belirttiğim nedenlerden dolayı ve sanırım diğer EA'lar için kolayca bir "çerçeve" olarak kullanılabilir. Ama aynı zamanda, öğrenmek ve çalışan EA'lar yapmak için kullanılabilecek çok sayıda başka yararlı EA'lar da vardır.

Ve her zaman bir şeyi hatırlayın: kodlama dilleri tam olarak budur: "diller". Bu, diğer konuşmalar gibi basit bir konuşma olduğu anlamına gelir. Bilgisayara ne "söylediğinize" dikkat edin, çünkü bilgisayar, insanlardan farklı olarak, ne söylediğinizi sorgulamaz, sadece onu yürütür (ve bazen bizim yapmasını istediğimiz şey bu olmaz) ) Ve sonra, bir süre sonra, PC ile "konuşmaya" alışırsınız ve sonra her şey çok daha kolay hale gelir.

 

Her ihtimale karşı ...

Birisi adxvma göstergesinin arkasındaki temel mantığın ne olduğunu merak ediyorsa, göstergenin kendisi kadar faydalı olabilecek bir orta adımı burada bulabilirsiniz. (bundan sonra ek adımlar vardır, bu nedenle 2 göstergeyi karşılaştırmayın, ancak bu adım özellikle ilginç görünüyor)

Birine tanıdık geliyorsa, cevap "evet". Görünüşe göre bu, güç eğilimi göstergesidir ("gerçek" güç eğilimi, bu şekilde yayınlanan ve yayınlananlar değil - bundan %100 emin değilim ("gerçek" olandan tüm gördüklerimin resimleridir). o), ama kesinlikle buna çok benziyor)
Dosyalar:
 
mladen:
ValeoFX

Mesajın alt başlığına dikkat etmemişim kusura bakmayın

Her neyse, bu gönderiden birini kullanıyorsanız: https://www.mql5.com/en/forum/general o mesajı alıyorsunuz demektir.

Öte yandan, bu gönderiden birini kullanıyorsanız: https://www.mql5.com/en/forum/general (daha yenisi) o zaman o mesajı almayacaksınız.

İlk gönderidekini tam olarak ne zaman yaptığımı hatırlamıyorum ama o zamandan beri bazı kodlama stillerini değiştirdim (dolayısıyla bu hata mesajının olmaması) ve açıkçası, daha önce bu hata mesajını çok fazla umursamadım çünkü gerçekten değil herhangi bir şeyi değiştir. Bundan sonra, olası hatalar için boşluk bırakmamaya karar verdim, bu nedenle limiti belirlerken "güvenlik kontrolü"

______________________

Not: bu satır, çoklu zaman çerçevesi modunda çalışır. İhtiyaç duyulan mevcut zaman çerçevesindeki çubukların tam sayısını yeniden hesaplayabilmek için hedef zaman çerçevesinde kaç çubuğun değiştiğini 'sorur'. Böylece bu satır yalnızca mtf modundayken etkilidir.

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

Açıklama için çok teşekkürler. Çok takdir edildi ve ayrıca kodlamayı daha iyi anlamama yardımcı oldu.

2.yi hemen indireceğim.

En iyi dileklerimle.

 

adxvma

mladen,

Senden Tradestation versiyonunu göndermeni istemek haddini aşmış olur muyum?

Işın

mladen:
Beyler göstergede mantıksız bir şey fark ettim (ilk adım adx bölümünün nasıl hesaplandığı) model olarak tradestation göstergesini kullandım ve düşünmeden miras aldığım bir hata var gibi görünüyor . Bunlarda o hata düzeltilir. Sonuçlar bile bu şekilde daha iyi.
Bu hesaplama, zamanın %99'unda çok daha hızlı kod ve sadece elit bölümde yayınlananlara özel ekstralar ile genel bölümden yapılan hesaplamaya çok daha yakındır (yani genel bölümden yapılan oldukça doğru bir göstergedir). Bu nedenle, göstergeleri önceki gönderilerden indirdiyseniz, lütfen bunun yerine bunları kullanın. Ayrıca "normal" sürüme bir seçenek daha eklendi: MultiColorMode - false olarak ayarlanırsa adxvma'yı görüntülemek için yalnızca bir renk kullanılacak (sinyal olarak çarpıları kontrol etmek için birkaç adxvma kullanmak isteniyorsa kullanışlıdır)

Saygılarımızla

Mladen
 

Işın,

İşte burada. gösterge :

inputs:

Price (close),

length (14);

vars:

av (0);

av = ADXVMA(Price, length);

Plot1(av, "Rising");

Plot2(av, "Falling");

Plot3(av, "Neutral");

Plot4(av, "ADXVMA", iff(av = av[1], GetPlotColor(3), iff(av > av[1], GetPlotColor(1), GetPlotColor(2))));

NoPlot(1);

NoPlot(2);

NoPlot(3); [/php]and the adxvma function

[php]inputs:

Price (NumericSeries),

Length (NumericSimple);

vars:

TR(0),

DI_Diff(0),

DI_Sum(0),

ma(0),

pdm(0),

mdm(0),

pdi(0),

mdi(0),

DI_Factor(0),

VI(0),

diff(0),

HHV(0),

LLV(0),

WeightDM(Length),

WeightDI(Length),

WeightDX(Length),

ChandeEMA(Length),

out(0),

j(0);

once ma=Price;

//

// in order to make it right the "pdm=0; mdm=0;" must be added (it does not

// exist in original and that is an error, tradestation inherits values fom

// a previous loop and they must be zeroed before these calculations)

//

pdm=0; mdm=0;

if(Price>Price[1]) then pdm=Price-Price[1] else mdm=Price[1]-Price;

pdm=((WeightDM-1)*pdm[1] + pdm)/WeightDM;

mdm=((WeightDM-1)*mdm[1] + mdm)/WeightDM;

TR=pdm+mdm;

if (TR>0) then begin pdi=pdm/TR; mdi=mdm/TR; end

else begin

pdi=0;

mdi=0;

end;

pdi=((WeightDI-1)*pdi[1] + pdi)/WeightDI;

mdi=((WeightDI-1)*mdi[1] + mdi)/WeightDI;

DI_Diff=pdi-mdi;

if (DI_Diff<0) then DI_Diff= -DI_Diff;

DI_Sum=pdi+mdi;

DI_Factor=0;

if (DI_Sum>0) then out=DI_Diff/DI_Sum else out=0;

out=((WeightDX-1)*out[1] + out)/WeightDX;

if (out>out[1]) then begin HHV=out; LLV=out[1]; end

else begin

HHV=out[1];

LLV=out;

end;

for j = 1 to Length-1 begin

if(out[j+1]>HHV)then HHV=out[j+1];

if(out[j+1]<LLV) then LLV=out[j+1];

end;

diff = HHV - LLV;

VI=0;

if (diff>0) then VI=(out-LLV)/diff;

ma=((ChandeEMA-VI)*ma[1]+VI*Price)/ChandeEMA;

ADXVMA = ma;

Orijinalde olmayan bir yorum ve bir kod düzeltmesi eklendi (bu, içinde yaptığım tek değişiklik). Değişken adlarından bazıları yanıltıcıdır: adımların hiçbirinde EMA hesaplaması yoktur. Bu, ara yumuşatma adımlarında kullanılan düzleştirilmiş hareketli ortalamadır, EMA değil. Ayrıca, temel hesaplama mantığı ADX'ten olsa bile, aslında bir ADX olmadığını, ancak bu "hibrit" gösterge durumunda adı hak edecek kadar yakın olduğunu fark edeceksiniz.

Saygılarımızla

Mladen

traderduke:
mladen,

Senden Tradestation versiyonunu göndermeni istemek haddini aşmış olur muyum?

Işın
Neden: