MT4 개발자 및 프로그래머의 도움이 필요합니다. - 페이지 3

 
반복되는 전문가는 나쁜 매너입니다.
 
Integer :

2. 새로운 기능의 절반 정도. 이전에는 루프된 Expert Advisor의 속성 창이 열리지 않았습니다. 이제 Temper가 열리고 매개변수 변경에 대한 반응이 있으면 좋을 것입니다. 또는 사용자에게 혼동을 주지 않도록 속성 창을 열지 않도록 합니다.

그게 다야! 이 말을 하려고 하는데 아무도 듣지 않습니다.

내 생각에 "서비스 데스크"는 상황을 전혀 조사하지 않고 이해하지 않고 거부되었습니다. 다음은 요청 메시지에서 발췌한 내용입니다.

왜 프로그래머에게 그가 할 수 있는 것과 할 수 없는 것을 말합니까? 오류 없이 전송이 완료되었습니다. 실행은 오류 없이 진행됩니다. 사용자는 입력 매개변수 탭에서 "A=5"를 보고 시스템은 조언자에게 "A=1"을 제공합니다. start() 또는 while() 루프 를 사용하는 것은 취향의 문제입니다. 당신이 주장하는 것처럼 사이클은 결코 끝이 없습니다. 어드바이저의 텍스트를 주의 깊게 살펴보면 while(true) 이 아니라 while(!IsStopped()&&IsConnected()&&IsExpertEnabled()) 가 있습니다. 이전 MT4 빌드에서는 사용자가 Sleep() 함수를 실행하는 동안 입력 매개변수 값을 변경할 수 없었습니다. 새 어셈블리에는 더 이상 그러한 장애물이 없습니다. 따라서 이 상황에서 입력 매개변수 변경에 대한 금지를 되돌리거나 " 입력 " 탭뿐만 아니라 전문가에게도 변경이 있는지 확인하십시오. 모든 것.


정수 :

1. 설치 창에서 MetaTrader4 터미널을 설치할 때 포럼에 대한 초대가 있습니다. 즉, 다른 포럼이 아닌 이 포럼으로의 초대가 있습니다.

죄송합니다. 그러나 MT4와 MT5의 경계가 점차 흐려지는 것을 보았습니다. 그리고 "www.mql5.com"의 내 프로필에서 "서비스 데스크"로 향했습니다(처음이자 마지막으로 희망합니다). 터미널 버전을 선택할 가능성이 명확하게 보이는 양식이 채워져 있습니다. 저는 "MT4"를 선택했습니다.

다음은 이미 마감된 지원서에서 발췌한 또 다른 내용입니다(급하게 마감한 후 지원서를 읽는지 여부는 모르겠습니다)(물론 웃기지만 벼룩 잡기라는 말이 떠오릅니다).

그렇다면 왜 사용자는 새 값을 명확하게 볼 수 있습니까? EA가 완전히 작동할 수 있지만 이러한 새 값은 가짜이며 EA에서 사용할 수 없습니다. RefreshRates() 함수를 사용하면 EA가 모든 주기에서 최신 견적을 얻을 수 있습니다. 업데이트된 입력 매개변수 값을 가져오는 유사한 함수를 제공하거나 기존 RefreshRates() 함수에 이 기능을 추가하지 않는 이유는 무엇입니까?

"AutoTrading" 버튼을 두 번 누르면(Expert Advisors 비활성화 및 활성화) 실제로 주기가 중단되고 그 후에는 새 값을 사용할 수 있게 되지만 차트 기호의 틱(새 견적) 후에만 가능합니다. 언제 도착할지 알 수 없으며 고문은 기타 기호를 처리하는 것이 금지되지 않으며 사용자는 이러한 시간 손실이 필요하지 않습니다. 즉, "미래로 돌아가기"와 같은 것으로 밝혀졌습니다. 새로운 MT4를 출시했습니다. 더 현대적이며 더 빠릅니다. 그들은 많은 인용문이 다른 기호에 대해 한창일 때 하나의 기호에 대한 인용을 예상하여 화면에서 얼마나 잘 느려지는지 말합니다. 즉, 이제 고객에게 다음과 같이 말합니다. 매개변수를 변경하고 "Advisors" 버튼을 두 번 클릭하여 껐다가 켜고 바다의 날씨를 기다리십시오. 언젠가는 "똑딱"할 것입니다.

