[ARŞİV] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 3. - sayfa 82

 
wolf05632 :

Teşekkürler, ama benim için çalışmıyor. Bir ofset ihtiyacım yok. yukarıda yazdım. Diyelim ki birinci mum için tampon[1]=Yükseklik[1], üçüncü mum için tampon[3]=Yükseklik[3] ve ikincisi için şunu hesaplamak gerekiyor: tampon[2]=MathAbs(Yükseklik[ 1]-Hight[3])/ 2 ve resimde istediğimi elde ettim.
Sürümümü neden beğenmedin? :)) Çok daha kolay ve daha az hesaplama. Yoksa her çubukta arabellekte kalması için değerlere mi ihtiyacınız var?
 

wolf05632 :

Not: hindi nasıl çalışır, yani. sadece belirli bir zaman diliminde (h1) hesaplamalar mı yaptı (çalıştı ama görünmüyordu)?

Hesaplamayı mevcut zaman dilimine değil, H1'e bağlamanız gerekir! :)) Yani, Open[], Close[], High[], Low[], Time[] dizilerini değil, iOpen() , iClose(), iHigh(), iLow(), iTime fonksiyonlarını kullanın () karşılık gelen parametrelerle...
 
MaxZ :
Sürümümü neden beğenmedin? :)) Çok daha kolay ve daha az hesaplama. Yoksa her çubukta arabellekte kalması için değerlere mi ihtiyacınız var?

Denedim teşekkürler ama olmadı. Grafikte hiçbir şey görünmüyordu. Belki bir şey yanlış anlaşıldı? Anladığım tek şey ana şey: tamponun öğeleri sırayla gitmeli (1,2,3 ...), yani. boşluksuz (1,3,5...) ve HERKES! arabellek öğesine değer atanmalıdır ! :-)
 

Roman, cevap için teşekkürler ..... Maalesef bir an anlamadım. Öğreticide, https://book.mql4.com/en/basics/expressions, " Tür dökümü " bölümünde. Seçenek 4.1. Bir tamsayı türünün sonucu hesaplanır

ve Seçenek 4.2. Gerçek türün bir değeri olarak sonuç aranırken benzer bir durum ortaya çıkar", aynı formül verilir, ancak bir durumda F değişkeninin türü int olarak gösterilir.

   double A = 2.0 ;                      // Количество карандашей у Васи
   int    Y = 3 ;                        // Количество ответов Пети
   int    F = A + Y ;                    // Общее количество

ve ikinci örnekte değişken zaten double

   double A = 2.0 ;                   // Количество карандашей у Васи
   int    Y = 3 ;                     // Количество ответов Пети
   double F = A + Y ;                 // Общее количество

Maalesef dönüşümün mantığını anlamadım. İlk değişkende int'nin neden F değişkenine atandığı genel olarak açıksa (yani, örtük tür dönüştürme kuralına göre), o zaman bu yüzden ikinci değişkende double atanmış .... beni tamamen şaşırttı.

Lütfen buradaki açıklamada neyi kaçırmış olabileceğimi açıklar mısınız?

Şimdiden teşekkürler.

 
wolf05632 :

Denedim teşekkürler ama olmadı. Grafikte hiçbir şey görünmüyordu. Belki bir şey yanlış anlaşıldı?

Kodun tamamını mı kopyaladınız yoksa start() işlevinde ne vardı? Bu önemli!

wolf05632 :

Anladığım tek şey ana şey: tamponun öğeleri sırayla gitmeli (1,2,3 ...), yani. boşluksuz (1,3,5...) ve HERKES! tampon elemanına bir değer atanmalıdır! :-)
Sen yanlış anladın! :)) Örneğin, zig-zag'da arabelleğin tüm öğeleri doldurulmaz. Ayrıca, simgeler için arabelleğin tüm öğelerini doldurmak gerekli değildir.
 
Geowind64 :

Roman, cevap için teşekkürler ..... Maalesef bir an anlamadım. Öğreticide, https://book.mql4.com/ru/basics/expressions, "Tip döküm. Seçenek 4.1. Bir tamsayı türünün sonucu hesaplanır.

ve Seçenek 4.2. Gerçek türün bir değeri olarak sonuç aranırken benzer bir durum ortaya çıkar", aynı formül verilir, ancak bir durumda F değişkeninin türü int olarak gösterilir.

ve ikinci örnekte değişken zaten double

