Ajuda na codificação - página 73

 

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

Arquivos anexados:
 

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

pearl1:
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 :

MA1.Buffer.0 = iRSI(NULL, 0, RSI1.Period, RSI1.Price, i); MA1.Buffer.1 = iRSI(NULL, 0, RSI1.Period, RSI1.Price, i+1);

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)

pearl1:
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);
 
pearl1:
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

pearl1:
aha, obrigado, mas este Buffers compara .... tudo com MA0.Buffer.0 ?
Razão: