Çok para birimli Uzman Danışmanların test sonuçları - sayfa 6

 
tol64 :

Neden bu ikinci kaynağa tutunuyorsun.)))

Esasa dair cevap vermeye başlarsam, cevap ya " metinlerden ayrı olarak alınan ifadeler " veya " Ben her zaman her konuda haklı olduğunu düşünen insanlardan değilim" gibi bir şey olacaktır. Bu zaten açık.

Ping-pong'a gelince - biraz garip bir pozisyon. Belirli bir konuyla ilgileniyorsunuz, size cevap veriyorlar ve yönlendirici sorular soruyorlar ve siz onlara meydan okumaya ya da onları tekmelemeye başlıyorsunuz. Konuya ihtiyaç var, öncelikle size mi, kime mi? Kimse senin işini senin için yapmayacak. Şahsen, bu sonuçlara ihtiyacım yok ve seçtiğiniz sonuçlar çok az ilgi çekici. Konunun kendisi dikkate değer görünüyordu, ancak yazarın polemik coşkusu, onu sürdürmenin tavsiye edilebilirliği konusunda şüpheler uyandırıyor.

 
marketeer :

Nedenmiş? Size orada OnTimer üçüncü numara. Bu konuda zaten alıntı yaptınız: Sadece doğru bir şekilde test edecek bir yöntem uygulamanız gerekiyor. O öyle. Bu, minimum aralıklı OnTimer () işlevidir. Yani başka bir şey düşünüyor olmalısın.

Ondan önce şunu yazmıştın:

pazarlamacı:
Aslında, zamanlayıcı olayları olan tüm enstrümanlara yeni çubukların tiklerinin geldiği anı "yakalamaya" çalışıyorsunuz ve bunu yapmanın en iyi yolunun OnTick olayı olduğu oldukça açık.


Mesele şu ki, OnTimer'da () keneleri "yakalamaya" çalışmıyorum. OnTimer'da (), her bir sembol için ayrı ayrı yeni bir çubuk kontrolü yapılır. Bu kontrol, zamanlayıcıda ayarlanan aralıkta (saniye cinsinden) gerçekleştirilir.

OnTick () işlevinde ve Konstantin Gruzdev tarafından önerilen şemada, yani OnChartEvent () işlevinde tikler gibi bir olay alındı. OnChartEvent'te (), herhangi bir zaman diliminde yeni bir çubuğun oluşumu da dahil olmak üzere herhangi bir olayı da izleyebilirsiniz.

Zamanlayıcı ile ilgili herhangi bir sorun yok. Şimdi çok para birimli bir Uzman Danışmanı şu şekilde test ediyorum:

1. Her bir sembol için parametreleri ayrı ayrı optimize ediyorum, Expert Advisor'ı tam olarak parametreleri optimize edilen sembolün üzerine yerleştiriyorum. Optimizasyon işlemi OnTick () işlevi kullanılarak gerçekleştirilir. Bir sembol için parametreleri optimize ederken, diğerleri devre dışı bırakılır, yani teste katılmazlar ve sadece parametreleri optimize edilen sembol için anlaşmalar yapılır.

2. Tüm semboller için parametreleri optimize ettikten sonra, tüm sembolleri bir kerede test etmeniz gerekir. Kodu OnTimer () işlevine aktarıyorum (şimdiye kadar), ön test için zamanlayıcıyı açtım (60 saniye), sonucu analiz ediyorum. Bana uyarsa para yönetim sistemi ve diğer alt sistemleri kurarım. Sonra son testi açıyorum (zamanlayıcı 10 saniye) ve bence en doğru sonucu alıyorum. Görüş ve sonuçlarım, tüm yöntemlerin test sonuçlarına ve bu sonuçların birbirleriyle karşılaştırılmasına dayanmaktadır.

pazarlamacı:
Bu sizin için önemliyse, geliştiricilere ilk beşte dörtlü bir fxt dosyasının analogunun ne olduğunu kontrol etmenizi tavsiye ederim. Farklı testler için büyük olasılıkla farklı kene tabanlarının oluşturulduğunu zaten yazdım.

İşte ilginç bir tahmin. Öyle olması bile mümkündür. Bu nedenle, geliştiricilerden bir yanıt kullanışlı olacaktır.

 
MT5'te fxt dosyası yoktur. Artık keneler bir dosyaya yazılmaz , ancak hareket halindeki dakika geçmişinden modellenir.

Hareket halindeyken kene oluşturmanın, onları diskten okumaktan daha hızlı olduğu ortaya çıktı.
Документация по MQL5: Файловые операции / FileWrite
Документация по MQL5: Файловые операции / FileWrite
  • www.mql5.com
Файловые операции / FileWrite - Документация по MQL5
 
Renat :
MT5'te fxt dosyası yoktur. Artık keneler bir dosyaya yazılmaz , ancak hareket halindeki dakika geçmişinden modellenir.

Hareket halindeyken kene oluşturmanın, onları diskten okumaktan daha hızlı olduğu ortaya çıktı.
Merhaba Renat. Cevap için teşekkürler. Bu harika bir haber.
 
tol64 :
Merhaba Renat. Cevap için teşekkürler. Bu harika bir haber.
Olağanüstü bir şey görmüyorum, mt5'te gerçek keneler üzerinde test etmenin imkansız olduğu ortaya çıktı
 
Loky :
Olağanüstü bir şey görmüyorum, mt5'te gerçek keneler üzerinde test etmenin imkansız olduğu ortaya çıktı
Gerçek kene veri tabanınızı toplayabilmek veya bir yere götürebilmek ve üzerlerinde veya başka bir şey üzerinde test edebilmek ister misiniz?
 
Yedelkin :

Esasa dair cevap vermeye başlarsam, cevap ya " metinlerden ayrı olarak alınan ifadeler " veya " Ben her zaman her konuda haklı olduğunu düşünen insanlardan değilim" gibi bir şey olacaktır. Bu zaten açık.

Numara. Görünüşe göre hala hiçbir şey anlamıyorsun. Ve şimdi bunu size dördüncü kez açıklayacağım. Diyalogumuzu yeniden kuralım.

Her şey bu andan itibaren başladı:

Yedelkin :
Kodun şu kısmına dikkat edin:

 int OnInit ()
{
if ( iCustom ( "EURUSD" , PERIOD_D1 , "Spy Control panel MCM" , ChartID (), 0 ,CHARTEVENT_TICK) == INVALID_HANDLE )
   { Print ( "Ошибка установки шпиона на EURUSD" ); return ( true );}
   
if ( iCustom ( "GBPUSD" , PERIOD_D1 , "Spy Control panel MCM" , ChartID (), 1 ,CHARTEVENT_TICK) == INVALID_HANDLE )
   { Print ( "Ошибка установки шпиона на GBPUSD" ); return ( true );}
}

Burada, belirli bir "Casus Kontrol paneli MCM" göstergesini iki farklı sembole "astığınızı" görebilirsiniz. Onlar. Sinyal kaynaklarınız farklı karakterlerdir. Ama aynı zamanda "işlemlerin EURUSD üzerinden yapıldığını" iddia ediyorsunuz, yani. sinyalin kaynağı aynı semboldür. Karar verelim.

Bunun için sana cevap verdim:

tol64:

Ah, yaklaşıyor. Görünüşe göre yanıldığım bir seçenek çizildi.)) Şimdi biraz düşüneceğim ve hemen bunun hakkında daha fazla yazacağım ...

Düşündüm. cevap veriyorum :

tol64:

Alım satım sadece EURUSD üzerinde gerçekleştirilir.

Testlerimde Konstantin Gruzdev tarafından yazılan şemayı düşünüyorum - "MetaTrader 5'te çoklu para birimi modunun uygulanması". ))) Her şey tanımlıdır. Makaleye eklenen dosyalar Casus Kontrol paneli MCM göstergesini ve exSpy Kontrol paneli MCM uzmanı içerir. Uzman Danışmanı bir çizelgeye yerleştirerek nasıl çalıştığını görebilirsiniz. Günlük, uzman tarafından farklı sembollerden alınan belirtilen olayları açıkça gösterir. Her şey açık, hiçbir şey karışık değil.

Şimdi, tanımlayıcının alındığı sembolü OnChartEvent () içinde belirtmeye çalıştım, ancak bu, sonuçları değiştirmedi. Yanlış olayları alma olasılığını ortadan kaldırmak için ikinci karakteri OnInit () öğesinden kaldırdım. Şimdi test bu seçeneğe göre yapıldı:

...

kod

...

Resimler

...

Sonuçlar uyuşmuyor. İkinci sembol artık yok, sinyaller sadece EURUSD'den geliyor. Ama bu ne yazık ki sorunu çözmedi.

Kilit nokta şuydu: " İkinci sembol artık yok, sinyaller sadece EURUSD'den geliyor. Ama bu ne yazık ki sorunu çözmedi. "


Anlıyor musun? İkinci kaynağı kaldırmak sorunu çözmedi. Durum basitleştirildi ve ikinci kaynaktan ayrılmak mümkün oldu, ancak bir sonraki soruyu çözmeye çalışmak yerine orijinal örnekten bir örnek vermeye devam ettiniz. Neden yalnızca bir sembole (tek kaynak) sahip olmak, ancak başka bir sembolden işlem yapmak (test modunda) ile aynı olmayan seçenekler elde ediyoruz?

İşte bunu söylediğin yazı:

Yedelkin:
Doğru ifadeyle başlayalım. Orijinal örnekte, "Eurodollar'ın işlem görmesini" istiyorsunuz. Aslında, kullanıcı olayları iki sembolden alındı ve olay işleyicide, olaylar bu iki sembolden herhangi birinden alındığında TradeSignalCounter()+TradePerformer() işlevleri çağrıldı. Olay kuyruğunun her zaman sınıra kadar dolu olduğu varsayılabilir.

Şimdi sinyal kaynaklarından birini kaldırdınız, ancak bir nedenden dolayı olay işleyicisine "if(sparam == Symbol_01)" kontrolünü girdiniz. Ama başka bir soru farklı. Koda bakılırsa, "Tüm işaretler" modunda Lizar'ın şemasını kullanırsınız ve sinyal kaynağından (EURUSD) gelen her işarette TradeSignalCounter()+TradePerformer() işlevleri çağrılır. İlgi zaten olay kuyruğunun olası bir taşma ihtimalini ima etti. Ayrıca bu iki işlev için Symbol_01 parametresi olarak hangi enstrümanı kullandığınızı merak ediyorum ve Lizar'ın şemasındaki olayların sıklığını değiştirmeyi denediniz mi?

Sana her şeyi ikinci kez açıkladım (nedense geri tepme diyorsunuz):

tol64:

Evet, istedim. Sonuçta, her eylemimiz arzumuz tarafından kışkırtılır. Bu durumda, tam olarak istediğimi aldım. Yani, TradePerformer() işlevi, sembol dizisindeki her bir sembol için ticaret izni olup olmadığını kontrol ettiğinden, ticaret yalnızca EURUSD üzerinde gerçekleştirildi. Bu seçenek harici değişkenlerdedir ve o sırada GBPUSD sembolü üzerinde işlem yapmak yasaktı. Kullanıcı olayları iki sembolden geldi, ancak olay işleyicide tekrar ediyorum, TradePerformer() işlevi yalnızca EURUSD sembolü üzerinde işlem yapılmasına izin verdi. TradePerformer() işlevi ayrıca belirli bir sembole, bu durumda EURUSD'ye yeni bir çubuğun gelip gelmediğini belirleyen bir işlev içerir. Olay kuyruğunun her zaman dolu olduğu varsayımınız doğruydu, ancak bu durumda her şey ayrı ayrı işlendi ve günlük çubuklarda test yaparken bir tık gecikmesi önemli değil.

Teste katılmaması gereken bir sinyal kaynağının kaldırılması, yalnızca her şeyin daha önce doğru şekilde yapıldığını doğruladı. "if(sparam == Symbol_01)" kontrolü, test edilmemesi gereken, ancak geçmesi gereken sinyal kaynağını silmeden sonuçları kontrol ettiğimde kaldı. Bu kontrolün aslında gereksiz olduğu bile ortaya çıktı. Sonuçlar değişmedi. Symbol_01 parametresi EURUSD sembolüdür. Olayların sıklığını değiştirmeyi denedim ama bu hiçbir şeyi değiştirmedi. Daha doğrusu all tiki modu en doğru olanı diyebilirim.

Kilit nokta: " Bu test aslında gereksizdi. Sonuçlar değişmedi. "
Sorunun ikinci kez işaret ettiğiniz şey olmadığını ikinci kez “fark etmediniz” ve ikinci kez size aynı şeyi, hatta daha ayrıntılı olarak cevaplıyorum.

Devam ettiniz:

Yedelkin:
"... ondan önce her şey doğru yapıldı" - bu gönül rahatlığı kategorisinden. Başlangıçta yanlıştı. Görünüşe göre, "olay kuyruğunun taşması" gibi bir olguya önem vermiyorsunuz. Özellikle olayları kenelerle aktarırken. Bu konudaki yardım materyallerine ve foruma bakın. Anahtar kelime "sıra" dır.

TradeSignalCounter()+TradePerformer() işlevlerinin yalnızca bir sinyal kaynağından gelen olayları işlemesi, olay kuyruğunun durumunu ve olası taşmasını değiştirmedi. Başka bir deyişle, "GBRUSD sembolündeki olayların işlenmesini yasaklamak", ilgili olayları olay kuyruğundan hiç kaldırmadı. Üçüncü kez soruna dikkat çekiyorum: "İlgi zaten olay kuyruğunun olası bir taşmasına işaret etti" :) Sadece "bir tık geç"ten bahsettiğimizi düşünüyorsanız, o zaman bu tür sonuçlar neye dayanıyor?

"... bu durumda, her şey ayrı ayrı ele alındı." Sorun, orijinal sürümde, olay işleyicinin her iki sinyal kaynağından da olaylar alındığında işlevleri çağırması ve ardından bu işlevlerin "gereksiz" kaynaktan gelen sinyali filtrelemesidir. Ancak işlevler her (!) seferde çağrıldı.

Evet, olay işleyicisinin hangi periyotta test edildiği önemli değildir. Lizar'ın planı tik başına sinyal üretiyorsa, günde bir kez değil, tik başına olay kuyruğunu doldururlar.

"Olayların sıklığını değiştirmeye çalıştım ama hiçbir şeyi değiştirmedi. Daha doğrusu all-tick modunun en doğru olduğunu söyleyebilirim." Lizar'ın kene olmayan modlarında karşılaştırmalı ekran görüntüleri sağlayabilir misiniz?

Ve sana üçüncü kez en kibar şekilde cevap verdim. Ve görünüşe göre alay konusu olarak algıladığın ifadeler aslında sana karşı olan dostluğumu ifade ediyordu. Çok belirsiz oldukları için onları başka bir yere sokmamaya çalışacağım.

tol64:

Günaydın! ))

Bu ifadeye ek olarak, metinden ayrı olarak şunu da yazdım: "... Bir yerde yanıldığımı asla göz ardı etmem ve her zaman her şeyi kontrol ederim. Ama en sıkı kontrollerden sonra bile, ilk bakışta her şey doğru göründüğünde , Yine de bir yerlerde bir yanlışlık olabileceğini göz ardı etmiyorum. Her konuda her zaman haklı olduğunu düşünen insanlardan olmadığımı da ekleyeceğim. )))

Zamanlayıcı konusuna baktım. Vurgulanan kilit noktalar şunlardır:

1. Bir olay işlenirken diğerleri işlenemez.

2. Olay yığını taşarsa, eski olaylar işlenmeden kuyruktan kaldırılır.

Sırayla gidelim. Olayların bir listesi var:

...
kod
...
Başlatma sırasında, olayı hangi sembolden alacağımızı ve hangi olayı alacağımızı belirtiriz:
...
kod
...

Yani CHARTEVENT_TICK olayını sadece EURUSD sembolünden kabul edeceğiz. Başka karakter yok.

Test başladı. Bir olay meydana geldiğinde, program OnChartEvent() işlevine girer, ticaret sinyalleri için değişken dizileri bildirir ve olayın ne olduğunu kontrol eder. Bu özel bir olaysa, program TradeSignalCounter()'da bir sinyal tanımlar, ardından TradePerformer() işlevinde yeni bir çubuğun gelip gelmediğini kontrol eder ve buna bağlı olarak diğer koşullara karar verir. İşlev işini tamamladı ve ancak EURUSD grafiğinde bir olay meydana geldikten sonra başlayacak. Bu, bu durumda kene.

