"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ı - sayfa 7

 

pisara :

... IMHO, TS yazı dilinin gelişimi tam olarak ticaretin belirli görevlerine hizmet etmelidir, yani. bilgi toplama, analiz, test etme, ticaret yönetimi ve diğer sistemlerle entegrasyon - tüm bunlar yapılabilir ve IMHO, yüksek düzeyde modern geliştirme araçları, yani. seçilen standart çerçeveyi, içinde genel olarak kabul edilen yöntemlerle (OOP, vb.) entegre etmek ve genişletmek. Görev, C/C++ veya başka bir şeyin karışımına dayalı kapalı ve kendi kendine yeterli bir platform yazmak değil, her şeyden önce yüksek kaliteli ticaret platformu temellerini, hizmetlerini, API'sini ve kullanıcı arayüzünü yazmaktır...

Moe IMHO, IMHO'nuzla tamamen örtüşüyor. Benzer düşünen insanları bulmak güzel. MT'yi "şeytan ayrıntıda gizlidir" atasözüyle ilişkilendiriyorum ve ciddi mimari hatalar şüphesi var, yoksa neden bu kadar çok "tuğla" - "Hey vatandaş! Oraya gitme, buraya git! Aksi takdirde kar başının üstüne düşecek - tamamen öleceksin!"

Aynı zamanda, MT'nin uğraşmak zorunda kaldığım ürünler arasında en kötü ürün olmaktan uzak olduğu kabul edilmelidir.

 

Renat писал(а)  :

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


Belki bir şeyi kaçırdım ya da rezervasyon yaptırdınız. Matkad ve MT 4 arasındaki bağlantı hakkında hiçbir yerde bir makale bulamadım. Evet, Matlab var. matkad yok ((

Bir zamanlar, programcılardan MT4B <-> Matkad iletişimini sipariş ettim. Tek kabul edilebilir (sürdürülebilir)  dosya işlemleri yoluyla iletişim vardı. MT4 - teklifleri bir dosyaya yazar - Matkad okur - işler - sonuçları bir dosyaya yükler (para birimi satın al / sat) - MT4 okur ve yürütür. Ama bazen, bilinmeyen nedenlerle bir çökme meydana geldi... 3 aydan fazla zaman harcadık ama çözemedik.

Bir yandan, her şeyi tek bir pakette yapma arzunuz iyi ve mükemmel. Bu, sistemin kararlılığı ve güvenilirliğidir.

Ama öte yandan üst düzey programlama dilleri var (Matlab, Matkad) onlar için o kadar çok şey yazıldı ki, milyarlarca adam-yılı harcandı. Ve bu gücü MT5'e bağlamak harika olurdu. Bu dillerin seviyesine ulaşmak için ne gücünüz ne de imkanınız var...

ZY Bu dillerin her ikisinin de dizilerle (matris cebiri) çalışacak şekilde keskinleştirildiğine dikkatinizi çekmek istiyorum, tam olarak ihtiyacınız olan şey ...

 
Prival :

Belki bir şeyi kaçırdım ya da rezervasyon yaptırdınız. Matkad ve MT 4 arasındaki bağlantı hakkında hiçbir yerde bir makale bulamadım. Evet, Matlab var. matkad yok ((

Evet, Matkad ve Matlab'ı karıştırdım. Afedersiniz.


Bir zamanlar, programcılardan MT4B <-> Matkad iletişimini sipariş ettim. Tek kabul edilebilir (sürdürülebilir)   dosya işlemleri yoluyla iletişim vardı. MT4 - teklifleri bir dosyaya yazar - Matkad okur, işler, sonuçları bir dosyaya yükler (döviz alış / satış) - MT4 okur ve yürütür. Ama bazen, bilinmeyen nedenlerle bir çökme meydana geldi... 3 aydan fazla zaman harcadık ama çözemedik.

MQL5 ile bağlantı kurmayı deneyin - bu daha güçlü, verimli ve güvenli bir dildir.

İyi bir sonuç almak için Matkad'ın MT5 ile entegrasyonu konusunda halka açık bir çalışmaya başlayabilirsiniz. Böylece hatalar hızla düzeltilebilir ve çalışan bir sonuç elde edilebilir.

 
Renat писал(а) :
Evet, Matkad ve Matlab'ı karıştırdım. Afedersiniz.


MQL5 ile bağlantı kurmayı deneyin - bu daha güçlü, verimli ve güvenli bir dildir.

İyi bir sonuç almak için Matkad'ın MT5 ile entegrasyonu konusunda halka açık bir çalışmaya başlayabilirsiniz. Böylece hatalar hızla düzeltilebilir ve çalışan bir sonuç elde edilebilir.

Çok şey mümkün, ama her şeyden önce, bu tür projelerle ilgilenmesi gerekenin siz olduğunu düşünüyorum (sadece hedef kitlenizin nasıl artacağını hayal edin ve  forex ve borsa + Standart bir matlab üzerinde programlar yazarım ).

Ve halka açık, açık, vb. Uzun zamandır iş ile ilgilenmiyorum. Zamanıma çok değer veriyorum. Bunlar gibi tırmıklara basmaktan bıktım

 //+----------------------------------------------------------------------------+
//|  Описание : Установка объекта OBJ_VLINE вертикальная линия                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - цвет линии                                                         |
//|    nm - наименование                                                       |
//|    t1 - время                                                              |
//+----------------------------------------------------------------------------+
void SetVLine( string nm= "" , datetime t1= 0 , color cl= Red )
  {
  if (t1<= 0 ) return ; //t1=Time[0];
  if ( ObjectFind ( 0 ,nm)< 0 ) ObjectCreate ( 0 , nm, OBJ_VLINE , 0 , t1, 2 );
  else Print ( "Ошибка создания SetVLine " ,nm, " " , GetLastError (), " t1=" ,t1);
  
  ObjectSetInteger ( 0 , nm, OBJPROP_COLOR , cl);
  ObjectSetInteger ( 0 , nm, OBJPROP_STYLE , STYLE_DOT );
  ObjectSetInteger ( 0 , nm, OBJPROP_BACK , true);        // рисовать как фон
  ObjectSetInteger ( 0 , nm, OBJPROP_SELECTABLE , false); // запретить выделение объекта мышкой
  }

Bu prosedür nasıl burada böyle yayınlayabilir?

2010.05.06 02:28:14   Setka_Final_1 (EURUSD,M5)            SetVLine oluşturma hatası  VLine_838524   4202  t1= 2010.05.06 00:00:00

Brad çıkıyor

ERR_OBJECT_NOT_FOUND

4202

Grafik nesnesi bulunamadı

Nesne bulunamazsa. Programın onu yaratması gerekiyordu. Ama amaç, eğer (...) o zaman 4202 verilirse.

Sanırım sadece yorgunum ve yatma zamanı.

 

Özel'e .

MatKad kullanarak oldukça ilginç bir problem formüle ederseniz (başlamak çok zor değil), o zaman eminim ki bu problemin çözümüne katılmak isteyecek uzmanlar olacaktır.

 
Prival :

2010.05.06 02:28:14    Setka_Final_1 (EURUSD,M5)             SetVLine oluşturma hatası   VLine_838524    4202   t1= 2010

Nesne bulunamazsa. Programın onu yaratması gerekiyordu. Ancak amaç, eğer (...) neden 4202 verilir.

Hata, önceki bir işlev çağrısından kaynaklanmaktadır. ResetLastError() kullanın
 


Tünaydın! Dizeleri bir DLL'den işlevlere geçirmekten bahsetmek

izim var kod:

#include <WinUser32.mqh>

#ithalat "mt4excel.dll"

bool ExcelOpen();//Excel'i açar ve boş bir sayfa oluşturur

bool ExcelSetTextCell(int X,int Y,char Değer[]);//Hücreye metin yaz

/*

diğerleri kesti

*/

#içe aktarmak

geçersiz OnTick()

{

Mql Oranları[];

int kopyalanmış=CopyRates("EURUSD", PERIOD_M1 ,0,1,oranlar);

ExcelSetTextCell(1,1,"Araç");

ExcelSetTextCell(2,1,"USD");

ExcelSetValueCell(2,2,rates[0].close);

}

Belirtildiği gibi, Excel yalnızca ExcelSetTextCell kullanılarak oraya iletilen ilk harfi görüntüler. Bu konuyu okuduktan sonra nedenini anladım, ancak ihtiyacım olanı nasıl elde edeceğimi tam olarak anlamıyorum. Mesele şu ki DLL'yi ben yazmadım, bu MT4 aracılığıyla Excel ile çalışmak için bir işlevler kütüphanesi. Açık nedenlerle, MT5 yalnızca ilk karakterin bulunduğu satıra bir işaretçi atar. Soru şu ki, DLL'nin kaynak kodunu düzenleme yeteneğim yoksa, MT5'in orada gerekli olanı geçmesini nasıl sağlayabilirim? Sonuçta, yetişebildiğim kadarıyla, şöyle bir şey eklemeniz gerekiyor

_DLLAPI void __stdcall demo( char *stream, char *buf){ buf=stream;}

MT5 geliştiricilerinin yorumları için minnettar olurum

Teşekkür ederim!

 

ns_k, MQL5'teki dizelerin unicode olduğunu unutmayın.

2 çözüm mümkündür.

1. Unicode dizelerini kabul etmek için dll'yi yeniden oluşturun (bitirin)

2. Dizeyi kendiniz diziye dönüştürün

 
stringo :

ns_k, MQL5'teki dizelerin unicode olduğunu unutmayın.

2 çözüm mümkündür.

1. Unicode dizelerini kabul etmek için dll'yi yeniden oluşturun (bitirin)

2. Dizeyi kendiniz diziye dönüştürün

İkinci çözüm benim için çalışıyor. Söyle bana, o zaman muhtemelen işlevin bildirimini değiştirmeliyim? Onlar. yerine

bool ExcelSetTextCell(int X,int Y, string Value);//Hücreye metin yaz

üçüncü parametrenin bir dizi olacağı bir bildirim yazmalı mıyım? Eğer öyleyse, nasıl yapacağımı anlamıyorum. Teşekkür ederim!

güncellendi: Anladım, biraz düşünmek zorunda kaldım. Yardım için teşekkürler!!

 

DLL işlev bildirimi

 bool ExcelSetTextCell( int X, int Y, uchar & Value[]);
DLL İşlevi Çağırma
 //--- объявляем массив символов
uchar value [];
//--- преобразуем юникод строку в однобайтный массив
StringToCharArray( "EURUSD" , value );
//--- передаем полученные данные массива по ссылке
ExcelSetTextCell( 2 , 1 , value );
Neden: