Ajuda na codificação... Como obter um indicador para filtrar em vez de alertar?

 

Isto produz um alerta quando o preço atinge uma linha superior ou inferior.

Quero permitir que as negociações sejam executadas até que elas se aproximem destas linhas. Quando o preço se aproxima demais, não permito que as negociações se abram.

Como faço para que essa lógica aconteça no(s) fechamento(s) atual(ais) de barras quando tudo o que está aqui são arrays?

for(int x=0; x<limit; x++) {

Xdown[x] = 0; Xup[x] = 0;

middle1[x] = iMA(NULL, 0, period, 0, MODE_EMA, PRICE_TYPICAL, x);// drawn line

middle2= iMA(NULL, 0, period, 0, MODE_SMA, PRICE_TYPICAL, x);// only used to calculate outer bands

avg = findAvg(period, x);

upper[x] = middle2 + (3.5*avg);

lower[x] = middle2 - (3.5*avg);

if (MathAbs(upper[x] - High[x]) < 2*Point)

{

Xdown[x] = upper[x];

if (NewBar() && x == 0)

Alert(Symbol()," ",Period()," reach upper edge");

}

if (MathAbs(lower[x] - Low[x]) < 2*Point)

{

Xup[x] = lower[x];

if (NewBar() && x == 0)

Alert(Symbol()," ",Period()," reach lower edge");

}

}

return(0);

}
 

Vejo que você está se esforçando, bem feito! Nesta fase eu sinto que o que você mais precisa é saber como se ajudar, então eu aconselharia usar a função "NAvigator->Search" da MQL _extensivamente_, você encontrará respostas para muitas de suas perguntas (a única coisa que se pode chamar de um indicador são os buffers, e isto é feito através do iCustom(); Objetos não são arrays etc. e muito mais). Por exemplo, uma busca por "array" ensinará que o índice de array da barra atual é 0, o índice de arrray da última barra é 1 e assim por diante.

Se as entradas da função de busca são todas esmagadoras, você provavelmente está tentando fazer coisas muito difíceis para você nesta fase. Acredito que a maioria dos exemplos acima são abordados no curso de iniciante do codersguru, por isso eu recomendaria uma segunda leitura.

Você também pode pegar uma simples EA, e tentar simplificá-la/modificá-la ligeiramente, que lhe ensinará como ela funciona. Uma vez feito, você pode tentar complexificá-lo.

Desculpe se eu estou fora do limite.

Agora, em geral, para trabalhar em Close price, você testa para a abertura de um novo bar e depois escreve suas condições no índice 1 dos arrays. Um possível código para detectar a Abertura de uma nova barra:

bool Nova Barra()

{

data/hora estática dt = 0;

se (Hora[0] != dt)

{

dt = Tempo[0];

return(true);

}

retorno(falso);

}

Espero que isto ajude, boa sorte.

 

Sim, você está no caminho certo.

Eu pararia tudo, e releria a programação do c++.

Infelizmente a orientação a objetos não é tão boa para mq4, então você terá que compensar com o básico.

Continue assim, amigo, você vai chegar lá.

 
Aaragorn:
Isto produz um alerta quando o preço atinge uma linha superior ou inferior.

Quero permitir que os negócios sejam executados até que eles se aproximem destas linhas. Quando o preço se aproxima demais, não permitir que as negociações sejam abertas.

Como faço para que essa lógica aconteça no(s) fechamento(s) atual(is) de barras, quando tudo o que está aqui são arrays?

Você pode ter isto como um exemplo. Está perto do que você quer obter. Tanto quanto posso ver, é o mesmo indicador que você está usando.

 
pipeline:
Vejo que você está se esforçando, bem feito! Nesta fase eu sinto que o que você mais precisa é saber como se ajudar, então eu aconselharia usar a função "NAvigator->Search" da MQL _extensivamente_, você encontrará respostas para muitas de suas perguntas (a única coisa que se pode chamar de um indicador são os buffers, e isto é feito através do iCustom(); Objetos não são arrays etc. e muito mais). Por exemplo, uma busca por "array" ensinará que o índice de array da barra atual é 0, o índice de arrray da última barra é 1 e assim por diante.

Se as entradas da função de busca são todas esmagadoras, você provavelmente está tentando fazer coisas muito difíceis para você nesta fase. Acredito que a maioria dos exemplos acima são abordados no curso de iniciante do codersguru, por isso eu recomendaria uma segunda leitura.

Você também pode pegar uma simples EA, e tentar simplificá-la/modificá-la ligeiramente, que lhe ensinará como ela funciona. Uma vez feito, você pode tentar complexificá-lo.

Desculpe se eu estou fora do limite.

Agora, em geral, para trabalhar em Close price, você testa para a abertura de um novo bar e depois escreve suas condições no índice 1 dos arrays. Um possível código para detectar a Abertura de uma nova barra:

bool Nova Barra()

{

data/hora estática dt = 0;

se (Hora[0] != dt)

{

dt = Tempo[0];

return(true);

}

retorno(falso);

}

Espero que isto ajude, boa sorte.

ok sobre essa função de busca...ela não devolve nada. Eu tentei usá-la várias vezes no metaeditor. Eu digito o que eu quero e carrego em "Return" e nada acontece, ou clico naquela pequena caixa ao lado da cadeia de busca e nada acontece. Eu só estava percebendo que a busca é uma busca esfarrapada porque não funciona de forma alguma. Estou me referindo ao recurso de busca na janela do metaeditor... existe algum protocolo para que funcione que eu não conheça?

 
fx-programmer:
Sim, você está no caminho certo.

Eu pararia tudo, e releria a programação do c++.

Infelizmente a orientação a objetos não é tão boa para mq4, então você terá que compensar com o básico.

Continue assim, amigo, você vai chegar lá.

obrigado pelo incentivo. o apoio moral conta. Você vê qual é meu objetivo teórico aqui? Você poderia sugerir um método melhor (o básico, como você o chama) para atingir este objetivo?

 
pipeline:

Agora, em geral, para trabalhar em Close price, você testa para a abertura de um novo bar e depois escreve suas condições no índice 1 dos arrays. Um possível código para detectar a Abertura de uma nova barra:

bool Nova Barra()

{

data/hora estática dt = 0;

se (Hora[0] != dt)

{

dt = Tempo[0];

return(true);

}

retorno(falso);

}

Espero que isto ajude, boa sorte.

quase ajuda se você souber o que quero dizer... assumindo que retorna verdadeiro, então o que, como tirar o valor do indicador da matriz no fechamento atual, agora que foi detectada a existência de uma nova barra?

 
 
Aaragorn:

Ontem à noite eu estava procurando no Google e encontrei isto...

http://www.gordago.com/?act=download

alguém tem alguma experiência com isto? é real?

Gordago não lida ou ainda não é capaz de lidar com indicadores personalizados. Isso é um grande inconveniente.

A única maneira de aprender a programação é se esforçar, como você está fazendo agora... aprendendo com exemplos. O material do Coders' Guru é ótimo para aprender.

Boa sorte,

Maji

 
Estou pensando hoje em dizer para o inferno com os indicadores e apenas ver se consigo criar algo que me permita fazer referência à maior alta e à menor baixa das barras anteriores(x).

Quanto mais eu olho para os indicadores, mais atraente parece ser....

ok vejo a alta() em variáveis pré-definidas. como posso usá-la para obter a maior alta das últimas 30 horas, por exemplo?

 

Escrever um indicador é uma coisa, e escrever um EA é outra coisa. Não os misture. Nos indicadores você também tem que lidar com a história para desenhá-la corretamente. Ao escrever um EA u tem apenas o tick atual e você tem que calcular os valores a cada tick (se você não quiser afrouxar uma profissão). Assim, para obter os valores da borda superior e inferior do tick CORRENTE, você pode fazer 2 coisas

  1. Use o indicador original como um indicador custome
  2. escreva a lógica do indicador dentro de sua EA

A 1ª opção não é difícil. Você tem que descobrir primeiro, qual é o índice tampão que utiliza para a linha superior e para a linha inferior.

encontre-o você tem que procurar no código indicador

SetIndexBuffer(0,superior);

SetIndexBuffer(1,meio1);

SetIndexBuffer(2,inferior);

como você pode ver a linha superior é índice 0, o meio é índice 1 e inferior é índice 2.

Agora que temos estas informações, temos que conhecer muitos parâmetros que o indicador possui. Para obter esta informação, você tem que procurar linhas que comecem com a palavra externa

Encontrei apenas 1 linha

período int externo = 34;

Agora, podemos usar o indicador como um indicador custome

double upLevel = iCustome(NULL,0, "Trend Bands", 34, 0, 0, 0);

duplo LowLevel = iCustome(NULL,0, "Bandas de Tendência", 34, 2, 0);

34 é o parâmetro para o indicador

0 é o índice de tampão (2 para o mais baixo)

o último 0 é o bar shift (na EA precisamos da corrente, então usamos o 0)

agora que você tem os valores superior e inferior, você pode verificá-los em relação ao preço

Espero que isso faça você progredir

Eli