...

kod
...

Bu işlevlerin yürütülmesi çok hızlıdır. Hiçbir etkinlik kuyruğunun taşacak zamanı olmayacak ve hiçbir önemli etkinliği kaçırmayacağız. Ve sıra taşarsa ve olaylar atlanırsa, neyi kaçıracağız? Tik, iki tik, üç? Peki ya ne? Bu, günlük barlarda ihmal edilebilir.

Neden bu ikinci kaynağa tutunuyorsun.))) Artık ikinci bir kaynak yok. Bir - EURUSD var, ancak EA GBPUSD'den EURUSD grafiğine işlem yapıyor. Ve sonuçlar aynı şekilde yanlıştır. Kopyala. Yani, ikinci kaynak mevcutmuş gibi. )))

-----------

Testi kendiniz yapmak, test sonuçlarını göstermek ve doğru test sonuçlarını almak için ne yaptığınızı (kısaca) yazmak, tabii ki yapabilirseniz daha iyidir. En basit Expert Advisor bu test için uygundur. Herhangi bir koşulla giriş, Zarar Durdur, Kar Al. Son 10 yıldır günlük barlar olsun. Ve kendin kendin göreceksin. Bazı parçalar eşleşecek ve bazıları olmayacak. Sonuç grafiğini açın ve tutarsızlığın nerede olduğunu görün.

Ve ondan sonra şunu yazıyorsunuz:

Yedelkin:
Ping-pong'a gelince - biraz garip bir pozisyon. Belirli bir konu ile ilgileniyorsunuz, cevaplanıyorsunuz ve yönlendirici sorular soruyorsunuz ve ya tartışmaya ya da onları tekmelemeye başlıyorsunuz. Konuya ihtiyaç var, öncelikle size mi, kime mi? Kimse senin işini senin için yapmayacak. Şahsen, bu sonuçlara ihtiyacım yok ve seçtiğiniz sonuçlar çok az ilgi çekici. Konunun kendisi dikkate değer görünüyordu, ancak yazarın polemik coşkusu, onu sürdürmenin tavsiye edilebilirliği konusunda şüpheler uyandırıyor.

Sonra sorular var.

1. Aynı şeyi tekrarlarsanız nasıl bir tepki bekliyordunuz, yani neyin artık alakalı olmadığı ve size zaten üç kez cevap verilmiş olan şey nedir?

2. Tartıştığımı düşündüren nedir? Cevaplarımı bir argüman olarak aldıysanız, yanılıyorsunuz, çünkü cevap verdim ve ne yaptığımı açıkladım. Ama bunu bir anlaşmazlık olarak kabul ettin, çünkü kendin tartıştın. )))

3. İşimi yapması için asla başkasına güvenmem.

4. Konu sadece benim için değil, bu sorunla karşılaşan herkes için gerekli. Madem ihtiyacınız yok, o zaman neden bir diyaloga girdiniz? Benim polemik hevesim sadece bir sonuçtu, sebep senden geldi.

---
Psikolojik açıdan, davranışlarınızı analiz etmeyeceğim, aksi takdirde sen ve ben atmosferden uçmak zorunda kalacağız. Bu nedenle, diyaloğu kısa ve öz tutmaya çalışalım. Ancak buna ihtiyacınız yoksa, devam etmemek daha iyidir. Çünkü: Lütfen kurallara uyunuz. )))

 

Tabii ki, kişisel olarak başka birinin dünya görüşünün özelliklerini analiz etmekle ilgilenmiyorum. Yukarıda polemik coşkunuzla ilgili sonuçların ana hatlarını verdim. Hiçbir şey ekleme.

 
Yedelkin :

... Hiçbir şey ekleme.

Evet, olmaması daha iyi. Aksi halde boş konuşma olur. Konuya geri dönelim.

---

Başka bir dizi test yaptım. Bundan önce, sunulan test sonuçları - Sadece açılış fiyatları modunda elde edildi. Bu modda, bence, yalnızca OnTimer () işlevini kullanarak doğru sonuçları almayı başardım. Diğer tüm yöntemler eşleşme göstermedi.

Bu sefer testleri 2011'in başından itibaren - Tüm onaylar modunda çalıştırdım. Aynı zamanda, şu veya bu yöntemin ne kadar süreceğini görmek ilginçti. Örneğin, Uzman Danışmanların şampiyonaya katılmak için otomatik testi sırasında, Uzman Danışmanın "Tüm onaylar" modunda en fazla 15 dakika test edilmesi gerekir. Test için 12 döviz çifti ticareti yapan basit bir Uzman Danışman oluşturdum. Koşullardan sadece pozisyon açma, Zarar Durdur , Kâr Al , Takip Eden Durdurma koşullarını içerir. Pozisyonda artış veya azalış yoktur, para yönetim sistemi yoktur, işlem gören lot sabittir (0.1). Expert Advisor tek bir döngü olmadan yazılmıştır, yani mümkün olduğunca basitleştirilmiştir. Tüm H8 sembollerinde çalışma süresi.

OnTick () işlevini kullanarak her bir sembol için parametreleri ayrı ayrı optimize ettim. Optimizasyonun bitmesini beklemedim. 100 geçişten sonra optimizasyonu durdurdum ve en iyi seçeneği değil, en az riskli olanı seçtim.

Testin yapıldığı işlemcinin frekansı 2 GHz'dir . İşte odaklanmanız gereken şey.

Ayrıca, amaç tam bir eşleşme olmadığı için aynı kelimeyi neredeyse aynı ile değiştireceğim, ancak grafiği görsel olarak analiz ederken farklılıklar belirgin olmamalıdır.

---

Test sonuçları:

İlk test için, geçen sefer neredeyse aynı sonuçları gösteren OnTimer () işlevi kullanıldı. Ve şimdi sonucu, karşılaştırma için bir ölçüt görevi görecek.

Açık Zamanlayıcı ()

Zamanlayıcı aralığı 60 saniyedir.

Test 27 dakika sürdü.

---

Zamanlayıcı aralığı 300 saniye:

Sonuçlar neredeyse aynı. Testin süresi 26 dakikadır.

---

Zamanlayıcı aralığı 28800 saniye - 8 saat (kullanılan zaman aralığı).

Sonuçlar neredeyse aynı. Testin süresi 25 dakikadır.

Ayrıca 1800 ve 3600 saniye aralıklarla testler yaptım, sonuçlar da tutarlı.

-----------

OnChartEvent ()

Periyot 1 dakika - CHARTEVENT_NEWBAR_M1 .

Sonuçlar neredeyse aynı. Testin süresi 37 dakikadır.

---

Periyot 1 dakika - CHARTEVENT_NEWBAR_H1 .

Sonuçlar neredeyse aynı. Testin süresi 27 dakikadır.

---

Periyot 1 dakika - CHARTEVENT_NEWBAR_H8 .

Sonuçlar neredeyse aynı. Testin süresi 27 dakikadır.

----------

OnTick ()

Sonuçlar neredeyse aynı. Testin süresi 72 dakikadır.

-----------------

"Tüm onaylar" modunda, tüm yöntemler neredeyse aynı sonuçları gösterdi. OnTick () en uzun seçenek olarak ortaya çıktı. OnTimer () ve OnChartEvent () testinin süresi pratik olarak aynıdır.

Rapor:

Sonuçta:

Benim durumumda, tek bir yöntem bile, testi geçemeyeceğinden (H8) çok geniş bir zaman diliminde (H8) 12 döviz çifti ticareti yapan en basit çoklu para birimi Uzman Danışmanının bile şampiyonaya hazırlanmasına izin vermez (15 dakika için 15 dakika). testi). "İştahınızı kesmeniz" veya EA kodunu mümkün olduğunca verimli bir şekilde optimize etmek için yöntemler aramanız gerekecek.

---

Acaba 12 çift üzerinde hızlı bir test yapan var mı? Testiniz ne kadar sürüyor?

 
tol64 :

Acaba 12 çift üzerinde hızlı bir test yapan var mı? Testiniz ne kadar sürüyor?


3. Yapılandırma
EURUSD üzerinde capr2011:H1 her tik 2011.01.01-2011.08.01


4.Başla
3 dk 21 sn de bitti


5. İstatistik
1233 kb günlük dosyaları
100 işlem, 200 işlem, kar 83043.82 USD
Neden: