Ajuda na codificação... Como obter um indicador para filtrar em vez de alertar? - página 4

 
Aaragorn:
Eu resumi tudo a isto...mas espere...

se isto for apenas usar a média móvel simples desta barra multiplicada por 3,5 para encontrar um ponto alto. Como é possível que o ponto possa chegar a isso? o valor da linha não está sendo calculado a partir da mesma barra que teria que tocá-la para sinalizar? À medida que a barra sobe, a linha da borda também sobe???

Média móvel se calculada a partir de mais de 1 barra para que a linha possa ser de 1 valor e o preço de outro

 
elihayun:
Se você quiser saber se a linha superior está próxima do preço, uma maneira de descobrir é se a diferença entre eles é pequena (digamos 2 pontos).

Não me importa (o que não é uma boa idéia) se o preço é abaixo ou acima da linha. Para mim, 2 pontos de distância é tudo o que é preciso, então a diferença é

superior - Alta nos dará a diferença, mas não em pontos (é algo como 0,0004 ou -0,0004) . Para garantir que a diferença seja positiva, estamos usando o MathAbs de finção que retorna o valor absoluto (positivo). Agora temos que verificar se é menos de 2 pontos. a palavra reservada Ponto retornará o valor quando o preço subir com 1 pip. É diferente com cada par.

Colocar tudo junto

se (MathAbs(superior - alto) < 2*Point) significa se o diferente é menos de 2 pips, e para nós está perto o suficiente

Na verdade, usar a Alta não é bom, porque a Alta talvez acima, mas o preço atual está muito longe. Temos que usar Ask ao invés de High (no indicador temos que usar Close[x])

Para garantir que o preço esteja acima da linha, podemos fazer isso

if ((Ask > upper) && (Ask - upper < 2 * Point))

.....(alert or open a trade)

[/PHP]

você é muito bom para responder a tantas das minhas perguntas, espero não estar desgastando você Estou ansioso para aprender.

Eu entendo o valor absoluto. Eu me pergunto o que mudaria usar a pergunta em vez do fechamento? não seria bom usar o fechamento? ou isso faria muita diferença? a única coisa que ainda me confunde é os 2 * pontos do lado da segunda condição. O ponto não seria multiplicado por 2? Estou interperetando o símbolo '*' errado ou é o símbolo da multiplicação?

Vejo que a pergunta acima dá a diferença entre a linha superior e o valor atual da pergunta. mas multiplicar o ponto por 2? Não tenho certeza do que isso resultaria em que poderia ser usado para comparação.

poderia fazer isso para permitir compras somente quando o sinal ocorrer abaixo da minha tolerância de compra filtrada?

[php]

duplo longrange externo = 25; //- a proximidade permitida para se aproximar da linha de banda superior antes de desautorizar as compras

curto-circuito duplo externo = 20; //- a proximidade permitida para se aproximar da linha de fundo antes de desautorizar as vendas

// ENTRY

if(total < 2 || isNewSumbol(Symbol())) //I também modificaram a condição de se: era total<1 (ouBanAway aka cucurucu)

{

duplo HedgeLots = (HedgePercent/100)*Lots; //calcule os lotes para a posição coberta

if(isCrossed == 1 && Ask < upper-longrange)

{

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);

mais

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Imprimir("Pedido aberto : ",OrderOpenPrice());

}

else Print("Erro na abertura do pedido de compra : ",GetLastError());
 

u está faltando uma coisa. Para entender o ponto, imagine isto

em USDJPY o preço é 114,95 e em EURUSD o preço é 1,2773

então em USDJPY Ask - superior será como : 114.95 - 114.93 = 0.02

e em EURUSD o preço será de 1,2773 - 1,2771 = 0,0002

Ambos são 2 pontos, mas em precisão diferente, então em USDJPY temos que multiplicar 2 por 0,01 e em EURUSD temos que multiplicar por 0,0001 e em cada par é exatamente a isto que o Ponto é igual.

 
elihayun:
Média móvel se calculada a partir de mais de 1 barra para que a linha possa ser de 1 valor e o preço de outra

exatamente! como pode ser uma média de apenas uma barra?

//----------channel filter

int x = 0;

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

double avg;

avg = findAvg(back, x);

double upper = middle2 + (3.5*avg);

double lower = middle2 - (3.5*avg); [/PHP]

I don't see how this works....also the compiler say, 'findAvg' - function is not defined

it's looking for the shift value x which is zero so that is only going to be the current bar right? So what is it averaging?

ok let me see what might be...if i'm telling it to go 'back' 300 periods that is what it's averaging is 300 periods. ok i get it now i think....

now about the undefined function error? what do I do about that? just get rid of it as unnecessary?

[PHP]//----------channel filter

int x = 0;

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

double avg;

avg = (back, x);

double upper = middle2 + (3.5*avg);

double lower = middle2 - (3.5*avg);
 
elihayun:
u está faltando uma coisa. Para entender o ponto, imagine isto

em USDJPY o preço é 114,95 e em EURUSD o preço é 1,2773

então em USDJPY Ask - superior será como : 114.95 - 114.93 = 0.02

e em EURUSD o preço será de 1,2773 - 1,2771 = 0,0002

Ambos são 2 pontos, mas em precisão diferente, então em USDJPY temos que multiplicar 2 por 0,01 e em EURUSD temos que multiplicar por 0,0001 e em cada par é exatamente a isto que o Ponto é igual.

ok vejo o problema...o que quero fazer é criar uma barreira baseada na proximidade das linhas superior e inferior além da qual não serão permitidas negociações.

-por isso, primeiro eu recebo o valor atual da linha.

-então eu adiciono ou subtraio a distância que quero definir como intolerável para negociar como um inteiro que considero ser 1=1 movimento de pip.

-então, tenho que obter o valor de onde está o preço de cada tick para fazer a condição de comparação

então esta linha deve ser algo além de "price_Typical".

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

não tenho certeza de como evitar que as diferentes precisões causem um problema. Tudo o que quero fazer é comparar o movimento do preço relativo ao movimento da linha que vai especificar "não negocie muito acima deste nível" ou "não negocie pouco abaixo deste nível".

Estou pronto para uma quebra que meu cérebro transformou em papa.

 

PRICE_TYPICAL não tem nada a ver com isso. u pode ler sobre isso na ajuda da MQL4

tudo o que você tem que fazer para descobrir a diferença entre o preço e a linha é subtrair uma da outra. Como eu disse, o problema é que às vezes você recebe 0,0006 e às vezes você recebe 0,06 e isso o Ponto está resolvendo.

(tenho que fechar agora. podemos continuar amanhã)

 
elihayun:
u está faltando uma coisa. Para entender as coisas de Point imagine isto

em USDJPY o preço é 114,95 e em EURUSD o preço é 1,2773

então em USDJPY Ask - superior será como : 114.95 - 114.93 = 0.02

e em EURUSD o preço será de 1,2773 - 1,2771 = 0,0002

Ambos são 2 pontos, mas em precisão diferente, então em USDJPY temos que multiplicar 2 por 0,01 e em EURUSD temos que multiplicar por 0,0001 e em cada par é exatamente a isto que o Ponto é igual.

então ponto é como rastrear o movimento da tubulação em cada par, independentemente da diferente precisão necessária?

 
elihayun:
PRICE_TYPICAL não tem nada a ver com isso. u pode ler sobre isso na ajuda da MQL4

tudo o que você tem que fazer para descobrir a diferença entre o preço e a linha é subtrair uma da outra. Como eu disse, o problema é que às vezes você recebe 0,0006 e às vezes você recebe 0,06 e isso o Ponto está resolvendo.

(tenho que fechar agora. podemos continuar amanhã)

muito obrigado por sua paciência e incentivo

 

Isto é o que eu fiz....

//----------channel filter

double upLevel = iCustom(NULL,TF, "Trend Bands v2", back, 0, 0);

double LowLevel = iCustom(NULL,TF, "Trend Bands v2", back, 2, 0);

// ENTRY

if(total < 2 || isNewSumbol(Symbol())) //I have modified the if condition too: it was total<1 (orBanAway aka cucurucu)

{

double HedgeLots = (HedgePercent/100)*Lots; //calculates the Lots for the hedged position

if(isCrossed == 1 && Ask < upLevel-longrange)

{

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);

else

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());

}

else Print("Error opening BUY order : ",GetLastError());

//###################################################################### the added code starts here

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_SELL,HedgeLots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,comment,MAGICMA,0,Red);

else

ticket=OrderSend(Symbol(),OP_SELL,HedgeLots,Bid,3,0,Bid-TakeProfit*Point,comment,MAGICMA,0,Red);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());

}

else Print("Error opening SELL order : ",GetLastError());

//###################################################################### ends here

return(0);

}

if(isCrossed == 2 && Ask > LowLevel + shortrange)

{

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,comment,MAGICMA,0,Red);

else

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,comment,MAGICMA,0,Red);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());

}

else Print("Error opening SELL order : ",GetLastError());

//###################################################################### the added code starts here

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_BUY,HedgeLots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);

else

ticket=OrderSend(Symbol(),OP_BUY,HedgeLots,Ask,3,0,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());

}

else Print("Error opening BUY order : ",GetLastError());

//###################################################################### ends here

return(0);

}

return(0);

}

return(0);

}

return(0);

}

}

//+------------------------------------------------------------------+[/PHP]

this is what I got from the tester....

[PHP]2006.06.30 11:18:09 2006.06.06 14:00 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:09 2006.06.06 12:14 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:09 2006.06.06 10:26 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:09 2006.06.05 22:47 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:09 2006.06.05 09:00 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 11:18:09 2006.06.05 08:41 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 11:18:09 2006.06.05 07:30 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 11:18:09 2006.06.05 07:29 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 11:18:08 2006.06.02 19:55 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 11:18:08 2006.06.01 11:27 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:08 2006.06.01 06:45 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:08 2006.06.01 04:00 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:08 2006.06.01 02:44 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:08 2006.06.01 00:37 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:00 2006.05.31 04:00 Trend Bands v2 EURUSD,M30: loaded successfully

2006.06.30 11:18:00 EMA_CROSSv5 EURUSD,M5: Tester comment: ----------------------------------------

TakeProfit=10 | TrailingStop=20 | StopLoss=20 | UseStopLoss=False

----------------------------------------

immediate_trade=True | reversal=False

----------------------------------------

Lots=1 | MM=True | Risk=10%

----------------------------------------

2006.06.30 11:18:00 EMA_CROSSv5 inputs: TakeProfit=10; TrailingStop=20; StopLoss=20; ShortEma=1; LongEma=5; Lots=1; HedgePercent=1; StartHour=0; StopHour=23; Risk=10; MAGICMA=20060301; longrange=1; shortrange=1; back=30; TF=30;

2006.06.30 11:17:35 EMA_CROSSv5: loaded successfully

o relatório mostra que obteve as configurações, mas ocultou....

Obviamente que não permite negociações, mas TODAS elas? Acho isso difícil de acreditar quando eu só defino os intervalos longo e curto para 1 !! Certamente havia ALGUM sinal de negociação dentro desse intervalo... Eu não acho que isto esteja fazendo o que eu pretendia.

Arquivos anexados:
mac5.htm  5 kb
 

Mudei o indicador de bandas de tendência para que seja mais flexível

extern int period = 34;

extern int factor = 8;

avg = findAvg(period, x);

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

lower[x] = middle2 - (factor*avg);[/PHP]

then i did this to the EA

//---- Trend Bands v2 and Filter Parameters

extern double back = 300; //--how many periods back for the custom indicator to average

extern double bandwidth = 6; //--how wide the trend bands are

extern double TF = 30; //--which bar period for the custom indicator to use

//----------channel filter

double upLevel = iCustom(NULL,TF, "Trend Bands v3", back, bandwidth, 0, 0);

double LowLevel = iCustom(NULL,TF, "Trend Bands v3", back, bandwidth, 2, 0);

I got this from the tester...(slightly abbreviated report)..

[PHP]2006.06.30 12:10:38 2006.06.29 23:59 Trend Bands v3 EURUSD,M30: removed

2006.06.30 12:10:38 2006.06.29 20:21 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:21 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:20 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:20 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:16 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:16 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:15 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:15 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:12 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:12 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:04 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:04 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:03 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:03 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:00 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:00 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:00 Trend Bands v3 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 12:10:38 2006.06.29 19:59 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:59 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:32 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:32 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:25 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:25 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:21 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:21 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:20 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:20 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:09 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:09 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:08 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:08 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:06 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:06 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 18:35 Trend Bands v3 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 12:10:38 2006.06.29 18:16 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 18:16 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 18:15 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 18:15 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:37 2006.06.29 00:00 Trend Bands v3 EURUSD,M30: loaded successfully

2006.06.30 12:10:37 EMA_CROSSv5 EURUSD,M5: Tester comment: ----------------------------------------

TakeProfit=10 | TrailingStop=20 | StopLoss=20 | UseStopLoss=False

----------------------------------------

immediate_trade=True | reversal=False

----------------------------------------

Lots=1 | MM=True | Risk=10%

----------------------------------------

2006.06.30 12:10:37 EMA_CROSSv5 inputs: TakeProfit=10; TrailingStop=20; StopLoss=20; ShortEma=1; LongEma=5; Lots=1; HedgePercent=1; StartHour=0; StopHour=23; Risk=10; MAGICMA=20060301; back=300; bandwidth=6; TF=30;

Eu mudei a largura de banda para 20 depois disto para que nunca tocasse as bandas...ainda me dá a 'abertura de erro 131".

ERR_INVALID_TRADE_VOLUME 131 Volume de comércio inválido.

O que há com isso?

Razão: