초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 874

 

안녕하세요, 아래 코드에서 사이클 블록(CopyByffer 뒤에 오는)이 없으면 표시기가 정상적으로 시작되지만 캔들 가격과 밴드 중 하나의 가격을 비교하는 사이클을 켜면, 밴드 자체가 출시 후 표시되지 않습니다. 무엇이 문제일 수 있습니까?

 #property indicator_chart_window
#property indicator_buffers 3
#property indicator_plots    3
#property indicator_type1    DRAW_LINE
#property indicator_color1   Olive
#property indicator_type2    DRAW_LINE
#property indicator_color2   Green
#property indicator_type3    DRAW_LINE
#property indicator_color3   Olive

input int peroid = 20 ;         // период полос 1
input int bands_shift= 0 ;           // смещение полос 1 
input double deviation = 2.3 ;   // отклонение полос 1

input ENUM_APPLIED_PRICE    applied_price= PRICE_CLOSE ; // тип цены 

double       Base[];     // массив для BASE_LINE индикатора iBands
double       Upper[];     // массив для UPPER_BAND индикатора iBands
double       Lower[];     // массив для LOWER_BAND индикатора iBands

int iBands1_handle; //Указатель на первый индикатор 
int iBands2_handle; //Указатель на первый индикатор 

int g_i_Window;


int OnInit ()
  {
   g_i_Window= ChartWindowFind ();
   SetIndexBuffer ( 0 ,Base, INDICATOR_DATA );
   SetIndexBuffer ( 1 ,Upper, INDICATOR_DATA );
   SetIndexBuffer ( 2 ,Lower, INDICATOR_DATA );
           
   iBands1_handle= iBands ( NULL , PERIOD_CURRENT ,peroid,bands_shift,deviation,applied_price);

   if (iBands1_handle== INVALID_HANDLE ){
         Alert ( "Неудалось загрузить индикатор, повторите попытку" );
         return (- 1 );
         }
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,       // размер входных таймсерий 
                 const int prev_calculated,   // обработано баров на предыдущем вызове
                 const datetime & time[],     // Time 
                 const double & open[],       // Open 
                 const double & high[],       // High 
                 const double & low[],         // Low 
                 const double & close[],       // Close 
                 const long & tick_volume[],   // Tick Volume 
                 const long & volume[],       // Real Volume 
                 const int & spread[])         // Spread 
  {
   int i;
   int shift = 0 ;
   int shift1;
   int shift2;
   int shift3;
   string alert;
   
   double O, O1, O2, C, C1, C2, L, L1, L2, H, H1, H2;
      shift1 = shift;
      shift2 = shift + 1 ;
      shift3 = shift + 2 ;   
      O = open[shift1];
      O1 = open[shift2];
      O2 = open[shift3];
      H = high[shift1];
      H1 = high[shift2];
      H2 = high[shift3];
      L = low[shift1];
      L1 = low[shift2];
      L2 = low[shift3];;
      C = close[shift1];
      C1 = close[shift2];
      C2 = close[shift3]; 
   
   i = (prev_calculated== 0 )? 1 : prev_calculated;
   i = (prev_calculated==rates_total)?rates_total- 1 : i;
   
   CopyBuffer (iBands1_handle, 0 , 0 ,rates_total- 1 ,Base);
   CopyBuffer (iBands1_handle, 1 , 0 ,rates_total- 1 ,Upper);
   CopyBuffer (iBands1_handle, 2 , 0 ,rates_total- 1 ,Lower);

   for (i = i; i < rates_total; i++)
   {
     if (H > L && O > Lower[i])
    {
     int time_waiting = ( int ) TimeLocal () + 1 ;
     while ( TimeLocal () < time_waiting){}
     Comment ( "True" );
     return ( 0 );
    }
     else Comment ( "False" ); 
   }
   
   
   if (prev_calculated== 0 ) ChartRedraw ();   
   return (rates_total);
  }

결과:


 
Aleksey Vyazmikin :

금지되어 있습니다.

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

오류, 버그, 질문

알렉세이 빅토 로프 , 2018.05.30 15:53

글쎄, 그렇게 동적으로는 아니지만 재초기화를 통해 한 번 가능합니다. 나는하고 있었다.


 
Alexey Viktorov :

가능한 경우 자세히 설명하십시오.

 
Andrii Djola :

가능한 경우 자세히 설명하십시오.

얼마나 더 자세하게?

어떤 상황에서는 색 막대나 색 양초를 만들어야 했습니다. 4개의 값 버퍼 와 1개의 색상 버퍼를 사용합니다. 또 다른 옵션은 1개의 값 버퍼와 1개의 색상 버퍼가 있는 컬러 라인으로 표시해야 했습니다.

표시기 속성을 호출하고 변경하면 표시기가 초기화됩니다. 따라서 설정에 막대 또는 양초가 있으면 초기화 옵션이 하나 있습니다. 줄이면 초기화를 위한 또 다른 옵션입니다.

Alexey Vyazmikin이 다른 옵션을 알지 못하고 말한 것처럼 표시기 중간에 버퍼 수를 변경하는 것은 불가능합니다.

 
Alexey Viktorov :

얼마나 더 자세하게?

어떤 상황에서는 색 막대나 색 양초를 만들어야 했습니다. 4개의 값 버퍼 와 1개의 색상 버퍼를 사용합니다. 또 다른 옵션은 1개의 값 버퍼와 1개의 색상 버퍼가 있는 컬러 라인으로 표시해야 했습니다.

표시기 속성을 호출하고 변경하면 표시기가 초기화됩니다. 따라서 설정에 막대 또는 양초가 있으면 초기화 옵션이 하나 있습니다. 줄이면 초기화를 위한 또 다른 옵션입니다.

Alexey Vyazmikin이 다른 옵션을 알지 못하고 말한 것처럼 표시기 중간에 버퍼 수를 변경하는 것은 불가능합니다.

내 성을 러시아어로 쓰기로 결정했다면 Vyazmikin처럼 들립니다.

내 의심에 관하여 - 나는 제기된 질문에 대한 대답이 정확하다고 생각합니다. 필요를 설명하지 않고 달리 말할 의미가 없습니다. 재초기화는 프로그램을 다시 시작하는 것이므로 설정에서 무엇이든 변경할 수 있습니다.

 
Aleksey Vyazmikin :

내 성을 러시아어로 쓰기로 결정했다면 Vyazmikin처럼 들립니다.

내 의심에 관하여 - 나는 제기된 질문에 대한 대답이 정확하다고 생각합니다. 필요를 설명하지 않고 다른 말을 하는 것은 의미가 없습니다. 재초기화는 프로그램을 다시 시작하는 것이므로 설정에서 무엇이든 변경할 수 있습니다.

소프트 사인이 없으면 기분이 많이 상합니까?

내가 부정을 언급 했습니까? 제 생각에는 답변의 정확성을 강조했습니다.

 
alph :
알려주십시오. 테스터의 그러한 지표가 실생활에서 실재합니까? 그리고 $3000 디포가 있는 해에 좋은 결과입니까 나쁜 결과입니까?
진짜.
 
Alexey Viktorov :

소프트 사인이 없으면 기분이 많이 상합니까?

나는 분개함이 아니라 깨달음에 의해 인도된다. 내가 왜 화를 내야하는지, 올바르게 쓰는 법을 알고 나를 화나게하고 싶었습니까? 그 옵션도 고려하지 않았죠?

 
Aleksey Vyazmikin :

나는 분개함이 아니라 깨달음에 의해 인도된다. 내가 왜 화를 내야하는지, 올바르게 쓰는 법을 알고 나를 화나게하고 싶었습니까? 그 옵션도 고려하지 않았죠?

평화, 우정, 껌.

 
Alexey Viktorov :

평화, 우정, 껌.

반 리터는 어떻습니까?

사유: