[UYARI, KONU KAPALI!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde. - sayfa 670

 
artmedia70 :

Mevcut tüm EA hesaplamaları tamamlanmadan yeni bir onay işaretinin gelme olasılığı nedir? Bana öyle geliyor ki, sadece bu durumda veriler eski ve alakasız hale gelecek.

kodunuzun ne kadar önemli olduğunu kontrol edin - Ben de son zamanlarda MT4 hesaplama hızının danışmanım için yeterli olup olmayacağından şüphelendim, şimdiye kadar kafamın yeterli olduğu ortaya çıktı, kodum yaklaşık 18 ms için hesaplandı, yani. 1 saniyede 55 kez listelenirsiniz, keneler dakikada 10'dan 70'e gelir ve dakikada 50'den fazla kene varsa, o zaman bir mum vardır.

bu yüzden kodunuzun nasıl çalıştığını görmeye çalışın, bunun gibi bir şey

 int tik,barM1


int init(){
   barM1  = Bars ;
   tik = 0;

return ( 0 );
}


//_______________________________________________________
//  это добавить в start()
//_______________________________________________________
int start= GetTickCount ();
 

 // некие серьёзные вычисления...


tik++;
Print ( "Время вычисления " , GetTickCount ()-start, " миллисекунд." );

int counted  = Bars ;
if (counted != barM1) {
print( "за один бар было принято " ,tik, "тиков" )
tik= 0 ;
barM1=counted;
}

işte keneleri sayan bir gösterge - doğrulama için

Eh, açılış fiyatınız varsa, kusura bakmayın gözden kaçırmışım, o zaman

OpnPrice =iOpen(NULL,PERIOD_M5,0); sadece kapalı bir çubukta değiştirilebilir - yukarıdaki kod if (sayılır != barM1) {

Dosyalar:
 

EA gövdesinde hesaplama yaparken iMACD göstergesinin (NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0) ondalık noktasından sonraki basamak sayısı nasıl değiştirilir? Sonuç 4 (yani 0.0001) ile çıkar, ancak analizin doğruluğu için 5 ile (örneğin 0.00012) gereklidir. Ve sonuçta, MT4 terminali, gösterge penceresindeki grafikte tam olarak 5 basamaklı değerler görüntüler.

 
NormalizeDouble() operatörü sorunlarınızı çözecektir.
 
Roger :
NormalizeDouble() operatörü sorunlarınızı çözecektir.


Yani, NormalizeDouble (iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0),5) sonucunun istenen 0.00012 ?

PS Eklendi ve test edildi - hiçbir şey. Sadece çıktı 0.00010'dur ve bunlar aynı 4 basamaktır ...

 

Hayır, pek doğru değil, Roger .

GöstergeDigits() bkz. Boris . Ancak göstergenin kendisine eklenmelidir, çünkü. danışmana değil, özellikle ona atıfta bulunacaktır.

Not Daha Fazlası: Bu işlev yalnızca kodunuz olan gösterge için uygundur. Daha sonra iCustom() ile çağrılabilir.

Ve iMACD() gibi "standart" olarak adlandırılanlar için doğru çözümü bilmiyorum.

 
pathfinder1 :

Diğer bir deyişle, NormalizeDouble(iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0),5) sonucu istenen 0,00000 olacak mı?

Evet doğru. Danışmanın gövdesindeki hesaplamada anahtar bir ifade var mıydı? Ve görünüşe göre standart bir göstergeyle bu imkansız (((
 
pathfinder1 :

EA gövdesinde hesaplama yaparken iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0) göstergesinin ondalık noktasından sonraki basamak sayısı nasıl değiştirilir? Sonuç 4 (yani 0.0001) ile çıkar, ancak analizin doğruluğu için 5 ile (örneğin 0.00012) gereklidir. Ve sonuçta, MT4 terminali, gösterge penceresindeki grafikte tam olarak 5 basamaklı değerler görüntüler.

Hiçbir şeyi değiştirmenize gerek yoktur, standart göstergelerde doğruluk maksimuma ayarlanır (8 haneye kadar), Print() işlevinin görüntülenmesi nedeniyle veri çıkışının doğruluğu hakkında yanlış sonuca varırsınız. varsayılan olarak 4 haneye kadar, hesaplamalarda (örneğin, Uzman Danışmanların içinde) maksimum hassasiyet kullanılır, bunu görmek için DoubleToStr() aracılığıyla örnek olarak iki kat çıktı almanız gerekir:

 Print ( "iMACD " , DoubleToStr( iMACD ( NULL , 0 , 12 , 26 , 9 , PRICE_CLOSE ,MODE_MAIN, 0 ), 8 ));

ve şu çıktıyı alıyoruz:

 
ToLik_SRGV :

Hiçbir şeyi değiştirmenize gerek yoktur, standart göstergelerde doğruluk maksimuma ayarlanır (8 haneye kadar), Print() işlevinin görüntülenmesi nedeniyle veri çıkışının doğruluğu hakkında yanlış sonuca varırsınız. varsayılan olarak 4 haneye kadar, hesaplamalarda (örneğin, Uzman Danışmanların içinde) maksimum hassasiyet kullanılır, bunu görmek için DoubleToStr() aracılığıyla örnek olarak iki kat çıktı almanız gerekir:

ve şu çıktıyı alıyoruz:


Doğru, doğru, doğru! ! ! Anatoly büyük bir saygı, yoksa zaten takıntılıydım.

Hayatın gerçeği şudur - "bir kafa iyidir, ama iki kafa daha iyidir" (cit.)

 
ToLik_SRGV :

Hiçbir şeyi değiştirmeye gerek yoktur, standart göstergelerde doğruluk maksimuma ayarlanır (8 haneye kadar)


Aynen bende de aynı şüphe vardı :)
 
Sık sık olduğu gibi - gerçek yüzeyde)) Hatamı kabul ediyorum.