[¡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 309

 

¡Por favor, ayuda!

Sólo se muestran dos líneas MAH, aunque el código es equivalente para las cuatro líneas.¿Cuál es el problema?

#property indicator_separate_window // El indicador se dibuja en una ventana independiente
#property indicator_buffers 4 // Número de buffers
#property indicator_color1 Azul // Color de la primera línea
#property indicator_color2 Red // Color de la segunda línea
#property indicator_color3 Oliva
#property indicator_color4 Teal


double Buf_ROC_MA40[],Buf_ROC_MA20[],Buf_MA40[],Buf_MA20[]; // declaración de array (para los buffers indicadores)
//--------------------------------------------------------------------
int init() // Función especial init()
{
SetIndexBuffer(0,Buf_MA40); // Asignación de un array al buffer
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);// Estilo de línea
SetIndexBuffer(1,Buf_MA20); // Asignación de un array al buffer
SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2);//Estilo de línea
SetIndexBuffer(3,Buf_ROC_MA40); // Asignar un array al buffer
SetIndexStyle(3,DRAW_LINE,STYLE_SOLID,2);//Estilo de línea
SetIndexBuffer(4,Buf_ROC_MA40); // Asignar un array al buffer
SetIndexStyle(4,DRAW_LINE,STYLE_SOLID,2);// Estilo de línea
return; // Salir de la función especial init()
}
//--------------------------------------------------------------------
int start() // Función especial start()
{
int i, // índice de la barra
Historia=3000,
counted_bars; // número de barras calculadas
double ma20,ma40,MA40[],MA20[],MA40_s[],MA20_s[],ma40_s,ma20_s,ROC_MA40[],ROC_MA20[];
//--------------------------------------------------------------------
// Counted_bars=IndicatorCounted(); // Número de barras contadas
i=Barras;/Barras_contabilizadas-1; // Índice de la primera no contabilizada
while(i>=0) //Ciclo a través de las barras no contadas
{
ma20=iMA("EURUSD",PERIOD_M1,20,0,MODE_SMA,PRICE_CLOSE,i);
ma20_s=iMA("EURUSD",PERIOD_M1,20,0,MODE_SMA,PRICE_CLOSE,i+20);
ma40=iMA("EURUSD",PERIOD_M1,40,0,MODE_SMA,PRICE_CLOSE,i);
ma40_s=iMA("EURUSD",PERIOD_M1,40,0,MODE_SMA,PRICE_CLOSE,i+40);
Alert("ma20=",ma20, " ma20_s=",ma20_s, " ma40_s=",ma40_s, " ma40=",ma40);
MA40_s[i]=ma40_s;
MA40[i]=ma40;
MA20[i]=ma20;
MA20_s[i]=ma20_s;
Buf_MA40[i]=ma40;
Buf_MA20[i]=ma20;
ROC_MA40[i]=MA40[i]-MA40_s[i];
Buf_ROC_MA40[i]=ROC_MA40[i];
ROC_MA20[i]=MA20[i]-MA20_s[i];
Buf_ROC_MA20[i]=ROC_MA20[i];
i--;
//Calcular el índice de la siguiente barra
}
//--------------------------------------------------------------------
return; // Salir de la función especial start()
}

 

1.Recomendar, por favor, un depurador (preferiblemente con depuración paso a paso para poder ver los valores intermedios de las variables).

2.¿Cómo puedo mostrar los datos de depuración y dónde (en qué ventana), porque es un inconveniente utilizar las alertas.

3) ¿Cómo puedo actualizar la versión de MQL?

 

Por favor, aconséjeme.

¿Cómo puedo hacer que mi Asesor Experto opere sólo en la sesión europea?

 
VNG писал(а) >>

¡Por favor, ayuda!

Sólo salen dos líneas MAshek, aunque el código es equivalente para las cuatro líneas.¿Cuál es el problema?

int init() // Специальная функция init()
{
SetIndexBuffer(0, Buf_MA40); // Назначение массива буферу
SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2);// Стиль линии
SetIndexBuffer(1, Buf_MA20); // Назначение массива буферу
SetIndexStyle (1,DRAW_LINE,STYLE_SOLID,2);// Стиль линии
SetIndexBuffer(2, Buf_ROC_MA40); // Назначение массива буферу
SetIndexStyle (2,DRAW_LINE,STYLE_SOLID,2);// Стиль линии
SetIndexBuffer(3, Buf_ROC_MA40); // Назначение массива буферу
SetIndexStyle (3,DRAW_LINE,STYLE_SOLID,2);// Стиль линии
return; // Выход из спец. ф-ии init()
}

He encontrado un error. Después del buffer 1 fue inmediatamente el buffer 3. El búfer 2 fue omitido.

Sólo que no deberías tener la salida de los macerados y la diferencia en una ventana. Tienen más de un orden de magnitud de diferencia.

 
KoDi писал(а) >>

Por favor, aconséjeme.

¿Cómo puedo hacer que mi EA opere sólo en la sesión europea?

Sólo hay que poner start al principio del módulo

if(Hora()<7 || Hora()>15)return(0);

 

Por favor, mira el código de nuevo. He eliminado las MAs ya que los nuevos valores recibidos tienen una escala completamente diferente.

Todavía no se muestra nada.

#property indicator_separate_window // El indicador se dibuja en una ventana independiente
#property indicator_buffers 2 // Número de buffers
#property indicator_color1 Azul // Color de la primera línea
#property indicador_color2 Rojo //color de la segunda línea
//#property indicator_color3 Oliva
//#property indicator_color4 Teal


double Buf_ROC_MA40[],Buf_ROC_MA20[],Buf_MA40[],Buf_MA20[]; // Declaración de arrays (para los buffers indicadores)
//--------------------------------------------------------------------
int init() // Función especial init()
{
//SetIndexBuffer(0,Buf_MA40); // Asignación de un array al buffer
//SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);// Estilo de línea
//SetIndexBuffer(1,Buf_MA20); // Asignar array al buffer
//SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2);//Estilo de línea
SetIndexBuffer(0,Buf_ROC_MA40); // Asignar un array al buffer
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);//Estilo de línea
SetIndexBuffer(1,Buf_ROC_MA20); // Asignar un array al buffer
SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2);//Estilo de línea
return; // Salir de la función especial init()
}
//--------------------------------------------------------------------
int start() // Función especial start()
{
int i, // índice de la barra
Historia=3000,
counted_bars; // número de barras calculadas
double ma20,ma40,MA40[],MA20[],MA40_s[],MA20_s[],ma40_s,ma20_s,ROC_MA40[],ROC_MA20[];
//--------------------------------------------------------------------
// Counted_bars=IndicatorCounted(); // Número de barras contadas
i=Barras;/Barras_contabilizadas-1; // Índice de la primera no contabilizada
while(i>=0) //Ciclo a través de las barras no contadas
{
ma20=iMA("EURUSD",PERIOD_M1,20,0,MODE_SMA,PRICE_CLOSE,i);
ma20_s=iMA("EURUSD",PERIOD_M1,20,0,MODE_SMA,PRICE_CLOSE,i+20);
ma40=iMA("EURUSD",PERIOD_M1,40,0,MODE_SMA,PRICE_CLOSE,i);
ma40_s=iMA("EURUSD",PERIOD_M1,40,0,MODE_SMA,PRICE_CLOSE,i+40);
MA40_s[i]=ma40_s;
MA40[i]=ma40;
MA20[i]=ma20;
MA20_s[i]=ma20_s;
Buf_MA40[i]=ma40;
Buf_MA20[i]=ma20;
ROC_MA40[i]=MA40[i]-MA40_s[i];
Buf_ROC_MA40[i]=ROC_MA40[i];
ROC_MA20[i]=MA20[i]-MA20_s[i];
Buf_ROC_MA20[i]=ROC_MA20[i];
i--;
// Cálculo del índice de la siguiente barra
}
//--------------------------------------------------------------------
return; // Salir de la función especial start()
}

 
VNG писал(а) >>

