Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 699

 
Dmitry Belov:

Olá, você poderia me dizer por que ZigD[0] não é emitido em algum momento?

O ZigM[0] funciona?

 
Alexey Viktorov:

O ZigM[0] produz?

Sim, faz...


	          
 
Dmitry Belov:

Sim, faz...

Desculpe, eu não olhei o código com cuidado...

Quando zzz>0 significa que o valor pode ser igual a uma barra alta ou baixa. Respectivamente, este valor deve ser verificado em relação a estes valores e dependendo do resultado colocado em uma ou outra matriz.

 
Alexey Viktorov:

Desculpe, eu não olhei o código com cuidado...

Quando zzz>0, significa que o valor pode ser igual tanto à barra alta quanto à barra baixa. Assim, este valor deve ser verificado em relação a estes valores e dependendo do resultado colocado em uma ou outra matriz.

Eu o faço, mas por alguma razão ele não produz ZigD[] e não produz nada se eu adicionar ZigD, se eu comentar, ele produz tudo.

//+------------------------------------------------------------------+
//|                                                           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);
  }
  //+-  
 

Olá Gente!

Não consegui encontrar uma "janela" mais adequada para responder a uma pergunta no MT4.

Ao abrir o terminal, a "linha de status", "padrão", "gráficos","instrumentos gráficos" e"períodos gráficos" desaparecem repentinamente. Eu o desligo e da próxima vez que o abro novamente recebo um terminal em branco, apenas a tabela atual.

Nunca tinha visto um bicho assim antes e não sei o que fazer. Por favor, me aconselhem. Eu não sei o que fazer.

 
Vadens:

Olá Gente!

Não consegui encontrar uma "janela" mais adequada para responder a uma pergunta no MT4.

Ao abrir o terminal, a "linha de status", "padrão", "gráficos","instrumentos gráficos" e"períodos gráficos" desaparecem repentinamente. Eu o desligo e da próxima vez que o abro novamente recebo um terminal em branco, apenas a tabela atual.

Nunca tinha visto um bicho assim antes e não sei o que fazer. Por favor, me aconselhem. Eu não sei o que fazer.

Parece que você tem um problema com as permissões de escrita no diretório onde está localizado o terminal. Se você estiver rodando como um usuário restrito, mova o terminal para um diretório onde você possa acessar arquivos/pastas.

 
Vadens:

Olá Gente!

Não consegui encontrar uma "janela" mais adequada para responder a uma pergunta no MT4.

Ao abrir o terminal, a "linha de status", "padrão", "gráficos","instrumentos gráficos" e"períodos gráficos" desaparecem repentinamente. Eu o desligo e da próxima vez que o abro novamente recebo um terminal em branco, apenas a tabela atual.

Nunca tinha visto um bicho assim antes e não sei o que fazer. Por favor, me aconselhem. Eu não sei o que fazer.

Você tem o modo tela cheia (F11)
 
Dmitry Belov:

Eu faço isso, mas por alguma razão ele não produz ZigD[] e não produz nada se eu adicionar ZigD, se eu comentar, ele produz tudo

Novamente, minha desatenção...

Espero que agora seja diferente :)))

O comentário não pestaneja???? É melhor escrevê-lo assim

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

Mais uma vez, minha desatenção...

Espero que agora seja diferente :)))

O comentário não pestaneja???? É melhor escrevê-lo assim.

Obrigado, eu mesmo já descobri, eu só precisava inicializar a matriz como dupla e funcionou. Aqui está o código de indicador se você quiser, mas ainda está cru, tenho mais idéias... Diga-me, você sabe como você pode exibir um objeto no canto inferior esquerdo ou no meio, no topo?

//+------------------------------------------------------------------+
//|                                                           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:

Obrigado, eu mesmo consegui descobrir, eu só precisava inicializar a matriz como um duplo e tudo funcionou. Aqui está o código indicador, se você quiser, mas ainda está cru, há mais idéias... Diga-me, você sabe como você pode exibir o objeto no canto inferior esquerdo ou no meio, no topo?

Isso não é possível. Somente se você usar o objeto gráfico OBJ_LABEL
Razão: