"MQL5 Cookbook: Fiyat Farklılığını Analiz Etmek İçin Çoklu Sembollü Bir Göstergenin Geliştirilmesi" makalesi için tartışma
Bu sadece bir yazım hatası mı yoksa öyle mi olmalı?
Kaç kez denersem deneyeyim, "Copy squad "daki tüm fonksiyonlar asla sıfır döndürmüyor, sadece -1 veya >0 döndürüyor.
//+------------------------------------------------------------------+ //| Tüm karakterler için kullanılabilir veri sayısını kontrol eder || //+------------------------------------------------------------------+ bool CheckAvailableData() { int attempts=100; //--- for(int s=0; s<SYMBOLS_COUNT; s++) { //--- Eğer böyle bir karakter varsa if(symbol_names[s]!=empty_symbol) { datetime time[]; // Çubuk sayısını kontrol etmek için dizi int total_period_bars =0; // Geçerli dönemin çubuk sayısı datetime terminal_first_date =NULL; // Terminaldeki mevcut dönemin mevcut verilerinin ilk tarihi //--- Terminaldeki geçerli dönem verilerinin ilk tarihini alın terminal_first_date=(datetime)SeriesInfoInteger(symbol_names[s],Period(),SERIES_TERMINAL_FIRSTDATE); //--- Belirtilen tarihten itibaren mevcut çubukların sayısını alın total_period_bars=Bars(symbol_names[s],Period(),terminal_first_date,TimeCurrent()); //--- Bu çubukların hazır olup olmadığını kontrol edin for(int i=0; i<attempts; i++) { //--- Belirtilen miktarda veriyi kopyalayın if(CopyTime(symbol_names[s],Period(),0,total_period_bars,time)) { //--- Gerekli miktar kopyalanmışsa, döngüyü durdur if(ArraySize(time)>=total_period_bars) break; } } //--- Daha az veri kopyalanırsa, başka bir deneme yapılmalıdır. if(ArraySize(time)==0 || ArraySize(time)<total_period_bars) { msg_last=msg_prepare_data; ShowCanvasMessage(msg_prepare_data); OC_prev_calculated=0; return(false); } } } //--- Fiyat farkının başlangıç noktası için dikey çizgi modundaysa, çıkın if(StartPriceDivergence==VERTICAL_LINE) return(true); else { datetime time[]; // Çubuk sayısını kontrol etmek için dizi int total_period_bars =0; // Geçerli dönemin çubuk sayısı datetime terminal_first_date =NULL; // Terminaldeki mevcut dönemin mevcut verilerinin ilk tarihi //--- Terminaldeki geçerli dönem verilerinin ilk tarihini alın for(int i=0; i<attempts; i++) if((terminal_first_date=(datetime)SeriesInfoInteger(Symbol(),Period(),SERIES_FIRSTDATE))>0) break; //--- Belirtilen tarihten itibaren mevcut çubukların sayısını alın for(int i=0; i<attempts; i++) if((total_period_bars=(int)SeriesInfoInteger(Symbol(),timeframe_start_point,SERIES_BARS_COUNT))>0) break; //--- Bu çubukların hazır olup olmadığını kontrol edin for(int i=0; i<attempts; i++) //--- Belirtilen miktarda veriyi kopyalayın if(CopyTime(Symbol(),timeframe_start_point, terminal_first_date+PeriodSeconds(timeframe_start_point),TimeCurrent(),time)>0) break; //--- Daha az veri kopyalanırsa, başka bir deneme yapılmalıdır. if(ArraySize(time)<=0 || total_period_bars<=0) { msg_last=msg_prepare_data; ShowCanvasMessage(msg_prepare_data); OC_prev_calculated=0; return(false); } } //--- return(true); }
Bu sadece bir yazım hatası mı yoksa öyle mi olmalı?
Kaç kez denersem deneyeyim, "Copy squad "daki tüm fonksiyonlar asla sıfır döndürmüyor, sadece -1 veya >0 döndürüyor.
Genel olarak, >0 yapmalısınız. Ancak bu durumda, sonraki kontroller bunu yapmamanıza izin verir.
Ancak bu ifade her zaman doğru olacaktır:
if(CopyTime(symbol_names[s],Period(),0,total_period_bars,time))
Ancak bu ifade her zaman doğru olacaktır:
Eğer varsa kaldırabilirsiniz. Bu durumda kritik değildir.
Genel olarak, bir sembole geçmiş verilerin yüklenmesi yardımda yazıldığı şekilde gerçekleşmez.
Aslında, şu şekilde ortaya çıkıyor:
mql5 programından, örneğin CopyTime işlevi kullanılarak bazı zaman serilerinin verileri için bir istek varsa
ve bu veri terminalde değilse (henüz yüklenmemişse), terminal bu veriyi sunucudan istenen miktarda değil (yardım örneğinde 100 bar) indirecektir,
ancak "Grafikteki maksimum çubuklar" parametresinin RAM'e "yerleştirmeye" izin verdiği kadar gerekli zaman serisinin çubuğu.
Tüm geçmiş sunucudan indirileceğinden, PERIOD_W1 gibi daha yüksek bir dönemin yalnızca bir çubuğunu talep etmek yeterlidir.
Genel olarak, bir sembole geçmiş verilerin yüklenmesi yardımda yazıldığı şekilde gerçekleşmez.
Aslında, şu şekilde ortaya çıkıyor:
mql5 programından, örneğin CopyTime işlevi kullanılarak bazı zaman serilerinin verileri için bir istek varsa
ve bu veri terminalde değilse (henüz yüklenmemişse), terminal bu veriyi sunucudan istenen miktarda değil (yardım örneğinde 100 bar) indirecektir,
ancak "Grafikteki maksimum çubuklar" parametresinin RAM'e "yerleştirmeye" izin verdiği kadar gerekli zaman serisinin çubuğu.
Tüm geçmiş sunucudan indirileceğinden, PERIOD_W1 gibi daha yüksek bir dönemin yalnızca bir çubuğunu talep etmek yeterlidir.
Yardım istediğiniz her şeyi söyleyebilir. Uygun gördüğünüz gibi yapmakta özgürsünüz. ;)
Yardımdaki örnek başka bir makalede tartışıldı: Diğer programlar için MetaTrader 5 teklifleri nasıl hazırlanır >>>.
Sertifika, söylemesini istediğiniz her şeyi söyleyebilir. Uygun gördüğünüz gibi yapmakta özgürsünüz. ;)
Yardımdaki örnek başka bir makalede tartışıldı: Diğer programlar için MetaTrader 5 teklifleri nasıl hazırlanır >>>.
Ben de öyle yaptım. Kodunuzda sunucudan kalan "yüklenmemiş çubukların" hesaplanmasını gördüm.
Ve düşündüm ki - terminal umursamıyor, oluşturması gerektiği kadar pompalıyor.
Makalenizin sonunda şöyle yazmışsınız:"Bu gösterge daha iyisi için sınırsızca geliştirilebilir".
Bana göre, fiyat farklılaşması üzerine düşünmenin insan gözüne pek faydası yoktur. İnsan bir robot değildir!
Ancak bir robot için ilginç bir konudur.
Birkaç işleme seçeneği önerdiniz:
1. çizgiden.
2. "gün."
Şu anda benzer bir şey üzerinde çalışıyorum, sadece "hafta" modunda.
Makalenizin sonunda şöyle yazmışsınız:"Bu gösterge daha iyisi için sınırsızca geliştirilebilir".
Bana göre, fiyat farklılaşması üzerine düşünmenin insan gözüne pek faydası yoktur. İnsan bir robot değildir!
Ancak bir robot için ilginç bir konudur.
Birkaç işleme seçeneği önerdiniz:
1. çizgiden.
2. "gün."
Şu anda benzer bir şey üzerinde çalışıyorum, sadece "hafta" modunda.
Başka sorunlarla uğraştığım için yakın zamanda başka bir şey yazabileceğimden emin değilim. Ancak bu makaleye göre, geliştirmenin hala çoklu para birimi hesaplamalarında ve bu hesaplamaların tuval üzerinde görselleştirilmesinde olması gerekiyordu.
Evet, insan robot değildir, ama bazen bir fikir edinmek için çalışma konusuna başka bir şekilde bakmanız gerekir. ;)

- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Yeni makale MQL5 Cookbook: Fiyat Farklılığını Analiz Etmek İçin Çoklu Sembollü Bir Göstergenin Geliştirilmesi yayınlandı:
Bu yazıda, belirli bir zaman diliminde fiyat farklılaşmasını analiz etmek için çoklu sembollü bir göstergenin geliştirilmesini ele alacağız. Temel konular, çoklu para birimi göstergelerinin programlanmasıyla ilgili bir önceki makalede tartışılmıştı "MQL5 Yemek Kitabı: MQL5'te Çok Sembollü Bir Volatilite Göstergesi Geliştirme". Bu sefer sadece çarpıcı biçimde değiştirilmiş olan yeni özellikler ve işlevler üzerinde duracağız. Çoklu para birimi göstergelerinin programlanmasında yeniyseniz, önce bir önceki makaleyi okumanızı tavsiye ederim.
Tüm fonksiyonlar hazır. Bu makaleye tüm yorumlarıyla beraber eklenmiş kodu inceleyebilirsiniz.
Neticede ne elde ettiğimizi gösterelim. Varsayılan GBPUSD, AUDUSD, NZDUSD, USDCAD, USDCHF sembolleri harici parametrelerde belirtilir. Aşağıdaki ekran görüntüsünde, ters çevirme devre dışı bırakılmış Dikey çizgi modunda EURUSD için haftalık grafiği görebilirsiniz:
Şek. 1 - "Dikey çizgi" modunda haftalık zaman dilimi
Yazar: Anatoli Kazharski