Hatalar, hatalar, sorular - sayfa 1124
Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım 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
Her iki yapının boyutları aynı olmasına ve birbirlerine kopyalanmaları kayıpsız olmasına rağmen yine de uyarı alıyoruz.
Bu harika. Açık bir oyuncu kadrosu yapmak o kadar da zor değil. Ve böcekler tırmanırken neyi uygun gördüğünüzü anlamak pek hoş değil.
Uygulamadan SD'ye kopyala-yapıştır:
Terminalin sürümü ve bitliği
910 32bit
problemin tanımı
Merhaba sevgili geliştiriciler!
MQL5 dilinde, CopyRates , CopyTime , CopyOpen vb. gibi bir dizi sistem işlevi, zaman serisi verilerini almak için tasarlanmıştır.
Bu fonksiyonlardan herhangi biri çağrıldığında istenilen zaman serisi "Max bar in chart" parametresi içerisinde RAM'e yüklenir.
Bununla birlikte, aşağıdaki gibi faktörlerin bir kombinasyonu:
1. Sembolle veya tamamen sunucudan indirilen, yeterince derin erişilebilir geçmiş.
2. "Grafikteki maksimum çubuklar" parametresi "Sınırsız" değerine eşittir.
3. En küçük M1 zaman çerçevesinin verileri istenir.
Çok büyük bir RAM tüketimi var.
Sorun, çalışan bir MQL5 programının mantığında (örneğin, çok para birimli bir Uzman Danışman veya gösterge ise) gerçeğiyle daha da ağırlaşıyor.
birkaç sembolün daha düşük zaman dilimlerindeki verilere alternatif erişim sağlanabilir (örneğin, tek bir arama).
Sonuç olarak, RAM tüketimi katlanarak artar.
Получение данных нужного таймфрейма из промежуточных данных
HCC formatındaki hizmet dosyaları, talep edilen zaman dilimleri için HC formatında fiyat verilerinin çizilmesi için bir veri kaynağı görevi görür. HC formatındaki veriler, hızlı erişim için maksimum düzeyde hazırlanmış zaman serileridir. Yalnızca bir çizelgenin veya bir mql5 programının talebi üzerine, "Grafiklerdeki maksimum çubuklar" parametresinin değerini aşmayan bir miktarda oluşturulurlar ve hc uzantılı dosyalarda daha sonra kullanılmak üzere kaydedilirler.
Kaynaklardan tasarruf etmek için, zaman çerçevesi verileri yalnızca gerektiğinde RAM'e yüklenir ve saklanır; uzun süre veri erişimi yoksa, RAM'den kaldırılır ve bir dosyaya kaydedilir. Her bir zaman dilimi için, diğer zaman dilimleri için hazır verilerin bulunup bulunmadığına bakılmaksızın veriler hazırlanır. Veri oluşturma ve kullanılabilirlik kuralları tüm zaman dilimleri için aynıdır. Onlar. HCC formatında veri depolama biriminin bir dakika çubuğu olmasına rağmen, HCC formatında verilerin varlığı, HC formatında aynı ciltte M1 zaman dilimi verilerinin kullanılabilirliği ve kullanılabilirliği anlamına gelmez.
Sunucudan yeni verilerin alınması , kullanılan fiyat verilerinin tüm zaman dilimleri için HC formatında otomatik olarak güncellenmesine ve bunları hesaplama için giriş verileri olarak açıkça kullanan tüm göstergelerin yeniden hesaplanmasına neden olur.
Dokümantasyondan alınan yukarıdaki alıntıda sarı ile vurgulanan sürecin zamanlaması oldukça büyüktür: yaklaşık yarım saat (gözlemlerime göre).
Sonuç olarak, istenen tüm zaman serileri "RAM" içinde "toplanır", bunun nedeni açık değildir.
"RAM" henüz "kauçuk" değilse, ancak "doyumsuz" EA/göstergesi giderek daha fazla zaman serisi gerektiriyorsa, terminal için hiçbir şey kalmaz,
Ekstra zaman serilerinin acilen dosyaya (önbellek) nasıl "atılacağı" dışında. Böylece, bu acil durum sıfırlaması ile terminal, zaman serilerini şu şekilde sıfırlayabilir:
"bozuk önbellek" yani. verilerin "iyi bir yarısını" kaybedecek. Ve bu zaman serisine bir daha erişildiğinde, terminal bu "bozuk önbelleği" normal bir tane kisvesi altında yükler.
Sonuç olarak, gerekli zaman serileri, tarihte büyük bir "delik" ile terminal grafiğinde görüntülenir.
Beklenen Sonuç
MQL5, çalışma zamanı kaynaklarından tasarruf etme eğilimindedir. Bir örnek aşağıdaki olacaktır:
1. ArrayFree işlevi
2. Kaynaksız işlev
3. silme operatörü
4. "Grafiklerdeki maksimum çubuklar" parametresi
MQL5 dilinin işlevselliğine, artık kullanılmayan zaman serileriyle terminalin kendisinin ne yaptığını zorlayacak bir sistem işlevi eklemek mümkün müdür?
zamanlamanın sonunda, örneğin, bu zaman serisine sahip hiçbir çizelge açık değilse?
Örneğin, bir işlev:
bool SeriesFlush (
string symbol_name , // имя символа
ENUM_TIMEFRAMES timeframe , // период
);
Bu, şunları sağlar:
1. RAM taşması için korkmayın.
2. Yalnızca terminal kapatıldığında *.hc dosyalarının manuel olarak silinmesiyle kaldırılabilen "bozuk önbelleklerin" görünümü konusunda endişelenmeyin.
3. İşletim sisteminin bitliğine ve RAM'in boyutuna bağlı kalmayın.
4. Bir yazılım ürünü geliştirirken, yukarıda açıklanan eksiklikleri gidermeye çalışan "koltuk değneği" kullanmayın.
Uygulamadan SD'ye kopyala-yapıştır:
Olumlu bir önyargı ile gösterge verilerini nasıl alacağımı söyleyebilir misiniz? -1 bar'daki verilerle ilgileniyor musunuz?
Bunu yapmak için, ilgilenilen gösterge çizgisi için ofset ayarlarını bilmeniz gerekir. Bu, iAlligator teknik göstergesinden bir örnektir
Bu tam olarak ofsettir ve gelecek için göstergenin hesaplanması değildir.
Uygulamadan SD'ye kopyala-yapıştır:
Terminalin sürümü ve bitliği
910 32bit
problemin tanımı
Merhaba sevgili geliştiriciler!
Çok sayıda yinelemeli döngüler tasarlarken kod kalitesini iyileştirmeye yönelik önerilerden biri
sistemi kullanarak MQL5 programının zorla sonlandırılması gerçeği için bir kontrol yerleştirmektir.
fonksiyonlar bool IsStopped ();
Ancak, uygulamanın gösterdiği gibi, bu kontrol göstergelerde çalışmaz (komut dosyalarında ve Uzman Danışmanlarda çalışır)
İşte sorunun özünü yansıtan kısa bir gösterge kodu:
Bu göstergeyi grafikten çıkarmaya çalışırsanız, "göstergeyi hesaplama" işlemi bu şekilde durmaz,
program durdurma bayrağının kontrol edilmesi nedeniyle olması gerektiği halde.
Görev yöneticisinde terminal.exe işlemini izleyerek bunu kolayca öğrenebilirsiniz. Dört çekirdekli bir işlemcide
yaklaşık %25 CPU kullanımıdır. Ek olarak, terminal yükü kapatılana kadar zamanla hiç azalmaz.
terminal. Ve terminali kapattıktan sonra bile terminal.exe işlemi sevk programında asılı kalmaya devam eder. Ve sanki
işletim sistemi tarafından "asılı" olarak boşaltılır.
Beklenen Sonuç
Lütfen bu sorunu düzeltin.
Bunu yapmak için, ilgilenilen gösterge çizgisi için ofset ayarlarını bilmeniz gerekir. Bu, iAlligator teknik göstergesinden bir örnektir
Bu tam olarak ofsettir ve gelecek için göstergenin hesaplanması değildir.
işte bu, ileride bir hesaplamam var ve çizmek için ofset uyguluyorum, uzmandan -1 bar değerleri nasıl hesaplanır ???
Herhangi birinin ihtiyacı varsa, bunu CopyBuffer'ı yapabilirsiniz(Handle_original,0,-2,10,Data_Ind )
İşte bu, ileride bir hesabım var ve çizmek için ofset uyguluyorum, uzmandan -1 bar değerleri nasıl hesaplanır ???