[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 443

 

Sim, eu entendi isso...

 

Talvez eu não entenda?

Uma linha como esta:

if( MACD[ i] < 0) ExtMapBuffer2[ i] = High[ i]+iATR(Symbol(), 0, 14, i);

comparando o valor MACDa com zero e se a condição corresponder, então uma seta é sorteada.

Como funciona?

if (MACD[i] * MACD[i+1]<0) {

o que ele faz? se MACD[i]>0 e macd[i+1] também é maior que 0, então como a condição ????????????????? é atendida?

 
igrok2008 писал(а) >>

Talvez eu não entenda?

Uma linha como esta:

comparando o valor MACDa com zero e se a condição corresponder, então uma seta é sorteada.

Como funciona?

Se MACD[i]>0 e MACD[i+1] também for maior que 0, então como a condição ????????????????? é atendida?

Se o produto do valor anterior e o valor atual forem inferiores a zero, então estes valores estão em lados diferentes da linha zero.

A multiplicação é cerca de 10 vezes mais rápida que a condição lógica. Eu substituí duas condições lógicas por uma multiplicação e uma condição lógica.

Primeiro verificamos se houve uma interseção de linha zero. Se houver um cruzamento, então determine a direção do cruzamento.

 

Peço desculpas, mas estou tendo problemas para implementar a condição:

MACD sobe, cruza o nível N (claro, com sinal de menos) - uma seta é desenhada, NACD desce, cruza o nível N (sinal de +) - uma seta é desenhada.

O nível N é um certo nível, como para a CCI - 20 e 80. A lógica é clara, mas como implementar......?????

 
igrok2008 писал(а) >>

Por favor, me perdoe, mas minha condição não está funcionando:

MACD sobe, cruza o nível N (claro, com sinal de menos) - uma seta é desenhada, NACD desce, cruza o nível N (sinal de +) - uma seta é desenhada.

O nível N é um certo nível, como para a CCI - 20 e 80. A lógica é clara, mas como implementar......?????

if ((MACD[i]-Level)*(MACD[i+1]-Level)<0)
Este é um controle de penetração de nível. No seu caso, você precisará fazer dois controles. Para nível positivo e negativo separadamente
 
Vinin >>:
Это контроль пробития уровня. В твоем случае нужно будет делать два контроля. Для положительного и отрицательного Level отдельно

é assim?


      if ((MACD[i]-Level)*(MACD[i+1]-Level)<0)
         ((MACD[i]+Level)*(MACD[i+1]+Level)>0){
 

Desculpe pela intrusão, você já me ajudou com a definição dos parâmetros de entrada do indicador NonLagDOT e os emitiu através da função iCustom() para o Expert Advisor.

Por favor, informe como abrir pedidos para este indicador.


/+------------------------------------------------------------------+
|| NonLagDOT.mq4 |
//| Copyright © 2009, MetaQuotes Software Corp.
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#direitos autorais "Copyright © 2009, MetaQuotes Software Corp.
#link da propriedade "http://www.metaquotes.net"

#janela_do_cartão_indicador de propriedade
#property indicator_buffers 3
#Indicador de propriedade_color1 Amarelo
#largura_do_indicador de propriedade1 1
#indicador de propriedade_color2 RoyalBlue
#largura_do_indicador de propriedade2 1
#indicador de propriedade_cores3 Vermelho
#largura_do_indicador de propriedade3 1


//---- parâmetros de entrada
preço interno externo = 0;
comprimento externo int = 20;
externo interno Deslocamento = 0;
externo int Filtro = 0;
cor exterior int = 1;
externo int ColorBarBack = 0;
Desvio duplo externo = 0;

ciclo duplo = 4;

//---- buffers indicadores
duplo MABuffer[];
duplo UpBuffer[];
duplo DnBuffer[];
preço duplo[];
dupla tendência[];

//+------------------------------------------------------------------+
//| Função de inicialização do indicador personalizado |
//+------------------------------------------------------------------+
int init()
{
int ft=0;
nome_curto_de_filtro;
//---- linha indicadora
IndicatorBuffers(5);
SetIndexStyle(0,DRAW_ARROW);
SetIndexBuffer(0,MABuffer);
SetIndexStyle(1,DRAW_ARROW);
SetIndexBuffer(1,UpBuffer);
SetIndexStyle(2,DRAW_ARROW);
SetIndexBuffer(2,DnBuffer);
SetIndexBuffer(3,preço);
SetIndexBuffer(4,tendência);
IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));
SetIndexArrow(0,159);
SetIndexArrow(1.159);
SetIndexArrow(2.159);
SetIndexArrow(3.159);
//---- nome para DataWindow e subwindow do indicador
short_name="NonLagDot("+Length+")";
IndicatorShortName(short_name);
SetIndexLabel(0, "NLD");
SetIndexLabel(1, "Para cima");
SetIndexLabel(2, "Dn");
//----
SetIndexShift(0,Displace);
SetIndexShift(1,Displace);
SetIndexShift(2,Deslocar);

SetIndexDrawBegin(0,Length*Cycle+Length);
SetIndexDrawBegin(1,Length*Cycle+Length);
SetIndexDrawBegin(2,Length*Cycle+Length);
//----
retorno(0);
}

//+------------------------------------------------------------------+
//| NonLagMA_v4 |
//+------------------------------------------------------------------+
int start()
{
int i,shift, counted_bars=IndicatorCounted(),limit;
duplo alfa, beta, t, soma, peso, degrau, g;
pi duplo = 3,1415926535;

Coeff duplo = 3*pi;
int Fase = Comprimento-1;
Len duplo = Comprimento*Ciclo + Fase;

se ( barras_contadas > 0 ) limite=barras_contadas_bars;
se ( counted_bars < 0 ) retornar(0);
se ( counted_bars ==0 ) limit=Bars-Len-1;
se ( barramentos_contados < 1 )
for(i=1;i<Length*Cycle+Length;i++)
{
MABuffer[Bars-i]=0;
UpBuffer[Bars-i]=0;
DnBuffer[Bars-i]=0;
}

for(shift=limit;shift>=0;shift--)
{
Peso=0; Soma=0; t=0;

para (i=0;i<=Len-1;i++)
{
g = 1,0/(Coeff*t+1);
se (t <= 0,5 ) g = 1;
beta = MathCos(pi*t);
alfa = g * beta;
//if (shift>==1) price[i] = iMA(NULL,0,Per,Displace,Mode,Price,shift+i);
//else
preço[i] = iMA(NULL,0,1,0,MODE_SMA,Price,shift+i);
Soma += alfa*preço[i];
Peso += alfa;
se ( t < 1 ) t += 1,0/(Fase 1);
senão se ( t < Len-1 ) t += (2*Cycle-1)/(Cycle*Length-1);
}

se (Peso > 0) MABuffer[shift] = (1,0+Deviação/100)*Soma/Peso;

se (Filtro>0)
{
if( MathAbs(MABuffer[shift]-MABuffer[shift+1]) < Filtro*Ponto ) MABuffer[shift]=MABuffer[shift+1];
}

se (Cor>0)
{
tendência[shift]= tendência[shift+1];
se (MABuffer[shift]-MABuffer[shift+1] > Filtro*Ponto) tendência[shift]=1;
if (MABuffer[shift+1]-MABuffer[shift] > Filter*Point) trend[shift]=-1;
se (tendência[shift]>0)
{
UpBuffer[shift] = MABuffer[shift];
if (trend[shift+ColorBarBack]<0) UpBuffer[shift+ColorBarBack]=MABuffer[shift+ColorBarBack]=MABuffer[shift+ColorBarBack];
DnBuffer[shift] = 0;
}
se (tendência[shift]<0)
{
DnBuffer[shift] = MABuffer[shift];
if (trend[shift+ColorBarBack]>0) DnBuffer[shift+ColorBarBack]=MABuffer[shift+ColorBarBack];
UpBuffer[shift] = 0;
}
}
}
retorno(0);
}
 
igrok2008 писал(а) >>

é assim?

if (( MACD[ i]- LevelUP)*( MACD[ i+1]- LevelUP)<0) {
   if ( MACD[ i]- Level>0) {//}
}
if (( MACD[ i]- LevelDN)*( MACD[ i+1]- LevelDN)<0){
   if ( MACD[ i]- LevelDN<0) {//}
}
Poderia ser assim. Desde que você saiba o que está fazendo. Aparentemente eu dificultei para você
 
Por favor, explique os termos LevelUP e LevelDN
 
igrok2008 писал(а) >>
Por favor, explique os termos LevelUP e LevelDN

NívelUP- nível positivo

LevelDN- nível negativo.

Em geral, eles são iguais em valor absoluto.

Se eles forem iguais, é possível usar

if (( MACD[ i]- Level)*( MACD[ i+1]- Level)<0) {
   if ( MACD[ i]- Level>0) {//}
}
if (( MACD[ i]+ LevelDN)*( MACD[ i+1]+ LevelDN)<0){
   if ( MACD[ i]+ Level<0) {//}
}
Razão: