MQL4 EA'dan grafiğe gösterge ekle - sayfa 3

 
Georgiy Liashchenko :
uyku işe yaradı teşekkürler

Alain'in kodunu kullanıyorum ve klasik gösterge formunun benden parametreyi doldurmamı istemesi ve ardından göstergeyi etkinleştirmek için Tamam'a tıklaması ve göstergeyi manuel olarak eklemeye benzer şekilde çalışıyor. Gerekli parametrelerin ayarları bile tüm işlemi tamamen otomatikleştirmek mümkün müdür? teşekkürler

 
alessandrovb :

Alain'in kodunu kullanıyorum ve klasik gösterge formunun benden parametreyi doldurmamı istemesi ve ardından göstergeyi etkinleştirmek için Tamam'a tıklaması ve göstergeyi manuel olarak eklemeye benzer şekilde çalışıyor. Gerekli parametrelerin ayarları bile tüm işlemi tamamen otomatikleştirmek mümkün müdür? teşekkürler

El ile yaptığınız gibi, tuş vuruşunu simüle etmek için kod eklemeniz yeterlidir.
 
Alain Verleyen :

Bu problemim yok (gönderdiğim kodla).

hWnd'nin 0'dan farklı olduğunu kontrol edin.

Ayrıca uyku değerini 50 veya 100'e yükseltmeyi deneyebilirsiniz.

Merhaba,

Birçok yardım için bu yorum, başka bir soruya ihtiyacım var,

Giriş açılır penceresini atlayabilir ve varsayılan göstergeyi kullanabilir miyim? Kodlama nasıl yapılır?

Göstergeyi grafikten silebilir miyim?

 
Alain Verleyen :

Teşekkürler aradığım şey bu, özel göstergemi ekleyebilirim, sadece bir soru daha, nasıl boşaltılır?

 
Alain Verleyen :

Tebrikler, iyi çalışıyor.

 
Alain Verleyen :

Bu problemim yok (gönderdiğim kodla).

hWnd'nin 0'dan farklı olduğunu kontrol edin.

Ayrıca uyku değerini 50 veya 100'e yükseltmeyi deneyebilirsiniz.


Kodunuzu kullanıyorum, ancak adıyla ilgili bir sorunum var.

2018.01.11 12:06:15.864 'C:\............\MQL4\indicators\MACD èõš p .ex4' dosyası açılamıyor [123]

2018.01.11 12:04:000.518 'C:\.............\MQL4\indicators\MACD' dosyası açılamıyor .ex4' [123]

İlk satır yükseltildiğinde

   uchar name2[4];

   name2[0]='M'; name2[1]='A'; name2[2]='C'; name2[3]='D';

   // StringToCharArray(IndicatorName,name2,0,StringLen(IndicatorName));

İkinci satır yükseltildiğinde

   uchar name2[];

   StringToCharArray(IndicatorName,name2,0,StringLen(IndicatorName));


İlk kodu değiştirdim, şimdi çalışıyor!

   uchar name2[ 5 ];

   name2[0]='M'; name2[1]='A'; name2[2]='C'; name2[3]='D'; name2[4]=0;

   // StringToCharArray(IndicatorName,name2,0,StringLen(IndicatorName));

Sanırım sorunum dizi algılamanın sonuyla ilgili!
 

Herkese merhaba,

Georgiy Liashchenko'ya teşekkür etmek istiyorum ve göstergeyi doğrudan grafiğe ekleyen kodunun yükseltilmiş sürümünü AutomaticallyAcceptDefaults ("true" olduğunda) ile paylaşmak istiyorum .

 #import "user32.dll"
   int  RegisterWindowMessageW(string MessageName);
   int  PostMessageW(int hwnd,int msg,int wparam,uchar &Name[]);
   int  FindWindowW(string lpszClass,string lpszWindow);
#import

#define VK_RETURN 13 //ENTER key