나는 한 번도 도움을 요청한 적이 없으며 앞으로도 그러지 않기를 바랍니다. 조만간 이 "훅"을 우회할 기회를 찾을 수 있을 것입니다. 이것은 MT4가 존재하는 한 항상 그랬고 물론 " 전략 테스터 "가 존재하는 한 지금은 침묵하는 것이 좋습니다. 그러나 모든 실시간 부정확성은 물론 매우 심각한 문제입니다. 특히 때때로 상당한 금액을 자신의 돈으로 걸고 있는 사용자에게는 더욱 그렇습니다. 이 버그를 우회하는 다른 효과적인 방법을 보지 못했기 때문에 "서비스 데스크"로 눈을 돌렸고 솔직히 그들이 수정을 거부 할 것이라는 약간의 의심도있었습니다. 괜찮아...

물론 '고맙다'가 아니라 '그래도' 모든 것이 이뤄져야 한다는 것은 안 좋은 일이다.

 
Integer :
Wex, 타이머를 사용하면 이제 반복 없이 할 수 있습니다.

물론, 새로운 Expert Advisors는 완전히 다른 방식으로 프로그래밍될 수 있습니다. 그러나 이미 잘 프로그래밍된 Expert Advisors가 많이 있습니다. 그리고 고객은 돈을 지불 한 것이 갑자기 올바르게 작동하지 않는 이유를 이해하지 못합니다.

즉, 이미 개발된 소프트웨어(EA 또는 스크립트, 표시기까지)가 새로운 MT4 빌드와 근본적으로 호환되지 않는 매우 불쾌한 경향이 있습니다.

또한 기본적으로 프로그래밍 과정에서 비표준적인 것을 사용하지 않았습니다. 모든 P/O는 MQL4의 REGULAR 기능에만 기반했습니다. 그리고 나는 이미 새로운 MT4 빌드에서 전혀 작동하지 않거나 완벽하게 작동하는 것처럼 보이지만 많은 지표와 Expert Advisors(대부분 복잡하거나 소위 "다중 통화")의 공격을 받았습니다. 내가 준 예에서처럼. (번역 오류의 경우 예를 들어 예약어 목록의 확장으로 인해 "new"라는 변수가 내가 이해한 대로 나타났습니다.)

 

문서를 읽기에는 너무 게으르다. 나머지는 그들이 매우 똑똑하다는 것을 보여줍니다 ... Uff

코드를 잡아보세요 :)

그래서 나는 당신의 문제가 무엇인지 이해하지 못합니다.

 //+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property copyright      "Grizzly_v :)"
#property link            "http://www.mql5.com"
//+------------------------------------------------------------------+
extern int       A1=       1 ;
extern int       A2=       2 ;
int       C1,C2;
//+------------------------------------------------------------------+
int OnInit (){
   C1=A1;
   C2=A2;
   return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
void OnDeinit ( const int reason){
   Comment ( "" );
}
//+------------------------------------------------------------------+
void OnTick (){
   string    t;

   t=TimeToStr( TimeCurrent (), TIME_MINUTES | TIME_SECONDS );
   Comment (t+ "\nA1=" +A1+ "   A2=" +A2+ "\nC1=" +C1+ "   C2=" +C2);
}
//+------------------------------------------------------------------+
 
grizzly_v :

문서를 읽기에는 너무 게으르다. 나머지는 그들이 매우 똑똑하다는 것을 보여줍니다 ... Uff

코드를 잡아보세요 :)

그래서 나는 당신의 문제가 무엇인지 이해하지 못합니다.

문제는 EA가 루프(loop)되어 OnTick 이벤트가 발생하지 않고 변경된 매개변수를 볼 수 없다는 것입니다.
 

그럼. 새로운 기능을 통해서만 동일한 주기.

   extern int       A1=       1 ;
   extern int       A2=       2 ;
         int       C1,C2;
//+------------------------------------------------------------------+
int OnInit (){
   C1=A1;
   C2=A2;
   EventSetMillisecondTimer ( 100 );
   return ( 0 );
}
//+------------------------------------------------------------------+
void OnDeinit ( const int reason){
   EventKillTimer ();
}
//+------------------------------------------------------------------+
void OnTimer (){
   string    t;
   RefreshRates();
   t=TimeToStr( TimeCurrent (), TIME_MINUTES | TIME_SECONDS );
   Comment (t+ "\nA1=" +A1+ "   A2=" +A2+ "\nC1=" +C1+ "   C2=" +C2);
}
//+------------------------------------------------------------------+
 
stringo :

1. Wex 프로필을 봅니다. MQL4 전문 개발자입니다. 그는 바보를 연기한다. 또는 트롤. 이유는 명확하지 않습니다.

2. 여기서 생각해야 합니다. 새 매개변수가 도착하면 주기를 강제로 중단할 수 없습니다. 프로그래머 자신이 무한 루프에서 호출해야 하는 IsNewParameter 함수와 같은 것

1. 나도 이상한 점을 발견했다 ...

2. 아주 좋을 것입니다.

 
stringo :

1. Wex 프로필을 봅니다. MQL4 전문 개발자입니다. 그는 바보를 연기한다. 또는 트롤. 이유는 명확하지 않습니다.

2. 여기서 생각해야 합니다. 새 매개변수가 도착하면 주기를 강제로 중단할 수 없습니다. 프로그래머 자신이 무한 루프에서 호출해야 하는 IsNewParameter 함수와 같은 것

스트링고.

변수가 이러한 무한 루프에 빠지지 않는 것처럼 보입니다. 값을 변경할 때 init 메서드가 작동하지 않습니다. 그리고 외부 변수는 init를 통해서만 전달됩니다. 이제 OnTick, OnTimer,

차트 이벤트. 내가 기억하는 한 Expert Advisor의 시작 기능은 새 틱이 발생했을 때 실행되었습니다.

문서에서 추출:

프로그램은 실행 중인 차트에서만 이벤트를 수신합니다. 모든 이벤트는 수신된 순서대로 하나씩 처리됩니다. 큐에 이미 NewTick 이벤트가 있거나 이 이벤트가 처리 중인 경우 새 NewTick 이벤트는 mql4 프로그램의 큐에 넣지 않습니다. 마찬가지로 ChartEvent 이벤트가 이미 mql4 프로그램의 대기열에 있거나 이러한 이벤트가 처리 중인 경우 이 유형의 새 이벤트는 대기열에 포함되지 않습니다. 타이머 이벤트는 같은 방식으로 처리됩니다. 타이머 이벤트가 대기열에 있거나 이미 처리 중인 경우 새 타이머 이벤트는 대기열에 포함되지 않습니다.

우리의 시작 함수는 끝없이 회전하기 때문에 새로운 이벤트가 발생하면 함수가 시작되지 않고 내부 변수가 업데이트되지 않습니다.

언어의 새로운 기능을 사용하고 이전 기능에 신경 쓰지 않는 유일한 방법이 있습니다.

События клиентского терминала - Документация на MQL4
  • docs.mql4.com
События клиентского терминала - Документация на MQL4
 
artmedia70 :

1. 나도 이상한 점을 발견했다 ...

그리고 다른 사람의 눈에는 빨대라도 항상 보입니다. 그리고 눈에 통나무가 많을수록 볼 수 있는 빨대는 작아집니다.

어떤 경우이든 과정이 아니라 결과가 중요합니다. 결과는 다음과 같습니다. 검정색은 비유적으로가 아니라 문자 그대로 흰색으로 제공됩니다. 하나의 값 대신 실행 시스템이 사용자에게 다른 값을 표시합니다. 이것이 수행되는 곳 - 어떤 기능 내부 또는 외부에서 - 그것은 중요하지 않습니다. 멀티태스킹 실시간 시스템은 동시에 여러 프로세스를 처리할 수 있습니다. 그 과정에서 Sleep() 함수는 시스템 리소스를 전혀 소비하지 않는 대부분의 시간을 "실행"합니다. 이것은 본질적으로 프로세스를 일시 중단하는 데 사용되는 고전적인 것입니다. 다른 모든 프로세스는 방해받지 않고 실행할 수 있습니다.

- 동지들이여, 우리는 계획을 102% 달성할 수 있습니까?

- ... 우리는 할 수 있습니다.