오류, 버그, 질문 - 페이지 1525

[삭제]  
Yuri Evseenkov :

MT4. 다시 한번 프로그램 의 전역 변수 초기화 기능에 주목하고 싶습니다.

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

오류, 버그, 질문

슬라바 , 2016.02.24 07:34

대기열에 있습니다. 요청한지 2시간밖에 되지 않았습니다.

일반적으로 이러한 질문은 포럼에서 해야 합니다. 많은 사람들이 만질 수 있기 때문입니다. 인용해 주시면 바로 답변해 드리겠습니다

이것은 의도된 동작입니다. 또한 설명서에 명시적으로 설명되어 있습니다.

언로딩과 로딩은 모든 것의 완전한 재초기화를 수반합니다.

상위 5개에서 올바르게 언급했듯이 상황은 비슷합니다.

사실, 이것이 역사적으로 4개에서 일어난 방식이며, 새로운 MQL4로 전환할 때 먼저 이 동작을 변경했습니다(전문가처럼, 즉, 예상한 동작이 되도록). 그러나 이전 지표와 관련하여 많은 질문이 생겼습니다. 이전 지표는 초기화를 위해 정확하게 마련되었습니다. 강제로 돌아갔다

상위 5위 안에 드는 것은 아키텍처 때문에 바로 발생했습니다. 매개변수가 변경되면 이전 매개변수가 있는 이전 지표가 소멸되고 변경된 매개변수가 있는 새 지표가 생성됩니다.


 
Alexey Kozitsyn :

고맙습니다. 출력은 문서의 인용문입니다. "... 미리 정의된 함수 OnInit() , 목적은 모든 전역정적 프로그램 변수를 올바르게 초기화하는 것입니다."

따라서 OnInit() 함수의 모든 전역 변수 또는 배열은 기본적으로 null이거나 설정됩니다.

События клиентского терминала - Программы MQL4 - Справочник MQL4
События клиентского терминала - Программы MQL4 - Справочник MQL4
  • docs.mql4.com
События клиентского терминала - Программы MQL4 - Справочник MQL4
 

1. 다음 형식의 배열을 만듭니다.

CArrayString list[ 5 ];

2. <Ctrl+Space>를 통해 메소드 목록을 호출하려고 합니다.

list[ 0 ].
메소드 목록이 표시되지 않습니다. 그래야만 합니까?
[삭제]  
Andrey Voytenko :

1. 다음 형식의 배열을 만듭니다.

2. <Ctrl+Space>를 통해 코드의 메소드 목록을 호출하려고 합니다.

메소드 목록이 표시되지 않습니다. 그래야만 합니까?

추측해 보겠습니다. 메소드/멤버가 지정되지 않은 것 외에 코드에 다른 오류가 있는 경우 목록이 항상 표시되지는 않습니다.

시험을 마친. 아니요, 잘못된 가정입니다. 그러나 조합을 몇 번 반복해서 누르면 도움이 되었습니다.

 

Alexey Kozitsyn :

그러나 조합을 몇 번 반복해서 누르면 도움이 되었습니다.

불행히도 당신의 레시피는 저에게 효과가 없습니다.
[삭제]  
Andrey Voytenko :
불행히도 당신의 레시피는 저에게 효과가 없습니다.
아니요, 맞습니다. 코드에 오류가 있으면 공개 멤버/메서드 목록이 표시되지 않습니다. 그러나 오류가 없으면 ... 문제가됩니다.
 

1. 간단한 코드:

 uint a= 50 ;
int b=- 20 ;
Print ( fmax (a,b));

결과: 50

2. 입력 수정자를 추가합니다.

 input uint a= 50 ;
int b=- 20 ;
Print ( fmax (a,b));

결과: 4294967276

예상 결과 50. 내가 잘못한 부분은 무엇입니까?

 
Andrey Voytenko :

1. 간단한 코드:

결과: 50

2. 입력 수정자를 추가합니다.

결과: 4294967276

예상 결과 50. 내가 잘못한 부분은 무엇입니까?

fmax는 두 개의 double 수를 비교합니다. 따라서 다음과 같이 됩니다.

 //+------------------------------------------------------------------+
//|                                                         Test.mq5 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.01"
#property script_show_inputs
//---
input uint a= 50 ;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
//uint a=50;
   int b=- 20 ;
   Print ( "\"uint a=50\" as double:" , DoubleToString (( double )a, 8 ));
   Print ( "\"int b=-20\" as double:" , DoubleToString (( double )b, 8 ));
   Print ( DoubleToString ( fmax (( double )b,( double )a), 8 ));
  }
//+------------------------------------------------------------------+

결과:

 2016.03 . 03 16 : 00 : 24.821 Test (EURUSD,D1)         "uint a=50" as double : 50.00000000
2016.03 . 03 16 : 00 : 24.821 Test (EURUSD,D1)         "int b=-20" as double :- 20.00000000
2016.03 . 03 16 : 00 : 24.821 Test (EURUSD,D1)         50.00000000
파일:
Test.mq5  2 kb
 
Karputov Vladimir :

fmax는 두 개의 double 수를 비교합니다. 그래서 다음과 같을 것입니다:

MQL 언어에서는 암시적 유형 캐스팅이 선언되고 수행됩니다. 특히 uint -> double입니다.

문제는 입력 변수 에서 올바르게 작동하지 않는 이유입니다.

 
Andrey Voytenko :

1. 간단한 코드:

결과: 50

2. 입력 수정자를 추가합니다.

결과: 4294967276

예상 결과 50. 내가 잘못한 부분은 무엇입니까?

완전한 코드를 제공합니다.

2가지 가능성이 있으며 둘 다 틀렸습니다.

1. 코드가 함수 외부에서 실행됩니다.

2. 입력 변수는 함수 내에서 선언됩니다.