"10 dakikada MQL5 için DLL kütüphanesi nasıl yazılır ve veri alışverişi yapılır?" makalesinin tartışılması

 

Bir makale yayınlandı MQL5 için 10 dakikada DLL kütüphanesi nasıl yazılır ve veri alışverişi yapılır? :

Öyle oldu ki, şimdi birkaç geliştirici basit bir DLL kitaplığının nasıl yazılacağını ve heterojen sistemleri birbirine bağlamanın özelliklerinin neler olduğunu hatırlıyor. 10 dakika içinde, örneklerle basit DLL kitaplıkları oluşturma sürecinin tamamını göstermeye çalışacağım ve bağlantı uygulamamızın bazı teknik ayrıntılarını ortaya koyacağım. Visual Studio'da farklı türde değişkenler (sayılar, diziler, dizeler, vb.) geçirme ve istemci terminalini özel DLL'lerdeki çökmelerden koruma örnekleriyle birlikte bir DLL kitaplığı oluşturma sürecini adım adım göstereceğim.

Yazar: Renat Fatkhullin

 

Çok ilginç bir makale. Bütünlük için mutluluk yeterli değildir:

1. Teklifleri nereden alıyoruz, bunları hst dosyalarından almak mümkün mü?

2. MATLab 2009a veya 2009c'de elde edilen kitaplık ile bu kitaplık nasıl sabitlenir? Sonuçta orada da With ve With ++ var mı?

Büyük istek.

 
  1. Terminalin kendisinde alıntılar alıyoruz - bunlar artık hem ayrıntılı hem de derin (10 yıl veya daha fazla).

    Hiçbir durumda doğrudan terminalin depolarının ikili dosyalarına girmemelisiniz - bu yalnızca ciddi veri erişim çakışmalarına yol açacaktır. Testler "Başardım, sorun yok" gösterse bile, yine de bu terminal verilerine ve harici bir programa eşzamanlı erişim anı gelecek ve sonuç olarak birileri kesinlikle kopacak. İnsanlar tekrar tekrar bu duruma düştüler.

  2. MQL5'te kitaplıkları bağlamak, stdcall / cdecl DLL çağrı kurallarının şeffaf desteği nedeniyle çok daha kolay hale geldi.

    Birisi MetaTrader 4/5 ve Matlab'ı DLL aracılığıyla bağlama hakkında iyi ve ayrıntılı bir makale yazarsa, 200 dolar ve daha fazlasını kazanacaktır.

    MQL4.community web sitesinde zaten Matcad - MetaTrader 4 bağlantısı hakkında makaleler var:

Взаимодействие между MеtaTrader 4 и MATLAB Engine (виртуальная машина MATLAB) - Статьи по MQL4
  • www.mql5.com
Взаимодействие между MеtaTrader 4 и MATLAB Engine (виртуальная машина MATLAB) - Статьи по MQL4: особенности автоматических торговых стратегий
 
Renat, dll aramalarının hızı ne olacak?
Alıntılarını gerçek zamanlı olarak Excel'de yayınlamaları için umutsuzca iki terminali birbirine bağlamam gerekiyor.
MT4'te bu, DDE aracılığıyla yapılabilir. MT5'te, tek çıkış yolu DLL'den geçiyor gibi görünüyor.
Ama gelen her işaret DLL'ye iletilirse... bence bu hayal edilemeyecek kadar yavaş bir şey olacak. Tabii ki, henüz uygulamaya çalışmadım ... ama dürüst olmak gerekirse, denemek istemiyorum. Ne olacağı delilik.
Kısacası, lütfen DDE'yi MT5'e iade edin. Bir anakronizm olsa da, bazen ihtiyaç duyulur.

PS Ve makale için teşekkürler, çok zamanında. Şu anda böyle bir materyalden yoksundum.
 
Teşekkürler!!!
 
benik :
Renat, dll aramalarının hızı ne olacak?

Çağrı hızını kontrol etmek çok basittir. Örneğin, kabaca şöyle hesaplayabilirsiniz:

_DLLAPI int __stdcall fnCalcSpeed( int var1, int var2, int var3)
  {
   return ( 0 );
  }


#import "MQL5DLLSamples.dll"
int   fnCalcSpeed( int var1, int var2, int var3);
#import

   int calls= 0 ;
   int ticks= GetTickCount ();
   
   while ( GetTickCount ()-ticks< 1000 )
     {
       for ( int i= 0 ;i< 1000 ;i++)
         fnCalcSpeed( 1 , 2 , 3 );
      calls++;
     }
   Print (calls * 1000 , "вызовов в секунду" );

Quad Q9400 @ 2.66Ghz'de saniyede 57.000 çağrı aldım. Aynı kod MetaTrader 4'te kontrol ve bağlama olmadığı için saniyede yaklaşık 20.000.000 çağrı veriyor.

MetaTrader 5'te DLL aramalarındaki kayıpları kesinlikle azaltmaya çalışacağız.

 
Renat писал(а) :

saniyede 57.000 çağrı aldı

Ve eğer saniyede yaklaşık 50.000 çağrı varsa, o zaman DLL aracılığıyla alıntılar yayınlamanın mümkün olduğunu düşünüyorum. Herhangi bir kayıp olmayacak.

Kodu sağladığınız için teşekkürler.

 
Bir sonraki derlemede, DLL çağrı oranını yükselteceğiz, MQL4'teki gibi olacak - saniyede 20.000.000 "boş" çağrı.
 

Tekliflerin dışa aktarımı yalnızca dll aracılığıyla mümkünse, dışa aktarılan her araç için bir komut dosyası asmanız gerektiği ortaya çıkıyor mu? Peki ya çok sayıda varsa? örneğin 50?

Birçok enstrüman için teklifleri tek bir komut dosyasında aktarmanın mümkün olduğunu anlıyorum, ancak bu, kenelerin kaybolmadığı DDE'nin tam teşekküllü bir ikamesi olmayacak.

 

Gerçek şu ki, "teklif vermek için bir arayüz sağlama" görevimiz yok.

Görevimiz, analitik sistemlerin geliştirilmesi için eksiksiz ve kendi kendine yeterli bir ortam yaratmaktır. Öyle bir ortam ki üçüncü parti programların bile kullanılmasına gerek kalmayacak.

 
Her durumda, Mql5 memnun eder. teşekkürler
Neden: