mql5 언어의 특징, 미묘함 및 작업 방법 - 페이지 203

 
이 주제와 관련이 없는 댓글은 " MQL4 및 MQL5에 대한 모든 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 "으로 이동되었습니다.
 

"{ ... }" 초기화 시퀀스를 확장하고 있습니다. 다음 빌드에서는 상수 표현식뿐만 아니라 모든 표현식을 사용할 수 있습니다.

이 변경 대신 열거형에 대한 상수 사용에 대한 제한도 있습니다(정규 표현식의 경우). 상수가 열거형에 포함되지 않으면 적절한 오류가 생성됩니다.

기존 코드를 분석한 결과 0 하나의 시퀀스가 종종 잘못 사용되는 것으로 나타났습니다. "{0}"

예를 들면 다음과 같습니다.

 MqlTradeRequest request={ 0 };


이러한 레코드는 구조의 첫 번째 필드에 대해 값을 0으로 설정하고 나머지 필드를 0으로 설정하는 것을 의미합니다.

위 코드 줄의 경우 새 규칙에 따라 오류가 생성됩니다. 첫 번째 필드는 유형입니다. ENUM_TRADE_REQUEST_ACTIONS , 값 "0"이 누락된 열거형

cannot convert 0 to enum 'ENUM_TRADE_REQUEST_ACTIONS'


다음과 같이 정확할 것입니다.

 MqlTradeRequest request={};
 
Ilyas :

다음과 같이 정확할 것입니다.

 MqlTradeRequest request={};

그러면 request.action은 무엇과 같을까요?

 
mktr8591 :

그러면 request.action은 무엇과 같을까요?

물론 ZeroMemory 가 이 구조의 개체에 대해 호출된 것처럼

 

시계열 및 이에 기반한 지표의 동기화 정보:

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

오류, 버그, 질문

슬라바 , 2021.05.29 18:16

나는 상기시키고 싶다.

1. 하나 이상의 차트가 열려 있는 각 기호에 대해 들어오는 틱을 처리하기 위해 별도의 스레드가 실행 중입니다. 특정 기호에 대해 여러 차트를 열 수 있지만 스트림은 여전히 동일합니다.

2. 심볼 스트림은 차트가 아니라 시계열을 처리합니다. 즉, CopyRates 요청에 제공된 바로 그 데이터 배열입니다.

3. OnTick 또는 OnCalculate 에서 기호가 동기화되었는지 여부를 묻는 것은 쓸모가 없습니다. 물론 예!

4. 모든 시계열은 가장 어린 것부터 가장 오래된 것까지 순서대로 처리됩니다. 먼저 틱을 적용한 다음 이 시계열에서 생성된 모든 지표를 계산합니다. M1에서 실행되는 표시기에서 동일한 H1 기호에 대한 데이터를 요청하면 적용된 틱이 있는 데이터를 받지 못합니다. 어떤 트릭을 사용하든 데이터는 항상 한 틱 백됩니다. 시간 프레임을 순차적으로 처리하는 심볼당 하나의 스레드 때문입니다.

5. Expert Advisors와 스크립트는 각각 별도의 스레드에서 작동하기 때문에 앞의 설명은 Expert Advisors와 스크립트에 적용되지 않습니다.


 
Andrey Khatimlianskii :

시계열 및 이에 기반한 지표의 동기화 정보:

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

오류, 버그, 질문

슬라바 , 2021.06.01 06:34

첫 번째 요청에서 표시기는 해당 기호에서 데이터를 수신하지 못하지만 단 한 가지 이유로 인해 다른 시간 프레임을 수신할 수 있습니다. 필요한 시계열이 아직 구축되지 않았거나 요청이 없을 때 일정 시간이 지난 후 이미 소멸되었습니다.

요청이 실패한 후 차트에 업데이트 명령을 보내고 즉시 OnCalculate를 종료하십시오. 이 순간까지 OnCalculate가 호출되고 필요한 시계열이 준비된다는 것이 보장됩니다.

 

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

mql5 언어의 특징, 미묘함 및 작업 방법

fxsaber , 2017.11.30 09:48

메모

액션/프로그램 종류 TF 또는 기호 변경 계정 변경
지시자 OnDeinit 및 OnInit를 실행하면 전역 클래스 개체가 변경됩니다(하드 다시 로드). prev_calculated를 재설정하는 것 외에는 아무 일도 일어나지 않습니다.
조언자 OnDeinit 및 OnInit를 실행하면 전역 클래스 개체가 변경 되지 않습니다 . OnDeinit 및 OnInit를 실행하면 전역 클래스 개체가 변경됩니다(하드 다시 로드).
표시기의 강조 표시된 동작이 변경되었습니다. 이제 그것은 고문과 일치합니다.
 
fxsaber :
표시기의 강조 표시된 동작이 변경되었습니다. 이제 그것은 고문과 일치합니다.

결론은 다릅니다. 이것은 행동의 의식적인 변화가 아니라 실수일 수 있습니까? 당신은 인식 했습니까?

 
Artyom Trishkin :

결론은 다릅니다. 이것은 행동의 의식적인 변화가 아니라 실수일 수 있습니까? 당신은 인식 했습니까?

인식하지 못했습니다. 피드백이 거의 없습니다. 그런데 이번에 알게 된 기능이 있습니다.

 const bool Init = EventSetMillisecondTimer ( 1 );
const long Account = AccountInfoInteger ( ACCOUNT_LOGIN );

#define TOSTRING(A) #A + " = " + ( string )(A) + " "

void OnTimer ()
{
   if (Account != AccountInfoInteger ( ACCOUNT_LOGIN ))
     Alert (TOSTRING(Account) + TOSTRING( AccountInfoInteger ( ACCOUNT_LOGIN )));
}

이 EA는 계정 간 전환 시 경고합니다. 규칙에 따르면 그는 이것을 해서는 안 될 것 같습니다.

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

mql5 언어의 특징, 미묘함 및 작업 방법

fxsaber , 2017.11.30 09:48

메모

액션/프로그램 종류 TF 또는 기호 변경 계정 변경
지시자 OnDeinit 및 OnInit를 실행하면 전역 클래스 개체가 변경됩니다(하드 다시 로드). prev_calculated를 재설정하는 것 외에는 아무 일도 일어나지 않습니다.
조언자 OnDeinit 및 OnInit를 실행하면 전역 클래스 개체가 변경 되지 않습니다 . OnDeinit 및 OnInit를 실행하면 전역 클래스 개체가 변경됩니다(하드 다시 로드).
그러나 이것은 타이머 때문입니다.
 
fxsaber :

이 EA는 계정 간 전환 시 경고합니다. 규칙에 따르면 그는 이것을 해서는 안 될 것 같습니다.

그러나 이것은 타이머 때문입니다.

아무도 다른 이벤트 핸들러가 중단(또는 실행되지 않음)될 것이라고 보장하지 않았습니다.

경고 후에는 deinit와 init가 모두 발생합니다. 맞죠?