Kendi MetaTrader uzantınızı (dll) oluşturun - sayfa 3

 

Gerçekten bir C++ sorusu... MT4 için harici DLL

Herkese selam,

C++ ile yazdığım harici bir DLL'im var. Ancak, C++ için hala oldukça yeniyim, bu yüzden bu sorunu yaşamamın nedeninin bu olabileceğini düşünüyorum. C# ile yazdığım ve C# DLL'lerini MQL tarafından çağrılabilir kılmak dışında gayet iyi çalışan başka bir sürümüm var, onları değiştirmem gerekiyor ve bu değişiklik küçük bellek sızıntılarına neden oluyor gibi görünüyor. Buradaki birinin bana C++ sürümüyle yardımcı olabileceğini umuyorum. İşte hikaye:

Ticaret stratejilerini programlamak için yavaş yavaş çeşitli kütüphaneler geliştiriyorum. Yapmaya çalıştığım şeylerden biri, günlüğe kaydetme, kilitleme (kaynaklara iş parçacığı güvenli erişim) ve olay bildirimi gibi çeşitli şeyler için tutarlı bir hizmet seti geliştirmek. Temel olarak, MQL'yi önyüklemelerinden daha modern bir programlama paradigmasına çekmeye çalışıyorum. Her neyse, şu anda EA'ların çeşitli ticari olaylar hakkında (yerleştirildi, dolduruldu, kapatıldı) bildirim almasına izin verecek bir kitaplık üzerinde çalışıyorum. Bu olaylar, olaya abone olan EA tarafından veya diğer EA'lardan alınan işlemlerin bir sonucu olabilir. Bunu başarmak için, mesaj geçişi yoluyla EA'lar arasındaki iletişimi temelde kolaylaştıran harici bir DLL kullanıyorum. Yalnızca yeni ticari olaylar arayan ve bir gerçekleştiğinde, abone olan EA için bir kuyruğa bir mesaj koyan bir yayınlayıcı EA vardır (her abonenin kendi kuyruğu vardır).

Sorun şu ki... Bir seferde yalnızca bir mesaj iletildiği sürece, her şey yolunda gidiyor. Açıkçası bu hiç de kabul edilebilir bir şey değil. Bir seferde birden fazla mesaj iletildiğinde, bulduğum şey ilk mesajın bozulduğudur (mesajı "1" olarak döndürmeye devam ederken bunun yerine "FILLED,1005167" gibi bir şey olması gerekir). İkinci mesaj iyi, ama ilk değil. Henüz ikiden fazla mesajı test etmedim, ancak muhtemelen yine de aynı şeyi görürdük.

Birisi neyi yanlış yaptığımın cevabını biliyorsa ve sorunuma biraz ışık tutabilirse çok sevinirim. Birkaç not: 1) Sonunda bu kodu Apache 2.0 altında yayınlayacağım ve bu nedenle bu kaynak dosya da Apache 2.0 altında yayınlanıyor... Bunu oldukça düzgün çalıştığında topluluğa yayınlamayı planlıyorum. 2) Burada defalarca 'sıra' dedim, ancak kaynak koduna bakarsanız bunun yerine bir vektör kullandığımı ve temelde onu bir yığın gibi kullandığımı göreceksiniz. Başlangıçta bir kuyruğum vardı, ancak STL kuyruğunda bilmediğim yanlış bir şey yapıyor olma ihtimaline karşı onu bir vektöre değiştirdim. Böyle bir şans yok. Gerçek uygulama bir sıra olacak, ancak şimdilik ne sıra ne de vektör benim için doğru çalışmıyor.

Herhangi bir anlayış için şimdiden teşekkürler.

Brandon Wilhit

Dosyalar:
 

Buraya geldiğimden beri deneyimlerimi paylaşayım dedim. Yapmak istediğin şey kesinlikle yapılabilir ve bunu kendim defalarca yaptım.

MT4'te kullanmak için DLL'leri yazmaya ilk başladığımda, onu C++'da çalıştıramadım. Bence sorun şuydu/proje ayarlarımın Visual Studio'da her zaman yanlış olmasıydı (çoğu d@$% var). Kısa bir süre önce CodeGuru'dan gerçekten derleyebildiğim ve kullanabildiğim bir örnek buldum. Şimdi temelde o projeyi temizledim ve şablon olarak kullanıyorum.

Bu arada C# DLL'leri yazıyorum ve bu mükemmel aracı burada kullanıyorum. Temel olarak IL'yi alır ve yönetilmeyen koddan çağrılabilmesi için değiştirir. Tek sorun, MT4'ün bunu yaparken bir bellek sızıntısı sergiliyor gibi görünmesidir. Bunun MT4'ten mi yoksa IL'nin değişmesinden mi kaynaklandığını veya ne olduğunu kesin olarak belirlemedim, ama oluyor.

Sonra ya C++ üzerine sarmalayıcı yazmayı öğreneceğim ve/veya devam edip C++ öğreneceğim. Umarım bu bellek sorununu çözecektir.

Her neyse, yapmak istediğin şey kesinlikle başarılabilir. Uzaktan iletişim, ham yuvalar, http, WinForms gibi şeyler de dahil olmak üzere C# dilinde MT4 için oldukça karmaşık DLL'ler yazmayı başardım. .NET ile yapabileceğiniz hemen hemen her şey MT4'ten bu şekilde çağrılabilir (bunu siz adlandırın ve muhtemelen ben yaptım). Ve çok güvenilir. Tek sorun, nispeten yavaş bellek sızıntısıdır.

Magick:
teşekkürler Patrick

FTP'yi kullanmak çok ilginç bir fikir.

ancak MT ile etkileşime girebilmek - tik ve mum bilgilerini .net uygulamasına göndermek ve bu uygulama ne zaman ticaret yapılacağı konusunda MT ile iletişim kurabilmek istiyorum.

Bunu yardımcı olabileceğini düşündüğümü buldum - Basitleştirilmiş Sarıcı ve Arayüz Oluşturucu

Ancak ben oldukça giriş seviyesi bir programcıyım ve bir c++ sarmalayıcı orta katmanına sahip olmanın ne anlama geldiğini tam olarak takdir etmiyorum.

Bunun c++ ve .net arasında köprü kurmaya yardımcı olacak yararlı bir araç olabileceğini düşünüyorsanız, fikrinizi duymak isterim.
 
bwilhite:
Buraya geldiğimden beri deneyimlerimi paylaşayım dedim. Yapmak istediğin şey kesinlikle yapılabilir ve bunu kendim defalarca yaptım.

MT4'te kullanmak için DLL'leri yazmaya ilk başladığımda, onu C++'da çalıştıramadım. Sanırım sorun şuydu/proje ayarlarımın Visual Studio'da her zaman yanlış olmasıydı (çoğu d@$% var). Kısa bir süre önce CodeGuru'dan gerçekten derleyebildiğim ve kullanabildiğim bir örnek buldum. Şimdi temelde o projeyi temizledim ve şablon olarak kullanıyorum.

Bu arada C# DLL'leri yazıyorum ve bu mükemmel aracı burada kullanıyorum. Temel olarak IL'yi alır ve yönetilmeyen koddan çağrılabilmesi için değiştirir. Tek sorun, MT4'ün bunu yaparken bir bellek sızıntısı sergiliyor gibi görünmesidir. Bunun MT4'ten mi yoksa IL'nin değişmesinden mi kaynaklandığını veya ne olduğunu kesin olarak belirlemedim, ama oluyor.

Sonra ya C++ üzerine sarmalayıcı yazmayı öğreneceğim ve/veya devam edip C++ öğreneceğim. Umarım bu bellek sorununu çözecektir.

Her neyse, yapmak istediğin şey kesinlikle başarılabilir. Uzaktan iletişim, ham yuvalar, http, WinForms gibi şeyler de dahil olmak üzere C#'da MT4 için oldukça karmaşık DLL'ler yazmayı başardım. .NET ile yapabileceğiniz hemen hemen her şey MT4'ten bu şekilde çağrılabilir (bunu siz adlandırın ve muhtemelen ben yaptım). Ve çok güvenilir. Tek sorun, nispeten yavaş bellek sızıntısıdır.

bwilhite sen bir hayat kurtarıcısın! Harika bir alete benziyor. Şans eseri, C#'dan MT ile iletişim kurmayı gösteren ac# projeniz var mı? Yapmak istediğim şey, .net uygulamamın MT'ye ne zaman ticaret yapacağını söylemesini sağlamak. Ya da belki yardımcı olabilecek bir bağlantı önerebilirsiniz. Herhangi bir yardım çok takdir edilecektir.

 

Çok çok teşekkürler!

 

DLL

Merhaba ,

DLL, bir excel elektronik tablosu aracılığıyla sipariş göndermek ve almak için kullanılabilir mi?

DLL'nin bu yönünü nereden öğrenebilirim.

Saygılarımla

Latin

 
codersguru:
Kendi MetaTrader uzantısını (dll) oluşturmakla ilgilenen herkes şu adrese gidebilir:

Kendi MetaTrader uzantınızı (dll) oluşturun - Bölüm 1

Kendi MetaTrader uzantınızı (dll) oluşturun - Bölüm 2

Onları yazdığım başka bir bölüm (veya 2) olacak!

Umarım beğenirsiniz!

Lütfen kursunuzu Visual C++ 2008 Express Edition'a güncelleyin

 
bwilhite:
Buraya geldiğimden beri deneyimlerimi paylaşayım dedim. Yapmak istediğin şey kesinlikle yapılabilir ve bunu kendim defalarca yaptım.

MT4'te kullanmak için DLL'leri yazmaya ilk başladığımda, onu C++'da çalıştıramadım. Sanırım sorun şuydu/proje ayarlarımın Visual Studio'da her zaman yanlış olmasıydı (çoğu d@$% var). Kısa bir süre önce CodeGuru'dan gerçekten derleyebildiğim ve kullanabildiğim bir örnek buldum. Şimdi temelde o projeyi temizledim ve şablon olarak kullanıyorum.

Bu arada C# DLL'leri yazıyorum ve bu mükemmel aracı burada kullanıyorum. Temel olarak IL'yi alır ve yönetilmeyen koddan çağrılabilmesi için değiştirir. Tek sorun, MT4'ün bunu yaparken bir bellek sızıntısı sergiliyor gibi görünmesidir. Bunun MT4'ten mi yoksa IL'nin değişmesinden mi kaynaklandığını veya ne olduğunu kesin olarak belirlemedim, ama oluyor.

Sonra ya C++ üzerine sarmalayıcı yazmayı öğreneceğim ve/veya devam edip C++ öğreneceğim. Umarım bu bellek sorununu çözecektir.

Her neyse, yapmak istediğin şey kesinlikle başarılabilir. Uzaktan iletişim, ham yuvalar, http, WinForms gibi şeyler de dahil olmak üzere C#'da MT4 için oldukça karmaşık DLL'ler yazmayı başardım. .NET ile yapabileceğiniz hemen hemen her şey MT4'ten bu şekilde çağrılabilir (bunu siz adlandırın ve muhtemelen ben yaptım). Ve çok güvenilir. Tek sorun, nispeten yavaş bellek sızıntısıdır.

Bu yavaş sızıntı bwilhite'ın kaynağını hiç tespit edebildiniz mi? Hâlâ istekliysen, bu alandaki yardımın için minnettar olurum. Şu anda, soketler aracılığıyla mesaj gönderip almama izin verecek basit bir mql dll arıyorum. C#'ın temellerine aşinayım, bu yüzden ondan yararlanmanın bir yolunu bulabilirsem, çok daha iyi.

Teşekkürler.

 
Magick:
bwilhite sen bir hayat kurtarıcısın! Harika bir alete benziyor. Şans eseri, C#'dan MT ile iletişim kurmayı gösteren ac# projeniz var mı? Yapmak istediğim şey, .net uygulamamın MT'ye ne zaman ticaret yapacağını söylemesini sağlamak. Ya da belki yardımcı olabilecek bir bağlantı önerebilirsiniz. Herhangi bir yardım çok takdir edilecektir.

Bu Magick ile hiç şansın oldu mu? Ben de tam olarak bunu yapmak istiyorum - .net uygulamasının MT'ye ne zaman ve ne ticaret yapacağını söylemesini sağlayın. Bir çözüm bulduysanız lütfen bana bildirin.

Ayrıca bwihite'ı takdir ediyorum ve daha fazlasını duymak istiyorum. Paylaşabileceğiniz herhangi bir örnek c# dll'niz var mı?

Teşekkürler!

 

Kendi DLL'im üzerinde çalışıyorum ve 127 hatasıyla karşılaşıyorum.

.cpp dosyası şunları içerir (diğer şeylerin yanı sıra):

MT4_EXPFUNC char* _stdcall DLLtest() {

return("testing!");

}

[/CODE]

header file contains:

#define MT4_EXPFUNC __declspec(dllexport)

MT4 file:

[CODE]

#import "mydll.dll"

string DLLtest();

Tabii ki, içerdikleri TÜM bu değil, ama ilgili bilgiler bu. Şimdi, anladığım kadarıyla, işlevi MT4'ten çağırmak için her şeye sahibim.

Nedense, onun var olduğunu "görmemek" değildir. DLL dosyamın bir .def dosyasına sahip olmamasından kaynaklandığını düşündüm, ancak manuel olarak oluşturduktan sonra bile hala çalışmıyor. Ayrıca, MT4_EXPFUNC satırının, işlevin her şekilde dışa aktarılacağı anlamına geldiğine inanıyorum, bu nedenle bir .def gereksizdir. Her şey iyi derleniyor, EA, işlevi çağırmaya çalışana kadar (göremediği için) iyi çalışıyor ve sonra duruyor.

aklımın ucundayım. Bunun gerçekten bir .def sorunu olduğunu düşündüm, ama ne kadar çok düşününce, öyle olduğuna inanmıyorum.

BTW Visual C++ 2008 Express kullanıyorum...

Herhangi bir anlayış için teşekkürler,

-Jason

 

Visual C++ 2008 Express kullanırken aynı 127 hatayı alıyorum. Henüz bir çözüm yok, bulursam yazarım.

Neden: