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

 
novichok2018 : 감사합니다! 나는 협약에 대해 이해했고, 나는 고려할 것입니다. 그러나 제안된 스크립트를 이해하기 위해서는 MKL4에 대한 지식이 충분하지 않습니다. 죄송합니다 :( .

모든 실험은 스크립트를 사용하여 수행됩니다. 터미널에서 스크립트를 실행합니다. 일부 줄을 바꾸거나 버리십시오. 무엇을 볼

 

지표 데이터의 Min Max를 찾고 싶습니다. 일종의 "교과서에 나와있는대로"를 수행했지만 지표 데이터가 배열에 기록되지 않은 것 같습니다. MQL 전문가들은 내가 어디서 실수를 했는지 알려줍니다.

     
int limit= 40000 ;
     
       double ArrayGreen[];  
       ArrayResize (ArrayGreen,limit);
       for ( int i= 0 ;i>=limit;i++)
         {
            ArrayGreen[i] = iCustom ( NULL , 0 , "Kolier_SuperTrend_Indi" ,ATR_Period,ATR_Multiplier, 0 , 1 );
         }
       int max= ArrayMaximum (ArrayGreen,Quant, 0 ); 
       double iMaximum = ArrayGreen[max];
       Print ( "Max = " ,ArrayGreen[max], " at index=" ,max); 

      
     
       double ArrayRad[];  
       ArrayResize (ArrayRad,limit);
       for ( int i= 0 ;i>=limit;i++)
         {
            ArrayRad[i] = iCustom ( NULL , 0 , "Kolier_SuperTrend_Indi" ,ATR_Period,ATR_Multiplier, 1 , 1 );
         }
     int min= ArrayMinimum (ArrayRad,Quant_Bars, 0 ); 
     double iMinimum = ArrayRad[min];
     Print ( "Min= " ,ArrayRad[min], " at index=" ,min); 
 
Corvin85 :

지표 데이터의 Min Max를 찾고 싶습니다. 일종의 "교과서에 나와있는대로"를 수행했지만 지표 데이터가 배열에 기록되지 않은 것 같습니다. MQL 전문가들은 내가 어디서 실수를 했는지 알려줍니다.

한계 변수의 값이 0보다 큽니다. 따라서 루프가 실행되지 않습니다. 결과적으로 ArrayGreen 및 ArrayRad는 비어 있습니다.

한계 값을 0 이하로 설정하면 프로그램은 첫 번째 루프에서 루프합니다.

따라서 사이클의 조건을 다시 실행해야 합니다. 대부분 다음을 수행해야 합니다.

 for ( int i = 0 ; i < limit; i++)
 
Corvin85 :

지표 데이터의 Min Max를 찾고 싶습니다. 일종의 "교과서에 나와있는대로"를 수행했지만 지표 데이터가 배열에 기록되지 않은 것 같습니다. MQL 전문가들은 내가 어디서 실수를 했는지 알려줍니다.

또한   아이커스텀(...........); 마지막으로 전달된 매개변수 i

 for ( int i= 0 ;i<limit;i++)
         {
            ArrayGreen[i] = iCustom ( NULL , 0 , "Kolier_SuperTrend_Indi" ,ATR_Period,ATR_Multiplier, 0 ,i);
         }

이 같은.

 
고맙습니다! 모든 것이 작동했습니다!
 

안녕하세요!


테스트의 편의를 위해 코드를 입력하지 않고 이 조건을 텍스트로 다시 작성하여 작동하지 않도록 할 때마다 조건을 켜고 끄는 버튼을 뽑고 싶습니다.

그래서 지금은 다음과 같이 하고 있습니다.

 if (( Close [ 1 ]<= High [ 2 ])&&( Close [ 1 ]>= Low [ 2 ])&&( Open [ 1 ]<= High [ 2 ])&&( Open [ 1 ]>= Low [ 2 ]))
{

나는 다음과 같이 그것을 끕니다.

 //if ((Close[1]<=High[2])&&(Close[1]>=Low[2])&&(Open[1]<=High[2])&&(Open[1]>=Low[2]))
//{

설정 입력을 켜고 끄려고 했습니다. bool Y=True; (여기서 Y는 조건), 조건에 Y를 할당하고 조건이 충족되거나 충족되지 않으면 else if로 분기를 분할합니다. 하지만 문제가 해결되지 않았습니다.

이런 경우 어떻게 처리해야 하는지 알려주실 수 있나요?

 
YanSay :

안녕하세요!


테스트의 편의를 위해 조건을 켜고 끌 수 있는 버튼을 뽑아 코드에 들어가지 않고 이 조건을 텍스트로 다시 만들어서 작동하지 않도록 할 때마다 이 조건을 켜고 끄려고 합니다.

그래서 지금은 다음과 같이 하고 있습니다.

나는 다음과 같이 끕니다.

설정 입력을 켜고 끄려고 했습니다. bool Y=True; (여기서 Y는 조건), 조건에 Y를 할당하고 조건이 충족되거나 충족되지 않으면 else if로 분기를 분할합니다. 하지만 문제가 해결되지 않았습니다.

이런 경우 어떻게 처리해야 하는지 알려주실 수 있나요?

이렇게 될 수 있을까

 input bool FLAG = True ;


if (FLAG && ( Close [ 1 ]<= High [ 2 ])&&( Close [ 1 ]>= Low [ 2 ])&&( Open [ 1 ]<= High [ 2 ])&&( Open [ 1 ]>= Low [ 2 ]))
{
 
Vitaly Muzichenko :

이렇게 될 수 있을까

귀하의 버전에서는 값이

 input bool FLAG = False ;

알고리즘은 더 이상 진행되지 않지만 False인 경우 이 조건을 무시하고 다음 조건으로 이동해야 합니다.

제 경우에는 2개의 분기만 작성하는 것이 유일한 옵션입니까?:

 input bool FLAG = True ;

if (FLAG= True )
{( Close [ 1 ]<= High [ 2 ])&&( Close [ 1 ]>= Low [ 2 ])&&( Open [ 1 ]<= High [ 2 ])&&( Open [ 1 ]>= Low [ 2 ]))
 { //следующие условия
 }
}

if (FLAG= False )
 { //следующие условия
 }

아니면 더 쉬운 방법이 있습니까?

 
YanSay :

귀하의 버전에서는 값이

알고리즘은 더 이상 진행되지 않지만 False인 경우 이 조건을 무시하고 다음 조건으로 이동해야 합니다.

제 경우에는 2개의 분기만 작성하는 것이 유일한 옵션입니까?:

아니면 더 쉬운 방법이 있습니까?

 //+------------------------------------------------------------------+
input bool FLAG = True ;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
   if (FLAG) {
     if ( Close [ 1 ]<= High [ 2 ]) && ( Close [ 1 ]>= Low [ 2 ]) && ( Open [ 1 ]<= High [ 2 ]) && ( Open [ 1 ]>= Low [ 2 ])
     //...
  } else {
     //следующие условия
  }
//+------------------------------------------------------------------+
 
YanSay :

귀하의 버전에서는 값이

알고리즘은 더 이상 진행되지 않지만 False인 경우 이 조건을 무시하고 다음 조건으로 이동해야 합니다.

제 경우에는 2개의 분기만 작성하는 것이 유일한 옵션입니까?:

아니면 더 쉬운 방법이 있습니까?

유일한 방법

 if (!FLAG || ( Close [ 1 ]<= High [ 2 ] && Close [ 1 ]>= Low [ 2 ] && Open [ 1 ]<= High [ 2 ] && Open [ 1 ]>= Low [ 2 ]))
사유: