Assista a como baixar robôs de negociação gratuitos
Encontre-nos em Twitter!
Participe de nossa página de fãs
Script interessante?
Coloque um link para ele, e permita que outras pessoas também o avaliem
Você gostou do script?
Avalie seu funcionamento no terminal MetaTrader 5
Indicadores

Ideal ZigZag - indicador para MetaTrader 4

Visualizações:
1722
Avaliação:
(20)
Publicado:
2016.06.24 12:22
Atualizado:
2016.11.22 07:33
Freelance MQL5 Precisa de um robô ou indicador baseado nesse código? Solicite-o no Freelance Ir para Freelance



Vantagens :

  1. A função mais cara é a iBarShift que substitui totalmente todos os ciclos no código que são necessários para a recuperação dos picos.
  2. Todas as informações necessárias para construir o ZZ para cada barra está acessível em todos os momentos e também para cada código externo.
  3. Picos não suspensos
  4. Um método eficiente para localizar picos foi disponibilizado.
  5. Muito rápido
  6. Funciona corretamente pelas inserções do histórico e ao alternar os TFs.
  7. Perfeito para uso num EA.


Desvantagens :

1. Necessidade de memória. Este indicador usa 5 buffers em vez de 2 (ou mesmo 1) em outras implementações semelhantes, mas (IMHO)é bom para vantagens números # 6 e # 7 acima. Nenhum dos ZigZags rápidos que tenho visto podem processar inserções do histórico sem a reconstrução completa. O meu faz isso. Além disso, ele faz de maneira eficiente.

2. Linhas adicionais estão disponíveis. Isso é necessário para tornar os dados visíveis a qualquer código externo. Estas linhas devem ser visíveis.


Princípio:

O ZZ é desenhado pelo princípio da canalização.

A largura do canal pode ser definido em Pontos (XLab_ZZ) ou em Percentagem (XLab_ZZP)


Picos de recuperação:

extern int ChannelWidth = 100;

#property indicator_chart_window
#property indicator_buffers 1

#property indicator_color1 Red
#property indicator_width1 3

datetime LastTime;

int init()
{
   LastTime = 0;
   
   return(0);
}

bool GetValue(double dir, int bar, int prevBar, double& peak, int& peakBar, datetime& peakTime)
{
   if (dir < 0)
   {
      datetime t = iCustom(Symbol(), 0, "XLab_ZZ", ChannelWidth, 2, bar);
      int i = iBarShift(Symbol(), 0, t);

      if (i == prevBar)
      {
         t = iCustom(Symbol(), 0, "XLab_ZZ", ChannelWidth, 2, bar + 1);
         i = iBarShift(Symbol(), 0, t);
      }

      double v = iCustom(Symbol(), 0, "XLab_ZZ", ChannelWidth, 1, i);
      
      if (v == EMPTY_VALUE)
      {
         t = iCustom(Symbol(), 0, "XLab_ZZ", ChannelWidth, 2, bar + 1);
         i = iBarShift(Symbol(), 0, t);
         v = iCustom(Symbol(), 0, "XLab_ZZ", ChannelWidth, 1, i);
      }
      
      peak = v;
      peakBar = i;
      peakTime = t;
   }
   else if (dir > 0)
   {
      t = iCustom(Symbol(), 0, "XLab_ZZ", ChannelWidth, 3, bar);
      i = iBarShift(Symbol(), 0, t);

      if (i == prevBar)
      {
         t = iCustom(Symbol(), 0, "XLab_ZZ", ChannelWidth, 3, bar + 1);
         i = iBarShift(Symbol(), 0, t);
      }

      v = iCustom(Symbol(), 0, "XLab_ZZ", ChannelWidth, 0, i);
      
      if (v == EMPTY_VALUE)
      {
         t = iCustom(Symbol(), 0, "XLab_ZZ", ChannelWidth, 3, bar + 1);
         i = iBarShift(Symbol(), 0, t);
         v = iCustom(Symbol(), 0, "XLab_ZZ", ChannelWidth, 0, i);
      }
      
      peak = v;
      peakBar = i;
      peakTime = t;
   }
   else 
   {
      return (false);
   }
   
   return (true);
}

int start()
{
   if (LastTime == Time[0]) return (0);
   LastTime = Time[0];
   
   double dir = iCustom(Symbol(), 0, "XLab_ZZ", ChannelWidth, 4, 1);
   double rdir = -dir;

   if (dir == EMPTY_VALUE) return (0);
   
   double v1, v2, v3, v4, v5;
   int    i1, i2, i3, i4, i5;
   datetime t1, t2, t3, t4, t5;
   
   GetValue(dir, 1, 0, v1, i1, t1);
   GetValue(rdir, i1, 0, v2, i2, t2);
   GetValue(dir, i2, i1, v3, i3, t3);
   GetValue(rdir, i3, i2, v4, i4, t4);
   GetValue(dir, i4, i3, v5, i5, t5);

   SetPt("1", v1, t1);
   SetPt("2", v2, t2);
   SetPt("3", v3, t3);
   SetPt("4", v4, t4);
   SetPt("5", v5, t5);
   
   Print(v1, "   ", v2, "  ", v3, "  ", v4, " ", v5, " ", i1, "  ", i2, "  ", i3, " ", i4, " ", i5);

   return(0);
}

void SetPt(string name, double price, datetime time)
{
   ObjectCreate(name, OBJ_ARROW, 0, time, price);
   ObjectSet(name, OBJPROP_ARROWCODE, 108);
   ObjectSet(name, OBJPROP_PRICE1, price);
   ObjectSet(name, OBJPROP_TIME1, time);
}

Este é o exemplo de um indicador que marca (uma vez por barra) os primeiros cinco picos (incluindo a corrente em formação)]

Atenção! Este código pode trabalhar incorretamente se o Modo da Barra 0th é ligado


Modo da Barra 0th:

É definido com a variável DrawZeroBar. Desativada por padrão.

Não é recomendado o uso desta opção, especialmente se o indicador é utilizado no EA


Divirta-se usando este indicador ;) . Sinta-se a vontade para fazer qualquer pergunta.

Se algum erro for encontrado, por favor me informe. Obrigado.

Traduzido do russo pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/ru/code/10671

s-PSI@CalculateProfitFromTime s-PSI@CalculateProfitFromTime

Analisa a cada hora os resultados do trabalho de sua estratégia (no histórico) .

LRMA Fast Calculation LRMA Fast Calculation

As idéias do artigo "3 Métodos de Indicadores de Aceleração Através do Exemplo da Regressão Linear" é implementado neste indicador.

s-PSI@Refresh_v.2.0 s-PSI@Refresh_v.2.0

O script (na ausência de comunicação) varrerá novamente o servidor, verificará página por página do histórico, emulando os ticks para os indicadores e experts.

VR---MOVING-AVERAGE VR---MOVING-AVERAGE

Uma versão melhorada do indicador padrão Moving Average, agora com qualquer quantidade de minutos você pode ver médias móveis em timeframe de maior tempo.