danışman projesi - sayfa 7

 
George Merts :

Yani "ATR gösterge sayılmaz" nasıl oluyor ???

Ve nasıl "giriş için bir sinyal olarak iyi değil ??? Ve ben bir aptalım, sadece bu göstergeyi kullanarak "volatilite kırılması" girişini kullanıyorum...

Göstergelerin özü hakkında kendi özel anlayışınıza sahip olduğunuzdan şüpheleniyorum... Benim için gösterge, zamana bağlı olarak bazı değişken değerler üretebilen bir nesnedir. Aslında, normal bir şamdan fiyat tablosu bile bir göstergedir. Ama senin için başka bir şey... Buna göre anlayışımız farklı.

eğer aslında
gösterge = bir şeydeki değişiklikleri gösteren araç (cihaz).
bu açıdan ATP göstergesi.
Mesajımda, gösterge kelimesini piyasaya girmek için bir sinyal sağlayıcı olarak kastettim ("piyasada kalıcı olarak" işlem yapmak için göstergeleri test etmekten bahsediyordum). sonuç olarak, kalkış, duraklama ve destek olmaksızın giriş ve geri dönüş için bir sinyal göstermelidirler). Çok sayıda ticaret sistemi var, ancak yalnızca göstergenin her zaman piyasada olmasıyla ticaret yapma fırsatı arıyordum. oynaklığın dökümü, bildiğim kadarıyla, belirli bir al ve dur ile işlem görüyor.

Samimi olarak.

 

Я не вижу особой разницы - как я понимаю, WS (WareStore, вероятно ?) - это все тот же мой дата-провайдер.

Bu, Çalışma Simgesinin kısaltmasıdır. Kısa kısaltma, bu nesneye sık sık atıfta bulunulması nedeniyle bilerek seçilmiştir.

WS nesnesinin başlatılmasında bazı ön adımlar olması gerektiğinden şüpheleniyorum.

WS'de bu, varsayılan oluşturucusu geçerli Symbol() sembolünü kullanan bir CSymbol nesnesinin bir örneğidir. Bu nedenle, WS dışarıdan başlatma gerektirmez. Basitçe strateji sınıfı ile birlikte oluşturulur.

Bir Expert Advisor'da farklı sembollerden ve farklı zaman dilimlerinden oluşan birçok farklı kap olabilir. Veri sağlayıcının ideolojisi, onları kopyalamamanıza izin verir. Gerçek olduğu için - tüm zaman serileri içinde saklanır ve kaplar - sadece gerekli olanları gösterir.

Sonuç olarak, uzman sınıflar tarafından erişilen bir mega sınıf çekirdek elde edilir. Bir MetaTrader çekirdeği ve ona erişen yüzlerce işlevi olduğunda bunun temel MQL'den farkı nedir?

MT4-5'in kendisini bir veri sağlayıcı olarak kabul edersek ve sınıfımızı yalnızca erişim sağlamak için kullanırsak, o zaman, Açık fiyata olan itirazınıza göre, tek bir değer için CopyOpen() işlevini çağırmalıyız - öyle görünüyor ki bana mantıksız

Aynen öyle. Yalnızca böyle bir tersine çevirme, veri temsilinin birliğini ve durumların tam senkronizasyonunu garanti eder. Herhangi bir teklif güncellemesi yapmaya gerek yok (unutulabilir), bir aracı veri ambarı oluştururken kaçınılmaz olarak ortaya çıkan bir sürü ek geçiş anahtarı kullanmaya gerek yok. İstenen verilerle eşleşen veriler için veritabanını aramaya gerek yok. EA'm şunları yaparsa:

Trade.SellLimit(WS. High [ 1 ]);

O zaman, ticaret ortamının nasıl güncellendiğinden bağımsız olarak, WS.High[1]'in önceki ekstremumu kendisine döndüreceğinden emin olur. Evet, her çalıştırdığınızda CopyHigh'ı çağırmak ve tek bir çift değeri kopyalamak pahalıdır, ancak %100 güvenilirdir. Wrapper sınıfları veri saklamayıp sadece sistem fonksiyonlarına çağrılara ilettiği için saklanan verinin mevcut ortama uymadığı durumlar ortaya çıkamaz.

Ayrıca programın herhangi bir yerindeki tüm değişkenlere tam global erişim vermeyi son derece mantıksız buluyorum, aksine programın her yerinden sadece bu işlem için gerekli olan yapılara ve verilere erişmeye çalışıyorum. Diğer her şey kullanılamaz olmalıdır. Veri sağlayıcının ideolojisi sadece bu erişimi kontrol etmenize izin verir.

Georg, aslında bu küresel erişimi zaten yarattınız. Herkesin aradığı büyük bir süper sınıf sağlayıcınız var. Bu, OOP şeker sarmalayıcısı altında toplanmış büyük bir küresel nesne havuzudur (göstergeler, zaman serileri vb.). Onlar. OOP, veri sağlayıcı örneğinde bir kurguya dönüştü. Biçimsel olarak vardır, ancak gerçekte yoktur.

 
Vasiliy Sokolov :

