MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1213

 

불꽃! 돕다 :)

틱 기록 은 추가 처리를 위해 표시기(MT5)에서 복사됩니다. 복사 알고리즘은 참고서에서 제거되었으며 약간만 변경되었습니다.

         int      attempts = 0 ;
         bool     success = false ;
         MqlTick tick_array[];
         datetime startCopyTime = (copyTickTime < periodStartTime) ? periodStartTime : copyTickTime;
         datetime checkPoint;

         while (attempts < 3 ) {
             uint start = GetTickCount ();
            checkPoint = TimeCurrent ();
             int received = CopyTicks ( _Symbol , tick_array, COPY_TICKS_ALL , startCopyTime, ticksSizeToCopy);
             if (received != - 1 ) {
               PrintFormat ("%s: received %d ticks in %d ms", _Symbol , received, GetTickCount () - start);
               if ( GetLastError () == 0 ) {
                  success = true ;
                   break ;
               } else
                   PrintFormat ("%s: Ticks are not synchronized yet, %d ticks received for %d ms. Error=%d",
                               _Symbol , received, GetTickCount () - start, _LastError );
            }
            attempts++;
         }
         if (!success) {
             PrintFormat ("Ошибка! Не удалось получить %d тиков по %s с трех попыток", ticksSizeToCopy, _Symbol );
             return ;
         }
         copyTickTime = checkPoint;

그러나 틱 기록이 동기화되지 않았다는 경고가 있습니다.

 2020.07 . 12 10 : 07 : 12.092 Volumes (GBPUSD,H1)     GBPUSD: Ticks are not synchronized yet, 10103745 ticks received for 532 ms. Error= 4403

그리고 핸드북에는 이렇게 나와 있습니다.

ERR_HISTORY_TIMEOUT

4403

기록을 요청할 때 제한 시간이 초과되었습니다.

선장의 직감에 따르면 틱을 동기화해야 합니다... 이 순간을 올바르게 이해하고 있습니까? 하지만 어떻게 해야 할까요? 아니면 단순히 성공 체크를 제거하는 것만으로 동기화 없이 큰 피해 없이 작업이 가능할까요?

 
Yevhenii Levchenko :

불꽃! 돕다 :)

틱 기록 은 추가 처리를 위해 표시기(MT5)에서 복사됩니다.

표시기의 기록 데이터에 대한 비동기 액세스, Expert Advisors 및 스크립트의 동기 액세스, 최소한 개발자가 데이터 작업 시 MQL 프로그램의 동작이라고 부르는 것

인간 언어로 된 경우 표시기의 이력 데이터에 액세스할 때 오류를 수신한 후 계산 주기를 종료하고 잠시 후 이력에 다시 액세스해야 합니다.

한 주기의 지표에서 기록을 여러 번 참조하는 것은 의미가 없습니다. 이 기술은 Expert Advisors 및 스크립트에서만 작동합니다.

 
Igor Makanu :

표시기의 기록 데이터에 대한 비동기 액세스, Expert Advisors 및 스크립트의 동기 액세스, 최소한 개발자가 데이터 작업 시 MQL 프로그램의 동작이라고 부르는 것

인간 언어로 된 경우 표시기의 이력 데이터에 액세스할 때 오류를 수신한 후 계산 주기를 종료하고 잠시 후 이력에 다시 액세스해야 합니다.

한 주기의 지표에서 기록을 여러 번 참조하는 것은 의미가 없습니다. 이 기술은 Expert Advisors 및 스크립트에서만 작동합니다.

고맙습니다!

동기식 멀티스레딩과 연결되어 있습니까? "틱이 아직 동기화되지 않았습니다" - 경고에 가깝습니까?

 
ANDREY :

넌센스 ... 논리와 친구가 되지 말고 수학과 친구가 되지 마십시오 ..... 그리고 동시에 논리와 수학 모두에 완전히 스며든 주제의 포럼을 오랫동안 성공적으로 중재했습니다.

내가 어디 논리와 친하지 않다고 했지?

 
ANDREY :

많은 전문가들이 가지고 있던 지식은 포드 자신의 지식이 아니었고 결코 되지도 않았다고 생각합니다. 또한 그는이 지식이 필요하지 않다고 불렀기 때문에이 지식이 필요하지 않았습니다. 그리고 이 전문가들이 자신의 지식을 포드에 이전하려고 하면 그는 이 지식을 동화하고 실용적인 목적을 위해 조작할 수 없을 것입니다. 새로운 지식을 동화시키기 위해서는 새로운 지식과 관련된 주제에 대한 일반적인 생각보다 약간 더 많은 것을 이미 가지고 있어야 합니다. 위의 예에서 전문가는 Ford가 아니라 변호사에게 지식을 제공했습니다.

그리고 당신의 두뇌에는 수학과 논리에 대한 충분한 체계화된 지식 세트가 있으며, 이 세트를 통해 새롭고 누락된 정보에 대한 검색 쿼리를 빠르고 정확하게 구성하고 빠르고 정확하게 해석할 수 있습니다. 나는 당신이 이 포럼에서 매일 많은 시간을 보내고 특히 수학 및 논리와 관련된 방대한 양의 정보를 뇌를 통해 전달하기 때문에 당신의 두뇌에는 그러한 정보가 있을 수 없다고 확신합니다. 그것은 몰입하여 외국어를 배우는 것과 같습니다. 그것의 동화는 자동적으로, 자발적으로 일어나며, 심지어 몰입된 사람의 의지에 반하는 것일 수도 있습니다.

이제 100명의 학자가 적분방정식 계산 규칙을 설명하기 시작하면 내가 학자가 되기 전에 학교에서 배웠어야 했던 모든 수학 및 대수 교과서를 머리에 넣고 정리 하기 전까지는 계산 방법을 배우지 않을 것입니다. 선생님은 적분 방정식의 주제를 우리에게 설명하기 시작했습니다.

MQL 학습에서도 마찬가지입니다. 변수가 무엇인지, 무엇을 위한 것인지 이해하지 못하면 변수에 대한 지식이 무엇인지 이해하기 어렵고 복잡하지 않은 다른 개념은 말할 것도 없습니다.

포드는 자신이 관심 있는 지식 분야에서 올바른 주제를 가르칠 것이라고 말하지 않았습니다. 그는 자신이 그 순간에 필요한 질문에 대한 답변을 언제든지 얻을 수 있을 정도로 다양한 지식 분야의 전문가들에게 둘러싸여 있다고 말했습니다. 왜 리더는 200명의 전문가가 알 수 있는 정보를 알아야 합니까? 각 전문가는 해당 분야에서 올바른 답변을 제공할 것입니다. 예, 원칙적으로 모든 것을 아는 것은 불가능합니다. 그러나 전문가의 도움을 받아 필요한 작업에 대한 답변을 신속하게 얻을 수 있습니다. 이것이 Ford가 말하는 내용이고 제가 참고서 및 올바른 정보를 사용하는 방법에 대한 내용입니다. 그리고 이것은 어떤 좁은 영역에서 CodeBase와 포럼의 형태로 이 리소스를 제공합니다.

 
Yevhenii Levchenko :

고맙습니다!

동기식 멀티스레딩과 연결되어 있습니까? "틱이 아직 동기화되지 않았습니다" - 경고에 가깝습니까?

아니요

개발자는 동기화를 통해 기록 작업을 위한 함수를 호출 할 때 기록 데이터의 처리를 보장하지만 요청 시 데이터의 필수 반환을 보장하지는 않습니다.

... 그들은 비인간적인 언어로 전환했습니다))))


비동기는 요청 및 데이터 또는 오류이며 오류가 발생한 후 동기화가 시작되지만 동기화(또는 TF 구축) 종료 시간을 알 수 없으며 MT5의 고성능으로 인해 동기화된 데이터 대신 오류가 발생합니다. 전화할 때마다

추신: MT5에는 모든 것이 복잡합니다. .... 서버가 있고 터미널이 있으며 마지막으로 MQL 프로그램이 있습니다. 기록을 요청할 때 서버 터미널을 동기화한 다음 터미널을 동기화해야 합니다. MQL 프로그램, 누군가가 타임프레임이나 틱 준비 데이터가 없음

 
Igor Makanu :

아니요

개발자는 동기화를 통해 기록 작업을 위한 함수를 호출 할 때 기록 데이터의 처리를 보장하지만 요청 시 데이터의 필수 반환을 보장하지는 않습니다.

... 그들은 비인간적인 언어로 전환했습니다))))


비동기는 요청 및 데이터 또는 오류이며 오류가 발생한 후 동기화가 시작되지만 동기화(또는 TF 구축) 종료 시간을 알 수 없으며 MT5의 고성능으로 인해 동기화된 데이터 대신 오류가 발생합니다. 모든 리콜

추신: MT5에는 모든 것이 복잡합니다. .... 서버가 있고 터미널이 있으며 마지막으로 MQL 프로그램이 있습니다. 기록을 요청할 때 서버 터미널을 동기화한 다음 터미널을 동기화해야 합니다. MQL 프로그램, 누군가가 시간 프레임 또는 틱 준비 데이터가 없음

다음과 같이 대답하는 것이 더 쉬울 것입니다.

표시기에서 동기화를 기다리려면 오류를 수신한 후 OnCalculate()를 종료하고 0을 반환합니다. - 0을 반환합니다.

이 경우 히스토리 데이터에 대한 첫 번째 액세스는 데이터 동기화 프로세스를 시작하고 완료 확인만 남습니다. 데이터를 얻는 데 오류가 있으면 0을 반환합니다. 0은 이전 호출(prev_calculated)에서 이미 계산된 데이터의 양을 나타내고 현재 호출과 기록 데이터의 성공적인 로드 동안 OnCalculate()는 전체 기록 깊이(0을 반환하면 마지막 호출에서 아무 것도 계산되지 않았음을 가장 많이 표시할 것이기 때문입니다).

 
a.lxrn :

안녕하세요 여러분, 문제 해결을 도와주세요. 문제는 논리에 있습니다. 오늘 저는 이미 머리 전체가 망가져 죽을 지경에 이르렀습니다.

여기에 기본 코드 예제를 작성했습니다. 신호가 있습니다. 양초의 마감이 마우스보다 크면 하나의 주문이 열립니다.

하나의 주문이 열렸지만 정지 또는 이익이 발생한 후 신호가 남아 오랫동안 True로 유지됩니다.

사실, 매수 신호가 발생했을 때 상황이 바뀌고 종가 가 핸드보다 낮아질 때까지 하나의 주문이 열리도록 하려면 어떻게 해야 할까요?

플래그가 있지만 주문이 닫히면 저장되지 않고 15분 동안 열리거나 지연됩니다.주문을 열고 닫는 조건이 동시에 참이면 더욱 시원합니다. 각 틱에서 주문)))) 플래그는 주문을 열라는 신호가 true이고 주문이 열려 있다는 플래그가 false이면 주문을 엽니다. 그리고 주문이 열려 있다는 플래그가 true이면 주문이 열리지 않습니다). 지연은 더 간단하고 효율적입니다. 주문을 마감한 후 지연을 설정했습니다.

 
Igor Makanu :

비동기는 요청 및 데이터 또는 오류이며 오류가 발생한 후 동기화가 시작되지만 동기화(또는 TF 구축) 종료 시간을 알 수 없으며 MT5의 고성능으로 인해 동기화된 데이터 대신 오류가 발생합니다. 모든 리콜

추신: MT5에는 모든 것이 복잡합니다. .... 서버가 있고 터미널이 있으며 마지막으로 MQL 프로그램이 있습니다. 기록을 요청할 때 서버 터미널을 동기화한 다음 터미널을 동기화해야 합니다. MQL 프로그램, 누군가가 시간 프레임 또는 틱 준비 데이터가 없음


대략 이해했습니다... 감사합니다 :)

Artyom Trishkin :

다음과 같이 대답하는 것이 더 쉬울 것입니다.

표시기에서 동기화를 기다리려면 오류를 수신한 후 OnCalculate()를 종료하고 0을 반환합니다. - 0을 반환합니다.

이 경우 히스토리 데이터에 대한 첫 번째 액세스는 데이터 동기화 프로세스를 시작하고 완료 확인만 남습니다. 데이터를 얻는 데 오류가 있으면 0을 반환합니다. 0은 이전 호출(prev_calculated)에서 이미 계산된 데이터의 양을 나타내고 현재 호출과 기록 데이터의 성공적인 로드 동안 OnCalculate()는 전체 기록 깊이(0을 반환하면 마지막 호출에서 아무 것도 계산되지 않았음을 가장 많이 표시할 것이기 때문입니다).

더 쉽다는 것이 더 명확하다는 의미는 아닙니다. :)

나는 재고 기기로 전환했고 동기화되지 않은 한 번만 인쇄되었습니다. 후속 요청은 아무 것도 반환하지 않았습니다.

테스터에 볼륨이 표시되지 않는 이유를 말씀해 주시겠습니까?
 
Yevhenii Levchenko :

대략 이해했습니다... 감사합니다 :)

더 쉽다는 것이 더 명확하다는 것을 의미하지는 않습니다 :)

나는 재고 기기로 전환했고 동기화되지 않은 한 번만 인쇄되었습니다. 후속 요청은 아무 것도 반환하지 않았습니다.

테스터에 볼륨이 표시되지 않는 이유를 말씀해 주시겠습니까?

기록 데이터를 최신 "핫" 상태로 유지하려면 CopyXXX, iXXX 기능(예: CopyTime() , iTime() 등)을 사용하여 2분마다 이 데이터에 액세스해야 합니다.

테스터에서 어떤 볼륨을 제공하지 않는지 모르겠습니다. 실제 볼륨이 있고 틱 볼륨이 있습니다. 코드가 없으면 장점에 답할 방법이 없습니다.