Hatalar, hatalar, sorular - sayfa 1782
![MQL5 - MetaTrader 5 müşteri terminalinde yerleşik ticaret stratejileri dili](https://c.mql5.com/i/registerlandings/logo-2.png)
Ticaret fırsatlarını kaçırıyorsunuz:
- Ücretsiz ticaret 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
Ve hangileri çalışıyor?
Önemli rakamların kaybolması ve rastgele işlerle doldurulması kuralı
Sonuç uzun, ancak ara hesaplamalarda iki katına çıkıyor ve içlerinde önemli rakamlar kayboluyor.
(Rakamlar+1)*3-1=17
Önemli rakamları kaybetme ve bunları rastgele işlerle doldurma kuralı
Sonuç uzun, ancak ara hesaplamalarda iki katına çıkıyor ve içlerinde önemli rakamlar kayboluyor.
(Rakamlar+1)*3-1=17
Bilgi için teşekkürler.
Ancak, bilgilerin sığdırılması zordur - yani. Bir sayı böyle olabilir, ancak onunla hesaplama yapamaz mısınız?
İşte bir dizeden bir sayıya dönüşümün olduğu bir kod örneği
Print ( "CalcY=" ,CalcY);
111111111111111104 numarasını yazdırır
Onlar. burada bir hesaplama yok, yoksa yanılıyor muyum?
Bu tür sayılarla işlem yapmak mümkün mü yoksa dil sınırlaması mı var?
Onlar. burada bir hesaplama yok, yoksa yanılıyor muyum?
Hesaplamalar - herhangi bir işlem ( bu durumda dönüşüm) . Belirtilen sayı için StringToDouble , hassasiyet kaybıyla bir çift döndürür
StringToInteger uzun dönecek, ancak kesinlik kaybı olmadan sonraki hesaplamalar double ile çalışan işlevleri kullanamaz, örneğin: NormalizeDouble, MathPow
Hesaplamalar - herhangi bir işlem ( bu durumda dönüşüm) . StringToDouble çift döndürür - hassasiyet kaybı oluşur
StringToInteger uzun dönecektir, ancak kesinlik kaybı olmadan sonraki hesaplamalar double ile çalışan işlevleri kullanamaz, örneğin: NormalizeDouble, MathPow,
StringToInteger ile bir sayıyı ifade etmek mümkündü, ancak o zaman zaten çöp, matematiksel işlemler için sayıyı bir şekilde bileşenlere ayırmanız gerekiyor ...
Print ( "CalcZ=" ,CalcZ);
double Test=CalcZ;
Print ( "Test=" ,Test);
Test=1.111111111111111e+17
Yine yardımda yazıyor
INT_MAX
Bir int ile temsil edilebilecek maksimum değer
2147483647
Öyleyse , sayı izin verilenden daha büyükse, dönüştürme StringToInteger aracılığıyla nasıl oldu ve uzun süre kaldı?
Öyleyse , sayı izin verilenden daha büyükse, dönüştürme StringToInteger aracılığıyla nasıl oldu ve uzun süre kaldı?
StringToInteger başlangıçta LONG_MIN LONG_MAX içinde bir uzun döndürür (StringToKolobok olarak da adlandırılabilir)
StringToInteger başlangıçta bir uzun döndürür (StringToKolobok olarak da adlandırılabilir)
Bu, elbette, görünüşe göre öyle, ama yardımda çok zordu
"
Bir sayının karakter gösterimini içeren bir dizgiyi int (tamsayı) sayıya dönüştürme.
"
bu yanıltıcıydı.
Bilgi için teşekkürler.
Yukarıdaki sayının grafik arabelleğine sığmayacağını anlıyorum?
Yukarıdaki sayının grafik arabelleğine sığmayacağını anlıyorum?
Bu formda yazılırlar B'111111111111111111111111111111111'
Zaman çerçevesini M5'ten M15'e değiştirirken, ilk göstergeye (ve sadece ona - bu durumda M5) hiçbir M5 Deinit komutunun gönderilmediğini ve şu ana kadar grafikten boşaltılmayacağını iddia ediyorum (ve bunu kontrol etmeyi öneriyorum). kullanıcı uzmanı siler
Lütfen MT5'te göstergenin hesaplama çekirdeğinin, kendi yöneticisinde bir kullanım sayacı ile paylaşılan bir kaynak olduğunu unutmayın. Farklı programlarda veya pencerelerde aynı parametrelere sahip bir gösterge kullanılıyorsa, aslında kullanım sayacı ile hesaplanmış bir kopya çalışır. Bu, bir tüccar grafiklerde ve Expert Advisor'da aynı göstergeleri kullandığında çok tasarruf etmenizi sağlar.
Gösterge yöneticisi, göstergeleri eşzamansız ve gecikmeli olarak fiziksel olarak kaldıracak şekilde tasarlanmıştır. Bu arada, genellikle eski kopya fiziksel olarak silinmeden önce başlatılan yeni parametrelerle yeni bir çalışma kopyası oluşturulur.
Gösterge yöneticisi, göstergeleri eşzamansız ve gecikmeli olarak fiziksel olarak kaldıracak şekilde tasarlanmıştır. Bu arada, genellikle eski kopya fiziksel olarak silinmeden önce başlatılan yeni parametrelerle yeni bir çalışma kopyası oluşturulur.
Göstergeyi basitleştirelim
void Prn( string f, int i = - 1 ) { Print ( f, "->" , StringSubstr ( EnumToString ( Period ()), 7 ), (i == - 1 ? "" : ":" + i )); }
void OnInit () { Prn( __FUNCTION__ ); }
void OnDeinit ( const int reason ) { Prn( __FUNCTION__ , reason ); }
int OnCalculate ( const int , const int , const int , const double & [] ) { return 0 ; }
Test.mq5 Expert Advisor'ı M5 grafiğine ekleyelim ve ardından M5->M15 grafik periyodunu değiştirelim.
Sonuç:
2017.02.06 00:54:20.897 OnInit->M5
2017.02.06 00:54:25.553 OnInit->M15
Soru: OnDeinit->M5 ne zaman çağrılacak?
Cevabım: Asla!
Yukarıdaki cevabınız: eşzamansız ve gecikmeli