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

 
PokrovMT5 :

안녕하세요! 표시기에서 iData로 작성된 경우 차트의 기간을 지정할 수 있는 프로그램이나 막대 데이터에 대한 링크는 중요하지 않은지, 다른 시간대의 데이터가 올바르게 반영되지 않는 이유를 알려주십시오. 시간은 다르지만 지정된 시간대의 차트에만 있는 현재 차트? 고맙습니다.


이해가 잘 안됨

하지만 도움이 될 것 같아요

Доступ к таймсериям и индикаторам - Справочник MQL4
Доступ к таймсериям и индикаторам - Справочник MQL4
  • docs.mql4.com
Функции для работы с таймсериями и индикаторами. Таймсерия отличается от обычного массива тем, что индексация элементов таймсерии производится от конца массива к началу (от самых свежих данных к самым старым). Для копирования значений таймсерий и индикаторов рекомендуется использовать только динамические массивы, так как функции копирования...
 

링크를 주셔서 감사합니다. 나는 정확히 같은 그림을 얻었지만 약간 다른 알고리즘을 얻었습니다. 요점은 더 많은 점(그림에서)을 만들고 임계값과 함께 나타나게 하는 것입니다.

 
Alekseu Fedotov :

이해가 잘 안됨

하지만 도움이 될 것 같아요


감사합니다 확실히 공부하겠습니다만 예를 들어 0 대신 다른 시간대의 데이터를 쓰면 원리가 작동하지 않는 이유는 무엇입니까? 제대로 반영되지 않는 이유는 먼저 복사한 다음 그려야 합니까? 그들을?

 iClose ( NULL , 0 ,i);
 
Alekseu Fedotov :

이봐


노바자 :

링크를 주셔서 감사합니다. 나는 정확히 같은 그림을 얻었지만 약간 다른 알고리즘을 얻었습니다. 요점은 더 많은 점(그림에서)을 만들고 임계값과 함께 나타나게 하는 것입니다.


당신은 이것을 할 수 있지만 Renko, 즉 거리 m / y 정점으로 동일한 세그먼트로 나눕니다. 동시에 정점 검색 알고리즘 자체가 고장납니다. 문제는 초기 코드를 저장하는 동안 그것을 수행하는 방법입니다. 점 사이의 임계값(그림으로)은 마지막을 제외한 모든 점과 점 사이의 거리의 배수여야 합니다. 정점(임계값보다 작음).

 
//+------------------------------------------------------------------+
//|                                                       FastZZ.mq4 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, Yurich"
#property link      "https://login.mql5.com/ru/users/Yurich"
//---
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Red
#property indicator_color2 Red
#property indicator_color3 Gold
#property indicator_color4 DodgerBlue

#property indicator_width3 3
#property indicator_width4 3

//--- input parameters
extern int  Depth    = 10;
//---
double zzH[], zzL[];
double depth;
int last, direction, pbars;
datetime lastbar;

