Bağlandı() - sayfa 2

 
Matutin :

init()'ten start()'ı çağırmanız yeterlidir ...ve tik gelmese bile start()'ta olacaksınız!

teşekkürler 2
 
Viffer :

Yukarıdaki bağlantımı genişletiyorum... Bağlantı durumunu izlemek için ayrı bir EA çalıştırıyorum. Temelde, sonunda bir uyku ile başlayan, kodlanmış testimin tüm koduna sahiptir. Başlangıç temelde büyük bir döngüdür, bittiğinde başa döner. Ancak, başlangıcı tetiklemek için bir onay işareti beklemek yerine, init() içinde start()'ı çağırırım. Bu şekilde start(), uyku ile döngüye devam eder ve init() asla bitmez, bu nedenle kod, bir onay beklemek yerine uykudaki zaman aralıklarına göre çalışır...

hh

V


Matutin :

init ()'den start()'ı çağırmanız yeterlidir ...ve tik gelmese bile start()'ta olacaksınız!


bunların hiçbiri sorunu çözmez çünkü bağlantı yoksa init() de başlamadı

bunu yapmanın tek yolu beyaz bir komut dosyasıdır; sorun şu ki, terminali Loaded komut dosyasıyla açmanın bir yolu yok

 
qjol :


bunların hiçbiri sorunu çözmez çünkü bağlantı yoksa init() de başlamadı

bunu yapmanın tek yolu beyaz bir komut dosyasıdır; sorun şu ki, terminali Loaded komut dosyasıyla açmanın bir yolu yok


MT4i.com araçlarına bir göz atalım. Bunları bağlantıyı izlemek ve posta veya sms ile uyarı göndermek için kullanıyorum.

http://www.mt4i.com/mtdashboard.aspx

 
Matutin :

init()'ten start()'ı çağırmanız yeterlidir ...ve tik gelmese bile start()'ta olacaksınız!

NUMARA! Buna izin verilmiyor. init() öğesinin 2 saniye sonra dönmesi bekleniyor. Init'in engellemesine izin verilmiyor! Bundan her türlü sorun çıkabilir (ve çıkacaktır).

Sadece başlangıçta döngüyü yapın ve EA'yı yükledikten sonra bir sonraki uygun onay işaretinde otomatik olarak çağrılmayı bekleyin. Bağlantı kesilmeden önce işaretler vardı, bu nedenle bu olay gerçekleştiğinde döngünüz zaten çalışıyor olacak.


Eğer gerçekten bir start()'ı init() içinden tetiklemeniz gerekiyorsa, çünkü bunun hafta sonu çalışmasına ihtiyacınız varsa, o zaman tek doğru yol, bir tik zorlamak için PostMessage() hilesini kullanmaktır. Mesajı gönderirsiniz ve ardından init'in geri dönmesine izin verirsiniz! MT4, normal yoldan start()'ı çağırır ve init() engellemez.


Örnek için sonraki gönderiye bakın.

 
// this is an EA

#import "user32.dll"
   int PostMessageA( int hWnd, int Msg, int wParam, int lParam);
   int RegisterWindowMessageA( string lpString);
#import

int init(){
   int hwnd=WindowHandle( Symbol (), Period ());
   int msg = RegisterWindowMessageA( "MetaTrader4_Internal_Message" );
   PostMessageA(hwnd, msg, 2 , 1 ); // enqueue a fake tick and let init() return
   return ( 0 );
}


int start(){
   while (! IsStopped ()){
       // do your stuff here
       Sleep ( 1000 );
   }
   return ( 0 );
}
Bir EA'da init() içinden bir start() öğesini zorlamanın tek doğru yolu budur . GUI iş parçacığında start() çalışacağından bunu bir göstergede yapmanıza izin verilmez.
 
/**
* MT4/experts/ scripts /ticks.mq4
* send a fake tick every 200 ms to the chart and
* all its indicators and EA until this script is removed.
*/

#property copyright "© Bernd Kreuss"

#import "user32.dll"
   int PostMessageA( int hWnd, int Msg, int wParam, int lParam);
   int RegisterWindowMessageA( string lpString);
#import

int start(){
   int hwnd=WindowHandle( Symbol (), Period ());
   int msg = RegisterWindowMessageA( "MetaTrader4_Internal_Message" );
   while (! IsStopped ()){
      PostMessageA(hwnd, msg, 2 , 1 );
      Sleep ( 200 );
   }
}
Bütünlük adına yukarıdakiler, hafta sonu sahte keneleri simüle etmek için kullandığım bir komut dosyasıdır . Buna ihtiyacın yok, bu sadece bir örnek. Bu, çoğunlukla diğer EA'larda ve göstergelerde hata ayıklamak için kullanışlıdır.
 
/**
* this is a variation of the above script meant to be run as an EA .
* Send a fake tick every 200 ms to the chart and
* all its indicators until this EA is removed.
*/

#property copyright "© Bernd Kreuss"

#import "user32.dll"
   int PostMessageA( int hWnd, int Msg, int wParam, int lParam);
   int RegisterWindowMessageA( string lpString);
#import

int init(){
   int hwnd=WindowHandle( Symbol (), Period ());
   int msg = RegisterWindowMessageA( "MetaTrader4_Internal_Message" );
   PostMessageA(hwnd, msg, 2 , 1 ); // enqueue the first fake tick
}

int start(){
   int hwnd=WindowHandle( Symbol (), Period ());
   int msg = RegisterWindowMessageA( "MetaTrader4_Internal_Message" );
   while (! IsStopped ()){
      PostMessageA(hwnd, msg, 2 , 1 );   // produce more fake ticks
       Sleep ( 200 );
   }
}

Ve bu, yukarıdaki komut dosyasıyla aynıdır , ancak bir EA olarak uygulanır ve her iki kavramı tek bir EA'da gösterir.

init()'te ilk start()'ı tetiklemek için ilk tik'i kuyruğa alacak ve ardından start()'ta sonsuz bir döngüde daha fazla tik üretecektir. Bu tikler daha sonra aynı grafikteki tüm göstergeler tarafından alınacaktır.

 
7bit :
Bir EA'da init() içinden bir start() öğesini zorlamanın tek doğru yolu budur . GUI iş parçacığında start() çalışacağından bunu bir göstergede yapmanıza izin verilmez.

 // this is an EA

#import "user32.dll"
   int PostMessageA( int hWnd, int Msg, int wParam, int lParam);
   int RegisterWindowMessageA( string lpString);
#import

int init(){
   int hwnd=WindowHandle( Symbol (), Period ());
   int msg = RegisterWindowMessageA( "MetaTrader4_Internal_Message" );
   PostMessageA(hwnd, msg, 2 , 1 ); // enqueue a fake tick and let init() return
   return ( 0 );
}


int start(){
   while (! IsStopped ()){
       // do your stuff here
       Sleep ( 1000 );
   }
   return ( 0 );
}

bu EA'yı bir tabloya koymaya çalışın, terminali kapatın, internet bağlantınızı devre dışı bırakın ve terminalinizi açın (İnternet bağlantısı kapalıyken) & çalışmadığını göreceksiniz

 
qjol :


bunu bir tabloya koymaya çalışın internet bağlantınızı devre dışı bırakmak yerine terminali kapatın ve terminalinizi açın (internet bağlantısı kapalıyken) & çalışmadığını göreceksiniz

Ancak normal koşullar altında başlatıldıktan sonra (normal kullanım durumu bu olmalıdır) çalışmaya devam etmelidir. Başladıktan sonra bağlantıyı kesmeyi deneyin.


Ve bir init() engellemesinden nasıl kaçınılacağına ve onu bir komut dosyası yerine bir EA olarak çalıştırmaya bir örnek olarak hizmet eder.

 
7bit :

Ancak normal koşullar altında başlatıldıktan sonra (normal kullanım durumu bu olmalıdır) çalışmaya devam etmelidir. Başladıktan sonra bağlantıyı kesmeyi deneyin.


Ve bir init() engellemesinden nasıl kaçınılacağına ve onu bir komut dosyası yerine bir EA olarak çalıştırmaya bir örnek olarak hizmet eder.


Haklısın ama tarif ettiğin duruma çözüm aramıyorum, anlattığım duruma çözüm arıyorum ve şu anda bulduğum tek çözüm, yani harici yazılım, çalıştıracak. senaryo