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

 
Artyom Trishkin :
설명서에 필요한 내용이 나와 있습니다. 예, 사용자가 입력한 매개변수는 프로그래밍 방식으로 변경할 수 없습니다 . 적어도 무언가는 사용자에게 속할 수 있습니다. :)

당신이 정말로 원한다면, 당신은 할 수 있습니다)

 
Vitaly Muzichenko :

당신이 정말로 원한다면, 당신은 할 수 있습니다)

물론 재할당하면 할 수 있습니다. 그러나 사용자가 입력한 값은 변경되지 않습니다.
 

나는 종종 문제에 부딪친다. 컴파일러는 코드에 "변수가 이미 정의됨" 오류로 맹세합니다.

 if (n< 10 )
 {
  int a= 10 ;
 }
else
 {
  int a= 5 ;
 }

https://docs.mql4.com/ru/basis/variables/local 상태의 참조:

블록 내부(내부 수준에서) 선언된 변수에는 블록 범위있습니다.

블록이 중첩되고 외부 블록의 식별자 가 내부 블록의 식별자와 이름이 같은 경우 외부 블록 식별자는 내부 블록이 종료될 때까지 "보이지 않는"(숨김) 상태가 됩니다.

그러나 동일한 참조의 예제라도 동일한 "변수가 이미 정의됨" 오류로 컴파일되지 않습니다.

 int i= 5 ;       // локальная переменная функции
     {
       int i= 10 ;   // переменная функции 
       Print ( "В блоке i = " ,i); // результат  i = 10;
     }
   Print ( "Вне блока i = " ,i);   // результат  i = 5;

루프와 동일한 문제:

 int i= 10 ;
for ( int i= 1 ;i< 10 ;i++) ...

이 문제를 해결하고 "변수가 이미 정의됨" 오류 없이 참조 예제를 컴파일하려면 어떻게 해야 합니까?

 
The_Sheikh :

종종 문제가 발생합니다. 컴파일러는 코드에 "변수가 이미 정의됨" 오류로 맹세합니다.

https://docs.mql4.com/ru/basis/variables/local의 참조:

블록 내부(내부 수준에서) 선언된 변수에는 블록 범위있습니다.

블록이 중첩되고 외부 블록의 식별자 가 내부 블록의 식별자와 이름이 같은 경우 외부 블록 식별자는 내부 블록이 종료될 때까지 "보이지 않는"(숨김) 상태가 됩니다.

그러나 동일한 참조의 예제라도 동일한 "변수가 이미 정의됨" 오류로 컴파일되지 않습니다.

루프와 동일한 문제:

이 문제를 해결하고 "변수가 이미 정의됨" 오류 없이 참조 예제를 컴파일하려면 어떻게 해야 합니까?

#속성엄격
 
The_Sheikh :

이 문제를 해결하고 "변수가 이미 정의됨" 오류 없이 참조 예제를 컴파일하려면 어떻게 해야 합니까?

오랫동안 참고서에서 모든 예제가 올바르게 작동하는 것은 아닙니다.

귀하의 예에서 범위별로 - 한 연산자 내의 가시성은 지역적이며 정확히 다음과 같이 작동해야 합니다.

 void OnStart ()
  {
   for ( int i= 0 ;i< 10 ;i++)
     {
       double x=i;
     }

   for ( int i= 0 ;i< 10 ;i++)
     {
       double x=i;
     }
  }

저것들. for 문 내의 가시성은 지역적이며 종료할 때 i 및 x 변수가 손실됩니다.

 

EA에서 처리하기 위해 Peak Repainter 표시기의 마지막 피크를 찾으려고 했습니다.

   GV_trendD1 = StringConcatenate (GVn, " дневной тренд" );
   if (! GlobalVariableCheck (GV_trendD1))
      {
       double    fUP,fDN;

       for ( int f= 0 ; f<= 400 && ! IsStopped (); f++)
         {
         fUP = iCustom ( NULL , PERIOD_D1 , "Used\\# Peak Repainter" , 0 ,f);
         if (fUP>= 15 ) { GlobalVariableSet (GV_trendD1, 1 ); break ;}
         else {fDN = iCustom ( NULL , PERIOD_D1 , "Used\\# Peak Repainter" , 1 ,f); if (fDN>= 15 ) { GlobalVariableSet (GV_trendD1,- 1 ); break ;}}
         }
      }

결과적으로 실제로는 -1이어야 하지만 1이 전역 변수 에 기록됩니다.

뭐가 문제 야? 코드로? 표시기로?

표시기는 기본 설정으로 사용됩니다.

 
Alexey G. Smolyakov :

EA에서 처리하기 위해 Peak Repainter 표시기의 마지막 피크를 찾으려고 했습니다.

결과적으로 실제로는 -1이어야 하지만 1이 전역 변수 에 기록됩니다.

뭐가 문제 야? 코드로? 표시기로?

표시기는 기본 설정으로 사용됩니다.

왜 그런 지표 이름이 있습니까?

 iCustom ( NULL , PERIOD_D1 , "Used\\# Peak Repainter" , 0 ,f);
 
Artyom Trishkin :

왜 그러한 지표 이름 입니까?

나는 단지 다른 디렉토리에 다른 고문에 대한 지표를 유지합니다. 그리고 나는 그것들이 그룹화되도록 약간 이름을 바꿉니다.

이름이 중요합니까?

 
Alexey G. Smolyakov :

나는 단지 다른 디렉토리에 다른 고문에 대한 지표를 유지합니다. 그리고 나는 그것들이 그룹화되도록 약간 이름을 바꿉니다.

이름이 중요합니까?

영향, MT4의 모든 파일 액세스는 MQL4 폴더 내에서 발생, 이 폴더 외부의 Expert Advisors/scripts/indicators 종료는 보안상의 이유로 제외됩니다.

 
Igor Makanu :

영향, MT4의 모든 파일 액세스는 MQL4 폴더 내에서 발생, 이 폴더 외부의 Expert Advisors/scripts/indicators 종료는 보안상의 이유로 제외됩니다.

MQL4\Indicators\Used 폴더의 전체 경로입니다. 폴더에서 빠져나갈 방법이 없는 것 같습니다. 그러나 이것은 주제에서 벗어난 것입니다. 다른 고문은 문제없이 유사한 폴더에서 지표로 작업합니다. 하지만 이 표시기의 문제점은 무엇입니까? 이해가 되지 않습니다. 그의 코드를 보았지만 그것을 알아낼 지식과 경험이 충분하지 않습니다. 그가 마지막 마디나 그런 것만 세는 것 같다는 의혹이 있다.