![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
kullanımdan kaldırıldı
Standart kitaplık , granülasyonu hesaba katan bir fiyat normalleştirme işlevine sahiptir.
Standart kitaplık , granülasyonu hesaba katan bir fiyat normalleştirme işlevine sahiptir.
NormalizeDouble(new_lot-sum_lots, Lots_Digits); olduğunu tahmin etmeye başladım bile. tam olarak 0 vermez ama bir tür kuyruk tutar
Yeni_lot ve toplam_lot değişkenleri eşitse, fark tam olarak 0 olacaktır. Ancak bunları nasıl hesapladığınız bilinmiyor, aslında hesaplamalarda eşit olmadıkları ortaya çıkabilir, dolayısıyla sıfır olmayan fark. Aynısını şu şekilde yapın:
NormalizeDouble (new_lot, Lots_Digits) - NormalizeDouble(sum_lots, Lots_Digits).
Değişkenler belirtilen basamak sayısı içinde eşitse, fark kesinlikle 0 olacaktır.
Yeni_lot ve toplam_lot değişkenleri eşitse, fark tam olarak 0 olacaktır. Ancak bunları nasıl hesapladığınız bilinmiyor, aslında hesaplamalarda eşit olmadıkları ortaya çıkabilir, dolayısıyla sıfır olmayan fark. Aynısını şu şekilde yapın:
NormalizeDouble(new_lot, Lots_Digits) - NormalizeDouble(sum_lots, Lots_Digits).
Değişkenler belirtilen basamak sayısı içinde eşitse, fark kesinlikle 0 olacaktır.
Ve yine yuvarlama hakkında ......
duruma göre söyleyin lütfen (domates atmayın ben hümanistim),
bu değişken var:
double delta=NormalizeDouble(new_lot-sum_lots,Lots_Digits);
if(delta>0) delta-=OrderLots();
if(delta<0) delta+=OrderLots();
teorik olarak delta başlangıçta normalleştirilir,
OrderLots muhtemelen normalleştirilmiş çiftleri döndürmelidir,
ama bir şekilde bazen nadir durumlarda 2.775557561562891e-17 gibi sayılar alıyorum
yani neredeyse sıfır ama sıfır değil ......
İlk soru, bu normal mi?
...
Daha dikkatli tekrar okudum. Nifiga normal değil. NormalizeDouble işlevi nasıl çalışır:
- Bütün kısım göze çarpıyor - ben
- Kesirli kısım vurgulanır - F
- F = F * 10^basamak
- F = F (+ veya - işarete bağlı olarak) 0,5
- F = (F'nin tamsayı kısmı) / 10^basamak
- sonuç = I + F
o zaman NormalizeDouble(new_lot - sum_lots, Lots_Digits) sonucu, yeni_lot ve toplam_lotlar belirtilen basamak sayısı içinde eşitse kesinlikle sıfır olmalıdır. Nadir durumlarda, son basamakta 1'lik bir fark olabilir (nedeni 4. ve 5. noktalardadır), ancak sonuç 2.775557561562891e-17 - bu garip, bu olmamalı.Yüzen bir sayının içini tersine çeviren küçük bir öğretici kod yazdım (kendimle uğraşmak eğlenceliydi). İlgilenen varsa çalıştırabilir (C++ kodu, bazı çevrimiçi derleyicileri kullanabilirsiniz. Burada https://goo.gl/tP691X , örneğin)
f == 0,5 + 1/(2^24) konumunda egzoz. 1/(2^24) - belirli bir derecede mantisin en az anlamlı basamağı:
Derece = 126 - 127 = -1
Mantis = 1.0000000000000000000000001
Mantileri bir kuvvetle kaydırın -1 = 0.100000000000000000000001 = 1^(-1) + 1^(-24) = 1/(2^1) + 1/(2^24) = 0.5 + 0.00000005960464478 = 0.50000005960464478
Teori olarak https://habrahabr.ru/post/112953/ .
Not: bu çevrimiçi derleyici daha iyi olacaktır http://rextester.com/l/cpp_online_compiler_gcc
Yüzen bir sayının içini tersine çeviren küçük bir öğretici kod yazdım (kendimle uğraşmak eğlenceliydi). İlgilenen varsa çalıştırabilirsiniz (C++ kodu, bazı çevrimiçi derleyicileri kullanabilirsiniz. Burada https://www.tutorialspoint.com/compile_cpp11_online.php , örneğin)
Ayrıca MQL5'te çalıştırabilirsiniz - bu kitaplığı ekleyerek c[Pos]'u _R(f)[(char)Pos] (veya _R(f.Bytes[Pos]) ile değiştirin.
not
Sonuç
Mantis'e ne oldu?
32, sorunun ascii kodudur. Hatalı kitaplığın char için bir sürümü yok gibi görünüyor. Mantislerin değerleri arasındaki boşlukları kaldırmamız gerektiğini düşünüyorum. Ya da belki " " yazmak yerine ?
Mantis'e ne oldu?
32, sorunun ascii kodudur. Hatalı bir kütüphaneye benziyor. Mantislerin değerleri arasındaki boşlukları kaldırmamız gerektiğini düşünüyorum. Ya da belki " " yazmak yerine ?
fmtprntl.mqh benim değil, bu yüzden kesin bir şey söyleyemem.
Rahatsız etmek istemiyorum, bu yüzden f'niz için bayt değerlerini yazdırdım
İlişkili yan etki.
Uygun olduğu ortaya çıktı. Ancak bu kullanım başlangıçta amaçlanmamıştır.
Gerçek bir sayıyı gerekli doğrulukta yazdırmak için özel işlevler vardır.
Söyle bana, hesaplama sürecinde neden gerçek sayıları yuvarlamanız gerekiyor? Gerçekten de, bu durumda, hesaplamaların doğruluğu kaybolur!
fiyatların, durakların, lotların doğru karşılaştırmasından bahsediyoruz
biraz kesinlik olması gerekiyor