[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 443

 

Sí, lo tengo...

 

¿Quizás no lo entiendo?

Una línea como esta:

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

comparando el valor del MACDa con cero y si la condición coincide entonces se dibuja una flecha.

¿Cómo funciona?

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

¿qué hace? si MACD[i]>0 y macd[i+1] también es mayor que 0 entonces ¿cómo se cumple la condición ??????????????????

 
igrok2008 писал(а) >>

¿Quizás no lo entiendo?

Una línea como esta:

comparando el valor del MACDa con cero y si la condición coincide entonces se dibuja una flecha.

¿Cómo funciona?

¿Qué significa? Si el MACD[i]>0 y el MACD[i+1] también es mayor que 0, ¿cómo se cumple la condición ??????????????????

Si el producto del valor anterior y el valor actual es menor que cero, entonces estos valores están en diferentes lados de la línea cero.

La multiplicación es unas 10 veces más rápida que la condición lógica. He sustituido dos condiciones lógicas por una multiplicación y una condición lógica.

Primero comprobamos si hubo una intersección de la línea cero. Si hay una intersección, determine la dirección de la misma.

 

Le ruego que me disculpe, pero tengo problemas para aplicar la condición:

El MACD sube, cruza el nivel N (por supuesto, con signo negativo) - se dibuja una flecha, el NACD baja, cruza el nivel N (signo +) - se dibuja una flecha.

El nivel N es un nivel determinado, como para CCI - 20 y 80. La lógica está clara, pero cómo ponerla en práctica......?????

 
igrok2008 писал(а) >>

Le ruego que me disculpe, pero tengo problemas para aplicar la condición:

El MACD sube, cruza el nivel N (por supuesto, con signo negativo) - se dibuja una flecha, el NACD baja, cruza el nivel N (signo +) - se dibuja una flecha.

El nivel N es un nivel determinado, como para CCI - 20 y 80. La lógica está clara, pero cómo ponerla en práctica......?????

if ((MACD[i]-Level)*(MACD[i+1]-Level)<0)
Se trata de un control de penetración de nivel. En su caso, tendrá que hacer dos controles. Para el nivel positivo y negativo por separado
 
Vinin >>:
Это контроль пробития уровня. В твоем случае нужно будет делать два контроля. Для положительного и отрицательного Level отдельно

¿es así?


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

Perdón por la intromisión, ya me has ayudado con la definición de los parámetros de entrada del indicador NonLagDOT y la salida de los mismos a través de la función iCustom() al Expert Advisor.

Por favor, indique cómo abrir órdenes para este indicador.


/+------------------------------------------------------------------+
|| NonLagDOT.mq4 |
//| Copyright © 2009, MetaQuotes Software Corp.
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp.
#enlace de propiedad "http://www.metaquotes.net"

#propiedad ventana_del_gráfica_del_indicador
#property indicator_buffers 3
#property indicator_color1 Amarillo
#property indicator_width1 1
#property indicator_color2 RoyalBlue
#property indicator_width2 1
#property indicator_color3 Rojo
#property indicator_width3 1


//---- parámetros de entrada
extern int Precio = 0;
extern int Longitud = 20;
extern intplace Displace = 0;
extern int Filtro = 0;
extern int Color = 1;
extern int ColorBarBack = 0;
extern double Desviación = 0;

doble Ciclo = 4;

//---- búferes indicadores
doble MABuffer[];
doble UpBuffer[];
doble DnBuffer[];
precio doble[];
doble tendencia[];

//+------------------------------------------------------------------+
//| Función de inicialización de indicadores personalizada |
//+------------------------------------------------------------------+
int init()
{
int ft=0;
nombre_corto_de_cadena;
//---- línea 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,price);
SetIndexBuffer(4,trend);
IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));
SetIndexArrow(0,159);
SetIndexArrow(1,159);
SetIndexArrow(2,159);
SetIndexArrow(3,159);
//---- nombre para la etiqueta de la subventana DataWindow y del indicador
short_name="NonLagDot("+Length+")";
IndicadorNombreCorto(nombre_corto);
SetIndexLabel(0, "NLD");
SetIndexLabel(1, "Up");
SetIndexLabel(2, "Dn");
//----
SetIndexShift(0,Displace);
SetIndexShift(1,Displace);
SetIndexShift(2,Displace);

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

//+------------------------------------------------------------------+
//| NonLagMA_v4 ||
//+------------------------------------------------------------------+
int inicio()
{
int,shift, counted_bars=IndicatorCounted(),limit;
doble alfa,beta,t,Suma,Peso,paso,g;
doble pi = 3,1415926535;

doble Coeff = 3*pi;
int Fase = Longitud-1;
double Len = Longitud*Ciclo + Fase;

if ( counted_bars > 0 ) limit=Bars-counted_bars;
if ( counted_bars < 0 ) return(0);
if ( counted_bars ==0 ) limit=Bars-Len-1;
if ( counted_bars < 1 )
for(i=1;i<Longitud*Ciclo+Longitud;i++)
{
MABuffer[Bars-i]=0;
UpBuffer[Bars-i]=0;
DnBuffer[Bars-i]=0;
}

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

for (i=0;i<=Len-1;i++)
{
g = 1,0/(Coeff*t+1);
si (t <= 0,5 ) g = 1;
beta = MathCos(pi*t);
alfa = g * beta;
//si (shift>=1) precio[i] = iMA(NULL,0,Per,Desplazamiento,Modo,Precio,shift+i);
//en caso contrario
precio[i] = iMA(NULL,0,1,0,MODE_SMA,Precio,shift+i);
Suma += alfa*precio[i];
Peso += alfa;
si ( t < 1 ) t += 1,0/(Fase-1);
else if ( t < Len-1 ) t += (2*Ciclo-1)/(Ciclo*Longitud-1);
}

if (Peso > 0) MABuffer[shift] = (1.0+Deviation/100)*Suma/Peso;

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

si (Color>0)
{
trend[shift]=trend[shift+1];
si (MABuffer[shift]-MABuffer[shift+1] > Filter*Point) trend[shift]=1;
si (MABuffer[shift+1]-MABuffer[shift] > Filter*Point) trend[shift]=-1;
si (trend[shift]>0)
{
UpBuffer[shift] = MABuffer[shift];
if (trend[shift+ColorBarBack]<0) UpBuffer[shift+ColorBarBack]=MABuffer[shift+ColorBarBack];
DnBuffer[shift] = 0;
}
si (trend[shift]<0)
{
DnBuffer[shift] = MABuffer[shift];
if (trend[shift+ColorBarBack]>0) DnBuffer[shift+ColorBarBack]=MABuffer[shift+ColorBarBack];
UpBuffer[shift] = 0;
}
}
}
return(0);
}
 
igrok2008 писал(а) >>

¿es así?

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) {//}
}
Podría ser así. Siempre que sepas lo que estás haciendo. Aparentemente te lo he puesto difícil
 
Explique los términos LevelUP y LevelDN
 
igrok2008 писал(а) >>
Explique los términos LevelUP y LevelDN

LevelUP- nivel positivo

NivelDN- nivel negativo.

En general, son iguales en valor absoluto.

Si son iguales, es posible utilizar

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) {//}
}