Participe de nossa página de fãs
Coloque um link para ele, e permita que outras pessoas também o avaliem
Avalie seu funcionamento no terminal MetaTrader 5
- Visualizações:
- 1707
- Avaliação:
- Publicado:
- 2016.06.24 12:22
- Atualizado:
- 2016.11.22 07:33
-
Precisa de um robô ou indicador baseado nesse código? Solicite-o no Freelance Ir para Freelance
Vantagens :
- 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.
- 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.
- Picos não suspensos
- Um método eficiente para localizar picos foi disponibilizado.
- Muito rápido
- Funciona corretamente pelas inserções do histórico e ao alternar os TFs.
- 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](https://c.mql5.com/i/code/script.png)
Analisa a cada hora os resultados do trabalho de sua estratégia (no histórico) .
![LRMA Fast Calculation](https://c.mql5.com/i/code/indicator.png)
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](https://c.mql5.com/i/code/script.png)
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](https://c.mql5.com/i/code/indicator.png)
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.