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

 

실행 중 오류:

 class A {
public :
        A( int ) { Print( 1 ); }
        A( A&  ) { Print( 2 ); }
};
void OnStart ()
{       
         int a = 5 ;
        {
                A a ( a );         //(1)
        }
}

  • MQL 결과: 2
  • MQL에서 예상: 1

실제로 이 예제는 C++의 규칙에 따라 실행됩니다.

void OnStart()
{
         int a = 5 ;
        {
                A a ( a );         //(2)
        }
}

다음 예제는 자체(C++ 제외) 규칙에 따라 MQL에서 작동합니다.

 void OnStart ()
{       
         int a = 5 ;
        {
                 int a = a ;         //(3)
                printf( "%d", a );
        }
}

  • MQL의 결과(3): 5
  • C++: 0(또는 난수)

변수가 선언된 것으로 간주되거나

  • 발생 이후(*), 또는
  • 공지 종료 이후(**)

C++에는 단일(*) 접근 방식이 있지만 MQL에서는 케이스 (2)에서는 so(*)이고 케이스 (3)에서는 so(**)입니다. (2)와 (3)의 근본적인 차이점은 무엇입니까?

이것은 왜 MQL에서 변수가 발생 순간부터 선언된 것으로 간주되고 다른 경우 - 선언 완료 순간부터 고려되는가 하는 질문입니다.

 

컴파일 중 오류:

 #import "z.ex5"
#import
#define MACRO1( x )    (x) //(*)
#define MACRO2( x )    MACRO1(x)
int f( int z )
{
         return MACRO2( z ); // Error: '()' - operand expected
}

그리고 다음과 같이:

 #define MACRO1( x )    x   //(**)

좋아. (*)와 (**)의 차이점은 무엇입니까?

 
Fast235 :

빈 터미널이나 이전에 사용하지 않은 문자에 기록을 로드할 수 없습니다.

M1에서 실행하면 모든 것이 로드되고 ~720개의 막대 가 H1에 로드되고 표시기가 작동하는 데 훨씬 덜 필요하지만 추가 막대 로드가 중지되고 표시기가 올바르게 그려지지 않습니다 . 900바, 그러면 표시기가 일반적으로 작동을 멈춥니다 ) ,

.....

도움말 https://www.mql5.com/ru/docs/series/timeseries_access 에서 스크립트를 첨부했으며 부피 때문에 오랫동안 사용하고 싶지 않았습니다. 그것을 inkludnik에 던지고 몇 줄을 추가하면 모든 것이 잘 작동합니다.

스크립트는 잘 만들어지고 로봇에 쉽게 통합됩니다. 다중 통화 + 다중 시간 프레임에서는 단순히 필요합니다! 왜냐하면 하역 및 동결은 작동 표시기에 의존하지 않으며,

표준 MA에서도 동일하게 얻을 수 있지만 특성 등으로 인해 많은 사람들이 눈치채지 못하고 단순히 일정이나 기간을 변경한 다음 다시 로드됩니다.

Документация по MQL5: Доступ к таймсериям и индикаторам / Организация доступа к данным
Документация по MQL5: Доступ к таймсериям и индикаторам / Организация доступа к данным
  • www.mql5.com
Прежде чем ценовые данные будут доступны в терминале MetaTrader 5, их необходимо получить и обработать. Для получения данных требуется подключение к торговому серверу MetaTrader 5. Данные поступают с сервера по запросу терминала в виде экономно упакованных блоков минутных баров. Механизм обращения к серверу за данными не зависит от того, каким...
 
안녕하세요 ! Android 4.4의 MT5 업데이트가 중지되었습니다. 앱을 열 수도 없습니다. 누가 직면했다면 도움을 주시면 감사하겠습니다.
고맙습니다!
 
fxsaber :

OnTesterInit의 Expert.mqh를 통해 얻을 수 있습니다. EA는 매개변수를 설정하기 위해 프레임 모드에서 시작합니다.

어떤 이유로 EXPERT::Parameters를 호출한 결과 모든 매개변수는 string 유형 입니다. 이것은 버그입니까 아니면 제한입니까?

 
Stanislav Korotky :

어떤 이유로 EXPERT::Parameters를 호출한 결과 모든 매개변수는 string 유형 입니다. 이것은 버그입니까 아니면 제한입니까?

더 나은 예.

 
Andrey :
안녕하세요 ! Android 4.4의 MT5 업데이트가 중지되었습니다. 앱을 열 수도 없습니다. 누가 직면했다면 도움을 주시면 감사하겠습니다.
고맙습니다!

최소 - 안드로이드   5, 개발자는 최근에 이에 대해 썼습니다.

 
fxsaber :

더 나은 예.

예는 다음과 같이 이 방법의 표준입니다.

    EXPERT::Parameters( 0 , parameters, names);
     for ( int i = 0 ; i < ArraySize (parameters); i++)
     // здесь parameters[i].type всегда равно TYPE_STRING, вне зависимости от фактического типа параметра

이것은 Expert.mqh 라이브러리 자체의 소스 코드에서 볼 수 있습니다.

추신. 토론을 라이브러리 주제로 이동했습니다.

 

ParameterGetRange/ParameterSetRange의 또 다른 버그입니다.

ParameterSetRange를 호출해도 ParameterGetRange 에 대한 후속 호출에 대한 최적화에 매개변수를 포함하는 플래그는 변경되지 않습니다 .

 // параметр "name" изначально включен в оптимизацию
// в одной части кода...
ParameterSetRange( "name" , false , value , start, step, stop);
...
// в другой части кода финализация проверок
ParameterGetRange( "name" , enabled, value , start, step, stop); // получаем enabled=true, т.е. изменения внесенные ParameterSetRange не применились
 
Stanislav Korotky :

ParameterGetRange/ParameterSetRange의 또 다른 버그입니다.

ParameterSetRange를 호출해도 ParameterGetRange에 대한 후속 호출에 대한 최적화에 매개변수를 포함하는 플래그는 변경되지 않습니다 .

내가이 주제를 좋아했을 때 많은 뉘앙스가 있었던 것을 기억합니다. OnTester*-기능에 따라 올바르게 또는 잘못 표시되는 항목이 있습니다. 다른 On-function을 호출해 보십시오.

사유: