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
Şimdi bir sorunum var. Kopyalama öğelerinin (yani öğeleri hacimli, "ağır" yapılar, sınıf nesneleri , uzun dizeler vb. olan) "maliyeti" olan dizilerin verimli bir şekilde sıralanması gerekir. Sağduyu, onları yerinde bırakmanız ve yerine bir tür işaretçi ile sıralamanız gerektiğini belirtir - orijinal konumlarının hücre dizinleri. Buradan daha fazla alıntı: https://www.mql5.com/en/forum/6476#comment_178318Şimdiye saygın terminal geliştiricilerini sayısız mevcut görevleriyle bırakalım ve mql5'te uygulayalım.
Her şey bizden önce çalındı bile :)
MQL5'te elektronik tablolar
girdi, sıralanan dizinin bir kopyası olmalı, yorumlar yorumlanmamalı, gereksiz yorumlar yapılmalıdır
Her şey bizden önce çalındı bile :)
MQL5'te elektronik tablolar
girdi, sıralanan dizinin bir kopyası olmalı, yorumlar yorumlanmamalı, gereksiz yorumlar yapılmalıdır
Kötü seni! Şarkıyı mahvettim... Daha doğrusu denedim. :)
// İyi yaklaşımların olduğu açıktır. Aynı başarı ile standart kitaplıktan bir örnek çıkarabilirim. :)
Örnekler var. Ve hatta harikalar. Ama hala. Burada her şeyi kaydetmek ve ayrı bir kullanılabilir ürünün çalışma durumuna göre hata ayıklamak önemlidir. Üstelik (bunu neden buraya gönderiyorum) - olabildiğince hızlı. Onlar. Mümkün olan tüm performansı yüzde birin yüzde birine kadar sıkıştırmayı öneriyorum. :)
Bu ilk. İkinci olarak, nesneler için dizin dizilerinin sayısı, genel durumda birkaç tane olabilen sıralama ölçütlerinin sayısına eşit istenir, + (tercihen) çeşitli ölçütlere göre sıralanmış dizinlenmiş bir diziye ekleme işlevi.
Kötü seni! Şarkıyı mahvettim... Daha doğrusu denedim. :)
// İyi yaklaşımların olduğu açıktır. Aynı başarı ile standart kitaplıktan bir örnek çıkarabildim. :)
Örnekler var. Ve hatta harikalar. Ama hala. Burada her şeyi kaydetmek ve ayrı bir kullanılabilir ürünün çalışma durumuna göre hata ayıklamak önemlidir. Üstelik (bunu neden buraya gönderiyorum) - olabildiğince hızlı. Onlar. Mümkün olan tüm performansı yüzde birin yüzde birine kadar sıkıştırmayı öneriyorum. :)
Bu ilk. İkinci olarak, nesneler için dizin dizilerinin sayısı, genel durumda birkaç tane olabilen sıralama ölçütlerinin sayısına eşit istenir, + (tercihen) çeşitli ölçütlere göre sıralanmış dizinlenmiş bir diziye ekleme işlevi.
MQL5'te hala aynı cevap Elektronik Tablolar
hepsi orada. Masayı yan çevirin. Pekala, belirli bir görev için, onu sütunları değil, satırları manipüle etmek için yeniden yapabilirsiniz, sütunlar orada yapılır, böylece onları farklı türler ilan edebilirsiniz. Tablo türü bir ise, her şey yeniden oynatılabilir.
Temel türler için dizin sıralamalı bir içerme yapıldı.
Varsayılan sıralama "azalan" şeklindedir, artan düzende sıralamak için sıralama yönü bayrağını false olarak ayarlayın.
Test sonuçları: // dizi indeksleme double[], int[], string[]; Sıralı: ham dizi, azalan, artan
Fragmanda kitaplık ve test.
Dahil etmeyi "MQL5\Include\Indexs\" klasörüne koyun
İşte OCL ile çalışmak için bir sınıf hazırlığı. Elbette bir şey tamamlanmamış ve hantal değildir, ancak birileri için faydalı olabilir.
ZY Bitok başlatmayı değiştirdi, şimdi çok boyutlu hesaplamaları çalıştırabilirsiniz.
Harika konu!
Az önce fiyat ekstremum (minimum) arama algoritmasının bir optimizasyon problemiyle karşılaştım. Koşullar aşağıdaki gibidir, bir çubuk vardır, solunda ve sağında maksimum değerinden daha düşük (yüksek) olan n çubuk vardır:
n , isteğe bağlı olarak seçilen serbest bir değerdir. Sağdaki ve soldaki iki bölümün toplamı her zaman bir çift sayı olacağından, n periyodu her zaman tektir, buna aşırı fiili fiyatın merkez çubuğunun eklendiği.
Algoritmanın ilk versiyonu hakkında fazla düşünmedim ve en bariz kodu yazdım. Şimdi WealthLab platformu çerçevesinde C# ile yazıyorum ama problemli algoritmanın özünü kolaylıkla anlayabileceğinizi düşünüyorum, işte en problemli kısmı:
Bütün sorun ikinci döngüde. Potansiyel ekstremumdan sol ve sağ dalları eşzamanlı olarak işler ve bu nedenle yalnızca (N - 1)/2 çubuk üzerinde yinelenir, ancak bu yeterli değildir. Ölçümler, aritmetik bir ilerlemede bir ekstremum aramak için harcanan zamanın, çok, çok kötü olan N periyoduna bağlı olduğunu gösteriyor:
Periyotların sayımı, zaman içindeki aritmetik ilerlemenin toplamını alacaktır ve bu çok büyük bir değerdir.
Olası bir çözüm eklemektir değişken. Sonuçta, bir ekstremum bulunursa, (N - 1)/2 sırasında sağında tek bir çubuk olmaması garanti edilir, bu nedenle yeni bir ekstremum araması çubuktan başlatılabilir: current_bar + (N - 1)/2. Ancak aşırı uçlarla birlikte, düşükleri de bulmanız gerekir ve current_bar + (N - 1)/2 çubuğundan önce yeni bir düşük bulunabilir. Bu nedenle, aşırı uçlar ve minimumlar arayışını iki geçişe bölmek gerekecektir, bu da performans kazancını olumsuz etkileyecektir. C#'da, iki geçişi iki çekirdekte aynı anda işlenen iki iş parçacığına kolayca bölebilirsiniz, ancak önce en uygun algoritmayı bulmak ve zaten optimize etmek istiyorum. Uzmanların yardımını bekliyorum.
Eh, bu bir optimizasyon sorunu değil.
Periyotların sayımı, zaman içindeki aritmetik ilerlemenin toplamını alacaktır ve bu çok büyük bir değerdir.
Bir ekstremum araması, n'nin veri sayısı olduğu bir O(n) sıra problemidir. Bu asimptotik nasıl daha da kötüleştirilebilir, yani. O(n^2) - Hayal bile edemiyorum. Ya da kavramlarda kafanız karıştı.
En basit algoritma ArraySort() öğesini sıralamaktır, yerleşik oldukça hızlıdır, O(n * ln( n ) ) bölgesinde bir şeydir. Ama muhtemelen bu görev için fazladan.
Daha hızlı olacak özyinelemeli bir şey bulabilirsin.
Minimum ve kaç çubuk için ne kadar süreyle arama yapıyorsunuz? 100 barda en fazla bir buçuk saniye aradığınıza inanmıyorum.
En basit algoritma ArraySort() sıralamadır, yerleşik oldukça hızlıdır. Ama muhtemelen bu görev için fazladan.
En iyi sıralama O(n*log(n)) şeklindedir. Kesinlikle gereksiz.
Daha hızlı olacak özyinelemeli bir şey bulabilirsin.
Yavaş. Özyineleme çoğu zaman kötüdür. tekrarlayan? İşte muhtemelen, nasıl yaparsanız yapın, hızın yaklaşık olarak aynı olacağı durumdur.
Kodla:
Min ve max döngüleri açık bir şekilde ayrılmalıdır. Ve başarısız olursa döngüden hemen çıkın.
Sanırım, evet. Ama yine de O(n)'den fazla değil.
OCL burada yardımcı olacaktır. Asimptotikler elbette aynı kalacaktır. Ancak hızı yüz kat artırmak oldukça mümkündür.