Georg, aslında bu küresel erişimi zaten yarattınız. Herkesin aradığı büyük bir süper sınıf sağlayıcınız var. Bu, OOP şeker sarmalayıcısı altında toplanmış büyük bir küresel nesne havuzudur (göstergeler, zaman serileri vb.). Onlar. OOP, veri sağlayıcı örneğinde bir kurguya dönüşmüştür. Biçimsel olarak vardır, ancak gerçekte değildir.

Hayır, bir veri sağlayıcıya bir arabellek yerleştirdiğimde veya CopyXXX tarafından her seferinde veri aldığımda çalışma hızını karşılaştırdım - arabelleğime birçok kez daha hızlı çağrı aldım. Bu yüzden arabelleklerime yerleştim, ancak Veri Sağlayıcı sadece bu aynı arabelleklerin merkezi bir deposudur.

Gerçekten de, bir "katmanın" varlığı - bu veri sağlayıcının kendisi, veri senkronizasyonunun bozulması tehlikesini ortaya çıkarır. Ama henüz böyle bir sorunla karşılaşmadım ama veri sağlayıcı oldukça net bir şekilde hız tasarrufu sağlıyor. Aslında, bence, bu test zaten birçok kişi tarafından gerçekleştirildi - bir kene işlerken herkesin verileri bir kez kopyalayıp kullanmasının, her seferinde veri için terminalle iletişim kurmaktan daha karlı olduğu ortaya çıktı.

Şimdi farklı mı? Ve her bir çift değer için CopyXXX aracılığıyla yapılan bir dizi çağrının hızı, tüm aralık için hemen yapılan bir çağrı ile aynıdır ve ardından - değerler için arabelleğe yapılan bir çağrı?

 
George Merts :

Hayır, bir veri sağlayıcıya bir arabellek yerleştirdiğimde veya CopyXXX tarafından her seferinde veri aldığımda çalışma hızını karşılaştırdım - arabelleğime birçok kez daha hızlı çağrı aldım. Bu yüzden arabelleklerime yerleştim, ancak Veri Sağlayıcı sadece bu aynı arabelleklerin merkezi bir deposudur.

Gerçekten de, bir "katmanın" varlığı - bu veri sağlayıcının kendisi, veri senkronizasyonunun bozulması tehlikesini ortaya çıkarır. Ama böyle bir sorunla hiç karşılaşmadım ama veri sağlayıcı oldukça net bir şekilde hız tasarrufu sağlıyor. Aslında, bence, bu test zaten birçok kişi tarafından gerçekleştirildi - bir kene işlerken herkesin verileri bir kez kopyalayıp kullanmasının, her seferinde veri için terminalle iletişim kurmaktan daha karlı olduğu ortaya çıktı.

Şimdi farklı mı? Ve her bir çift değer için CopyXXX aracılığıyla yapılan bir dizi çağrının hızı, tüm aralık için hemen yapılan bir çağrı ile aynıdır ve ardından - değerler için arabelleğe yapılan bir çağrı?

Şüphesiz, tüm alıntıları bir kerede uzmanın (veri sağlayıcı) dahili belleğine kopyalamak ve ardından değerleri oradan çekmek, sürekli CopyBuffer'ı çağırmaktan çok daha hızlıdır. Ama devlet üzerine kurulu bir sistemin bedeli böyledir. Genel olarak, tüm konu alanımız Uzman Danışmanlar , senaryolar vb. yazmaktır. bu, durumlara dayalı sistemlerin programlanmasıdır: bir düzen var - bakımı için kuralları işliyoruz. Sipariş yok - açma koşullarına bakıyoruz.

CopyBuffer'a gelince, büyük miktarda alıntı kopyalamak ve performans kazancını ölçmek sadece sentetik testlerde mümkündür. Uygulamada, vakaların %90'ında Expert Advisor, her tikte veya yeni bir çubuk açma anında son çubukla çalışır. Bu nedenle, son çubukla ilgili veriler her zaman istenir ve son çubuğu önbelleğe kopyalamak için CopyBuffer'a sürekli bir çağrı vardır.

Tek gerçek performans artışı, EA'nın N son çubuğa ihtiyaç duyması halinde olacaktır, burada N, 1'den önemli ölçüde büyük bir sayıdır. Fakat N son çubuk için bir talep nedir? Bu, sürgülü bir pencerede çalışmaktır (uzmanın tüm çalışmasının %99'u). Kayan bir pencere aslında bir halka arabelleğidir. Bu nedenle, son N çubuk istenirken, gerçekte sadece bir tane, son çubuğun güncellenmesi veya eklenmesi gerekir. Onlar. bir veri bloğunun kopyalanmasıyla ilgili tüm bu hikaye çok güzel bir hikaye, ancak oluşturulduğu konu alanında çalışmıyor ve ayrıca halka arabellekleri çok başarılı bir şekilde çalışıyor.

Şu anda CSymbol'um sadece doğru dizini geçerek çalışıyor. Ancak, N son çubuğu önbelleğe alacak şekilde modernize edebilirim, N ise istenen maksimum dizine bağlı olarak CSymbol'un kendisi tarafından seçilir. Ve sonra, herhangi bir harici değişiklik olmadan, bazı görevlerde CSymbol, CopyBuffer'a yapılan sürekli çağrıdan çok daha hızlı çalışacaktır. Bu, OOP'nin gücüdür. Ek bağlamaların kullanımıyla ilişkili belirli bir ek yükün birikmesinden sonra, uyarlanabilir algoritmalar nedeniyle bellek kullanımını veya işlemci süresini önemli ölçüde azaltmak mümkün olduğunda niteliksel bir sıçrama meydana gelir.

 
Gregory Kovalenko :
Merhaba.
Kod miktarının artması ile bazen zorluklar ve kafa karışıklığı ortaya çıkmaktadır.
EA kodunu çok sayıda kod satırıyla gördüm, EA'ların ne kadar karmaşık tasarlandığını merak ediyorum, belki bu kadar karmaşık algoritmalarla çalışmak için bazı araçlar veya teknikler vardır?

Yüzlerce satıra yayılan devasa kod blokları yazarım. Neredeyse yorumsuz. OOP yok. Rusça kod. Her şey çok verimli çalışıyor. Yaklaşık 100 bağlantılı dosya olmasına rağmen programda yönlendirme ile ilgili bir sorunum yok. Muhtemelen buna zaten alıştığım ve her şeyi uzun zamandır hatırladığım için. Bu nedenle, ana şey programınızı bilmek ve iyi anlamaktır, gerisi ikincildir. BENİM NACİZANE FİKRİME GÖRE.

 
Реter Konow :

Yüzlerce satıra yayılan devasa kod blokları yazarım. Neredeyse yorumsuz. OOP yok. Rusça kod. Her şey çok verimli çalışıyor. Yaklaşık 100 bağlantılı dosya olmasına rağmen programda yönlendirme ile ilgili bir sorunum yok. Muhtemelen buna zaten alıştığım ve her şeyi uzun zamandır hatırladığım için. Bu nedenle, ana şey programınızı bilmek ve iyi anlamaktır, gerisi ikincildir. BENİM NACİZANE FİKRİME GÖRE.

1C'den MQL'ye mi geldiniz?
 
Vasiliy Sokolov :
1C'den MQL'ye mi geldiniz?

Kendi kendime öğrendim. Ustalaştığım ilk programlama dili MQL4 idi. C# ve C++ ile biraz pratik yaptıktan sonra.


1'leri duymadım. Bu ne?

 
Vasiliy Sokolov :

CopyBuffer'a gelince, büyük miktarda alıntı kopyalamak ve performans kazancını ölçmek sadece sentetik testlerde mümkündür. Uygulamada, Uzman Danışman, vakaların% 90'ında her bir işarette veya yeni bir çubuk açma anında son çubukla çalışır. Bu nedenle, son çubukla ilgili veriler her zaman istenir ve son çubuğu önbelleğe kopyalamak için CopyBuffer'a sürekli bir çağrı vardır.

Sonuçta, sadece "sentetik testte" işin hızına ihtiyacımız var - strateji test cihazındaki seçenekler üzerinde yineleme yaparken hız kritik hale geliyor. Benim için hızın gerekli olduğu "darboğaz" strateji test cihazıdır.

Sadece, gerçekten, gerçek işte - CopyXXX aracılığıyla doğrudan veri erişiminin hızı, her seferinde kafa için yeterlidir. Ancak, test cihazındaki çalışmalar için - hızdaki fark çok önemlidir.

 
Bu konu ile ilgili olmayan yorumlar " OOP vs Prosedürel Programlama " bölümüne taşınmıştır.
 
George Merts :

Sonuçta, sadece "sentetik testte" işin hızına ihtiyacımız var - strateji test cihazındaki seçenekler üzerinde yinelenirken hız kritik hale geliyor. Benim için hızın gerekli olduğu "darboğaz" strateji test cihazıdır.

Sadece, gerçekten, gerçek işte - CopyXXX aracılığıyla doğrudan veri erişiminin hızı, her seferinde kafa için yeterlidir. Ancak, test cihazındaki çalışmalar için - hızdaki fark çok önemlidir.

Daha basit bir şekilde açıklamama izin verin: veri sağlayıcınızın en temelinde, en son karakteri kopyalayan CopyXXX işlevi bulunur. CSymbol'umun altında da aynı son karakteri kopyalayan CopyXXX var. Her iki işlev de yavaştır. Bu nedenle, hem sizin hem de benim kodum yavaştır, çünkü CopyXXX çağrısı atlanamaz. Ama benim kodum daha basit ve daha küçük. O zaman neden CopyXXX üzerindeki tüm bu çok katlı eklenti, CopyXXX sorununu çözmüyorsa?

Neden: