Genel sınıflar kütüphanesi - hatalar, açıklamalar, sorular, kullanım özellikleri ve öneriler - sayfa 12
Ticaret fırsatlarını kaçırıyorsunuz:
- Ücretsiz ticaret 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
T türü için GetHashCode işlevinin açık bir uygulaması yoksa kodun ne yaptığını anlıyor musunuz?
Cevap: Kirli bir numara, çünkü uygulama eksikliği sorunu örtbas ediliyor. Aynı sınıfın tüm nesneleri aynı karma değerini döndürür.
Ve uygulama (vücut) nerede?! İşte eklendi
vücut buldozerden sokuldu.
Ve uygulama (vücut) nerede?! İşte eklendi
vücut buldozerden sokuldu.
Size sineklerden bahsediyorlar (bunu yapmamalısınız, kod ileride hastalanabilir) ve siz pirzolalardan bahsedersiniz.
Tamam, iyi iştah.
Önerilen çözümün hız özelliklerine bakmaya karar verdim. Test uzmanı danışmanı
EA 100.000 işlem açar, ardından farklı yöntemler kullanarak rastgele işlemlerin toplam kârını arar (yorumlara bakın). Sonuç
Peki, seçilen iki göstergeyi karşılaştıralım. HashMap erişiminin geliştiricilerin sahip olduğundan 4 kat daha hızlı olduğu ortaya çıktı. Ancak geliştiriciler için zaten tarih içeriyor ...
4 kez - bu durum için çok mu yoksa az mı? İşte burada 24 milisaniye. Tarihe birçok kez dönerseniz, muhtemelen çok tasarruf edebilirsiniz. Ama emin değilim.
Daha gerçekçi bir test durumu için (2000 işlem ve 1.000.000 tek geçmiş erişimi), sonuç şöyle görünür
Geçiş başına yaklaşık 100 ms tasarruf! Örneğin, 10.000 tam geçiş için Optimizasyon yaparsak, Hash sürümü 15 dakika daha hızlı biter.
Geliştiricilerin Tarih ile çalışmanın uygulanması için sağlam bir beş vermeleri için henüz çok erken. MQL çözümü bile bunu yapabildiğinden, hızlanabilecekleri görülebilir.
Önerilen çözümün hız özelliklerine bakmaya karar verdim. Test uzmanı danışmanı
EA 100.000 işlem açar, ardından farklı yöntemler kullanarak rastgele işlemlerin toplam kârını arar (yorumlara bakın). Sonuç
Peki, seçilen iki göstergeyi karşılaştıralım. HashMap erişiminin geliştiricilerin sahip olduğundan 4 kat daha hızlı olduğu ortaya çıktı. Ancak geliştiriciler için zaten tarih içeriyor ...
4 kez - bu durum için çok mu yoksa az mı? İşte burada 24 milisaniye. Tarihe birçok kez dönerseniz, muhtemelen çok tasarruf edebilirsiniz. Ama emin değilim.
Platform üzerinden yapılan çağrılarda, GetDealProfitFull'da iki kez ve GetDealProfitClear'da bir kez senkronizasyon nesneleri ve her yinelemede çok sayıda zorunlu kontrol üzerinden geçersiniz.
Bu nedenle, hız, önceden hazırlanmış bir yerel hashmap üzerinde bir dizi satır içi çalışma ile temiz ve optimize edilmiş bir hızdan açıkça daha düşüktür.
Platform üzerinden yapılan çağrılarda, GetDealProfitFull'da iki kez ve GetDealProfitClear'da bir kez senkronizasyon nesneleri ve her yinelemede çok sayıda zorunlu kontrol üzerinden geçersiniz.
Bu nedenle, hız, önceden hazırlanmış bir yerel hashmap üzerinde bir dizi satır içi çalışma ile temiz ve optimize edilmiş bir hızdan açıkça daha düşüktür.
Önceki mesajımı düzelttim. Bu yüzden çift kontrole Tam denir.
Tester for HistoryDealGetDouble'da ne tür pahalı senkronizasyon nesnelerinden ve birçok kontrolden bahsettiğimizi tam olarak anlamıyorum?Önceki mesajımı düzelttim. Bu yüzden çift kontrole Tam denir.
Tester for HistoryDealGetDouble'da ne tür pahalı senkronizasyon nesnelerinden ve birçok kontrolden bahsettiğimizi tam olarak anlamıyorum?Fark ne:
Kodumuza baktım - alım satım işlemleri veritabanına yapılan çağrıları optimize etmek mümkün. Önümüzdeki hafta piyasaya sürülmek üzere uygulamaya çalışacağız.
Renat Fatkhullin'in fotoğrafı.
platformda, tek bir değer çıkarırken, tüm verilerin doğruluğunu ve kullanılabilirliğini yeniden kontrol ederek, isteği "ilk kez olduğu gibi" ele almanız gerekir.
TryGetValue çağrılırken doğrulama denetimi yapılmadı mı? Günlükler, HistorySelect'in test cihazında ücretsiz olduğunu gösteriyor.
Anlamadığım şey, neden bir anlaşmayla ilgili tüm verileri elde etmek için bir sürü pahalı HistoryDealGet * işlevini çağırmanız gerektiği? Sonuçta MqlDeal yapısını dolduran tek bir çağrı var.
Kullanıcının HashMap aracılığıyla geçmişle çalışmak istediğinde CHashMap<ulong, MqlDeal>'i dolduracağı açıktır.
Tüm tarihsel tablo zaten test cihazında olduğundan, pahalı birim çağrıları üretmemek için MqlDealInteger, MqlDealDouble, MqlDealString veya benzeri bir şey yapabilir misiniz? Ve sonra DealTicket'in doğruluğunu her seferinde değil, bir kez kontrol etmek yeterlidir.
TryGetValue çağrılırken doğrulama denetimi yapılmadı mı? Günlükler, HistorySelect'in test cihazında ücretsiz olduğunu gösteriyor.
Anlamadığım şey, neden bir anlaşmayla ilgili tüm verileri elde etmek için bir sürü pahalı HistoryDealGet * işlevini çağırmanız gerektiği? Sonuçta MqlDeal yapısını dolduran tek bir çağrı var.
Kullanıcının HashMap aracılığıyla geçmişle çalışmak istediğinde CHashMap<ulong, MqlDeal>'i dolduracağı açıktır.
Bir MqlDeal yapımız yok, çünkü ticari kayıt biçimleri dalgalanıyor ve periyodik olarak genişliyor. Bu olmadan, platformun işlevselliğini genişletmek imkansızdır.
Bu nedenle, tek seçenek bunlara Get işlevi aracılığıyla erişmektir. Ayrıca, daha önce etkilenen kaydın kalan alanlarına erişim, kayıt önbelleğe girdiğinden, ilk erişimden birçok kat daha hızlıdır.
Ve sonra DealTicket'in doğruluğunu her seferinde değil, bir kez kontrol etmek yeterlidir.
Yukarıdaki testte, anlaşma numaraları her seferinde yenidir ve bu, önceden seçilen anlaşmanın önbelleğini sürekli olarak düşürür. Ayrıca aramalar arasında bir şeylerin değişmediğinin garantisi de yoktur. Sonuçta yine de geçmişe yönelik istekler arasında ticaret yapabilirsiniz.
Nasıl ücretsiz? Hiç ücretsiz değil.
Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum
Genel sınıf kitaplığı - hatalar, açıklama, sorular, kullanım ve öneriler
fxsaber , 2017.12.08 22:46
EA 100.000 işlem açar, ardından farklı yöntemler kullanarak rastgele işlemlerin toplam kârını arar (yorumlara bakın). Sonuç
100.000 işlem (ve aynı sayıda emir) için 1 mikrosaniye ücretsizdir. Her şey test cihazıyla ilgili.
Yukarıdaki testte, anlaşma numaraları her seferinde yenidir ve bu, önceden seçilen anlaşmanın önbelleğini sürekli olarak düşürür. Ayrıca aramalar arasında bir şeylerin değişmediğinin garantisi de yoktur. Sonuçta, geçmişe yönelik istekler arasında hala ticaret yapabilirsiniz.
Böylece tarih (özellikle test cihazında) sadece tamamlanır, eski kayıtlar değişmez. Temizle seçeneğiyle ilgili.
Gerçek hayatta, bir emir kısmen yürütüldüğünde ve birkaç işlem oluşturduğunda bile, tamamen dolana veya iptal edilene kadar geçmişe girmeyecek gibi görünüyor. Onlar. donmuş tarih kuralı korunur.
100.000 işlem (ve aynı sayıda emir) için 1 mikrosaniye ücretsizdir. Her şey test cihazıyla ilgili.
Test cihazındaki HistorySelect, özellikle 0, INT_MAX parametreleriyle kesinlikle sanal/sahtedir. Bu, uzun süredir optimize edilmiştir.
Gerçekte belirli bir bileti arayan ve önbelleğe alan HistorySelect (test cihazında erişim aralığını ayarlar) ve HistoryDealSelect(bilet) arasında karşılaştırma yapamazsınız.