MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 1191

 

mql4 yerine C++ dilinin mümkün olduğunca Expert Advisor uygulamasına katılması için dll kütüphanesinin siparişleri gönderebilmesi ve veri alışverişi yapabilmesi için Meta Quotes sunucularına nasıl bağlanılır?


Bir dll kütüphanesi ile MT4'te nesne çizmek mümkün müdür, bu konuda neler incelenebilir?

 
Mihail Matkovskij :

Ama neden tarih iBars(sembol, zaman çerçevesi) ile bitmemiş ve iBars(Symbol(), Period()) ile oldukça normal? Ve bu, yalnızca terminal yeniden başlatıldığında olur ve her zaman değil. Ve üye değişkenler sembolü, zaman çerçevesi, başlatma bölümünde doğru şekilde başlatıldı (kişisel olarak kontrol ettim).

Örneğimi zorlamaya çalışın: https://c.mql5.com/3/324/Test.mq5

sıralama:

1. Derlenen dosyayı tabloya atın. Ortaya çıkan mesajlar şunlardır:

2. Terminali kapatın ve yeniden başlatın. Günlük mesajları aşağıdaki gibi olacaktır:

Karar verildi.

Bu kod yerine

 public :  
  Loader(): symbol( Symbol ()), timeframe( Period ()) 
  {
     Print ( __FUNCTION__ + " symbol: " + symbol + " timeframe: " + EnumToString (timeframe));
     ResetLastError ();
     Print ( __FUNCTION__ + " bars: " + ( string ) iBars (symbol, timeframe)); // Данный вызов iBars() даёт 0 при перезапуске терминала
     Print ( __FUNCTION__ + " Error: " + ( string ) GetLastError ());
     Print ( __FUNCTION__ + " bars (2): " + ( string ) iBars ( Symbol (), Period ())); // Этот же вызов iBars() работает нормально
  }

aşağıdakileri yazdım

 public :  
  Loader(): symbol( NULL ), timeframe( PERIOD_CURRENT ) 
  {
     Print ( __FUNCTION__ + " symbol: " + symbol + " timeframe: " + EnumToString (timeframe));
     ResetLastError ();
     Print ( __FUNCTION__ + " bars: " + ( string ) iBars (symbol, timeframe));
     Print ( __FUNCTION__ + " Error: " + ( string ) GetLastError ());
     Print ( __FUNCTION__ + " bars (2): " + ( string ) iBars ( Symbol (), Period ())); 
  }

Artık terminali yeniden başlatırken hata yok. Ancak sembol ve zaman çerçevesinin yalnızca boş değerlerle başlatılması gerekir.

Kaynak kodun bir hata ve çalışan bir sürümle iki sürümünü ekliyorum. Test sırasının şu şekilde olduğunu hatırlatmama izin verin: https://www.mql5.com/en/forum/160683/page1189#comment_17047032

Dosyalar:
Bug.mq5  7 kb
Correct.mq5  6 kb
 
Seric29 :

mql4 yerine C++ dilinin mümkün olduğunca Expert Advisor uygulamasına katılması için dll kütüphanesinin sipariş gönderebilmesi ve veri alışverişi yapabilmesi için Meta Quotes sunucularına nasıl bağlanılır?

Mümkün değil. Protokol kapandı.

Bir dll kütüphanesi ile MT4'te nesne çizmek mümkün müdür, bu konuda neler incelenebilir?

Yasaktır.

 
Seric29 :

Vay, kontrol edeceğim. Dizi elemanları ile değişkenleri fonksiyonlara göre başlatmanın mümkün olduğunu biliyorum ama bunun otomatik olarak değiştiğini bilmiyordum, bana öyle geliyor ki C++'da da öyle bir şey yok, daha sonra kontrol edeceğim.

Bir hata yaptım(

Alım satım işlemlerinden önce lotu yeniden hesaplamanız gerekiyorsa, lot tanımını OnTick'in başına yerleştirmek daha iyidir.

veya (benimkini değiştirdiğim gibi) OnTimer

 

Merhaba! Tüm değerleri görüntülememe yardım et, sadece son değerleri gösterebilirim. Ve ikinci soru, bu değerlerin sağa kayma ile nasıl gösterileceğidir (herhangi bir kaymayı ayarlayın). Teşekkür ederim!

   for ( int p = 0 ; p < 4 ; p++)
       for ( int c = 0 ; c < 4 ; c++)
         for ( int ps = 0 ; ps < 4 ; ps++)
             Comment ( StringFormat ( "Выводим значения\nP = %G\nC = %G\nPS = %d" , p, c, ps));
 

Ayırıcılara basında saygı duymak nerede mümkün? sonra artı ile bölüyorlar, sonra virgül, anlamıyorlar, sorun

Yazdır (a, b + "abc");

 
Koldun Zloy :

Mümkün değil. Protokol kapandı.

Yasaktır.

protokol kapalı ne demek? mql4'ün bir sipariş açma işlevleri vardır; bu aslında normal bir koddur. Aynısı grafik nesneler için de geçerlidir. mql4'ün ticari bir ürün olduğunu duydum ve bu nedenle yerleşik işlevler için ne kaynak kodu ne de kod var (örn. Arrayresize/Range, vb.). Örneğin, bir program yazmak için mql4 kullanmak benim için uygun değil, dil çok ölü, çok sınırlı. Peki ya üzerinde Win API 32 dili sorularım için hiçbir şey yapılamaz? Muhtemelen her şey Win API 32 için de kapalıdır.

 
Seric29 :

protokol kapalı ne demek? mql4'ün bir sipariş açma işlevleri vardır; bu aslında normal bir koddur. Aynı şey grafik nesneler için de geçerlidir. mql4'ün ticari bir ürün olduğunu duydum ve bu nedenle yerleşik işlevler için ne kaynak kodu ne de kod var (örn. Arrayresize/Range, vb.). Örneğin, bir program yazmak için mql4 kullanmak benim için uygun değil, dil çok ölü, çok sınırlı. Peki ya üzerinde Win API 32 dili sorularım için hiçbir şey yapılamaz? Muhtemelen her şey Win API 32 için de kapalıdır.

Ayrı konu açarsanız daha canlı olur)

 
MakarFX :

Bir hata yaptım(

Alım satım işlemlerinden önce lotu yeniden hesaplamanız gerekiyorsa, lot tanımını OnTick'in başına yerleştirmek daha iyidir.

veya (benimkini değiştirdiğim gibi) OnTimer

Yani "Lot" değişkenini bir ifade ile başlattığınız şeyden bahsediyorum, bu ifadenin orada otomatik olarak ikame edilmesi mümkün değil. Hatta kontrol edebilir, normal bir sayaç alabilir, yapabilir, başlatma sırasında sayacın değerini atayabilir ve ardından sayacı değiştirebilirsiniz ve kendiniz değiştirmezseniz Lot değeri değişmez. Bu, c++'da çalışır.

 int Pomidor= 9 ;
int Pomidor1( int q=Pomidor){ return q;} //при инициализации
Вызов
Print (Pomidor()); // результат будет автоматически равен Pomidor и это будет регулярная смена значений 

Ama mql4'te bu şekilde çalışmıyor

 int Pomidor1( int q= 67 ){ return q;}

Sonuç 67.

 
Valeriy Yastremskiy :

Ayrı konu açarsanız daha canlı olur)

Eh, ben de konunun alakalı olduğunu düşündüm, ama elbette bir foruma girmeye değer olduğu bir gerçek değil, belki hala pek çok kişi için ilginç değil. Bana ilginç geldi, C++ ile kod yazmayı seviyorum.