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

 
Alexey Viktorov :

시간과 가격을 픽셀 단위의 XY 좌표로 변환하는 데 주의하십시오.

선의 가격을 읽고 픽셀로 변환하고 y 좌표를 "텍스트 레이블" 개체에 할당하고 x 좌표는 변경되지 않은 상태로 유지합니다.

이 f-th를 오랫동안 지켜보고 있었지만 경험이 부족해서 어떻게 접근해야 할지 몰랐습니다. 감사합니다. 코드에 통합하려고 합니다.

 
Aleksei Stepanenko :

라인 및 텍스트 표시기 버전 1

표시기는 라인을 따라 텍스트를 이동합니다. 입력 매개변수에 줄 이름을 삽입합니다.

덕분에. 이것도 흥미로운 라인업이다. ChartTimePriceToXY()를 마스터하는 방법을 확실히 알아낼 것입니다.

 

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

   for ( int i=rates_total-prev_calculated- 2 ;i>= 0 ;i--)
     {
      ADRBuffer1[i]=High[i];
       if (High[i]<ADRBuffer1[i+ 1 ])
      ADRBuffer1[i]=ADRBuffer1[i+ 1 ];
      ADRBuffer2[i]=Low[i];
       if (Low[i]>ADRBuffer2[i+ 1 ])
      ADRBuffer2[i]=ADRBuffer2[i+ 1 ];
     }

낮은 무승부지만 높은 사람은 원하지 않습니다...

 
MakarFX :

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

낮은 무승부지만 높은 사람은 원하지 않습니다...

ADRBuffer1[i+1]은 처음 실행할 때 무엇과 같습니까? 아마도 더 많은 쓰레기가있을 것입니다 High[i]

 
Alexey Viktorov :

ADRBuffer1[i+1]은 처음 실행할 때 무엇과 같습니까? 아마도 더 많은 쓰레기가있을 것입니다 High[i]

해결 방법과 Low가 정상적으로 그리는 이유를 알려주세요.

모든 코드

 #property indicator_chart_window
#property indicator_buffers 3
#property indicator_type1    DRAW_LINE
#property indicator_color1    clrDimGray
#property indicator_style1    STYLE_SOLID
#property indicator_width1    2
#property indicator_type2    DRAW_LINE
#property indicator_color2    clrCrimson
#property indicator_style2    STYLE_SOLID
#property indicator_width2    1
#property indicator_type3    DRAW_LINE
#property indicator_color3    clrTeal
#property indicator_style3    STYLE_SOLID
#property indicator_width3    1
//--- indicator buffers
double    ADRBuffer0[];
double    ADRBuffer1[];
double    ADRBuffer2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
   IndicatorDigits( Digits );
//--- indicator buffers mapping
   SetIndexBuffer ( 0 ,ADRBuffer0, INDICATOR_DATA );
   SetIndexBuffer ( 1 ,ADRBuffer1, INDICATOR_DATA );
   SetIndexBuffer ( 2 ,ADRBuffer2, INDICATOR_DATA );
   SetIndexLabel( 0 , "ADR" );
   SetIndexLabel( 1 , "ADR1" );
   SetIndexLabel( 2 , "ADR2" );
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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-prev_calculated- 2 )<= 0 ) return ( 0 );
   for ( int i=rates_total-prev_calculated- 2 ;i>= 0 ;i--)
     {
      ADRBuffer1[i]=High[i];
       if (High[i]<ADRBuffer1[i+ 1 ])
      ADRBuffer1[i]=ADRBuffer1[i+ 1 ];
      ADRBuffer2[i]=Low[i];
       if (Low[i]>ADRBuffer2[i+ 1 ])
      ADRBuffer2[i]=ADRBuffer2[i+ 1 ];
     }
   
//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+
 
MakarFX :

해결 방법과 Low가 정상적으로 그리는 이유를 알려주세요.

모든 코드

빌드 수를 선언해야 합니다. prev_calculate == 0인 경우 버퍼 초기화를 0으로 설정하십시오.

 
Alexey Viktorov :

빌드 수를 선언해야 합니다.

불행히도, 나는 그것이 무엇을 의미하는지 이해하지 못합니다.

알렉세이 빅토로프 :

prev_calculate == 0인 경우 버퍼 초기화를 0으로 설정하십시오.

도움이 되지 않았습니다(

 
MakarFX :

불행히도, 나는 그것이 무엇을 의미하는지 이해하지 못합니다.

도움이 되지 않았습니다(


 if ( prev_calculated == 0 ) {
   ADRBuffer1[rates_total- 1 ] = High[rates_total- 1 ];
   ADRBuffer2[rates_total- 1 ] = Low[rates_total- 1 ]
}

for ( int i=rates_total-prev_calculated- 2 ;i>= 0 ;i--)
{
...
}
 
MakarFX :

불행히도, 나는 그것이 무엇을 의미하는지 이해하지 못합니다.

도움이 되지 않았습니다(

 #property indicator_plots    3

기본값은 1입니다. 그리고 빌드 수를 선언해도 도움이 되지 않으면 옵션 B로 진행합니다.

 
PapaYozh :


감사합니다, 도움이되었습니다 ... 제대로하지 못했습니다)))