[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 24

 

Ya estaba en marcha. No predijo la señal de apertura durante mucho tiempo, y el aire fue suministrado por el mismo temporizador.

En resumen, Pablo murió.

 
Alguien puede aconsejar: Es una pregunta trivial , pero no consigo resolverla en todo el día. Cómo hacer que el EA abra una orden en la apertura de una vela, y si se cierra en la misma vela, que no se abra hasta la aparición de una nueva vela. El problema aquí es que cuando la señal se abre, digamos que la orden se cierra en la misma vela, por lo que la señal está en vigor, pero ya no es relevante porque el robot fue escrito para el precio de apertura. Recuerdo que había una manera, pero no la recuerdo.
 

La bandera se llama.

Al abrir la orden, asigne OrderIsOpened=true. Cuando se abre una nueva vela - ...=falso, y así sucesivamente.

 
tara:

La bandera se llama.

Al abrir la orden, asigne OrderIsOpened=true. Cuando se abre una nueva vela - ...=falso, y así sucesivamente.

Gracias. ¿Y cómo codificar la apertura de una nueva vela?
 
kwadrad:
Gracias. ¿Y cómo codificar la apertura de una nueva vela?


Lo que quieras: todo está en tus manos. Por ejemplo:

- cuando el tiempo cambia por el tamaño de la TF (más fácil)

- cuando el "nuevo" precio de apertura difiere del "antiguo"

por la misma tecnología de la "bandera".

De nada.

 
kwadrad:
Gracias. ¿Y cómo se codifica la apertura de una nueva vela?
Explora con un motor de búsqueda.
 
Fartarantula:

Hola querida gente de mql. Aquí viene mi primer problema de código.

Es un indicador de tendencia. La tarea es un indicador de tendencia con coordenadas 1ra línea = máximo del último día y del día anterior y 2da línea = mínimo del último día y del día anterior.

Estaría bien, pero cuando se cambia a un marco temporal inferior, la coordenada se aferra al principio del día, aunque al nivel de precios correspondiente.... y el sentido de la línea se pierde por completo.

Al crear un objeto de línea de tendencia, el parámetro datetime es el culpable. No se me ocurre cómo llegar a ella. Es necesario calcular el tiempo de formación de los extremos del precio. Parece que esta información

Parece que esta información está incrustada en el marco temporal de 1 minuto. Cómo determinar la fecha en la que cambia el marco temporal para que se vuelva a dibujar una tendencia y se adjunten coordenadas a las barras correspondientes a los extremos.

Desgraciadamente, la búsqueda no ha arrojado nada sobre el tema. Les agradecería que me aconsejaran.

Entiendo que el procedimiento de escritura de código en sí mismo causa dificultades.

Le ofrezco la siguiente manera de resolver esta tarea:

// Ваша трендовая по High на дневном таймфрейме
datetime Time1 = iTime(Symbol(), PERIOD_D1, 1);
double   High1 = iHigh(Symbol(), PERIOD_D1, 1);
datetime Time2 = iTime(Symbol(), PERIOD_D1, 2);
double   High2 = iHigh(Symbol(), PERIOD_D1, 2);
ObjectCreate("High_Trend", OBJ_TREND, 0, Time2, High2, Time1, High1, 0, 0);

// Ищем точное время High'ев на таймфрейме PERIOD
int PERIOD = PERIOD_M5;

int BarTime1 = iBarShift(Symbol(), PERIOD, Time1);
int BarTime2 = iBarShift(Symbol(), PERIOD, Time2);
Time1 = iTime(Symbol(), PERIOD, 
      Highest(Symbol(), PERIOD, MODE_HIGH, BarTime1, 1));
Time2 = iTime(Symbol(), PERIOD, 
      Highest(Symbol(), PERIOD, MODE_HIGH, BarTime2, BarTime1+1));

ObjectSet("High_Trend", OBJPROP_TIME2, Time1);
ObjectSet("High_Trend", OBJPROP_TIME1, Time2);

El único problema es que si lanza el Asesor Experto con este código en el Probador de Estrategias y establece la variable PERIOD a PERIOD_M1, ambas funciones iBarShift devuelven -1, es decir, la función no puede encontrar una barra en TF M1 con el mismo tiempo en el historial... No sé por qué ocurre.

¡Ya he descubierto por qué! No hay antecedentes de barras M1 en el periodo analizado.

 
alex12:

Necesito ver el comportamiento del precio a lo largo de toda la historia del instrumento por MA, pero el indicador no se dibuja cuando se inserta en el gráfico.

¿Cuál es el problema?

Cuando se compila = 0 y 0.

Por cierto, ¡el terminal MT4 se cuelga!

Ajuste los parámetros de entrada History y Aver_Bars a un valor menor y el terminal dejará de "colgarse".

¿Qué te hace pensar que el indicador no se dibuja cuando se adjunta a un gráfico? Esto es lo que dibujó su indicador cuando lo coloqué en el gráfico de hoy para el EUR/USD TF M1:


:D :D :D

 
artmedia70:
Cuando se produce este error (división por cero), el EA deja de funcionar. Busque un lugar en el código donde se produzca la división por cero - lo más probable es que el cero se obtenga como resultado del cálculo de algunos parámetros.
Gracias, lo he resuelto. Lo comprobaré el fin de semana.
 

Hola, queridos miembros del foro.

Por supuesto, tengo algunas preguntas de un recién llegado. Estoy tratando de aprender mql4, ya que nunca he desarrollado ningún programa antes, por lo que las preguntas pueden ser muy primitivas. Pero nunca he sido capaz de hacerlos yo mismo.

He decidido "meter la pata" con la visualización de los volúmenes dibujando una línea en lugar de un gráfico de barras con algo de procesamiento. El código debe tener el siguiente sentido. A partir de la segunda barra que está en la misma dirección que la barra anterior (ambas barras son ascendentes), el volumen se extrae de la segunda barra. Como resultado, obtengo una línea discontinua en la ventana del indicador, que efectivamente se dibuja desde la segunda barra hacia arriba, pero no en todos los casos por alguna razón. La línea se interrumpe porque otras condiciones de su trazado no están definidas en absoluto, es una cosa del futuro. Pero aquí mismo para entender por qué la línea no se dibuja en cada segunda barra hacia arriba, no puedo. Por favor, ayúdame.

Aquí está el código. Si tienes algún otro comentario sobre otros fallos en el código, estaré encantado de ayudarte.

double dVolume=Volume[i];
double vback1=Volume[i+1];

         {
         double vteor12=(dVolume+vback1)/2;
            if (Close[i+1]>Open[i+1] && Close[i]>Open[i]) double UP12=(Close[i]-Open[i+1])*1000; else UP12=0;
            if (UP12!=0) double vrealUP12=(dVolume+vback1)/UP12; else vrealUP12=0;
            if (Close[i+1]>Open[i+1])
            if (Close[i]>Open[i])
            ExtVolumesBuffer[i]=dVolume+vteor12-vrealUP12;
            if (ExtVolumesBuffer[i]<0) ExtVolumesBuffer[i]=0;
              }
Razón de la queja: