포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 25

 

Цикл от самого "старого" бара к самому "свежему": 

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

표시기를 약간 수정했습니다. 소수점까지 정확하게 계산합니다. 예를 들어, 한 섹션에서 표시기는 11과 같아야 하지만 11.58로 표시됩니다.

무엇이 잘못되었을 수 있습니까?

vniz_1, vniz_2를 0보다 크게 만들었습니다. 표시줄에 끊김이 있습니다. 간격을 연결하고 다른 색상으로 색칠하는 방법이지만 이러한 간격 의 표시기는 계산 하지 마십시오.

 //+------------------------------------------------------------------+
//|                                                         сила.mq4 |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright ""
#property link       ""

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red
//--- input parameters
extern int        Period_MA_1= 7 ;
extern int        Period_MA_2= 7 ;
extern int        Period_MA_3= 7 ;
//--- buffers
double ExtMapBuffer1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle( 0 , DRAW_LINE );
   SetIndexBuffer ( 0 ,ExtMapBuffer1);
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
     int counted_bars=IndicatorCounted(),                      
    limit;
     double
    vniz_1,
    vniz_2,
    MA_1_t,                         
    MA_2_t,                           
    MA_3_t;
 
   if (counted_bars> 0 )
      counted_bars--;
   
   limit= Bars -counted_bars;
   
   
   for ( int i= 0 ;i<limit;i++)
   {
      MA_1_t= iMA ( NULL , 0 ,Period_MA_1, 0 , MODE_EMA , PRICE_CLOSE ,i+ 1 );  
      MA_2_t= iMA ( NULL , 0 ,Period_MA_2, 0 , MODE_EMA , PRICE_CLOSE ,i+ 2 );  
      MA_3_t= iMA ( NULL , 0 ,Period_MA_3, 0 , MODE_EMA , PRICE_CLOSE ,i+ 3 );    
      vniz_1=(MA_3_t-MA_2_t);
      vniz_2=(MA_2_t-MA_1_t);
       if (vniz_1> 0 &&vniz_2> 0 )
      {
      ExtMapBuffer1[i]=(vniz_1/vniz_2);
      }
   }
   return ( 0 );
  }
//+------------------------------------------------------------------+
 
Forexman77 :

표시기를 약간 수정했습니다. 소수점까지 정확하게 계산합니다. 예를 들어, 한 섹션에서 표시기는 11과 같아야 하지만 11.58로 표시됩니다.

무엇이 잘못되었을 수 있습니까?

vniz_1, vniz_2를 0보다 크게 만들었습니다. 표시줄에 끊김이 있습니다. 간격을 연결하고 다른 색상으로 색칠하는 방법이지만 이러한 간격의 표시기는 계산하지 마십시오.


      MA_1_t= iMA ( NULL , 0 ,Period_MA_1, 0 , MODE_EMA , PRICE_CLOSE ,i+ 1 );  
      MA_2_t= iMA ( NULL , 0 ,Period_MA_2, 0 , MODE_EMA , PRICE_CLOSE ,i+ 2 );  
      MA_3_t= iMA ( NULL , 0 ,Period_MA_3, 0 , MODE_EMA , PRICE_CLOSE ,i+ 3 ); 
존재하지 않는 막대에 표시기를 계산합니까?????
 
      if (vniz_1<0 || vniz_2<0)
      {
      ExtMapBuffer2[i]=(чему равны разрывы);
      }
 
2013.07.07 16:06:21 2010.02.01 01:56 EURUSD,H1 생성자: EURUSD 매도 주문을 여는 동안 오류 발생 배열 인덱스 - 범위를 벗어났습니다.
????
 
다음은 모든 막대에 대해 수평선 을 그리는 간단한 표시기의 코드입니다.
마지막 20개 막대에 대해서만 선이 그려지도록 수정하는 방법은 무엇입니까?




 #property indicator_separate_window
#property indicator_buffers 1

#property indicator_color1 Chocolate
#property indicator_width1 6

#property indicator_minimum - 0.1
#property indicator_maximum   0.1


double ExtMapBuffer[];



int init() {

   IndicatorBuffers( 1 );
   IndicatorDigits(   Digits + 2 );
   IndicatorShortName( "H_LINE" );

   SetIndexLabel(     0 , "H_LINE" );
   SetIndexDrawBegin( 0 , 0 );
   SetIndexStyle(     0 , DRAW_LINE );
   SetIndexBuffer (   0 , ExtMapBuffer);

   SetIndexEmptyValue( 0 , EMPTY_VALUE );
   SetIndexShift(     0 , 0 );

   return ( 0 );
}




int start()  {

   int limit;
   int counted_bars=IndicatorCounted();

   if (counted_bars> 0 ) {
      counted_bars--;
   }

   limit= Bars -counted_bars;


   for ( int i= 0 ; i<limit; i++) {   
      ExtMapBuffer[i] = 0 ;
   }


   return ( 0 );
}
 
atztek :
다음은 모든 막대에 대해 수평선을 그리는 간단한 표시기의 코드입니다.
마지막 20개 막대에 대해서만 선이 그려지도록 수정하는 방법은 무엇입니까?






선은 무엇이어야 합니까?
 
Vinin :

선은 무엇이어야 합니까?

이 경우 Y축을 따른 선의 크기는 중요하지 않습니다. 이것은 지표의 "그리기"를 특정 수의 막대 로 올바르게 제한하는 방법을 이해하고자 하는 근거일 뿐입니다.
 
atztek :

이 경우 Y축을 따른 선의 크기는 중요하지 않습니다. 이것은 지표의 "그리기"를 특정 수의 막대로 제한하는 방법을 이해하고자 하는 근거일 뿐입니다.

표시기 버퍼 또는 개체를 사용하시겠습니까?
 
Vinin :
표시기 버퍼 또는 개체를 사용하시겠습니까?

표시기 버퍼 앞으로 이 솔루션은 직선뿐만 아니라 이동 평균선 등에도 사용될 것입니다.