Por favor, mira el código de nuevo. He eliminado las MAs ya que los nuevos valores recibidos tienen una escala completamente diferente.

Todavía no se muestra nada.

#property indicator_separate_window // El indicador se dibuja en una ventana independiente
#property indicator_buffers 2 // Número de buffers
#property indicator_color1 Azul // Color de la primera línea
#property indicador_color2 Rojo //color de la segunda línea
//#property indicator_color3 Oliva
//#property indicator_color4 Teal


double Buf_ROC_MA40[],Buf_ROC_MA20[],Buf_MA40[],Buf_MA20[]; // Declaración de arrays (para los buffers indicadores)
//--------------------------------------------------------------------
int init() // Función especial init()
{
//SetIndexBuffer(0,Buf_MA40); // Asignación de un array al buffer
//SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);// Estilo de línea
//SetIndexBuffer(1,Buf_MA20); // Asignar array al buffer
//SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2);//Estilo de línea
SetIndexBuffer(0,Buf_ROC_MA40); // Asignar un array al buffer
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);//Estilo de línea
SetIndexBuffer(1,Buf_ROC_MA20); // Asignar un array al buffer
SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2);//Estilo de línea
return; // Salir de la función especial init()
}
//--------------------------------------------------------------------
int start() // Función especial start()
{
int i, // índice de la barra
Historia=3000,
counted_bars; // número de barras calculadas
double ma20,ma40,MA40[],MA20[],MA40_s[],MA20_s[],ma40_s,ma20_s,ROC_MA40[],ROC_MA20[];
//--------------------------------------------------------------------
// Counted_bars=IndicatorCounted(); // Número de barras contadas
i=Barras;/Barras_contabilizadas-1; // Índice de la primera no contabilizada
while(i>=0) //Ciclo a través de las barras no contadas
{
ma20=iMA("EURUSD",PERIOD_M1,20,0,MODE_SMA,PRICE_CLOSE,i);
ma20_s=iMA("EURUSD",PERIOD_M1,20,0,MODE_SMA,PRICE_CLOSE,i+20);
ma40=iMA("EURUSD",PERIOD_M1,40,0,MODE_SMA,PRICE_CLOSE,i);
ma40_s=iMA("EURUSD",PERIOD_M1,40,0,MODE_SMA,PRICE_CLOSE,i+40);
MA40_s[i]=ma40_s;
MA40[i]=ma40;
MA20[i]=ma20;
MA20_s[i]=ma20_s;
Buf_MA40[i]=ma40;
Buf_MA20[i]=ma20;
ROC_MA40[i]=MA40[i]-MA40_s[i];
Buf_ROC_MA40[i]=ROC_MA40[i];
ROC_MA20[i]=MA20[i]-MA20_s[i];
Buf_ROC_MA20[i]=ROC_MA20[i];
i--;
//Calcular el índice de la siguiente barra
}
//--------------------------------------------------------------------
return; // Salir de la función especial start()
}

Hay demasiados errores.

Principalmente error en el trabajo con matrices.

Archivos adjuntos:
proba.mq4  2 kb
 

Ayúdame a resolver este problema - hay una señal de compra/venta, el EA abre una operación, establece un beneficio y un stop. Y si la operación se cierra en stop en la misma vela, entonces el asesor abre la operación de nuevo, y necesito que no se abra, es decir, en una señal se abrió una operación.

¿Cómo hacerlo?

 
KoDi >> :

¿Cómo hacerlo?

La hora de cierre de la última orden debe ser menor que la hora de apertura de la barra actual.

Si no es así, no abra la operación.

 
TheXpert >> :

La hora de cierre de la última orden debe ser menor que la hora de apertura de la barra actual.

Si no es así, no abrimos un trato.

>> Estoy confundido.

Bueno, ¿cómo va a abrir la PRIMERA operación si la condición es escribir que no entra hasta que haya al menos una operación?

Razón de la queja: