MQL4 belgelerinin tartışılması - sayfa 17

 
Yurixx :

Rosh , sessizliğinizi doğru anladıysam, hangi durumlarda ve hangi ifadeler / değişkenler için normalleştirmeye ihtiyaç duyulduğu net bir formülasyon yoktur. Eğer öyleyse, daha basit bir soruyu cevaplamak mümkün olabilir: formun hesaplanan değerlerini normalleştirmek gerekli mi?

int StLS=25;
double prc = Sor + StLs*Puan;

Yoksa bir deneyde kendi başıma mı çözmeliyim?

Soruma cevap beklediğini düşünmemiştim. Cevabım şu: Bu gibi durumlarda normalleşme yapmıyorum ve siparişler normal açılıyor. Ancak manuel olarak yapılmış bir geçmişi yüklediğimde ve üzerinde bir test cihazı çalıştırmaya çalıştığımda bir durum vardı - o zaman benim için bir sürpriz oldu. Hemen hemen her durumda, sadece bir yangın durumunda, normalleştirmeyi kullanmak daha iyidir - ister OrderSend () fiyat parametrelerine eklenen kendi üretiminizin göstergesinin değerleri olsun [örneğin, her türlü Pivot] veya Uzman Danışman içindeki karmaşık hesaplamalar (karmaşık olanlar değil) - her durumda, tereyağı lapası onu bozmaz.

Ve gerçekten de OrderSend()'de fiyat normalizasyonunu uygulamak kesinlikle gereksiz olduğunda net bir açıklama yapamam. Prensip olarak, altı ayda bir gece bunun için yeterliliği dolduracaktır, ancak dolduramazsınız, ancak her zaman aptalca normalleştirin.
 
Ek olarak, bugün yardımı kontrol ederken, Veri dönüşümleri bölümünde buldum :

Verileri bir biçimden başka bir biçimdeki verilere dönüştüren bir işlevler grubu.

Fiyat gösteriminin gerekli doğruluğunu sağlayan NormalizeDouble() işlevi özellikle dikkate değerdir. Alım satım işlemlerinde, doğruluğu alım satım sunucusunun gerektirdiği değeri en az bir ondalık basamak aşan normalleştirilmemiş fiyatları kullanamazsınız.
 
Ve ayrıca NormalizeDouble

çift NormalizeÇift( çift değer, int basamak)
Kayan nokta sayısını belirtilen duyarlılığa yuvarlar.
StopLoss, TakeProfit'in hesaplanan değerleri ve bekleyen emirlerin açılış fiyatları, değeri önceden tanımlanmış değişken Basamaklarda saklanan bir doğrulukla normalleştirilmelidir.
Seçenekler:
değer - Kayan nokta değeri.
rakamlar - Kesinlik biçimi, ondalık noktadan sonraki basamak sayısı (0-8).
Misal:
 çift var1 = 0.123456789;
Print(DoubleToStr(NormalizeDouble(var1,5),5));
// çıktı: 0.12346
 
"Misal:
 çift var1 = 0.123456789;
Print(DoubleToStr(NormalizeDouble(var1,5),5));
// çıkış: 0.12346"

Bunlar belgelerde görmek istediğim örnekler. Her şey basit ve net. Bir Uzman Danışmana veya bir göstergeye yerleştirdim ve hemen sonucu gördüm.
 
Bu doğru?
 

Rosh , lütfen aynı forumun 16. sayfasına bakın, burada daha önce bu işlev hakkında yazdım ve ona yardımın iyileştirilmesi için önerilerde bulundum.

 
Şu anda bu şekilde düzeltildi (yeni yapıda olacak):

çift NormalizeÇift( çift değer, int basamak)
Kayan nokta sayısını belirtilen duyarlılığa yuvarlar.
StopLoss, TakeProfit'in hesaplanan değerleri ve bekleyen emirlerin açılış fiyatları, değeri önceden tanımlanmış değişken Basamaklarda saklanan bir doğrulukla normalleştirilmelidir.

Seçenekler:
değer - Kayan nokta değeri.
rakamlar - Kesinlik biçimi, ondalık noktadan sonraki basamak sayısı (0-8).
Misal:
 çift var1 = 0.123456789;
Print(DoubleToStr(NormalizeDouble(var1,5),8));
// çıktı: 0.12346000



Bu örnek, NormalizeDouble() ile 5 karakter arasında kırpmayı gösterir ve Print() onu basitçe oluşturur (bu Rus olmayan stil için üzgünüm).
 

Evet, karakter sayısı değişmeye başlar başlamaz örnek çok daha bilgilendirici hale geldi.

 
bool SendFTP( string dosya adı, string ftp_path=NULL)
Dosyayı "Yayınla" sekmesindeki ayarlar penceresinde belirtilen adrese gönderir. Başarısızlık durumunda YANLIŞ döndürür.
İşlev, test modunda çalışmaz. Bu işlev, özel göstergelerden de çağrılamaz.
Gönderilecek dosya, terminal_directory\experts\files klasöründe veya alt klasörlerinde bulunmalıdır.
Ayarlarda FTP adresi ve/veya erişim şifresi belirtilmemişse gönderme gerçekleşmez.
[...]
geçersiz SendMail( string konu, string bazı_metin)
"Posta" sekmesindeki ayarlar penceresinde belirtilen adrese bir e-posta gönderir.
Ayarlarda gönderme yasaklanmış olabilir ve e-posta adresi de belirtilmemiş olabilir. Bir hata hakkında bilgi almak için GetLastError() işlevini çağırmanız gerekir.
[...]

Gözlem görevi: 2 fark bulun.
 
Anlaşılan doğru cevabı arkandan atmak için vazgeçmek mi gerekiyor? :)