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

 

왔다, 변했다

   uint n= 0 ;

오류가 사라졌습니다. 고맙습니다.

 
Sergey Voytsekhovsky :

왔다, 달라졌다

오류가 사라졌습니다. 고맙습니다.

이것은 오류가 아니라 경고입니다.

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

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

Artyom Trishkin , 2019.05.20 15:16

변수 nperiod_find 의 유형은 무엇입니까? 가장 중요한 것은 표시되지 않았습니다 ...

그래서 시도:

 for (n= 0 ; n<( int )period_find; n++)

일반적으로 - OnTick() 핸들러 수준에서 루프 변수를 선언하는 이유는 무엇입니까?

다음과 같이 가능합니까?

 for ( int n= 0 ; n<( int )period_find; n++)

그리고 OnTick()에서 선언 n을 제거하십시오. 거기에는 필요하지 않습니다.


 
Artyom Trishkin :

이것은 오류가 아니라 경고입니다.


좋아요, 지금 수정하겠습니다.

뻔뻔스럽게 받아들이지 말고 제 경우에 "화살표"가 생성된 가격의 가치를 얻는 방법을 암시하십시오. 이미 인덱스가 있다는 사실을 기반으로 합니다. ???

 

이제 친구에게 맹세합니다.

'n' - 선언되지 않은 식별자 Test_iCustom.mq5 82 48

분명히 n이 루프 외부에서 발견 된 인덱스로 사용되기 때문에 ???
 
         for(int n=0; n<(int)period_find; n++)
            {
               if(Buf_Arrow_Buy[n]!=EMPTY_VALUE)break;
            }
         Last_Arrow_Buy_volume = Buf_Arrow_Buy[n];
         Last_Arrow_Buy_index  = n;
 
Sergey Voytsekhovsky :

좋아요, 지금 수정하겠습니다.

뻔뻔스럽게 받아들이지 말고 제 경우에 "화살표"가 생성된 가격의 가치를 얻는 방법을 암시하십시오. 이미 인덱스가 있다는 사실을 기반으로 합니다. ???

한 번에 여러 가격을 가져오는 경우 iOpen() 또는 CopyOpen() 또는 CopyRates( ) 중 하나입니다.

제 생각에는 지표에서 화살표가 막대의 시가에 차트에 표시됩니다.

Документация по MQL5: Доступ к таймсериям и индикаторам / iOpen
Документация по MQL5: Доступ к таймсериям и индикаторам / iOpen
  • www.mql5.com
Значение цены открытия бара (указанного параметром shift) соответствующего графика или 0 в случае ошибки. Для получения дополнительной информации об ошибке необходимо вызвать функцию GetLastError(). Функция всегда возвращает актуальные данные, для этого она при каждом вызове делает запрос к таймсерии по указанным символу/периоду. Это означает...
 
Artyom Trishkin :

한 번에 여러 가격을 가져오는 경우 iOpen() 또는 CopyOpen() 또는 CopyRates( ) 중 하나입니다.

제 생각에는 지표에서 화살표가 막대의 시가에 차트에 표시됩니다.

예, 다음과 같이 말합니다.

SetArrow(prefix+ "ChartArrowUP_" + TimeToString (time[i]),InpColorBullishArrow,time[i],open[i],( char ) 241 , ANCHOR_TOP ,InpArrowSize);

iOpen() 을 시도하겠습니다.

그리고 n 대신에 다른 변수를 추가하거나 다음과 같이 할 수 있습니다.

   int n= 0 ;
   
   if ( CopyBuffer (CrossAD, 1 , 0 , period_find, Buf_Arrow_Buy) != period_find)
      {  
         Print ( "НЕ удалось правильно скопировать данные из 1-го буфера индикатора iCrossAD, error code %d" , GetLastError ());
         return ;
      }
         for (n= 0 ; n<( int )period_find; n++)
            {
               if (Buf_Arrow_Buy[n]!= EMPTY_VALUE ) break ;
            }
         Last_Arrow_Buy_volume = Buf_Arrow_Buy[n];
         Last_Arrow_Buy_index  = n;
         Print ( "Last_Arrow_Buy_volume = " ,Last_Arrow_Buy_volume, ", Last_Arrow_Buy_index = " ,Last_Arrow_Buy_index);
 
Sergey Voytsekhovsky :

루프 변수의 범위는 루프 본문으로 제한됩니다. 중단하기 전에 원하는 값을 할당합니다.

 //+------------------------------------------------------------------+
for ( int i= 0 ; i<( int )period_find; i++)
  {
   if (Buf_Arrow_Buy[i]!= EMPTY_VALUE )
     {
      Last_Arrow_Buy_volume = Buf_Arrow_Buy[i];
      Last_Arrow_Buy_index  = i;
       break ;
     }
  }
//+------------------------------------------------------------------+
 
Artyom Trishkin :

루프 변수의 범위는 루프 본문으로 제한됩니다. 중단하기 전에 원하는 값을 할당합니다.

이해했습니다. 이런 식으로 작동하고 경고가 표시되지 않습니다.

break 전에 루프 본문에서 계산하여 더 정결한 방법을 알려주십시오 . 아니면 주기에서 계산을 수행하는 것이 더 낫습니까???

 
Sergey Voytsekhovsky :

이해했습니다. 이런 식으로 작동하고 경고가 표시되지 않습니다.

break 전에 루프 본문에서 계산하여 더 정결한 방법을 알려주십시오 . 아니면 주기에서 계산을 수행하는 것이 더 낫습니까???

계산은 무엇입니까?