Espero que alguém possa ajudar a conseguir um indicador para fazer o que eu gosto que ele faça.
Tenho um indicador que mostra o comprimento do corpo / ou o comprimento total da vela, mais o tempo da barra da vela.
A única coisa é que ele não é adequado para corretores de 5 dígitos; o tempo e o comprimento são projetados um sobre o outro enquanto que no Dígito 4 são perfeitos.
Seria muito bom que alguém fosse capaz e estivesse disposto a mudar o código.
Tenho trabalhado em um filtro TL para uma cruz MA EA, qualquer cruz MA EA, mas cravejando-o no anexo por ser um filtro simples.
Basicamente, a calculadora TL dá sinais 1, 2 ou 3 dependendo da direção TL e da cruz de preço e uma desagradável "divisão zero" se a TL não for suficientemente inclinada.
Estou aprendendo a codificar e ler todos os PDF's do Guru Coders e tanto quanto do fórum MQL4 quanto meu cérebro pode aguentar, mas como sou lento a aprender e mais novo a codificar qualquer coisa até 3 semanas atrás....
Procurando por algumas dicas....
Problema: Não consigo descobrir como chamar o valor "TLfilter" que é 3 quando o preço não tocou na TL e está OK para fazer uma compra.
Tentei colá-lo nos critérios de Compra/Venda como &&TTLfilter = 3!, e qualquer outro método que eu possa descobrir, mas tudo o que eu recebo então é nada de negócios.
Também tentei colocá-lo no circuito OrderSelect, mas sem sorte.
Apenas procurando por indicadores como no que estou perdendo.
Se alguém estiver interessado em dar uma olhada.
Desenhe uma TL no gráfico antes de anexar a EA e nomeie t6
Descomentar o //--- Imprimir ("TLfilter = ",TLfilter); retornar(TLfilter); na parte inferior da seção TL para ver o que ele está fazendo.
Os mod's para esta EA são marcados por linha dupla ======= 1 2 e 3
Editar: Nenhum dos meus códigos neste aqui, pois queria ter certeza de que fosse o mais limpo possível x_trader_v2_tlmod.mq4
Se você vê lá embaixo, parece um indicador de "barra de liberdade"... então... Quero mudar estes indicadores de entrada, não quero usar 4ema.... Eu quero 1ema( 2 cruzamento ), CCI, STOCH e SAR
Encontro alguns multiindicadores, mas eles não tinham uma história como esta
Pelo que posso ver pode ser feito, basta entrar na chamada substituindo as outras 3 médias móveis pelos indicadores que você deseja usar junto com as condições para sinalizar.
MA0.Buffer.0 = iMA(NULL, 0, 1, 0, MODE_SMA, PRICE_MEDIAN, i); eu não presto aqui.... ele sempre compara com este MA0.Buffer.0....so, se eu usar RSI, Stoch,... devo criar este buffer para todos os elementos? RSI0.Buffer.0 para RSI?
Você não precisa criar um buffer para todos os elementos.
MA1.Buffer.0, MA1.Buffer.1, .... não são buffers, mas variáveis simples. Você pode usá-las para qualquer coisa sem alterar seus nomes. Se você quiser usá-lo, por exemplo, para rsi, você pode mudar o código para algo como isto :
MA0.Buffer.0 = iMA(NULL, 0, 1, 0, MODE_SMA, PRICE_MEDIAN, i); eu não presto aqui.... ele sempre compara com este MA0.Buffer.0....so, se eu usar RSI, Stoch,... devo criar este buffer para todos os elementos? RSI0.Buffer.0 para RSI?
Basta substituir as chamadas IMA() pelas chamadas que você deseja (como o iRSI() do exemplo que lhe dei) e elas devem funcionar, Não há necessidade de substituir os nomes das variáveis
pearl1: aha, obrigado, mas este Buffers compara .... tudo com MA0.Buffer.0 ?
Olá,
Espero que alguém possa ajudar a conseguir um indicador para fazer o que eu gosto que ele faça.
Tenho um indicador que mostra o comprimento do corpo / ou o comprimento total da vela, mais o tempo da barra da vela.
A única coisa é que ele não é adequado para corretores de 5 dígitos; o tempo e o comprimento são projetados um sobre o outro enquanto que no Dígito 4 são perfeitos.
Seria muito bom que alguém fosse capaz e estivesse disposto a mudar o código.
Obrigado de antemão,
Cumprimentos,
Ben
Faltando algo simples
Tenho trabalhado em um filtro TL para uma cruz MA EA, qualquer cruz MA EA, mas cravejando-o no anexo por ser um filtro simples.
Basicamente, a calculadora TL dá sinais 1, 2 ou 3 dependendo da direção TL e da cruz de preço e uma desagradável "divisão zero" se a TL não for suficientemente inclinada.
Estou aprendendo a codificar e ler todos os PDF's do Guru Coders e tanto quanto do fórum MQL4 quanto meu cérebro pode aguentar, mas como sou lento a aprender e mais novo a codificar qualquer coisa até 3 semanas atrás....
Procurando por algumas dicas....
Problema: Não consigo descobrir como chamar o valor "TLfilter" que é 3 quando o preço não tocou na TL e está OK para fazer uma compra.
Tentei colá-lo nos critérios de Compra/Venda como &&TTLfilter = 3!, e qualquer outro método que eu possa descobrir, mas tudo o que eu recebo então é nada de negócios.
Também tentei colocá-lo no circuito OrderSelect, mas sem sorte.
Apenas procurando por indicadores como no que estou perdendo.
Se alguém estiver interessado em dar uma olhada.
Desenhe uma TL no gráfico antes de anexar a EA e nomeie t6
Descomentar o //--- Imprimir ("TLfilter = ",TLfilter); retornar(TLfilter); na parte inferior da seção TL para ver o que ele está fazendo.
Os mod's para esta EA são marcados por linha dupla ======= 1 2 e 3
Editar: Nenhum dos meus códigos neste aqui, pois queria ter certeza de que fosse o mais limpo possível
x_trader_v2_tlmod.mq4
multiindicador
Hi!
Alguém usa/tem um multiindicador como este?
Média Móvel Múltipla - Base de Código MQL4
Se você vê lá embaixo, parece um indicador de "barra de liberdade"... então... Quero mudar estes indicadores de entrada, não quero usar 4ema.... Eu quero 1ema( 2 cruzamento ), CCI, STOCH e SAR
Encontro alguns multiindicadores, mas eles não tinham uma história como esta
alguém pode ajudar e mudar o código?
Oi Pearl1,
Pelo que posso ver pode ser feito, basta entrar na chamada substituindo as outras 3 médias móveis pelos indicadores que você deseja usar junto com as condições para sinalizar.
Eu estava tentando algo, mas nenhum progresso
Por que você não publica o que codificou até o momento e explica o que está tentando fazer? Dessa forma, alguém poderia ajudá-lo
Eu estava tentando algo, mas nenhum progresso
int start()
{
//----
int Counted.Bars = IndicatorCounted(), i;
if(Contado.Bars<0) retorno(-1);
if(Contado.Bars>0) Contado.Bars--;
int Limit = Bars - Contado.Bars;
cor Texto.Cor.1, Texto.Cor.2, Texto.Cor.3, Texto.Cor.4;
//----
for(i=Limit; i>=0; i--)
{
MA0.Buffer.0 = iMA(NULL, 0, 1, 0, MODE_SMA, PRICE_MEDIAN, i); eu não presto aqui.... ele sempre compara com este MA0.Buffer.0....so, se eu usar RSI, Stoch,... devo criar este buffer para todos os elementos? RSI0.Buffer.0 para RSI?
//----
MA1.Buffer.0 = iMA(NULL, 0, MA1.Period, 0, MA1.Mode, MA1.Price, i);
MA1.Buffer.1 = iMA(NULL, 0, MA1.Período, 0, MA1.Modo, MA1.Preço, i+1);
MA2.Buffer.0 = iMA(NULL, 0, MA2.Período, 0, MA2.Modo, MA2.Modo, MA2.Preço, i);
MA2.Buffer.1 = iMA(NULL, 0, MA2.Período, 0, MA2.Modo, MA2.Modo, MA2.Preço, i+1);
MA3.Buffer.0 = iMA(NULL, 0, MA3.Período, 0, MA3.Modo, MA3.Modo, MA3.Preço, i);
MA3.Buffer.1 = iMA(NULL, 0, MA3.Período, 0, MA3.Modo, MA3.Modo, MA3.Preço, i+1);
MA4.Buffer.0 = iMA(NULL, 0, MA4.Período, 0, MA4.Modo, MA4.Modo, MA4.Preço, i);
MA4.Buffer.1 = iMA(NULL, 0, MA4.Período, 0, MA4.Modo, MA4.Modo, MA4.Preço, i+1);
MA1.UP.Buffer = EMPTY_VALUE;
MA1.DN.Buffer = EMPTY_VALUE;
if(MA1.Buffer.0 < MA1.Buffer.1) MA1.DN.Buffer = Gap * P1.Posição + 1.0;
else MA1.UP.Buffer = Gap * P1.Posição + 1.0;
if(MA1.Buffer.0 < MA0.Buffer.0) Texto.Color.1 = Texto.Color.Up;
else Text.Color.1 = Text.Color.Down;
//----
MA2.UP.Buffer = EMPTY_VALUE;
MA2.DN.Buffer = EMPTY_VALUE;
if(MA2.Buffer.0 < MA2.Buffer.1) MA2.DN.Buffer = Gap * P2.Posição + 1.0;
else MA2.UP.Buffer = Gap * P2.Posição + 1.0;
if(MA2.Buffer.0 < MA0.Buffer.0) Texto.Color.2 = Texto.Color.Up;
else Text.Color.2 = Text.Color.Down;
//----
MA3.UP.Buffer = EMPTY_VALUE;
MA3.DN.Buffer = EMPTY_VALUE;
if(MA3.Buffer.0 < MA3.Buffer.1) MA3.DN.Buffer = Gap * P3.Posição + 1.0;
else MA3.UP.Buffer = Gap * P3.Posição + 1.0;
if(MA3.Buffer.0 < MA0.Buffer.0) Texto.Color.3 = Texto.Color.Up;
else Text.Color.3 = Text.Color.Down;
//----
MA4.UP.Buffer = EMPTY_VALUE;
MA4.DN.Buffer = EMPTY_VALUE;
if(MA4.Buffer.0 < MA4.Buffer.1) MA4.DN.Buffer = Gap * P4.Posição + 1.0;
else MA4.UP.Buffer = Gap * P4.Position + 1.0;
if(MA4.Buffer.0 < MA0.Buffer.0) Texto.Color.4 = Texto.Color.Up;
else Text.Color.4 = Text.Color.Down;
//----
//----
LabelSet(Texto.Color.1, Texto.Color.2, Texto.Color.3, Texto.Color.4);
//----
}
//----
retorno(0);
Você não precisa criar um buffer para todos os elementos.
MA1.Buffer.0, MA1.Buffer.1, .... não são buffers, mas variáveis simples. Você pode usá-las para qualquer coisa sem alterar seus nomes. Se você quiser usá-lo, por exemplo, para rsi, você pode mudar o código para algo como isto :
sem a necessidade de alterar os nomes das variáveis e funcionará (basta definir RSI1.Period e RSI1.Price neste caso como parâmetros externos)
int start()
{
//----
int Counted.Bars = IndicatorCounted(), i;
if(Contado.Bars<0) retorno(-1);
if(Contado.Bars>0) Contado.Bars--;
int Limit = Bars - Contado.Bars;
cor Texto.Cor.1, Texto.Cor.2, Texto.Cor.3, Texto.Cor.4;
//----
for(i=Limit; i>=0; i--)
{
MA0.Buffer.0 = iMA(NULL, 0, 1, 0, MODE_SMA, PRICE_MEDIAN, i); eu não presto aqui.... ele sempre compara com este MA0.Buffer.0....so, se eu usar RSI, Stoch,... devo criar este buffer para todos os elementos? RSI0.Buffer.0 para RSI?
//----
MA1.Buffer.0 = iMA(NULL, 0, MA1.Period, 0, MA1.Mode, MA1.Price, i);
MA1.Buffer.1 = iMA(NULL, 0, MA1.Período, 0, MA1.Modo, MA1.Preço, i+1);
MA2.Buffer.0 = iMA(NULL, 0, MA2.Período, 0, MA2.Modo, MA2.Modo, MA2.Preço, i);
MA2.Buffer.1 = iMA(NULL, 0, MA2.Período, 0, MA2.Modo, MA2.Modo, MA2.Preço, i+1);
MA3.Buffer.0 = iMA(NULL, 0, MA3.Período, 0, MA3.Modo, MA3.Modo, MA3.Preço, i);
MA3.Buffer.1 = iMA(NULL, 0, MA3.Período, 0, MA3.Modo, MA3.Modo, MA3.Preço, i+1);
MA4.Buffer.0 = iMA(NULL, 0, MA4.Período, 0, MA4.Modo, MA4.Modo, MA4.Preço, i);
MA4.Buffer.1 = iMA(NULL, 0, MA4.Período, 0, MA4.Modo, MA4.Modo, MA4.Preço, i+1);
MA1.UP.Buffer = EMPTY_VALUE;
MA1.DN.Buffer = EMPTY_VALUE;
if(MA1.Buffer.0 < MA1.Buffer.1) MA1.DN.Buffer = Gap * P1.Posição + 1.0;
else MA1.UP.Buffer = Gap * P1.Posição + 1.0;
if(MA1.Buffer.0 < MA0.Buffer.0) Texto.Color.1 = Texto.Color.Up;
else Text.Color.1 = Text.Color.Down;
//----
MA2.UP.Buffer = EMPTY_VALUE;
MA2.DN.Buffer = EMPTY_VALUE;
if(MA2.Buffer.0 < MA2.Buffer.1) MA2.DN.Buffer = Gap * P2.Posição + 1.0;
else MA2.UP.Buffer = Gap * P2.Posição + 1.0;
if(MA2.Buffer.0 < MA0.Buffer.0) Texto.Color.2 = Texto.Color.Up;
else Text.Color.2 = Text.Color.Down;
//----
MA3.UP.Buffer = EMPTY_VALUE;
MA3.DN.Buffer = EMPTY_VALUE;
if(MA3.Buffer.0 < MA3.Buffer.1) MA3.DN.Buffer = Gap * P3.Posição + 1.0;
else MA3.UP.Buffer = Gap * P3.Posição + 1.0;
if(MA3.Buffer.0 < MA0.Buffer.0) Texto.Color.3 = Texto.Color.Up;
else Text.Color.3 = Text.Color.Down;
//----
MA4.UP.Buffer = EMPTY_VALUE;
MA4.DN.Buffer = EMPTY_VALUE;
if(MA4.Buffer.0 < MA4.Buffer.1) MA4.DN.Buffer = Gap * P4.Posição + 1.0;
else MA4.UP.Buffer = Gap * P4.Posição + 1.0;
if(MA4.Buffer.0 < MA0.Buffer.0) Texto.Color.4 = Texto.Color.Up;
else Text.Color.4 = Text.Color.Down;
//----
//----
LabelSet(Texto.Color.1, Texto.Color.2, Texto.Color.3, Texto.Color.4);
//----
}
//----
retorno(0);int start()
{
//----
int Counted.Bars = IndicatorCounted(), i;
if(Contado.Bars<0) retorno(-1);
if(Contado.Bars>0) Contado.Bars--;
int Limit = Bars - Contado.Bars;
cor Texto.Cor.1, Texto.Cor.2, Texto.Cor.3, Texto.Cor.4;
//----
for(i=Limit; i>=0; i--)
{
MA0.Buffer.0 = iMA(NULL, 0, 1, 0, MODE_SMA, PRICE_MEDIAN, i);
//----
MA1.Buffer.0 = iMA(NULL, 0, MA1.Period, 0, MA1.Mode, MA1.Price, i);
MA1.Buffer.1 = iMA(NULL, 0, MA1.Período, 0, MA1.Modo, MA1.Preço, i+1);
MA2.Buffer.0 = iMA(NULL, 0, MA2.Período, 0, MA2.Modo, MA2.Modo, MA2.Preço, i);
MA2.Buffer.1 = iMA(NULL, 0, MA2.Período, 0, MA2.Modo, MA2.Modo, MA2.Preço, i+1);
MA3.Buffer.0 = iMA(NULL, 0, MA3.Período, 0, MA3.Modo, MA3.Modo, MA3.Preço, i);
MA3.Buffer.1 = iMA(NULL, 0, MA3.Período, 0, MA3.Modo, MA3.Modo, MA3.Preço, i+1);
MA4.Buffer.0 = iMA(NULL, 0, MA4.Período, 0, MA4.Modo, MA4.Modo, MA4.Preço, i);
MA4.Buffer.1 = iMA(NULL, 0, MA4.Período, 0, MA4.Modo, MA4.Modo, MA4.Preço, i+1);
MA1.UP.Buffer = EMPTY_VALUE;
MA1.DN.Buffer = EMPTY_VALUE;
if(MA1.Buffer.0 < MA1.Buffer.1) MA1.DN.Buffer = Gap * P1.Posição + 1.0;
else MA1.UP.Buffer = Gap * P1.Posição + 1.0;
if(MA1.Buffer.0 < MA0.Buffer.0) Texto.Color.1 = Texto.Color.Up;
else Text.Color.1 = Text.Color.Down;
//----
MA2.UP.Buffer = EMPTY_VALUE;
MA2.DN.Buffer = EMPTY_VALUE;
if(MA2.Buffer.0 < MA2.Buffer.1) MA2.DN.Buffer = Gap * P2.Posição + 1.0;
else MA2.UP.Buffer = Gap * P2.Posição + 1.0;
if(MA2.Buffer.0 < MA0.Buffer.0) Texto.Color.2 = Texto.Color.Up;
else Text.Color.2 = Text.Color.Down;
//----
MA3.UP.Buffer = EMPTY_VALUE;
MA3.DN.Buffer = EMPTY_VALUE;
if(MA3.Buffer.0 < MA3.Buffer.1) MA3.DN.Buffer = Gap * P3.Posição + 1.0;
else MA3.UP.Buffer = Gap * P3.Posição + 1.0;
if(MA3.Buffer.0 < MA0.Buffer.0) Texto.Color.3 = Texto.Color.Up;
else Text.Color.3 = Text.Color.Down;
//----
MA4.UP.Buffer = EMPTY_VALUE;
MA4.DN.Buffer = EMPTY_VALUE;
if(MA4.Buffer.0 < MA4.Buffer.1) MA4.DN.Buffer = Gap * P4.Posição + 1.0;
else MA4.UP.Buffer = Gap * P4.Position + 1.0;
if(MA4.Buffer.0 < MA0.Buffer.0) Texto.Color.4 = Texto.Color.Up;
else Text.Color.4 = Text.Color.Down;
//----
//----
LabelSet(Texto.Color.1, Texto.Color.2, Texto.Color.3, Texto.Color.4);
//----
}
//----
retorno(0);aha, obrigado, mas este Buffers compara .... tudo com MA0.Buffer.0 ?
Basta substituir as chamadas IMA() pelas chamadas que você deseja (como o iRSI() do exemplo que lhe dei) e elas devem funcionar, Não há necessidade de substituir os nomes das variáveis
aha, obrigado, mas este Buffers compara .... tudo com MA0.Buffer.0 ?