Maalesef dönüşümün mantığını anlamadım. İlk varyantta, F değişkeninin neden int atandığı genel olarak açıksa (yani, örtük tür dönüştürme kuralına göre), o zaman ikinci varyantta double .... olarak atanmasının nedeni beni tamamen şaşırttı.

Lütfen buradaki açıklamada neyi kaçırmış olabileceğimi açıklar mısınız?

Şimdiden teşekkürler.



n


Tamsayı tipi double tipine dahil edilmiştir, double değişken tipinin sınırları daha geniştir, bu nedenle "fırsat" ifadesindeki değişkenlerin farklı tiplerde olması imkansızdır ve sonuç daha dar bir değişkene sahip olur. kabul edilen değerler aralığı, bu durumda - tamsayı türü. Onlar. ifadedeki en az bir değişkenin türü double ise, sonuç da double aralığında olmalıdır ve olabilir, aksi takdirde bir derleme hatası olacaktır - tür uyuşmazlığı.

Daha fazla ayrıntı - buraya bakın.

 
Roman. :


Tamsayı tipi double tipine dahil edilmiştir, double değişken tipinin sınırları daha geniştir, bu nedenle ifadedeki değişkenlerin farklı tiplerde olması "fırsatına" sahip olması imkansızdır ve sonuç, bir değişkene sahip bir değişkendir. daha dar kabul edilen değerler aralığı, bu durumda - tamsayı türü . Onlar. ifadedeki en az bir değişkenin türü double ise, sonuç da double aralıkta olmalıdır ve olabilir, aksi takdirde bir derleme hatası olacaktır - tür uyuşmazlığı.

Daha fazla ayrıntı - buraya bakın.


Sıklıkla örtük tip döküm kullanırım. Gerçek parantezler fazladan kullanılmalıdır.
 

Millet, #INF ne anlama geliyor - çift menzil dışı mı? üstten ikinci satıra bakın (orada çift TWR'nin ürünü dikkate alınır, yani önceki değeri bir sonrakiyle çarpılır). TWR değişkeni tarafından kabul edilen SUCH değerleri ne kadar doğru olarak kabul edilir?

 
Geowind64 :

Eğitimin bu bölümünü daha dikkatli okursanız, önce "=" atama operatörünün solunda bulunan ifadeye bakmanız gerektiğini anlayacaksınız:

   A + Y

Kurala göre:

  • Atama işleminin işaretinin sağındaki ifadenin türü, atama işleminin işaretinin solundaki değişkenin türüyle eşleşmiyorsa, ifadenin değeri, atanan değişkenin türüne dönüştürülür. atama işleminin işaretinin solunda; buna hedef tipe döküm denir;

double türündeki A değişkeni solda bulunur; bu, A + Y ifadesinin değerinin double türünde bir sayı olacağı anlamına gelir.

Ardından ifadenin atandığı değişkenin tipine dikkat etmeniz gerekiyor.

İlk durumda: "İlk olarak, A+Y ifadesinin türü int türüne dönüştürülür (tam sayıların hesaplanması kuralına göre) ve ardından bu sonuç F tamsayı değişkeninin değeri olur".

İkinci durumda: "F değişkeninin hedef tipi (atama operatörünün işaretinin solunda), bu durumda double tipi, A+Y ifadesinin double tipi ile aynıdır, yani hedef türü dönüşümü yok."

Verstein mı? :)))

 
Roman. :

Millet, #INF ne anlama geliyor - çift menzil dışı mı? üstten ikinci satıra bakın (orada çift TWR'nin ürünü dikkate alınır, yani önceki değeri bir sonrakiyle çarpılır). TWR değişkeni tarafından kabul edilen SUCH değerleri ne kadar doğru olarak kabul edilir?

Genel olarak, INFINITY (INF olarak kısaltılır ) sonsuzdur! :)) Evet, double'ın bu kadar büyük bir sayıyı saklamak için yeterli güce (belleğe) sahip olmadığı ortaya çıktı.

Ve ben sadece nasıl doğru sayılacağını tahmin edebiliyorum... Koşullu olarak kendi türünüzü yaratın: bit derinliğini ek bir değişkende saklayın ve iki katı 10^n ile çarpın, burada n, bit derinliğidir. Ancak bu durumda, doğruluk keskin bir şekilde kaybolur ve doğruluğu daha da kötü ve daha kötü görürsünüz ...

Ama belki hesaplamaların mantığını değiştirmek daha kolay olur? :))) Ya da belki bir yerde bir yanlışlık vardır.