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

 
Youri Lazurenko :

겉보기에 간단한 문제를 풀지 못하는 것 같습니다. 차트 어딘가에 MA의 크로스오버가 있었습니다. 교차로 후에 막대를 찾습니다. 이 막대에서 현재 막대까지 의 막대 수를 계산하는 방법은 무엇입니까?

바 번호입니다. 아니다?
 
Youri Lazurenko :

겉보기에 간단한 문제를 풀지 못하는 것 같습니다. 차트 어딘가에 MA의 크로스오버가 있었습니다. 교차로 후에 막대를 찾습니다. 이 막대에서 현재 막대까지 의 막대 수를 계산하는 방법은 무엇입니까?


작동하는 것 같습니다(적어도 주석은 화면에 올바른 것을 표시합니다). " 막대 수 " 덕분에 해결책을 찾은 것 같습니다. 필요한 막대의 날짜 시간을 결정하기 위해 iTime 함수를 사용했습니다. 개요는 다음과 같습니다.

무효 OnTick()

{

int nBarsUp, nBarsDn;

datetime date_dn = iTime(NULL, 0, IntersectionDN());

datetime date_up = iTime(NULL, 0, IntersectionUp());

datetime date_1 = iTime(NULL, 0, 1);

nBarsUp = Bars(Symbol(), 0, date_up, date_1);

nBarsDn = Bars(Symbol(), 0, date_dn, date_1);

Comment("긴 막대의 수: " + nBarsUp + "\n"+

"짧은 마디 수: " + nBarsDn);

}

//+----------------------------------------------- --------------------+

int IntersectionDN()

{

for(int i = 0; i < 36; i++)

{

if(iMA(Symbol(), 0, 5, 0, MODE_EMA, PRICE_CLOSE, i) > iMA(Symbol(), 0, 21, 0, MODE_EMA, PRICE_CLOSE, i)

&& iMA(Symbol(), 0, 5, 0, MODE_EMA, PRICE_CLOSE, i-1) < iMA(Symbol(), 0, 21, 0, MODE_EMA, PRICE_CLOSE, i-1))

리턴(i-1);

}

리턴(-1);

}

int IntersectionUp()

{

for(int i = 0; i < 36; i++)

{

if(iMA(Symbol(), 0, 5, 0, MODE_EMA, PRICE_CLOSE, i) < iMA(Symbol(), 0, 21, 0, MODE_EMA, PRICE_CLOSE, i)

&& iMA(Symbol(), 0, 5, 0, MODE_EMA, PRICE_CLOSE, i-1) > iMA(Symbol(), 0, 21, 0, MODE_EMA, PRICE_CLOSE, i-1))

리턴(i-1);

}

리턴(-1);

}

 
Youri Lazurenko :

작동하는 것 같습니다(적어도 주석은 화면에 올바른 것을 표시합니다). " 막대 수 " 덕분에 해결책을 찾은 것 같습니다. 필요한 막대의 날짜 시간을 결정하기 위해 iTime 함수를 사용했습니다. 개요는 다음과 같습니다.

 void OnTick ()

{
   int nBarsUp, nBarsDn;
   datetime date_dn = iTime ( NULL , 0 , IntersectionDN());
   datetime date_up = iTime ( NULL , 0 , IntersectionUp());
   datetime date_1  = iTime ( NULL , 0 , 1 );
  
   nBarsUp = Bars ( Symbol (), 0 , date_up, date_1);
   nBarsDn = Bars ( Symbol (), 0 , date_dn, date_1); 
   
   Comment ( "Количество длинных баров: " + nBarsUp + "\n" +
           "Количество коротких баров: " + nBarsDn);     
}

//+------------------------------------------------------------------+

int IntersectionDN()

{
   for ( int i = 0 ; i < 36 ; i++)
   {
      if ( iMA ( Symbol (), 0 , 5 , 0 , MODE_EMA , PRICE_CLOSE , i) > iMA ( Symbol (), 0 , 21 , 0 , MODE_EMA , PRICE_CLOSE , i)
         && iMA ( Symbol (), 0 , 5 , 0 , MODE_EMA , PRICE_CLOSE , i- 1 ) < iMA ( Symbol (), 0 , 21 , 0 , MODE_EMA , PRICE_CLOSE , i- 1 ))
         return (i- 1 );
   }  
   return (- 1 );
}

int IntersectionUp()
{
   for ( int i = 0 ; i < 36 ; i++)
   {
      if ( iMA ( Symbol (), 0 , 5 , 0 , MODE_EMA , PRICE_CLOSE , i) < iMA ( Symbol (), 0 , 21 , 0 , MODE_EMA , PRICE_CLOSE , i)
         && iMA ( Symbol (), 0 , 5 , 0 , MODE_EMA , PRICE_CLOSE , i- 1 ) > iMA ( Symbol (), 0 , 21 , 0 , MODE_EMA , PRICE_CLOSE , i- 1 ))
         return (i- 1 );
   } 
   return (- 1 );  

}

사이클에서 교차점을 찾고 있습니다. 그리고 제로 바에서 역사 속으로. 따라서 IntersectionXX() 함수는 막대 번호를 반환합니다.

이 모든 것이 무엇입니까?

 int nBarsUp, nBarsDn;
   datetime date_dn = iTime ( NULL , 0 , IntersectionDN());
   datetime date_up = iTime ( NULL , 0 , IntersectionUp());
   datetime date_1  = iTime ( NULL , 0 , 1 );
  
   nBarsUp = Bars ( Symbol (), 0 , date_up, date_1);
   nBarsDn = Bars ( Symbol (), 0 , date_dn, date_1); 
 
Artyom Trishkin :

사이클에서 교차점을 찾고 있습니다. 그리고 제로 바에서 역사 속으로. 따라서 IntersectionXX() 함수는 막대 번호를 반환합니다.

이 모든 것이 무엇입니까?


바 번호, 예. 그러나 나는 막대의 수 를 알아야 합니다. 역사의 뒷편에 있는 이 막대에서 0번째 막대까지. 간단히 말해서 MA에서 막대가 분리되는 각도가 필요합니다. 그러나 그것은 계산할 수 없기 때문에 나에게 보이는 것처럼 (세로로 가격, 가로로 서로 일정 거리에 배치 된 막대는 호환되지 않는 값입니다). 한 번 포럼에는 계수를 도입하자는 제안이 있었습니다. 즉, 가격 차이를 막대 수로 나눈 값입니다. 그 생각은 나에게 건전한 것 같다. 생기를 불어넣고 싶지만 찻주전자 자체이기 때문에 스스로 무엇인가를 찾고 시행착오를 겪으며 시도한다.

추신: MQL4 언어로 된 코드를 텍스트에 삽입하는 방법은 무엇입니까?
 

아무도 그런 문제에 대처하는 방법을 알려주지 않습니까?


TF를 변경한 후 패널이 휨

 
Youri Lazurenko :

바 번호, 예. 그러나 나는 막대의 수 를 알아야 합니다. 역사의 뒷편에 있는 이 막대에서 0번째 막대까지. 간단히 말해서 MA에서 막대가 분리되는 각도가 필요합니다. 그러나 그것은 계산할 수 없기 때문에 나에게 보이는 것처럼 (세로로 가격, 가로로 서로 일정 거리에 배치 된 막대는 호환되지 않는 값입니다). 한 번 포럼에는 계수를 도입하자는 제안이 있었습니다. 즉, 가격 차이를 막대 수로 나눈 값입니다. 그 생각은 나에게 건전한 것 같다. 생기를 불어넣고 싶지만 찻주전자 자체이기 때문에 스스로 무엇인가를 찾고 시행착오를 겪으며 시도한다.

추신: MQL4 언어로 된 코드를 텍스트에 삽입하는 방법은 무엇입니까?
이것이 열 번째 막대라면 열 번째와 0의 차이를 어떻게 알 수 있습니까? 10-0=10
그리고 왜 빼야 할까요?

 

안녕하세요! 두 개의 빼기 s x 숫자 q와 w가 잘못 비교되어 같을 때 if 연산자는 하나가 다른 것보다 더 큰 것으로 간주합니다. 오류가 무엇입니까? q = -0.0002이고 w도 -0.0002인 경우 res12=false인 경우 이유는 무엇입니까?

 

안녕하세요! 두 개의 빼기 s x 숫자 q와 w가 잘못 비교되어 같을 때 if 연산자는 하나가 다른 것보다 더 큰 것으로 간주합니다. 오류가 무엇입니까? q = -0.0002이고 w도 -0.0002이면 res12=false입니다. 그 이유는 무엇입니까?

 static bool res12= true ;

start()
{   

double SPREAD= MarketInfo (Symb, MODE_SPREAD ); // Спред

   double q= High [ 0 ]- 3.0 * Point - High [ 1 ];
   double w=-SPREAD* Point ;
      
   if (New_Bar== true &&ticket1<= 0 )
     {
       if (q>w)
       {
        res12= false ; 
         Alert ( "res12=false" );
         Alert (q);
         Alert (w);
       }
     }
       if (New_Bar== true &&ticket1<= 0 )
     {
         if (q<=w)
        {
         res12= true ;
         Alert ( "res12=true" );
         Alert (q);
         Alert (w);
        }
      }





}
 
Jenya77769 :

안녕하세요! 두 개의 빼기 s x 숫자 q와 w가 잘못 비교되어 같을 때 if 연산자는 하나가 다른 것보다 더 큰 것으로 간주합니다. 오류가 무엇입니까? q = -0.0002이고 w도 -0.0002인 경우 res12=false인 경우 이유는 무엇입니까?


모든 것을 정규화해야 할 필요가있는 것 같습니다. 정규화 없이는 이중으로 서로 비교할 수없는 것 같습니다.

NormalizeDouble(q<=w)인 경우
 
Vyacheslav Kornev :

모든 것을 정규화해야 할 필요가있는 것 같습니다. 정규화 없이는 이중으로 서로 비교할 수없는 것 같습니다.


감사합니다. 작동했습니다. q와 w만 따로 정규화했습니다!

 if ( NormalizeDouble (q, 4 )> NormalizeDouble (q, 4 ))