Göstergeler: Daha iyi hacim - sayfa 2

oomeysh #:
bu göstergeyi mt5'e uyguladım, ancak hiçbir şey gösterilmiyor ... yukarı
Gösterge giriş ayarlarına gidin ve - Kullanılan Hacim Türünü Gerçek hacimden Tik Hacmine değiştirin.

Bunu Claude Sonnet 5.5’e girdim ve şöyle bir mesaj çıktı:

İyi olan yönler

  • Tampon düzeni doğru: 2 grafik için 3 tampon (histogram verileri + renk indeksi, artı MA çizgisi).
  • Renk listesi, klasik Better Volume paleti ile uyumludur. 0'dan 5'e kadar olan indeksler, açıklamalarla uyumludur.
  • IntTimesRange == IntMaxTimesRange gibi eşitlik kontrolleri burada güvenlidir. Pencere maksimumu aynı ifadeyle hesaplanır, bu nedenle mevcut çubuk maksimum olduğunda double değerleri tam olarak eşleşir.
  • prev_calculated - 1 değerinden yeniden hesaplama, oluşmakta olan çubuğu doğru şekilde güncelliyor.

Hatalar, en ciddi olanlardan başlayarak

1. Kısa geçmişlerde aralık dışı çökme (63–69. satırlar).
sınırı yalnızca ilk çağrıda sınırlandırılır. Diyelim ki haftalık veya aylık bir grafikte 50 çubuk var ve minbars değeri 100. İlk çağrı döngüyü atlar ve rates_total değerini döndürür. Bir sonraki tikte, prev_calculated değeri 50 olduğundan limit 49 olur. MA döngüsü daha sonra n = -1 değerini okur ve gösterge "dizi aralığı dışında" hatasıyla çalışmayı durdurur. Düzeltme:

mql5

if(rates_total <= minbars) return(0); limit = (prev_calculated == 0) ? minbars : MathMax(prev_calculated - 1, minbars);

2. Climax Churn (eflatun), düşüş eğilimli çubuklarda kaybolur (116–121. satırlar).
"Climax Sell" bloğu, "Climax Churn"dan sonra çalışır ve onu üzerine yazar. Dolayısıyla, hem hacim aralığı doruk noktası hem de churn çubuğu olan bir çubuk, ancak orta noktanın üzerinde kapandığında magenta olarak gösterilir. Altında kapandığında ise düz beyaz olarak gösterilir. Amaçlanan öncelik, climax churn'un diğer her şeyden öncelikli olmasıdır.

3. "Ek churn kontrolü" hiçbir zaman tetiklenemez (satır 123–125).
IntCandleRange > IntMiddlePrice * 2 ifadesi, high - low > high + low şeklinde genişler; bu ise yalnızca low < 0 olduğunda geçerlidir. Herhangi bir normal enstrüman için bu koşul ölü koddur. Muhtemelen amaç, ortalama aralık veya benzeri bir değerle karşılaştırma yapmaktı; bu nedenle, sadece düzeltmek yerine yeniden tanımlanması gerekir.

4. Sabit olarak kodlanmış 20 değeri, InpLookBack'i göz ardı eder (105. satır).
Diğer her şey InpLookBack kullanır, ancak düşük hacim testi i - 19, 20 değerlerini kullanır. 20 dışındaki herhangi bir değer, sınıflar arasında tutarsızlığa yol açar. InpLookBack 20'nin üzerine ayarlanırsa, düşük hacim algılama yine de yalnızca 20 çubuğu inceler.

5. Sıfır hacimli veriler yanlış sinyallere neden olur ve varsayılan ayar bir tuzaktır.

  • Varsayılan ayar VOLUME_REAL'dir ve bu değer çoğu forex ve CFD sembolünde 0'dır.
  • Hacmin tamamı sıfır olduğunda, IntTimesRange (0) == IntMaxTimesRange (0) ve IntDividedRange (0) == IntMaxDividedRange (0) ifadeleri her ikisi de doğrudur. Grafik, doruk ve doruk-karışıklık renkleriyle dolmaktadır.
  • Bayrakları > 0 ile koruyun ve varsayılanı VOLUME_TICK olarak ayarlayın.

6. OnInit'te girdi doğrulaması yoktur.
InpMAPeriod <= 0, sıfıra bölme hatasına neden olur. InpLookBack <= 0, pencere mantığını bozar. Bu durumlarda INIT_PARAMETERS_INCORRECT değerini döndürün.

Daha küçük noktalar

  • NormalizeDouble(..., 0), MA'yı bir tamsayıya yuvarlar; bu da düşük hacimli sembollerdeki çizgiyi bozar. Buna gerek yoktur.
  • Minbar'lardan önceki çubuklar hiçbir zaman yazılmaz ve PLOT_DRAW_BEGIN ayarlanmaz. Erken çubuklarda hatalı veriler görünmemesi için bunu ayarlayın ve tamponları başlatın.
  • MA, MAPeriod değerinden değil, MAPeriod - 1 değerinden başlayabilir. Her çubuk için 100 çubuğu yeniden toplama yerine koşan toplamı kullanmak da daha hızlı olacaktır.
  • Tekrarlanan InpVolumeType == VOLUME_TICK ? ... : ... üçlü koşulları, tek bir küçük yardımcı işlev olarak yazılırsa daha temiz olur.


    Claude tarafından düzeltilmiş ve İngilizceye çevrilmiş sürüm ektedir. (Dosyayı görmek için "tartışmaya git" seçeneğine tıklayın)
Dosyalar: