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
incir benim açıklayıcı. Tekrar deneyeceğim. Görev, her para biriminin kendi parametreleri olan bir para birimi portföyü oluşturmaktır. Optimize edilmiş bir portföyde para birimi katılmayabilir. Her para birimi için 21 optimizasyon adımıyla altı para biriminin birkaç hesaplaması, toplamda milyarlarca incir hesabına kadar.
Şimdi bir soru. Para biriminin bayrakla ticaret yapmasını yasaklarsak, parametrelerini optimize etmenin bir anlamı yoktur, zaten, sonucu hiçbir şekilde etkilemeyecektir, ancak optimize edici düzenli olarak sonucu etkilemeyen parametreleri seçmeye çalışacaktır, bu boş koşu biraz can sıkıcı (üçüncü gün çoktan geçti). İmkansız olduğunu kendim biliyormuşum gibi görünüyor, ama umut hala parlıyor.
Evet, doğru. Fazladan geçişler olacak. Ancak bu, karmaşık bir optimizasyon başlatmasının bir çeşididir.
TS izin veriyorsa, daha önce cevaplandığı gibi, her çifti ayrı ayrı optimize edin ve kendiniz için, göstermek için, tek bir çoklu para birimi çalışması yapın.
Genel optimizasyon, IMHO'nun sihirli korunma tuzağına düştüğünü ima eder))).
Başka bir çözüm daha var, benim önerdiğimin tersi yönde ama gereksiz koşuları azaltıyor.
Örneğin, 100 parametresini yinelemeniz 50-150 aralığında. Yanlış için bir değer seçin.
Böylece seçeneklerin sayısı bir boyut azaltılır, genetik yerleşir.
incir benim açıklayıcı. Tekrar deneyeceğim. Görev, her para biriminin kendi parametreleri olan bir para birimi portföyü oluşturmaktır. Optimize edilmiş bir portföyde para birimi katılmayabilir. Her para birimi için 21 optimizasyon adımıyla altı para biriminin birkaç hesaplaması, toplamda milyarlarca incir hesabına kadar.
Şimdi bir soru. Para biriminin bayrakla ticaret yapmasını yasaklarsak, parametrelerini optimize etmenin bir anlamı yoktur, zaten, sonucu hiçbir şekilde etkilemeyecektir, ancak optimize edici düzenli olarak sonucu etkilemeyen parametreleri seçmeye çalışacaktır, bu boş koşu biraz can sıkıcı (üçüncü gün çoktan geçti). İmkansız olduğunu kendim biliyormuşum gibi görünüyor, ama umut hala parlıyor.
Init() ve Trade() gibi bir şeye sahipseniz, her bir çift için + parametreler zaten seçilmişse, sadece paylaşımları belirlemek için kalır, o zaman sorun çözülür. Ne yazık ki, genel anlamda, herhangi bir sayıda sistem için çözmek mümkün değildi.
Bu nedenle, "sistemin payı" adımını ayarlamanız gerekir. 6 sistem için geçiş sayısı f-s ile hesaplanır:
Bunun için bir komut dosyası oluşturabilirsiniz:
ayrıca, optimize edilecek görevin iki parametresi vardır - Mult (optimize edilmemiş) ve kısım - 1'den PartCount6(Mult)'a 1'lik bir adımla. Peki, o halde bir örnek üzerinde:
Adım ne kadar küçükse, döngüde o kadar fazla adım atmanız gerektiğini unutmayın. Örneğin, geçiş sayısını sayan komut dosyası 5 dakikadan fazla bir değer döndürmezse, adımı azaltmak daha iyidir. Adımı azaltmak istemiyorsanız, örneğin para birimlerini ikiye bölün, her grubu optimize edin ve ardından tekrar "gruplar olarak" birlikte. (ve sistem korelasyonlarını kullanmak ve çiftler halinde optimize etmek daha da iyidir - o zaman döngüler o kadar korkutucu değildir; ama bu başka bir hikaye).
Farklı sayıda sistem için (en azından daha küçük, en azından daha büyük) - her şey analojiye göredir.
Neredeyse unutuyordum - optimizasyondan sonra paylaşımları bulmanız gerekecek - bu yüzden en çok sevdiğimiz ve OnDeinit'te yazdığımız tek bir geçiş başlatıyoruz:
Bu hatayı bir yıl önce keşfettim ve test ettim ve hatta forumda bahsettim.
Anlaşıldığı üzere, o hala hayatta.
Alt satır: Bir yapıcıda sanal bir işlev çağrıldığında, çağrılan yerel işlev değil, ata işlevidir.
Baskılar:
Bu bir hataysa, lütfen düzeltin.
Bu bir özellikse, yardımda ayrıntılı olarak vurgulayın ve faydalarının neler olduğunu açıklayın.
Kaçınılmaz bir kötülükse - özellikle özel bir kutudaki yardımda belirtin.
Aksi takdirde, programınızda bir hata aramak için uzun süre çıldırmazsınız.
Bir ata kurucu, çocukları ve onların sanal işlevleri hakkında hiçbir şey bilmez.
Bir nesne nasıl inşa edilir?
1. İlk olarak, "birincil hiyerarşi" yapıcısı çağrılır. Sanal işlevler tablosunu ortaya çıkarır. Ata, kalıtım hiyerarşisini izleyen soyundan gelenler hakkında hiçbir şey bilmiyor ve soyundan gelenlerin sanal işlev tabloları henüz mevcut değil.
2. Hiyerarşideki bir sonraki çocuğun kurucusu çağrılır. Bu çocuk kendi sanal fonksiyon tablosunu ortaya çıkarır. Aynı zamanda, ataların işlevleri (sanal olanlar dahil) soyundan gelende mevcuttur. Ama yine, bu soyundan gelen, hiyerarşide kendisini takip eden soyundan gelenler hakkında hiçbir şey bilmiyor (1. paragrafta olduğu gibi).
3. Adım 2, hiyerarşinin sonuna kadar tekrarlanır
Özet. Yapıcılarda sanal işlevler kullanmayın. Evet ve yıkıcılarda da.
Kaçınılmaz bir kötülükse - özellikle özel bir kutudaki yardımda belirtin.
Bir ata kurucu, çocukları ve onların sanal işlevleri hakkında hiçbir şey bilmez.
Bir nesne nasıl inşa edilir?
1. İlk olarak, "birincil hiyerarşi" yapıcısı çağrılır. Sanal işlevler tablosunu ortaya çıkarır. Ata, kalıtım hiyerarşisini izleyen soyundan gelenler hakkında hiçbir şey bilmiyor ve soyundan gelenlerin sanal işlev tabloları henüz mevcut değil.
2. Hiyerarşideki bir sonraki çocuğun kurucusu çağrılır. Bu çocuk kendi sanal fonksiyon tablosunu ortaya çıkarır. Aynı zamanda, ataların işlevleri (sanal olanlar dahil) soyundan gelende mevcuttur. Ama yine, bu soyundan gelen, hiyerarşide kendisini takip eden soyundan gelenler hakkında hiçbir şey bilmiyor (1. paragrafta olduğu gibi).
3. Adım 2, hiyerarşinin sonuna kadar tekrarlanır
Özet. Yapıcılarda sanal işlevler kullanmayın. Evet ve yıkıcılarda da.
TAMAM. Ama yine de yardımda, her şey yolundaysa, belirgin bir yerde işaretleyin.
Genel olarak, bu (kendimi hayal ettiğim gibi) derlemenin hiyerarşisi ile ilgili değil, VMT'nin yapıcıda nereye eklendiği ile ilgili. Başta eklerseniz (kullanıcı tarafından yazılan koddan önce), bu sorun yok gibi görünüyor ve sonraki kod zaten sanal işlevleri çağırabilir. İmkansız mı, istenmeyen mi yoksa.. ?
Bu nedenle, yapıcı tamamlanmadan ve yıkıcı başladıktan sonra sanal işlevleri çağırmamak yaygın bir uygulamadır.
Eh, bu konuda hiçbir şey bilmiyordum, diğer OO dillerinde biraz deneyimim olsa bile. Belki de bir kurucu içinde sanal çağrılar yapmak çoğu zaman gerekli olmadığı için.
TAMAM. Ama yine de yardımda, her şey yolundaysa, belirgin bir yerde işaretleyin.
Bu gerçek, çeşitli yerlerde belgelere yansıtılacaktır.
Tamam harika.
Teşekkürler, ancak (genel geliştirme için) yapıcının başlangıcında (ataların başlatılmasından sonra) sanal yöntemler tablosunu başlatmanın neden imkansız olduğunu sorabilirsiniz.
--
Bazı durumlarda, yapıcıda sanal çağrılar içeren kod oldukça kullanışlı olabilir. Yeni örnek: Bir dosyadan nesneleri doğrudan yapıcıya yüklemek istedim. Sanal fonksiyonlar tarafından döndürülen tip tanımlayıcıları ile karşılaştırılarak, tiplerin doğrudan yükleme sırasında kontrol edilmesi planlandı. Yapıcıdan sanal çağrıların imkansızlığı nedeniyle bir serseri vardı. Sorunu çözdü, ancak planlandığı kadar zarif değil.