Yeni nesil ticaret programlarının gelişi. Danışmanların arayüzü nasıl olmalıdır? - sayfa 12

 
Yury Kulikov :
Her şey nasıl başladı :)
Bir EA'da uygulanan dosya gezgini göstergenizi kullanarak bir arayüz oluşturma örneğinden bahsettim. Ancak "dosya gezgini" kelimelerine bağlı kalmayın, bu bir görev örneğidir ve Expert Advisors'da benzer birçok görev olabilir: terminal pencerelerinin gezgini, bir çizelgedeki nesneler, bir terminaldeki göstergeler... Ve bu, global değişkenler aracılığıyla göstergenize eklemek istediğiniz liste (tablo) satırları aracılığıyla uygulanan küçük bir görev katmanıdır.
Şu anda biraz kafam karıştı ve yazılarınızın bazı noktalarını kaçırdım. Affınıza sığınırım. Biraz sonra motor, stüdyo, arayüz ve danışman kavramını ayrıntılı olarak anlatacağım. Sonra tartışabiliriz. :)
 

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:

  • GUI çekirdeğini bir dosyadan yükleme.
  • Kullanıcı arayüzü ayarlarını kaydetme.
  • Arayüzdeki tüm süreçlerin tek ve koordineli yönetiminin uygulanması. Konsepti içeren arayüzü yönetmenin "mekaniğini" uygular: pencereleri açma ve kapatma, pencereleri yeniden boyutlandırma, pencereleri taşıma, pencereleri birleştirme, ölçeklendirme, komut dosyalarını oynatma, nesne durumlarını değiştirme, nesneleri bağlama, kontrol parametrelerinin değerlerini yönetme türlerine ve özelliklerine göre kürelerin yaratılması ve yok edilmesi. değişkenler.

Grafik motoru, diğer göstergeler gibi grafiğe eklenir. Aşağıdaki pencere setini içerir:

  • Sağ tarafında, motorun servis pencerelerini çağıran birkaç simge eklenecek olan görev çubuğu.
  • Dosya gezgini, yardımı ile önyükleme dosyasının özel olarak yerleştirilmiş arabirimlere sahip dosyalar listesinden seçileceği. dosya.
  • Bu aşamada temel bir rol oynamayan isteğe bağlı ayar pencereleri.

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:

  • İlk aşamada, arayüz kurucusunun bir dosya versiyonu oluşturulacaktır. İçinde, kullanıcı tablo şablonlarıyla çalışacaktır. Kullanıcı, arayüz elemanlarının tiplerini ve isimlerini tablolara girecek ve parametrelerinin özelliklerini ayarlayacaktır. Oluşturma, kullanıcı için son derece kolay bir süreç olacak ve bu süreçte, öğelerinin pencerelerde doğru konumlandırılması konusunda endişelenmesine gerek kalmayacak (motor her şeyi otomatik olarak hesaplayacaktır) ve öğeleri yalnızca pencerede düzenlemek yeterli olacaktır. ihtiyacı olan sıra.
  • İkinci aşamada, dosya oluşturucusunda olduğu gibi aynı arayüz oluşturma yönteminin uygulanacağı görsel bir ortam oluşturulacak, sadece kullanımı daha da kolay ve kullanışlı hale gelecektir. Ayrıca, kontrollerin görünümünü değiştirme yeteneği de ekleyecektir. Genel olarak, kullanıcının daha fazla grafik seçeneği olacaktı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.

 

Karışıklığı önlemek için, önyükleme dosyasının iki biçimde olabileceğini eklemek istiyorum:

1. Kullanıcı tarafından derlenen, pencereleri, kontrolleri ve parametrelerinin özelliklerini tanımlayan bir dizi talimat olarak. Bu durumda, "G_CORE_BUILDER()" işlevi önyükleme aşamasında çalıştırılır ve grafik çekirdeğini oluşturur.

2. Doğrudan motora yüklenen hazır bir grafik çekirdeği şeklinde. Bu varyantta "G_CORE_BUILDER()" işlevini kullanmaya gerek yoktur.

İlk seçenek, arayüz oluşturucusunda kullanılacak ve ikincisi, herhangi bir uygulamanın hazır arayüzünü başlatmak için kullanılacaktır.

Hazır grafik çekirdeği, çalışmasını kolaylaştırmak için çekirdek oluşturma sisteminin ("G_CORE_BUILDER()" ve "CONTENT[]") dizisinin kaldırılacağı motorun basitleştirilmiş bir sürümüyle yüklenecektir.
 
Реter Konow :
Bir resim çizmek henüz bir arayüz değil, en önemli soru hakkında sessizsiniz - uzmanın göstergeyle nasıl etkileşime gireceği, " küresel değişkenler " bir şekilde belirsiz geliyor.
 
Yury Kulikov :
Bir resim çizmek henüz bir arayüz değil, en önemli soru hakkında sessizsiniz - uzmanın göstergeyle nasıl etkileşime gireceği, " küresel değişkenler " bir şekilde belirsiz geliyor.
Şu anda, Expert Advisor ile global aracılığıyla göstergede uygulanan arayüz arasındaki etkileşim sistemi. değişkenler, sadece kağıt üzerinde var ve henüz yaratma deneyimim olmadı. Sunumumu daha ayrıntılı olarak anlatmaya çalışacağım ve eğer içinde çelişkiler veya hatalar bulursanız lütfen yorum yapın.

1. Herkesin bildiğini hatırlatmama izin verin - her global değişken, çizelgeye yüklenen tüm programların kapsamındadır. Küresel oluşturmak için değişken, özel aramanız gerekir. işlevini seçin ve değişkenin adını ve değerini ona iletin.

2. Önyükleme dosyasını okuyacak olan arayüzün yüklenmesi aşamasında motor tarafından global değişkenler oluşturulacaktır. Önyükleme dosyasının kendisi, kürenin adlarını içerecektir. değişkenler ve bunların depolanmış (veya önceden ayarlanmış) değerleri.

3. Motorun içinde, kontrol parametrelerinin değerlerini eleman tipine, değer tipine ve parametre özelliklerine göre yönetmekten sorumlu özel bir blok vardır. Kullanıcı onay kutusunu işaretlediğinde veya "döndürme düzenleme" öğesindeki değerleri geri sardığında, parametre ile kontrol etkileşim bloğu belirli bir değere, belirli bir değişkene sahip belirli eylemleri gerçekleştirir.

4. Değişken global olduğu için değeri uzman tarafından sürekli "gözlemlenir" ve globallerin her birinin değerindeki değişime cevap verir. değişkenler, içine gömülü algoritmalara uygun olarak.

5. Bir uzman adına, yalnızca küresel değişkenlerin "gözlemlenmesi" değil, aynı zamanda işlevselliğinin yanından değerleriyle tam teşekküllü çalışma gerçekleştirilebilir. Burada küre olduğunu anlamak önemlidir. değişkenler şartlı olarak iki türe ayrılacaktır: değerleri kullanıcı tarafından arayüzdeki kontroller aracılığıyla ayarlanacak olan kullanıcı tarafından "kontrol edilen" değişkenler ve değeri EA'nın işlevselliği tarafından "kontrol edilen" değişkenler. kullanıcı işlevleri tarafından belirlenecektir.

6. Motor, sırayla, her iki koşullu küresel türüyle de çalışacaktır. değişkenler. Kullanıcı tarafından "kontrol edilen" değişkenlerin değerleri ile "bir kontrol elemanının bir parametre ile etkileşim bloğu" nun çalışma prensibini ve uzmanın işlevselliği tarafından "kontrol edilen" değerlerle çalışma prensibini açıkladım. aşağıdaki gibi olacaktır: aynı blok, kontrolleri koşullu olarak iki kategoriye ayırır: değeri kontrol edenler ve değeri verenler (herhangi bir şekilde görüntüleyin). Bu tür öğelerin her biri (giriş alanı, ilerleme çubuğu, vb.), değişkeninin değerini değiştirme olayına abone olur. Herhangi bir değişkenin değeri değiştiğinde, blok karşılık gelen öğeye erişir ve varsayılan öğe türünde sağlanan bu öğeyle manipülasyon gerçekleştirir.

Bloğun tüm küreseller arasında bir döngü yaptığını not ediyorum. zamanlayıcının frekansındaki değişkenler, böylece fonksiyonel tarafından kontrol edilen değişkenlerin değerlerinin davranışını "izler".

//------------------------------------------------ -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- --
PS Danışmanın ayarlarının kullanıcı arayüzünden nasıl yükleneceği sorusuna gelince, bence bu daha sonra yapılacak. yol:

EA'nın birlikte çalıştığı tüm global değişkenlerin değerleri (EA ayarlarını temsil edenler dahil), EA'nın boşaltma etkinliğinde yok edilmeden önce yükleme dosyasına kaydedilir. Arayüz her yüklendiğinde, bu aynı global değişkenler yeniden oluşturulacak ve önceki değerlerini alacaktır. Ardından, Expert Advisor yüklenecek ve değişkenlerine erişecektir.
 
Реter Konow :

Global değişken aracılığıyla metin (örneğin dosya adı) nasıl geçirilir?

Bir uzman bir pencereyi nasıl etkinleştirebilir/devre dışı bırakabilir?

Expert Advisor çalışırken, Expert Advisor nasıl yeni bir pencere oluşturabilir?

...

 
Yury Kulikov :

1. Metin (örneğin bir dosya adı) global bir değişkenden nasıl geçirilir?

2. Bir uzman bir pencereyi nasıl etkinleştirebilir/devre dışı bırakabilir?

3. Expert Advisor çalışırken Expert Advisor nasıl yeni bir pencere oluşturabilir?

...

1. Bu sorun henüz çözülmedi. Kafamın üstünden birkaç seçenek sunabilirim:

a) kürenin adıyla bir dize geçirmek. değişken. Değişkenler indekslendiğinden, motorun ve uzmanın her zaman o globalin indeksini "bilmesi" gereklidir. Metni geçmek için silinecek ve yeniden oluşturulacak bir değişken, her seferinde adını değiştirerek ve içinden bir dize geçirerek. İlk bakışta seçenek hantal görünüyor ama kim bilir belki geliştirilebilir...

b) Dizeyi bir değişkenin değerinden, sırayla ancak harflerle geçirin, burada harflerin kendileri yerine onlara karşılık gelen sayılar iletilecek ve iletim işlemi n'inci zamanlayıcı periyodunda gerçekleştirilecektir. .

2. Şu anda, benim konseptimde, bir uzman tarafından pencereleri etkinleştirme/devre dışı bırakma yöntemi yoktur. Dürüst olmak gerekirse, ne demek istediğinizi tam olarak anlamıyorum. Yalnızca kullanıcı ve motor pencerelerle ilgilenecektir. Expert Advisor yalnızca değişkenlerle ve kendi işlevleriyle çalışır. Henüz arayüze erişimi yok. (Evet ve ne anlamı var?)

3. Kullanıcının (bileşen) pencere setlerini kendi takdirine göre gruplayabildiği yeni (bileşik) pencereler, örneğin "yeni" ana menü öğesine tıklandığında uzman tarafından değil, motor tarafından oluşturulacaktır. pencere". Tüm gruplandırma pencerelerinin arayüzde zaten oluşturulmuş olması önemlidir ve kullanıcının ihtiyaç duyduğu bilgileri gruplamak için kullanılan bileşik pencerelerin sayısı (koşullu olarak) sınırsız olabilir. Pencere kümeleri ve içerikleri dosyaya kaydedilecektir.

 
Реter Konow : Henüz arayüze erişimi yok. (Evet ve ne anlamı var?)

Anlam temeldir. Olaylar sadece arayüzde gerçekleşmez.

"Titanik"inizin yolunda birden fazla buzdağı olacak. Projeye yanlış taraftan başladınız ve global değişkenler burada yardımcı olmayacak.

 
Yury Kulikov :

Anlam temeldir. Olaylar sadece arayüzde gerçekleşmez.

"Titanik"inizin yolunda birden fazla buzdağı olacak. Projeye yanlış taraftan başladınız ve global değişkenler burada yardımcı olmayacak.

Peki, sence projeye nereden başlamalıydım ve bana ne yardımcı olabilir?
 
Реter Konow :
Peki, sence projeye nereden başlamalıydım ve bana ne yardımcı olabilir?

Bence bir uzmanla başlamalısın. Bir uzman için uygun olan üç tür görev verdim, ancak bunların arayüzünüzde uygulanabilir olmadığı ortaya çıktı.

Ne yardımcı olabilir? Belki daha derin entegrasyon veya projeyi bir "uzaktan kumanda" ile sınırlama.