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

[Excluído]  

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

}
[Excluído]  

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.

[Excluído]  
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?

[Excluído]  
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?

[Excluído]  
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?

[Excluído]  
[Excluído]  
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

[Excluído]  
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