연결되었습니다() - 페이지 4

 
7bit :

검사할 수 있습니다. 무한 루프에서 검사를 실행하기만 하면 됩니다. 연결 중단 중에 터미널 을 시작할 때 이 루프를 시작하는 방법 은 완전히 별개의 문제입니다. 루프를 실행하면 예상한 대로 수행됩니다.

귀하의 문제는 IsConnected() 함수와 관련이 없습니다. 동일한 인수로 Print() 또는 Alert() 또는 완전히 다른 이유로 인해 전체 코드를 처음부터 시작할 수 없기 때문에 호출할 수 없는 다른 함수에 대해 불평할 수도 있습니다.


좋아, 내가 뭔가를 설명하겠습니다 Terminlas를 많이 사용하고 있기 때문에 CPU 사용량이 모두 100퍼센트까지 올라가고 있으므로 몇 개의 터미널을 꺼야 합니다

그리고 내가 그들을 켤 때 (물론 자동) 나는 그들이 연결되어 있지 않고 EA가 실행되고 있다는 것을 몇 번 보았고 연결이 없다고보고하지 않았습니다.

그것은 Yi가 이 주제를 시작했고 지금까지 내가 찾은 유일한 방법은 외부 프로그램에서 위에서 말한 것과 같습니다.

 

아마도 그것은 Windows XP SP2에서 처음 도입된 "기능"과 관련이 있을 것입니다. 이 "기능"은 주로 네트워킹 집약적인 응용 프로그램을 사용하려는 사람들을 귀찮게 하기 위해 반쯤 열린 연결 이상을 거부하는 것입니다. AFAIK에는 이 성가신 "기능"을 패치하고 정상적인 작동을 복원하는 방법이 있습니다. http://blog.davidkaspar.com/archives/2005/04/windows-xp-sp2-and-event-id-4226.php

Windows 이벤트 로그에서 4226 이벤트를 찾습니다.

 
7bit :
이것은 EA의 init() 내에서 start()를 강제 실행하는 유일한 올바른 방법 입니다. GUI 스레드에서 start()가 실행되기 때문에 표시기에서 이 작업을 수행할 수 없습니다.

이것은 좋지만 initi()가 반환되기 전에도 틱이 사라질 수 있으므로 항상 작동하는 것은 아닙니다. 이 경우 틱은 버려집니다. 이것을 강조하기 위해 다음에 5ms 일시 중지를 추가하면

PostMessageA(hwnd, msg, 2 , 1 ); // enqueue a fake tick and let init() return

그러면 start()가 실행되지 않습니다.

브로커의 실제 틱 을 요구하지 않고 전문 고문의 로드에서 start()를 실행하는 더 나은 솔루션이 있습니까?

 

나는 조금 늙었지만 주제에 대해 얻은 동일한 문제대한 해결책을 찾고 있습니다 .

사실, "이를 수행하는 유일한 방법은 스크립트입니다. 문제는 로드된 스크립트로 터미널을 열 방법이 없다는 것입니다"라는 qjol의 주장은 부분적으로 사실입니다. 스크립트로는 괜찮지만 클라이언트 터미널로 스크립트를 시작하는 방법이 있습니다. 이것은 메타 트레이더 도움말(F1, 도구, 시작 시 구성)에 설명되어 있습니다. 이 주제가 시작되었을 때 같지 않을 수 있습니다.

그래서 이 작업을 수행하기 위해 작은 스크립트를 개발했습니다. 다음과 같이 시작 스크립트와 함께 사용하십시오.

  ; open chart and run expert and/or script
   Symbol =EURUSD
   Period =H4
  Template=popular.tpl
  Expert=
  ExpertParameters=
  Script=CheckConnection
  ScriptParameters=

그리고 다음과 같은 터미널을 실행하십시오.

 "...\Metatrader 4\terminal.exe" config\start.ini

파일:
 

안녕하세요 여러분,

당신 누군가는 스크립트 가짜 을 작동하지 않는 이유 알고 있습니까 ?

제 OS는 비스타입니다. 고맙습니다.

 
endy5 :

안녕하세요 여러분,

당신 누군가는 스크립트 가짜 을 작동하지 않는 이유 알고 있습니까 ?

제 OS는 비스타입니다. 고맙습니다.

빌드 > 600부터 유니코드의 경우 "A"를 "W"로 바꿔야 합니다.

 int PostMessage A ( int hWnd, int Msg, int wParam, int lParam);
int RegisterWindowMessage A ( string lpString);
 

매개 변수 에 2와 1을 사용하는 이유는 무엇입니까?

PostMessageA(hwnd, msg, 2 , 1 )
 
iamsuman2 :

매개 변수에 2와 1을 사용하는 이유는 무엇입니까?

MQL의 범위를 벗어납니다. 여기 에서 기능을 확인하십시오.

 

다른 사람이 IsConnected() 함수 에 대한 정보를 검색하는 경우.

예, 함수는 start() 함수 또는 OnTick() 함수에서 작동하지 않습니다. 연결이 없으면 새 틱이 도착하지 않고 함수가 어쨌든 트리거되지 않기 때문입니다....

그래서 우리는 무엇을해야합니까?

OnTimer() 함수를 사용하여 들어오는 틱에 관계없이 연결을 정기적으로 확인합니다.

 int timer = 60 ;   //60 seconds, for example
int OnInit ()
  {
//--- create timer
   EventSetTimer (timer);   //could use EventSetMillisecondTimer(timer) for millisecond resolution
//---
   return ( INIT_SUCCEEDED );
  }

// Metatrader self-triggered function, will be called regularly
void OnTimer ()
  {
     if (! IsConnected ())
       Alert ( "Problem, not connection to the server!" );
  }

void OnDeinit ( const int reason)
  {
//--- destroy timer
   EventKillTimer ();

  }
      
 

fridayda13 :

예, 함수는 start() 함수 또는 OnTick() 함수에서 작동하지 않습니다. 연결이 없으면 새 틱이 도착하지 않고 함수가 어쨌든 트리거되지 않기 때문입니다....

그래서 우리는 무엇을해야합니까?

OnTimer() 함수를 사용하여 들어오는 틱에 관계없이 연결을 정기적으로 확인합니다.

할 수 있는 일이 없기 때문에 아무 것도 하지 말아야 합니다. 네트워크 시간이 초과되고 기능 이 값을 변경하는 데 30초 이상이 걸립니다. 아무것도 바뀌지 않고 연결이 되지 않으면 어떻게 하시겠습니까?

start/OnTick 에서 돌아오지 않는 경우( OrderSend 전에 확인) 또는 OrderSend 후에 동일한 틱 내에서 재시도하는 경우에만 유용합니다.

대신 OrderSend 가 실패하면 기록하고 반환하고 다음 틱에서 테스트/재시도하십시오. 완료.