void StartCustomIndicator( int hWnd, string IndicatorName, bool AutomaticallyAcceptDefaults= false )
{
   Sleep ( 100 );
   uchar name2[];
   StringToCharArray (IndicatorName,name2, 0 , StringLen (IndicatorName));
   int MessageNumber=RegisterWindowMessageW( "MetaTrader4_Internal_Message" );
   int r=PostMessageW(hWnd,MessageNumber, 15 ,name2);
   Sleep ( 100 );
   if (AutomaticallyAcceptDefaults) {
       int ind_settings = FindWindowW( NULL , "Custom Indicator - " +IndicatorName);
      PostMessageW(ind_settings, 0x100 ,VK_RETURN,name2);
   }
}

int OnInit ()
{
   int hWnd = WindowHandle( Symbol (), 0 );
   StartCustomIndicator(hWnd, "Indicator_name" );
   return ( INIT_SUCCEEDED );
}

Umarım uzmandan gösterge eklemesi gereken bazı insanlara yardımcı olur.

Not: Özel göstergeler için çalışıyorum, yoksa windows adını değiştirin

Not2 : 15'ten fazla karakter içeren göstergeler kullanmayın (".ex4"ten önce)

 
Kray :

Herkese merhaba,

Georgiy Liashchenko'ya teşekkür etmek istiyorum ve göstergeyi doğrudan grafiğe ekleyen kodunun yükseltilmiş sürümünü AutomaticallyAcceptDefaults ("true" olduğunda) ile paylaşmak istiyorum .

Umarım uzmandan gösterge eklemesi gereken bazı insanlara yardımcı olur.

Not: Özel göstergeler için çalışıyorum, yoksa windows adını değiştirin

Not2 : 15'ten fazla karakter içeren göstergeler kullanmayın (".ex4"ten önce)

Çok hoş.


Bunu kullanarak keşfettim:

 int r=PostMessageW(hWnd,MessageNumber, 13 ,name2);

Kullanmak yerine:

 int r=PostMessageW(hWnd,MessageNumber, 15 ,name2);

Standart göstergenin adını kullanarak standart göstergeleri de kullanmanıza izin verir.

 

bir .... alırım

'name2' - parameter conversion not allowed
derlemeye çalıştığımda hata mesajı ?!

 

Kray :

Herkese merhaba,

Georgiy Liashchenko'ya teşekkür etmek istiyorum ve göstergeyi doğrudan grafiğe ekleyen kodunun yükseltilmiş sürümünü AutomaticallyAcceptDefaults ("true" olduğunda) ile paylaşmak istiyorum .

......

 if (AutomaticallyAcceptDefaults) {
       int ind_settings = FindWindowW( NULL , "Custom Indicator - " +IndicatorName);
      PostMessageW(ind_settings, 0x100 ,VK_RETURN,name2);


MT4 v4.00 Build 1090 (19 Mayıs 2017) çalıştırıyorum.

PostMessageW işlevi, bir gösterge yerleştirmek için bir komut dosyası içinden kullandığımda MT4 terminalimin çökmesine neden oluyor.

Göstergeyi yerleştirmek için alternatif olarak SendMessageW kullandım, ancak ne yazık ki bu, bir klavye olayını simüle ederek ve Enter tuşuna basarak yapılandırma iletişim kutusunu kapatmanın bir yolu olmadığı anlamına geliyor. Bunun nedeni, SendMessageW işlevinin, pencere prosedürü mesajı işleyene kadar geri dönmemesi olabilir; bu, klavye olayının iletişim kutusu gidene kadar işlenemeyeceği anlamına gelir. Bu da iletişim kutusu görüntülendiğinde FindWindowW'nin çalışmayacağını, çünkü SendMessageW'nin iletişim kutusu gidene kadar geri dönmeyeceği anlamına gelir.

Bütün bunlar benim için hayal kırıklığı yaratan büyük bir egzersiz oldu. PostMessageW, MT4'ün en son sürümünde hala çalışıyor mu? Göstergenin yapılandırma iletişim kutusunu programlı olarak nasıl kapatacağını bilen var mı? Diğer iki konuya danıştım, tavsiyelerini denedim ve başarısız oldum:

https://www.mql5.com/en/forum/155334

https://www.mql5.com/en/forum/115967

Biri beni aydınlatabilir mi? PostMessageW'yi çalıştırmanın veya yapılandırma iletişim kutusunu başka bir şekilde kapatmanın bir yolu var mı?

Neden: