MetaTrader 4 için bir API fonksiyonları kütüphanesi geliştirildi - sayfa 5

 
Bu arada, şimdi Min'in sunduğu şey, eskisinden daha fazla, satın alabileceğiniz bir şeye benziyor.
Kirli IMHO :)

Teşekkür ederim! Ticari teklifler bekliyorum. İyi şanlar!
 
Buna API demek zor. Kütüphane + danışman. ÇOK yavaş çalışıyor.
 
...
 
Kitaplığın geliştiricisine soru: Kitaplığınızı kullanırken fiyat teklifi alma hızı neden geçici dosyalar üzerinde çalışırkenki hızdan daha düşük? Paylaşılan hafızayı kullanmanın faydası nedir?

Teklif alma oranı ile ne demek istiyorsun? Bu kene alıyorsa, doğrudan MT4'te bile alıntı keneleriyle çalışmanın zor olduğunu zaten yazdım.
Kütüphane başlangıçta keneleri yakalamak için tasarlanmamıştı. Bunun nedeni, ciddi bir piyasa faaliyeti durumunda, kenelere ayak uyduramama nedeniyle sistemin basitçe donabilmesidir. Bu nedenle, kitaplığın bir çığ çığına karşı yerleşik yazılım koruması vardır.
Paylaşılan bellek kullanmanın avantajları, böyle bir sistemin yüksek güvenilirliği ve sabit diskin tıkanmamasıdır. Ayrıca, birkaç program kitaplığa erişebilir ve bunun için geçici dosyaların tam yerini "bilmeleri" gerekmez. İyi şanlar!
 
ciddi piyasa faaliyeti ile sistem, kenelere ayak uyduramama nedeniyle donabilir. Bu nedenle, kitaplığın bir çığ çığına karşı yerleşik yazılım koruması vardır.


burada yazar çok zeki görünüyor :)
Anladığım kadarıyla, eğer EA start() fonksiyonunun içindeyse (ve oradan API istemcisine kene hakkında bilgi gönderir), EA start()'tan çıkana kadar MT yeni bir tik vermeyecektir. Bu nedenle, burada nasıl bir "kene çığının" oluşabileceği açık değil mi?

EA döngülüyse ve RefreshRates aracılığıyla onaylar alıyorsa, önce istemci API'sinden çıkılmalı ve ardından RefreshRates çağrılmalıdır. Bu nedenle, asılacak bir yer de yok.

Paylaşılan bellek kullanmanın avantajı, böyle bir sistemin yüksek güvenilirliğinde yatmaktadır.

Elbette kulağa sağlam geliyor, ancak süreçler arası alışverişin tek yolu bu değil.
yani konu "... o zaman paylaşılan hafıza kullanmanın avantajı nedir?" açılmamış :)

IMHO, MMF, işlemler arasında büyük miktarda veri pompalamanız gerektiğinde yalnızca bir durumda iyidir - pompalama hızı ~ 150Mb / sn'dir. (birkaç ay önce böyle bir mekanizmayı sadece MMF üzerinde yapmak zorunda kaldım, çünkü testlere göre bu en hızlı yol).

bu görevde ( OrderSend için parametreleri geçmek vb.) - bu bir toptan serçeleri vurmak gibidir, bir pencere oluşturmak ve SendMessage'ı wm_copydata ile kullanmak demek daha kolaydır.
 
Elbette kulağa sağlam geliyor, ancak süreçler arası alışverişin tek yolu bu değil.
yani konu "... o zaman paylaşılan hafıza kullanmanın avantajı nedir?" açılmamış :)

Kullanılan algoritmanın en iyisi olduğunu iddia etmeyi düşünmüyorum. Programlamanın güzelliği bu, böyle bir problemin en az bir düzine yolla çözülebilmesi. Geçici dosyalar seçeneği de tamamen çalışıyordu. Benim görevim, MT3 API için güvenilir, uygulanabilir ve tamamen işlevsel bir yedek geliştirmekti. Bugün, kütüphane yaklaşık altı aydır pratik bir ticaret programı ile çalışıyor. Ve buradaki asıl sorun, maksimum hıza ulaşmak değil, çok sayıda acil duruma güvenilirlik ve doğru yanıt vermekti. Bu nedenle, yorumlarınız için teşekkürler, oldukça uygunlar, ancak bu "tamamen farklı bir hikaye". İyi şanlar!
 
Merhaba, şu anda asıl sorun bağlantı:

Mforex2.lib içe aktarma kitaplığını projeye dahil edin (Delpi için - sadece kitaplığın işlevlerini tanımlayın),
Ana programda Mforex.h başlık dosyasını belirtin (örneğin: #include "Mforex.h" – yalnızca Builder C++ için);

Bu 2 nokta benim için bir muamma, çünkü Omega hazır bir program, diğer tüm dosyaları açıklandığı gibi yerleştirdim, MT4 başlatma fonksiyonunu kaydettim ve başlangıçta tam yolun belirtilmesi gerektiğine dair bir mesaj çıktı, ama ben de yolu doğru bir şekilde kaydetti. Devamını bilmiyorum.
 
Mforex2.lib içe aktarma kitaplığını projeye dahil edin (Delpi için - sadece kitaplığın işlevlerini tanımlayın),
Ana programda Mforex.h başlık dosyasını belirtin (örneğin: #include "Mforex.h" – yalnızca Builder C++ için);
Bu 2 nokta benim için bir muamma, çünkü Omega hazır bir program, diğer tüm dosyaları açıklandığı gibi yerleştirdim, MT4 başlatma fonksiyonunu kaydettim ve başlangıçta tam yolun belirtilmesi gerektiğine dair bir mesaj çıktı, ama ben de yolu doğru bir şekilde kaydetti. Devamını bilmiyorum.

Omega, işlevleri harici DLL kitaplıklarından içe aktarma yeteneği sağlar. Bu nedenle, Mforex2.dll bir dış kitaplık olarak belirtilmelidir. Aynı zamanda bu dosya Omega programlarının "görüş alanı" içinde olmalıdır. Çağrı prosedürlerinde, DLL kitaplığından içe aktarılan işlevlerin adını belgelerde belirtildiği gibi belirtiriz. Ayrıca Omega'nın Mforex.h dosyasındaki tanımları "bilmediğine" dikkat edin. Yani, örneğin, pozisyon açma işlevini çağırırken, OP_SELL değil, Satış - 1 için işlem kodunu belirtmeniz gerekir. Daha fazla ayrıntı için, omega'nın harici kitaplıklarla nasıl çalıştığını açıklayan DevKit belgelerine bakın.
İyi şanlar!
 

Omega, işlevleri harici DLL kitaplıklarından içe aktarma yeteneği sağlar. Bu nedenle, Mforex2.dll bir dış kitaplık olarak belirtilmelidir. Aynı zamanda bu dosya Omega programlarının "görüş alanı" içinde olmalıdır. Çağrı prosedürlerinde, DLL kitaplığından içe aktarılan işlevlerin adını belgelerde belirtildiği gibi belirtiriz. Ayrıca Omega'nın Mforex.h dosyasındaki tanımları "bilmediğine" dikkat edin. Yani, örneğin, pozisyon açma işlevini çağırırken, OP_SELL değil, Satış - 1 için işlem kodunu belirtmeniz gerekir. Daha fazla ayrıntı için, omega'nın harici kitaplıklarla nasıl çalıştığını açıklayan DevKit belgelerine bakın.
İyi şanlar!


Bu yüzden Omega'da şunları yazdım:

DefineDLLfunc:"Mforex2.dll", int, "Başlat"; {DLL çağrısı}
_gbp = Başlat(); {terminal başlatma işlevi}

Ama burada "Başla ()" yerine başka bir şey yazmak gerektiğini söylüyorsunuz, doğru mu anladım?
 

Bu yüzden Omega'da şunları yazdım:

DefineDLLfunc:"Mforex2.dll", int, "Başlat"; {DLL çağrısı}
_gbp = Başlat(); {terminal başlatma işlevi}

Ama burada "Başla ()" yerine başka bir şey yazmak gerektiğini söylüyorsunuz, doğru mu anladım?

Ben kendim cevaplıyorum: "Başlat ()" yerine başka hiçbir şeyin kaydedilmesi gerekmiyor - bu doğru, Omega MT4'ü sorunsuz başlatıyor.

Ancak bir pozisyon açma Fonksiyonunda, biraz daha karmaşıktır, yani bir fonksiyon kaydettim:

Girdi: Symbol(NumericSimple), Order(NumericSimple), Lot(NumericSimple),
fiyat(SayısalBasit), sl(SayısalBasit), tp(SayısalBasit);


DefineDLLfunc:"Mforex2.dll", int, "NewPos",char, int, int, double, double, double;

_NewPos = NewPos(Sembol, Emir, Parti, fiyat, sl, tp);

Mantıken, her şey üreticinin tanımıyla uyuşuyor, ancak pratikte sorunlar var: her şey sayılarla veriliyor...