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

 
Andrey Sokolov :

에 뭐라고 써있는지 알려주실 수 있나요?

int i,limit=prev_calculated==0 ? rate_total-1 : rate_total-prev_calculated;

"==", "?" , ": "

?

Документация по MQL5: Основы языка / Операторы / Условный оператор ?:
Документация по MQL5: Основы языка / Операторы / Условный оператор ?:
  • www.mql5.com
В качестве первого операнда – "выражение1" – может быть использовано любое выражение, результатом которого является значение типа bool. Если результат равен , то выполняется третий операнд – "выражениеЗ". Второй и третий операнды, то есть "выражение2" и "выражениеЗ", должны возвращать значения одного типа и не должны иметь тип void...
 
그냥 끔찍! Expert Advisors에서 로직을 계속 추적할 수 있다면 수정하고 추가하고... 그러면 표시기 코드를 전혀 이해하지 못합니다(
 
prom18 :

이고르 감사합니다. 필요한 것을 올바르게 공식화하지 않았을뿐입니다. 튜토리얼의 표시기는 주어진 수의 막대 (이 경우 50개)와 별도의 창에 대해 계산되고 그려집니다. MA-shku를 그리는 것은 시작 가격이 아니라 하루의 첫 번째 막대에서 필요합니다. 어쨌든 감사합니다.

Read SetIndexDrawBegin() - 이것은 표시기 버퍼를 그리는 데 제한이 있으며 사용하지 않습니다.

또는 내 예에서 다음을 수행할 수 있습니다.

 input int BarCount = 50 ;
....

int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {
   int i,limit;
   static double dayopen= 0.0 ;
   static int lastday= 0 ;
   if (prev_calculated== 0 )
     {
      limit=rates_total- 1 ;
      dayopen= 0.0 ;
      lastday= 0 ;
     }
   else limit=rates_total-prev_calculated;
   limit = fmin (BarCount,limit);
   for (i=limit; i>= 0 ; i--)
     {
       if (TimeDay(time[i])!=lastday)
        {
         dayopen=open[i];
         lastday= TimeDay(time[i]);
        }
      Label1Buffer[i]=dayopen;
     }
   return (rates_total);
  }

저것들. BarCount 를 설정하여 표시기 버퍼 계산 제한

 
Andrey Sokolov :

에 뭐라고 써있는지 알려주실 수 있나요?

int i,limit=prev_calculated==0 ? rate_total-1 : rate_total-prev_calculated;

"==", "?" , ": "

?

https://docs.mql4.com/en/basis/operators/ternary


내 예를 다시 작성했습니다. 첫 번째 옵션에서는 TF를 전환할 때 올바르게 작동하지 않습니다. dayopen 및 lastday를 재설정해야 합니다. 이들은 static 수정자로 설명되어 있습니다.

Условный оператор ?: - Операторы - Основы языка - Справочник MQL4
Условный оператор ?: - Операторы - Основы языка - Справочник MQL4
  • docs.mql4.com
В качестве первого операнда – "выражение1" – может быть использовано любое выражение, результатом которого является значение типа bool. Если результат равен , то выполняется третий операнд – "выражениеЗ". Второй и третий операнды, то есть "выражение2" и "выражениеЗ", должны возвращать значения одного типа и не должны иметь тип void...
 
Artyom Trishkin :

또한 참조로 전달된 함수 매개변수의 인덱스를 반환합니다.

반환:

더블 GetPatt5barsDN()
{
더블 로우3 = 0;
정수 인덱스 = 0;
for(int i=1; i<20; i++)
{
만약
((닫기[i] > 열기[i]) &&
(닫기[i+1] > 열기[i+1]) &&
(Close[i+2] > Open[i+2]) && //이 양초에는 Low[i+2]가 필요합니다.
(닫기[i+3] < 열기[i+3]) &&
(닫기[i+4] < 열기[i+4]))

low3 = 낮음[i+2];
인덱스 = i+2;
}

반환(low3);
반환(색인);
}


그리고 나서 무엇을 해야 합니까?

 
Sfinks35 :

반환:

더블 GetPatt5barsDN()
{
더블 로우3 = 0;
정수 인덱스 = 0;
for(int i=1; i<20; i++)
{
만약
((닫기[i] > 열기[i]) &&
(닫기[i+1] > 열기[i+1]) &&
(Close[i+2] > Open[i+2]) && //이 양초에는 Low[i+2]가 필요합니다.
(닫기[i+3] < 열기[i+3]) &&
(닫기[i+4] < 열기[i+4]))

low3 = 낮음[i+2];
인덱스 = i+2;
}

반환(low3);
반환(색인);
}


그리고 나서 무엇을 해야 합니까?

그러니 돌아오지마


이 같은

 int GetPatt5barsDN()
      {
       double low3 = 0 ;
       int index = 0 ;
       for ( int i= 1 ; i< 20 ; i++)
          {
             if
            ((Close[i] > Open[i]) &&  
            (Close[i+ 1 ] > Open[i+ 1 ]) &&
            (Close[i+ 2 ] > Open[i+ 2 ]) && //На этой свече нужен Low[i+2]
            (Close[i+ 3 ] < Open[i+ 3 ]) &&  
            (Close[i+ 4 ] < Open[i+ 4 ]))
             
            low3 = Low[i+ 2 ];
            index = i+ 2 ;
          } 
           
           return (index);
      }


더 멀리

 double min = Low[GetPatt5barsDN()];
 
Sfinks35 :

반환:

더블 GetPatt5barsDN()
{
더블 로우3 = 0;
정수 인덱스 = 0;
for(int i=1; i<20; i++)
{
만약
((닫기[i] > 열기[i]) &&
(닫기[i+1] > 열기[i+1]) &&
(Close[i+2] > Open[i+2]) && //이 양초에는 Low[i+2]가 필요합니다.
(닫기[i+3] < 열기[i+3]) &&
(닫기[i+4] < 열기[i+4]))

low3 = 낮음[i+2];
인덱스 = i+2;
}

반환(low3);
반환(색인);
}


그리고 나서 무엇을 해야 합니까?

그리고 참조에 의한 매개변수를 통한 인덱스의 반환은 어디에 있습니까?

올바른 코드를 붙여넣으세요.


 
MQL4에 5자리 또는 4자리를 의미하는 계정 유형과 관련된 따옴표를 인식할 수 있는 기능이 있습니까? 자산이 소수점 뒤에 있는 0의 수를 어떻게 결정할 수 있습니까? 예를 들어 EURJPY는 소수점 뒤에 2개의 0이 있습니다. 포인트, EURUSD는 소수점 뒤에 0이 4개 있습니까?
 
Seric29 :
MQL4에 5자리 또는 4자리를 의미하는 계정 유형과 관련된 따옴표를 인식할 수 있는 기능이 있습니까? 자산이 소수점 뒤에 있는 0의 수를 어떻게 결정할 수 있습니까? 예를 들어 EURJPY는 소수점 뒤에 2개의 0이 있습니다. 포인트, EURUSD는 소수점 뒤에 0이 4개 있습니까?

https://docs.mql4.com/en/predefined/digitsvar

Digits - Предопределенные переменные - Справочник MQL4
Digits - Предопределенные переменные - Справочник MQL4
  • docs.mql4.com
Digits - Предопределенные переменные - Справочник MQL4
 
Artyom Trishkin :

그리고 참조에 의한 매개변수를 통한 인덱스의 반환은 어디에 있습니까?

올바른 코드를 붙여넣으세요.


안녕하세요!
지금 바로 완료된 것 같습니다.
 double GetPatt5barsDN( int &index)
      {
       double low3 = 0 ;
       for ( int i= 1 ; i< 20 ; i++)
          {
             if
            ((Close[i] > Open[i]) &&  
            (Close[i+ 1 ] > Open[i+ 1 ]) &&
            (Close[i+ 2 ] > Open[i+ 2 ]) && //На этой свече нужен Low[i+2]
            (Close[i+ 3 ] < Open[i+ 3 ]) &&  
            (Close[i+ 4 ] < Open[i+ 4 ]))
             
            low3 = Low[i+ 2 ];
            index = i+ 2 ;
          }           
     return (low3);
     }

그러나 컴파일할 때 다음과 같은 경고가 표시됩니다. 라인의 유형 변환으로 인한 데이터 손실 가능성 :
인덱스 = GetPatt5barsDN(인덱스);

 double low3 = 0 ;
   int index = 0 ;
   low3 = GetPatt5barsDN(index);
   index = GetPatt5barsDN(index);
   Print ( "low3= " , low3);
   Print ( "index= " , index);

함수 헤더(및 함수 자체)에는 컴파일 오류가 없습니다.