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

 
Artyom Trishkin :

글쎄, 첫 번째 사이클의 인덱스로 즉시 iCustom()을 읽으십시오.

또 다른 질문은 현재 막대에서 왼쪽으로 데이터가 필요하다는 것입니다. 그것이 내가 말하는 이유입니다 - 0에서 필요한 것까지 읽으십시오. 그러나 rate_total-1 이상은 아닙니다.

동시에 limit>1인 경우에만 읽기

나머지 시간에는 새 데이터가 없으며 필요한 막대의 인덱스는 변경되지 않습니다.

그는 원하지 않지만 가까운 화살표의 막대 숫자는 주석에 올바르게 작성됩니다.

 //+------------------------------------------------------------------+
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[])
  {
//---
   if (rates_total< 1 ) return ( 0 );
   int limit=rates_total-prev_calculated;
   if (limit> 1 ) 
     {
      limit=rates_total- 1 ;
       ArrayInitialize (BufferUP, EMPTY_VALUE );
       ArrayInitialize (BufferDN, EMPTY_VALUE );
     }
   for ( int i=limit; i>= 0 ; i--) 
     {
         if ( NormalizeDouble ( iCustom ( NULL , 0 , "Arrow v.3" , 0 ,i), Digits )!= EMPTY_VALUE )
           {
            num_buy=i;

           }
//
       if (num_buy== 10 )
        {
         BufferUP[i+ 1 ]=low[i+ 1 ]-distance*MyPoint;
         
        }
         if ( NormalizeDouble ( iCustom ( NULL , 0 , "Arrow v.3" , 1 ,i), Digits )!= EMPTY_VALUE
            )
           {
            num_sell=i;

           }
       if (num_sell== 10 )
        {
         BufferDN[i+ 1 ]=high[i+ 1 ]+distance*MyPoint;

        }
     
       Comment (num_buy, "num_sell" ,num_sell);
     }
//--- return value of prev_calculated for next call

   return (rates_total);
  }
 
mila.com :

원하지 않는다

당신은 내가 쓰는 것을 읽습니까?

또 다른 질문은 현재 막대에서 왼쪽으로 데이터가 필요하다는 것입니다. 그것이 내가 말하는 이유입니다 - 0에서 필요한 것까지 읽으십시오. 그러나 rate_total-1 이상은 아닙니다.

동시에 limit>1인 경우에만 읽기

 
Artyom Trishkin :

당신은 내가 쓰는 것을 읽습니까?

또 다른 질문은 현재 막대에서 왼쪽으로 데이터가 필요하다는 것입니다. 그것이 내가 말하는 이유입니다 - 0에서 필요한 것까지 읽으십시오. 그러나 rate_total-1 이상은 아닙니다.

동시에 limit>1인 경우에만 읽기

내가 안 그랬어?
if(제한>1)
{
제한=rates_total-1;

 
mila.com :

내가 하지 않았습니까?
if(한계>1)
{
제한=rates_total-1;

다음은 수행한 작업입니다.

 for ( int i=limit; i>= 0 ; i--) 

내가 무슨 말을 하고 있었던 거지?

 
Artyom Trishkin :

다음은 수행한 작업입니다.

내가 무슨 말을 하고 있었던 거지?

한도에서 읽기>1

 for ( int i=limit; i> 1 ; i--) 

이해가 안 가나요?

 
mila.com :

한도에서 읽기>1

이해가 안 가나요?

그것이 내가 말하는 이유입니다 - 0에서 필요한 것까지 읽으십시오. 그러나 rate_total-1 이상은 아닙니다.
 
Artyom Trishkin :
그것이 내가 말하는 이유입니다 - 0에서 필요한 것까지 읽으십시오. 그러나 rate_total-1 이상은 아닙니다.

나는 그것이 어떻게되는지 이해하지 못한다고 말합니다. 보여주세요)

 
mila.com :

나는 그것이 어떻게되는지 이해하지 못한다고 말합니다. 보여주세요)

 if (limit> 1 )
  {
   for ( int i= 0 ; i<limit; i++) 
     { 
       // тут поиск до нужного вам бара. Нашли - запомнили бар или поставили точку куда нужно и break;
     }
  }

이 주기는 필요한 막대(있는 경우)까지만 또는 전체 기록 전체에서 제한까지 이동합니다.

 
Artyom Trishkin :

이 주기는 필요한 막대(있는 경우)까지만 또는 전체 기록 전체에서 제한까지 이동합니다.

난 정말 나쁜, 난 아무것도 보여주지 않습니다.

 //+------------------------------------------------------------------+
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[])
  {
//---
   if (rates_total< 1 ) return ( 0 );
   int limit=rates_total-prev_calculated;
   if (limit> 1 ) 
     {
      limit=rates_total- 1 ;
       ArrayInitialize (BufferUP, EMPTY_VALUE );
       ArrayInitialize (BufferDN, EMPTY_VALUE );
     }
   if (limit> 1 )
  {
   for ( int i= 0 ; i<limit; i++) 
     { 
         if ( NormalizeDouble ( iCustom ( NULL , 0 , "Arrow v.3" , 0 ,i), Digits )!= EMPTY_VALUE )
           {
            num_buy=i;

           }
//
       if (num_buy== 10 )
        {
         BufferUP[i+ 1 ]=low[i+ 1 ]-distance*MyPoint;
         
        }
         if ( NormalizeDouble ( iCustom ( NULL , 0 , "Arrow v.3" , 1 ,i), Digits )!= EMPTY_VALUE
            )
           {
            num_sell=i;

           }
       if (num_sell== 10 )
        {
         BufferDN[i+ 1 ]=high[i+ 1 ]+distance*MyPoint;

        }
     
       Comment (num_buy, "num_sell" ,num_sell);
     }
     }
//--- return value of prev_calculated for next call

   return (rates_total);
  }
 
mila.com :

난 정말 나쁜, 난 아무것도 보여주지 않습니다.

이해가 되지 않습니다. 무엇을 찾아 표시하고 싶습니까? 단어만 있으면 코드가 없습니다.

여기에 다음과 같이 씁니다.

안녕하세요, 도와주세요.

표시 화살표가 있는 막대의 번호를 언제든지 알고 싶습니다.

예제에서는 화살표가 10번째 막대에 있으면 버퍼를 채우려고 했습니다.

그것은 바로 질문입니다. 왜 정확히 10번째 막대를 보고 있습니까? 일반적으로 어떤 막대가 필요합니까? 그리고 어떤 화살? 최신? 또는 마지막 두 개 - 상단과 하단? 또는 오른쪽에서 왼쪽으로 숫자로 원하는 화살표의 막대를 찾으십니까?

그건 분명하지 않습니다.

그리고 OnCalculate() 가 아닌 전체 표시기를 첨부합니다.