Grafik modunda MQL için bir GUI oluşturma. - sayfa 12

 
Yuriy Asaulenko :
Aslında, hiçbir şekilde. Harici bir program ile MT'deki bir program arasında hiçbir fark yoktur. Olasılıklar aynı, etkileşim aynı.
Tabii ki, yeterli geri arama yok, ancak MT'de de yok.
Ama genel olarak mümkün. İkinci danışman ve muteksler veya kısa zamanlayıcı. Çalışıyor ama gerekli değil.

Hiçbir şey açıklamadı. Açıkça cevaplayın plz - MT'den * nasıl Sharpe üzerindeki panelden veri alıyorsunuz?

Bir zamanlayıcı anketi ile Bellek Eşleme yoluyla geri bildirim yaptım. Panel yalnızca farklı ayarları ve yavaş hesaplamaların sonuçlarını iletti

 
Renat Fatkhullin :
Cahillik güven verir. Ama bilgi acıları çoğaltır.

Eğer sakıncası var:
- sürecinize uzaylı ve devasa bir sanal makine sığacak
- kendini asıl olarak kabul ederek eylemlerini durduracak
- kendini ana olarak kabul ederek çok fazla hafıza yer
- hayatlarını yaşayan bir sürü konu açın
- çöp toplayıcı tamamen büyüyecek ve sürecinizi sınırlayacaktır
- sarmalayıcı aracılığıyla tüm aramalar

GUI adına, kesinlikle aşırıya kaçıyor.

Tamam, o zaman Paneli Bellek Eşleme yoluyla bağlayarak ayrı yapacağım. Önceleri 2000'lerin sonlarında borular üzerinden yapıyordum ama pek hoşuma gitmemişti.

Doğrudan bağlamama rağmen, herhangi bir korku fark etmedim.

 
Maxim Kuznetsov :

Terminale COM arayüzü - genel olarak bir krutoten olacaktır. Hızla modası geçmiş olmasına rağmen.

Sadece gerçek zamana uymuyor. :-(

COM arayüzü büyük ihtimalle olmayacak.

Ama neden modası geçmiş olduğunu öğrenebilir misin?

Ve ayrıca hızlı.

 
Koldun Zloy :

COM arayüzü büyük ihtimalle olmayacak.

Ama neden modası geçmiş olduğunu öğrenebilir misin?

Ve ayrıca hızlı.

kendi iletişim arayüzleri ile .net ile değiştirildi

 
Alexey Volchanskiy :

kendi iletişim arayüzleri ile .net ile değiştirildi

ve COM'da bazı GUID'ler bir değere sahiptir

MS hala kullanılmayan GUID'leri bir dolar karşılığında 10 parçaya geri alıyor. Eski günlerden beri ortalıkta dolaşıyorsanız - çok para kazanabilirsiniz!

 
Alexey Volchanskiy :

ve COM'da bazı GUID'ler bir değere sahiptir

MS hala kullanılmayan GUID'leri bir dolar karşılığında 10 parçaya geri alıyor. Eski günlerden beri ortalıkta dolaşıyorsanız - çok para kazanabilirsiniz!

Doldurdum :-) Veriyorum - MS'ye atabilirsin

066cd265-e2fe-468e-9492-4228e9759e38
8e1040ba-dc3e-4e2a-9208-e3ea8da9ad05
03dcd7cd-4b9b-4ff7-bff0-e0839a0f9d8b
d69f2c8c-de51-4557-8188-4ebb870da7da
a79a8cc6-f785-4268-bc4e-2deda0f1ecd0
f4f59f52-1da8-4f74-a71e-9aec1992674d
85608797-6015-456d-af64-ad7890120372
9289991a-e287-47fb-b595-6d719c1b7dbd
63d3b953-3229-4045-a82a-fc9e7795bb01
c75c4e0f-8320-42df-943c-9aada54b60eb

bir şey olursa, benimle iletişime geç - belki daha fazlasını bulurum

 

Meslektaşlar. Hangi geliştirme ortamının daha iyi, hangi kodun daha hızlı olduğu tartışmasının anlamsız olduğunu düşünüyorum. Bunların hepsi bir zevk meselesi ve çözülmesi gereken görevlere bağlı. Geliştirme ortamından bağımsız olarak, harici uygulama ile MT aracı arasında hala etkileşim sorunlarımız var. En basit örneği ele alalım. Yerel bir dll'de karmaşık matematiksel hesaplamalar için bir algoritma uyguladınız. MT aracından gerekli parametreler bu kütüphaneye aktarılarak hesaplama başlatıldı, araç hesaplamalar bitene kadar çalışmasına devam etti. harici uygulama hesaplamayı bitirdi ve burada basit bir soru ortaya çıkıyor: MT'deki enstrümana hesaplamanın tamamlandığı nasıl bildirilir? veri aktarımı sorun değil, sorun bildirimde. Ve yine, bu soru geliştirme ortamına bağlı değildir!

Birkaç seçenek görüyorum:

1. OnChartEvent yöntemini, örneğin PostMessage kullanarak harici bir programdan çağırma yeteneği

2. Renat'ın önerdiği gibi MT araçlarına yeni bir yöntem eklemek: OnExternal, olayın türünü veya genel olarak iletilen verileri belirtir, yani bu yöntemde verilerin kendisini döndürebilirsiniz.

3. Winsocket MT araçlarında uygulama. Bu, ikinci noktaya benzer, yalnızca MT'deki aracın verileri dinlemek için belirli bir bağlantı noktasına bağlanmasına izin verir.

Birinci ve ikinci noktalar bir makine düzeyinde etkileşime izin veriyorsa, üçüncü nokta MT araçları için ağ etkileşimi sağlayacaktır.

İşte bir örnek: https://www.mql5.com/ru/articles/2599

Ancak burada yine bir sorunla karşılaşıyorsunuz: Soketteki verilerin varlığını sürekli olarak kendiniz kontrol etmeniz gerekiyor.

Yani, geri arama sorunu her durumda kalır ve çözülmez.

Zamanlayıcı izleme bir çözüm değil, koltuk değneğidir. Evet, başka seçeneklerin yokluğunda, şimdi böyle karar veriyoruz.

Geliştiriciler bu sorunlara platform düzeyinde bir çözüm uygularsa, terminal API'sine erişim gerekmez. Sonuçta, ona iyi bir hayattan değil, MT ile oluşturulan uygulamalar arasında tam teşekküllü bir etkileşim olmadığı için sorulur. Ve tekrar ediyorum: bu sorun, harici uygulama için seçilen geliştirme ortamından bağımsız olarak mevcuttur.

Работа с сокетами в MQL, или Как стать провайдером сигналов
Работа с сокетами в MQL, или Как стать провайдером сигналов
  • 2016.07.12
  • ---
  • www.mql5.com
Сокеты… Что вообще сейчас в нашем информационном мире может без них существовать? Впервые появившиеся в 1982 г. и практически не изменившиеся до настоящего времени, они исправно работают на нас каждую секунду. Это основа сети, нервные окончания нашей Matrix, в которой мы живем. Утром вы включили терминал MetaTrader, и он сразу создал сокеты и...
 

Ağ kitaplıklarını kullanma olasılığı hakkında bilgi))) https://www.mql5.com/ru/forum/13388

Konu aslında çok eski. Geliştiricilerin kendileri bir kez net ile sorunsuz çalışma olasılığını açıkladılar .. o zamandan beri köprünün altından çok su aktı, ancak sorun çözülmeden kaldı ...

Veya Renat'ın kendisinden bir mesaj: https://www.mql5.com/ru/forum/3153/page2#comment_298866

https://www.mql5.com/en/forum/3153/page2#comment_298892

Встроенная поддержка .NET библиотек
Встроенная поддержка .NET библиотек
  • 2013.08.12
  • www.mql5.com
NET библиотеках функции могут быть только static методами или методами экземпляров класса.
 
Алексей Барбашин :

Meslektaşlar. Hangi geliştirme ortamının daha iyi, hangi kodun daha hızlı olduğu tartışmasının anlamsız olduğunu düşünüyorum. Bunların hepsi bir zevk meselesi ve çözülmesi gereken görevlere bağlı. Geliştirme ortamından bağımsız olarak, harici uygulama ile MT aracı arasında hala etkileşim sorunlarımız var. En basit örneği ele alalım. Yerel bir dll'de karmaşık matematiksel hesaplamalar için bir algoritma uyguladınız. MT aracından gerekli parametreler bu kütüphaneye aktarılarak hesaplama başlatıldı, araç hesaplamalar bitene kadar çalışmasına devam etti. harici uygulama hesaplamayı bitirdi ve burada basit bir soru ortaya çıkıyor: MT'deki enstrümana hesaplamanın tamamlandığı nasıl bildirilir? veri aktarımı sorun değil, sorun bildirimde. Ve yine, bu soru geliştirme ortamına bağlı değildir!

Birkaç seçenek görüyorum:

1. OnChartEvent yöntemini, örneğin PostMessage kullanarak harici bir programdan çağırma yeteneği

2. Renat'ın önerdiği gibi MT araçlarına yeni bir yöntem eklemek: OnExternal, olayın türünü veya genel olarak iletilen verileri belirtir, yani bu yöntemde verilerin kendisini döndürebilirsiniz.

3. Winsocket MT araçlarında uygulama. Bu, ikinci noktaya benzer, yalnızca MT'deki aracın verileri dinlemek için belirli bir bağlantı noktasına bağlanmasına izin verir.

Birinci ve ikinci noktalar bir makine düzeyinde etkileşime izin veriyorsa, üçüncü nokta MT araçları için ağ etkileşimi sağlayacaktır.

İşte bir örnek: https://www.mql5.com/ru/articles/2599

Ancak burada yine bir sorunla karşılaşıyorsunuz: Soketteki verilerin varlığını sürekli olarak kendiniz kontrol etmeniz gerekiyor.

Yani, geri arama sorunu her durumda kalır ve çözülmez.

Zamanlayıcı ile izleme bir çözüm değil, koltuk değneğidir. Evet, başka seçeneklerin yokluğunda, şimdi böyle karar veriyoruz.

Geliştiriciler bu sorunlara platform düzeyinde bir çözüm uygularsa, terminal API'sine erişim gerekmez. Sonuçta, ona iyi bir hayattan değil, MT ile oluşturulan uygulamalar arasında tam teşekküllü bir etkileşim olmadığı için sorulur. Ve tekrar ediyorum: bu sorun, harici uygulama için seçilen geliştirme ortamından bağımsız olarak mevcuttur.

İzleme ve anketler hakkında ekleyeceğim, ancak herkes bunu bilmiyor - DLL'yi her ankette çekmemek için, bayrakları "paylaşmak" için bir int[] olabilir. DLL içinde, bunlara tüm erişim __atomic__ gibidir.
Prensipte, bu işe yarar ve kaynaklar açısından oldukça ekonomiktir, ancak MQL açısından, artış/azalmanın da atomik olduğu ve optimize edicinin değerler hakkında varsayımlarda bulunmadığı gerçeğine güvenmeniz gerekir.



int flags[1]={0};     // когда DLL досчитает она инкрементит флаг
handle=InitDLL(flags); //
...
// опрос типично выглядит так:
while ( flags[0] )   // проверить один int это очень быстро
{
   flags[0]--;
   ReadDataFromDLL(handle);
}

Tamamen daha güzel olması için, atomik (uçucu?) nitelik ve buna karşılık gelen bir dizi ilkel yeterli olacaktır. Bence bu, sisteme yeni bir mekanizma eklemekten daha kolay ve mevcut DLL protokolünü değiştirmiyor.

 
Maxim Kuznetsov :

İzleme ve anketler hakkında ekleyeceğim, ancak herkes bunu bilmiyor - DLL'yi her ankette çekmemek için, bayrakları "paylaşmak" için bir int[] olabilir. DLL içinde, bunlara tüm erişim __atomic__ gibidir.
Prensipte, bu işe yarar ve kaynaklar açısından oldukça ekonomiktir, ancak MQL açısından, artış/azalmanın da atomik olduğu ve optimize edicinin değerler hakkında varsayımlarda bulunmadığı gerçeğine güvenmeniz gerekir.



int flags[1]={0};     // когда DLL досчитает она инкрементит флаг
handle=InitDLL(flags); //
...
// опрос типично выглядит так:
while ( flags[0] )   // проверить один int это очень быстро
{
   flags[0]--;
   ReadDataFromDLL(handle);
}

Tamamen daha güzel olması için, atomik (uçucu?) nitelik ve buna karşılık gelen bir dizi ilkel yeterli olacaktır. Bence bu, sisteme yeni bir mekanizma eklemekten daha kolay ve mevcut DLL protokolünü değiştirmiyor.

Maxim ve bu çözüm neden daha iyi? Sonuçta, bayrağın durumunu sorgulamak için MQL'de periyodik olarak kontrol etmek de gereklidir. Nerede kazmadığınız ortaya çıkıyor, verileri toplama zamanının geldiğini anlamak için bir şeyin durumundaki değişikliği sürekli izlemeniz gerekiyor. Ve bu parça, dll'nin kendisinde saklanabilir ve orada kontrol edilebilir, ben de öyle yapıyorum. Örneğinizde, bayrağın durumunu döndürmek için örtük bir dll çağrısı var.