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
Sezgi hakkında konuşalım. İlginç bir örnek vermek istiyorum. İki yıldan fazla bir süre önce https://www.mql5.com/en/forum/95632/page12 bu başlıkta yayınlanan mesajım:
1. Grafik motoru kavramı.
2. Grafik çekirdeği kavramı.
3. MT platformu için görsel stüdyo oluşturma aşamaları.
4. Bir EA arayüzü oluşturma mekanizmasının açıklaması.
1. Grafik motoru, gösterge olarak yürütülen bir programdır. Bu program yalnızca kullanıcı arayüzünü yönetmek için tasarlanmıştır. Bir dizi temel işlevi gerçekleştirir:
Grafik motoru, diğer göstergeler gibi grafiğe eklenir. Aşağıdaki pencere setini içerir:
Bu konuda, prensip olarak, bir grafik motoru kavramı tükenmiştir. Onsuz arayüzün çalışmasının imkansız olması önemlidir.
2. Grafik çekirdeği, bir dizide yazılmış ve bir dosyaya kaydedilmiş, arayüzün tüm nesnelerinin ve pencerelerinin verilerini içeren bir bilgi bloğudur.
Bu blok , grafik arayüzün dijital bir yansımasıdır. Kullanıcı tarafından yönlendirildiği şekilde grafik motoru tarafından yüklenir. Grafik motorunun kendi dahili grafiği vardır. kendi pencerelerini sağlayan bir çekirdek ve bu çekirdeğin içinde, kullanıcı arayüzünün (dijital olarak) entegre edilmesi için yer var. Entegrasyon, grafik çekirdeğinin bir dosyadan yüklenmesi sürecinde gerçekleştirilir.
3. MT platformunda bir görsel stüdyo oluşturmak, benim anlayışıma göre iki aşamaya ayrılmıştır:
4. Arayüz oluşturma sürecinin mekanizmasını genel hatlarıyla özetlemek ve teknolojisindeki perdeyi biraz açmak istiyorum. Bir dosya aracılığıyla arayüz oluşturma kolaylığının nereden geldiğini açıklayın.
Mesele şu ki: motorun özel bir özelliği var. minimum miktarda önyükleme bilgisi ile tek bir dosyaya dayalı tam teşekküllü bir grafik çekirdeği oluşturan bir işlev. Bu dosyadaki önyükleme bilgileri kendi kendini açıklayıcıdır ve insanlar tarafından okunabilir. Yazması ve düzenlemesi kolaydır. Örneğin, bir pencere oluşturmak için "_CREATE_NEW_WINDOW" yazmanız ve bir onay kutusu , "_CHECKBOX" ve bu onay kutusunun adını oluşturmanız yeterlidir (motor, öğenin adını öğenin adı olarak otomatik olarak tanır) ve parametresinin adı olarak).
Bu işleve "G_CORE_BUILDER()" adı verilir ve iki ana kaynaktan veri alarak grafik çekirdeğini oluşturur: kullanıcı tarafından oluşturulan bir önyükleme dosyasından ve tüm standart nesne gruplarını içeren "CONTENT[]" dizisinden . pencerenin bir parçası ve kontrol platformları. "CONTENT[]" ayrıca nesne durumlarını ve komut dosyalarını da içerir. Hepsi bir dizide. Genel olarak, "CONTENT[]" + kullanıcı tarafından oluşturulan bir önyükleme dosyasındaki kaynak malzeme, motorun çalıştığı grafik çekirdeğini oluşturmak için "G_CORE_BUILDER()" işlevi tarafından kullanılır.
İKİ YILLIK sıkı çalışmayla terimlerin ve kavramların bu kadar DEĞİŞMEDİĞİ şaşırtıcı. Ve fonksiyonlar, diziler ve anahtar kelimeler, - burada yazdığı gibi. Her şey bu senaryoya göre uygulanmaktadır. Ve bu teknoloji çalışıyor ve gelişiyor. İki yıl önce, bir biçimlendirme dili geliştirme konusunda hiç deneyimim olmadı.
Bir çıkmaza girmedim, konsepti değiştirmedim, yön değiştirmedim. Motoru, çekirdeği ve biçimlendirme dilini tam olarak amaçladığı gibi oluşturmaya devam etti. Ve uygulama, yol seçiminin doğruluğunu onaylar.
Bu kehanet sezgisi değilse, nedir?
Sevgili rakipler.
İşte komut dosyası kodu:
Sonuç:
Benim çözümüm 10 kattan daha hızlı.
ResourceReadImage() ile kaynak kaydetme süresini ve kaynağı bir diziye alma süresini çözümünüze ekleyin;
Benim çözümümde ne birincisi ne de ikincisi GEREKLİ DEĞİLDİR.
Benim çözümüm 10 kattan daha hızlı.
Peter, bir iple çalışırsan, her durumda performansı kaybedersin. Bu nedenle, başlangıçta bunun için uygun olmayan bir çözüm seçmiş olsanız da, efsanevi performansı nasıl kovaladığınızı sizden duymak şaşırtıcıdır: mesajları bir dizeden geçirmek ve ardından bu mesajı ayrıştırmak.
Peter, bir iple çalışırsan, her durumda performansı kaybedersin. Bu nedenle, başlangıçta bunun için uygun olmayan bir çözüm seçmiş olsanız da, efsanevi performansı nasıl kovaladığınızı sizden duymak şaşırtıcıdır: mesajları bir dizeden geçirmek ve ardından bu mesajı ayrıştırmak.
Vasily, programlar arasında her tür veriyi başka nasıl aktarabilirim?
OnChartEvent() kısmen uygundur.
Ve bu arada, 20 milisaniyeden daha kısa olan ölçümler, kesinlikle konuşmak gerekirse, en azından önleyici çoklu iş parçacığına sahip sistemlerde geçerli değildir. Ancak sonucunuzu kabul etseniz bile (genel olarak kabul ediyorum), yine de hiçbir şey söylemiyor, çünkü tam daireyi hesaba katarak maliyetler önemli. Ve ölçtüğünüz şey bunun sadece bir parçası.
Evrensel ve hızlı bir yola ihtiyacımız var. Test cihazında çalışmak ve OnChartEvent() olay kuyruğunu atlamak için;
Testin gösterdiği gibi, kaynaklar üzerinden aktarım 10 kat daha yavaştır. (bir kaynağı kaydetme ve ResourceReadImage() kullanarak ondan veri alma süresini ölçmeden).
Benim çözümüm, orijinal koşullar altında en iyi seçenektir.
...Ama sonucunuzu kabul etseniz bile (bütün olarak kabul ediyorum), yine de bir şey söylemiyor, çünkü tam daireyi hesaba katarak maliyetler önemli. Ve ölçtüğünüz şey bunun sadece bir parçası.
Doğru, ancak daha fazla satır ve aktarım için tahmin edildiğinde, sürümüm hala kazanıyor.
Vasily, programlar arasında her tür veriyi başka nasıl aktarabilirim?
Yapıların birleşim yoluyla küresel erişim için paylaşılan bir bayt dizisine doğrudan eşlenmesi. Bunun teknik olarak mümkün olup olmadığını bilmiyorum, ama eğer öyleyse, o zaman hız kozmik olacaktır, çünkü. hiçbir şeyi kopyalamak zorunda değilsin.