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

 
Dmitry Belov :

안녕하세요 댓글에 ZigD[0]이 표시되지 않는 이유를 알려주세요

ZigM[0]이 출력됩니까?

 
Alexey Viktorov :

ZigM[0]이 출력됩니까?

네 나옵니다...


	          
 
Dmitry Belov :

네 나옵니다...

죄송합니다 코드를 자세히 보지 않았습니다...

zzz>0이면 값이 막대의 높거나 낮을 수 있음을 의미합니다. 따라서 이 값은 이러한 값과 비교되어야 하며 결과에 따라 하나 또는 다른 배열에 배치되어야 합니다.

 
Alexey Viktorov :

죄송합니다 코드를 자세히 보지 않았습니다...

zzz>0이면 값이 막대의 높거나 낮을 수 있음을 의미합니다. 따라서 이 값은 이러한 값과 비교되어야 하며 결과에 따라 하나 또는 다른 배열에 배치되어야 합니다.

그냥 하는건데 어떤 이유에서인지 ZigD[]를 출력하지 않고 ZigD를 추가하면 아예 출력이 안되고 주석처리 하면 모든게 출력됩니다

 //+------------------------------------------------------------------+
//|                                                           01.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property strict
#property indicator_chart_window

#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_width1 1

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+

extern int ExtDepth= 12 ;
extern int ExtDeviation= 5 ;
extern int ExtBackstep= 3 ;
extern int nn= 30 ;

int   ww= 0 , kk= 0 ;
int dd= 0 ;
double zz,SredRazmax, zzz;
double HZZ[], ZigM[];
int ZigD[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- indicator buffers mapping
   SetIndexBuffer ( 0 ,HZZ);
   SetIndexBuffer ( 1 ,ZigM);
   SetIndexStyle ( 0 , DRAW_SECTION );
   SetIndexEmptyValue ( 0 , 0.0 );
   SredRazmax= 0.0 ;
//---
   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[])
  {
//---
   int shift,limit;
//--- Первый вызов индикатора или смена таймфрейма или подгрузка данных из истории
   if (prev_calculated== 0 )
     {
      limit=rates_total- 1 ;
      SredRazmax= 0.0 ;
       ArrayInitialize (HZZ, 0.0 );
     }
   else limit=rates_total-prev_calculated+ 1 ;
   for (shift=limit; shift>= 0 ; shift--)
     {
      zz= iCustom ( NULL , 0 , "ZigZag" ,ExtDepth,ExtDeviation,ExtBackstep, 0 ,shift);
       if (zz> 0.0 )
        {
         HZZ[shift]=zz;
        }
     }
     for (ww = 0 ; ww <= Bars - 1 ; ww++)
  {
      zzz = iCustom ( NULL , 0 , "ZigZag" , ExtDepth, ExtDeviation, ExtBackstep, 0 , ww);
      
           if (zzz > 0.0 )   
           {
           ZigM[kk]=zzz;
            kk++; 
           ZigD[dd]=ww;
            dd++;  
            }
   }       
   
   // Расчет средних значений 
     for (kk= 0 ;kk<=nn;kk++)
     {
         if (ZigM[kk]>ZigM[kk+ 1 ]){SredRazmax+=(ZigM[kk]-ZigM[kk+ 1 ]);}
         if (ZigM[kk]<ZigM[kk+ 1 ]){SredRazmax+=(ZigM[kk]-ZigM[kk+ 1 ])*(- 1 );}
     if ( IsStopped ()) 
     break ; 
     }
     Comment ( "Средний размах = " ,SredRazmax/nn, "," ,ZigM[ 0 ], "," ,ZigM[ 1 ]);
     Comment (ZigD[ 0 ]);
   return ( 0 );
  }
   //+-  
 

안녕하세요 사람들!

참고로 MT4에서 질문을 던질 수 있는 더 적합한 "창"을 찾지 못했습니다.

터미널을 열면 터미널 라인 "상태 라인", "표준", "차트", " 그래픽 도구 " 및 " 차트 기간 "이 갑자기 사라지기 시작했습니다. 켜고 다음에 열면 터미널이 다시 비어있고 현재 차트만 있습니다.

수년 동안 처음으로 그런 카누를 만났고 어떻게해야할지 모르겠습니다. 알려주세요. 미리 감사드립니다.

 
Vadens :

안녕하세요 사람들!

참고로 MT4에서 질문을 던질 수 있는 더 적합한 "창"을 찾지 못했습니다.

터미널을 열면 터미널 라인 "상태 라인", "표준", "차트", " 그래픽 도구 " 및 " 차트 기간 "이 갑자기 사라지기 시작했습니다. 켜고 다음에 열면 터미널이 다시 비어있고 현재 차트만 있습니다.

수년 동안 처음으로 그런 카누를 만났고 어떻게해야할지 모르겠습니다. 알려주세요. 미리 감사드립니다.

터미널이 위치한 디렉토리에 대한 쓰기 권한에 문제가 있는 것 같습니다. 제한된 권한을 가진 사용자로 작업하는 경우 파일/폴더로 완전히 작업할 수 있는 디렉터리로 터미널을 전송합니다.

 
Vadens :

안녕하세요 사람들!

참고로 MT4에서 질문을 던질 수 있는 더 적합한 "창"을 찾지 못했습니다.

터미널을 열면 터미널 라인 "상태 라인", "표준", "차트", " 그래픽 도구 " 및 " 차트 기간 "이 갑자기 사라지기 시작했습니다. 켜고 다음에 열면 터미널이 다시 비어있고 현재 차트만 있습니다.

수년 동안 처음으로 그런 카누를 만났고 어떻게해야할지 모르겠습니다. 알려주세요. 미리 감사드립니다.

전체 화면 모드(F11)
 
Dmitry Belov :

그냥 하는건데 어떤 이유에서인지 ZigD[]를 출력하지 않고 ZigD를 추가하면 아예 출력이 안되고 주석처리 하면 모든게 출력됩니다

그리고 또 내 부주의...

지금은 달라졌으면 좋겠습니다 :)

그리고 댓글이 안빠지나요??? 이렇게 쓰는게 나을듯

     Comment ( "Средний размах = " ,SredRazmax/nn, "," ,ZigM[ 0 ], "," ,ZigM[ 1 ] , "\n" // Это перенос комментария на следующую строку
           , ZigD[ 0 ]);
 
Alexey Viktorov :

그리고 또 내 부주의...

지금은 달라졌으면 좋겠습니다 :)

그리고 댓글이 안뜨나요??? 이렇게 쓰는게 나을듯

덕분에 이미 스스로 알아낼 수 있었고 배열을 이중으로 초기화해야 했고 모두 작동했습니다. 여기 표시기 코드가 필요하면 표시되지만 아직 원시이고 더 많은 아이디어가 있습니다... 말해 보세요. 댓글을 왼쪽 하단 모서리 또는 중간 상단에 표시하는 방법을 알고 있나요???

 //+------------------------------------------------------------------+
//|                                                           01.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property strict
#property indicator_chart_window

#property indicator_buffers 3
#property indicator_color1 Red
#property indicator_width1 1

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+

extern int ExtDepth= 12 ;
extern int ExtDeviation= 5 ;
extern int ExtBackstep= 3 ;
extern int nn= 30 ;

int   ww= 0 , kk= 0 ;
int dd= 0 ;
double zz,SredRazmax, zzz, SredDlin;
double HZZ[], ZigM[];
double ZigD[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- indicator buffers mapping
   SetIndexBuffer ( 0 ,HZZ);
   SetIndexBuffer ( 1 ,ZigM);
   SetIndexBuffer ( 2 ,ZigD);
   SetIndexStyle ( 0 , DRAW_SECTION );
   SetIndexEmptyValue ( 0 , 0.0 );
   SredRazmax= 0.0 ;
   SredDlin= 0.0 ;
//---
   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[])
  {
//---
   int shift,limit;
//--- Первый вызов индикатора или смена таймфрейма или подгрузка данных из истории
   if (prev_calculated== 0 )
     {
      limit=rates_total- 1 ;
      SredRazmax= 0.0 ;
       ArrayInitialize (HZZ, 0.0 );
     }
   else limit=rates_total-prev_calculated+ 1 ;
   for (shift=limit; shift>= 0 ; shift--)
     {
      zz= iCustom ( NULL , 0 , "ZigZag" ,ExtDepth,ExtDeviation,ExtBackstep, 0 ,shift);
       if (zz> 0.0 )
        {
         HZZ[shift]=zz;
        }
     }
     for (ww = 0 ; ww <= Bars - 1 ; ww++)
  {
      zzz = iCustom ( NULL , 0 , "ZigZag" , ExtDepth, ExtDeviation, ExtBackstep, 0 , ww);
      
           if (zzz > 0.0 )   
           {
           ZigM[kk]=zzz;
            kk++; 
           ZigD[dd]=ww;
            dd++;  
            }
   }       
   
   // Расчет средних значений 
     for (kk= 0 ;kk<=nn;kk++)
     {
         if (ZigM[kk]>ZigM[kk+ 1 ]){SredRazmax+=(ZigM[kk]-ZigM[kk+ 1 ]);}
         if (ZigM[kk]<ZigM[kk+ 1 ]){SredRazmax+=(ZigM[kk]-ZigM[kk+ 1 ])*(- 1 );}
   //  if(IsStopped()) 
   //   break; 
     }
     for (dd= 0 ;dd<=nn;dd++)
     {
         if (ZigD[dd]> 0.0 ){SredDlin+=(ZigD[dd+ 1 ]-ZigD[dd]);}
         if ( IsStopped ()) 
     break ;
     } 
     Comment ( "Средний размах = " ,SredRazmax/nn, "//" , "Средняя продолжительность = " ,SredDlin/nn, "//" ,ZigM[ 0 ], "//" ,ZigM[ 1 ], "//" ,ZigD[ 0 ], "//" ,ZigD[ 1 ]);
     return ( 0 );
  }
   //+-  
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
Задавайте вопросы по техническому анализу, обсуждайте торговые системы и улучшайте свои навыки программирования торговых стратегий на языке MQL5. Общайтесь и обменивайтесь опытом на форуме с трейдерами всего мира и помогайте ответами новичкам — наше сообщество развивается вместе с вами. Машинное обучение в трейдинге: теория и практика...
 
Dmitry Belov :

덕분에 이미 스스로 알아낼 수 있었고 배열을 이중으로 초기화해야 했고 모두 작동했습니다. 여기 표시기 코드가 필요하면 표시되지만 아직 원시이고 더 많은 아이디어가 있습니다... 말해 보세요. 댓글을 왼쪽 하단 모서리 또는 중간 상단에 표시하는 방법을 알고 있나요???

그것은 불가능. OBJ_LABEL 그래픽 개체를 사용하는 경우에만