double ArrUp[];
double ArrDn[];
//+------------------------------------------------------------------+
int init()
{
//---- indicators
   SetIndexBuffer(0,zzH);
   SetIndexBuffer(1,zzL);
   SetIndexBuffer(2,ArrUp);
   SetIndexBuffer(3,ArrDn);
   
   SetIndexStyle(0,DRAW_ZIGZAG);
   SetIndexStyle(1,DRAW_ZIGZAG);
   SetIndexStyle(2,DRAW_ARROW);
   SetIndexStyle(3,DRAW_ARROW);
   
   SetIndexArrow(2,159);
   SetIndexArrow(3,159);
   
   SetIndexEmptyValue(0,0.0);
   SetIndexEmptyValue(1,0.0);
   IndicatorDigits(Digits);
//----
   depth=Depth*Point;
   direction=1;
   last=0;
   pbars=0;
   lastbar=0;
   return(0);
}
//+------------------------------------------------------------------+
int start()
{
   int limit=Bars-IndicatorCounted()-1;
   if(lastbar!=Time[0])
   {
      lastbar=Time[0];
      last++;
   }
   if(MathAbs(Bars-pbars)>1) { last=Bars-1; limit=last;}
   pbars=Bars;
   //---
   for(int i=limit; i>0; i--)
   {
      bool set=false;
      zzL[i]=0;
      zzH[i]=0;
      ArrUp[i]=EMPTY_VALUE;
      ArrDn[i]=EMPTY_VALUE;
      //---
      if(direction>0)
      { 
         if(High[i]>zzH[last]+depth)
         {
            zzH[last]=0;
            zzH[i]=High[i];
           
            ArrUp[i]=High[i];
            
            if(Low[i]<High[last]-depth)
            {
               if(Open[i]<Close[i])
                {
                  zzH[last]=High[last]; 
                  ArrUp[last]=High[last];
                }else direction=-1;
               zzL[i]=Low[i];
               ArrDn[i]=Low[i];
            }
            last=i;
            set=true;
         }
         if(Low[i]<zzH[last]-depth && (!set || Open[i]>Close[i]))
         {
            zzL[i]=Low[i];
            ArrDn[i]=Low[i];
            
            if(High[i]>zzL[i]+depth && Open[i]<Close[i])
             {
               zzH[i]=High[i];
               ArrUp[i]=High[i]; 
             }else direction=-1;
            last=i;
         }
      } else //direction<0
      {
         if(Low[i]<zzL[last]-depth)
         {
            zzL[last]=0;
            zzL[i]=Low[i];
        
            ArrDn[i]=Low[i];            
            
            if(High[i]>Low[last]+depth)
            {
               if(Open[i]>Close[i])
                {
                  zzL[last]=Low[last]; 
                  ArrDn[last]=Low[last];
                }else direction=1;
               zzH[i]=High[i];
               ArrUp[i]=High[i];
            }
            last=i;
            set=true;
         }
         if(High[i]>zzL[last]+depth && (!set || Open[i]<Close[i]))
         {
            zzH[i]=High[i];
            ArrUp[i]=High[i];
            
            if(Low[i]<zzH[i]-depth && Open[i]>Close[i])
             {
               zzL[i]=Low[i]; 
               ArrDn[i]=Low[i];
             }else direction=1;
            last=i;
         }
      }
   }
//----
   zzH[0]=0;
   zzL[0]=0;
//----
   return(0);
}
//+------------------------------------------------------------------+
 

어떤 이유에서인지 코드가 즉시 주석을 삽입하지 않아 다시 작성해야 했습니다.

 
PokrovMT5 :

감사합니다 확실히 공부하겠습니다만 예를 들어 0 대신 다른 시간대의 데이터를 쓰면 원리가 작동하지 않는 이유는 무엇입니까? 제대로 반영되지 않는 이유는 먼저 복사한 다음 그려야 합니까? 그들을?



CopyClose는 보다 현대적인 기능이지만, iClose (...)는 잘 작동합니다.

그렇다면 어떻게 제대로 작동하지 않습니까? 그림이나 코드 조각이 더 정확할 수 있습니다.

 
Alekseu Fedotov :

CopyClose는 보다 현대적인 기능이지만 오 글쎄, iClose(...)는 잘 작동합니다.

그렇다면 어떻게 제대로 작동하지 않습니까? 그림이나 코드 조각이 더 정확할 수 있습니다.

음, 여기 가장 간단한 예가 있습니다. 저는 종가가 차트에 반영되기를 원하고, 기간은 1시간으로 설정되고, 모든 것이 시계에서는 정상이고, 모든 것은 다른 때와 다릅니다. 그리고 아이디어는 더 작은 기간에 더 오래된 것의 종가를 보는 것이었습니다. 사진 30분
 //+------------------------------------------------------------------+
//|                                                   Проверка 2.mq4 |
//|                                                  Bugaev Vladimir |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Bugaev Vladimir"
#property link        "https://www.mql5.com"
#property version    "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 clrBlue
#property indicator_width1 2
int i,limit;

double C,CC[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
IndicatorBuffers ( 1 );
//----      
   SetIndexBuffer ( 0 ,CC);
  
   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 (prev_calculated< 1 ) limit=rates_total- 1 ;
if (prev_calculated> 0 )limit=rates_total-prev_calculated;
for (i=limit; i> 0 ; i--)  
  
  {
 C= iClose ( NULL , 60 ,i);
 CC[i]=C; 



  }
   return (rates_total);
  }
//+------------------------------------------------------------------+
 
PokrovMT5 :
음, 여기 가장 간단한 예가 있습니다. 저는 종가가 차트에 반영되기를 원하고, 기간은 1시간으로 설정되고, 모든 것이 시계에서는 정상이고, 모든 것은 다른 때와 다릅니다. 그리고 아이디어는 더 작은 기간에 더 오래된 것의 종가를 보는 것이었습니다. 사진 30분

이 같은


     int shift;
     datetime   T;
  
   for (i=limit; i>= 0 ; i--)
     {
      T = iTime ( NULL , 0 ,i); 
      shift= iBarShift ( NULL , 60 ,T); 
      C= iClose ( NULL , 60 ,shift);
      CC[i]=C;
     }
 
Alekseu Fedotov :

이 같은



매우 감사합니다!