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

 

Estoy probando un EA y mi función Sleep() no funciona

Quiero que mi Asesor Experto se congele durante mucho tiempo después de que se cierre la orden, pero en cambio sigue haciendo falsas aperturas.


bool cl() {if (OrderSelect(0,SELECT_BY_POS)==true){ int t=OrderType();
double l=OrderLots();
int tik=OrderTicket();Alert("tik=", tik);
}
si (t==OP_BUY) OrderClose(tik,l,Bid,3,Red);
si (t==OP_SELL) OrderClose(tik,l,Ask,3,Green);
Sleep(300000000);
}

 

Elsueño no funciona en el probador.

 

Me gustaría saber si es posible que un EA reaccione a un cambio de color del indicador, digamos verde-compra rojo-venta

y sobre la aparición de diferentes iconos en la pantalla ... ¿tal vez hay una función en MT4?

 
unumi >> :

Me gustaría saber si es posible que el Asesor Experto reaccione a un cambio de color del indicador, digamos verde-compra rojo-venta

Y para la aparición de diferentes iconos en la pantalla ... tal vez hay una función en MT4 ?

Si el indicador cambia de color, entonces a) su línea se traza en diferentes buffers, por lo que basta con sondearlos para entender el estado (en MT4 no se puede cambiar el color de los buffers dinámicamente, a diferencia de MT5), o b) la línea del indicador se traza mediante objetos de la rejilla - entonces basta con leer el ObjectGet(....).

Lo mismo ocurre con los iconos: pueden salir como código a través de un buffer o como objetos.

 
Svinozavr >> :

Si el indicador cambia de color, entonces a) su línea es mostrada por diferentes buffers y es suficiente con sondearlos para entender el estado (en MT4 el color del buffer no puede ser cambiado dinámicamente, a diferencia de MT5), o b) la línea del indicador es mostrada por gr.objects - entonces sólo necesita leer las propiedades ObjectGet(....).

Lo mismo ocurre con los iconos: se pueden dibujar como un código utilizando el buffer, o como objetos.

>> Gracias, lo tengo.

 

Buenas noches.

Pueden aconsejarme, tengo dos preguntas relacionadas.

1. Cómo poner a cero los elementos del array en cada tick (si es necesario según el ejemplo).

2. Cómo sumar correctamente los valores de los elementos del array.

Por ejemplo:

En cada tick se llenan los elementos del array, puede llenar 1 o 2 o 3 o 4.... o 15 elementos,

pero cada vez necesito la suma aritmética de los valores de los elementos del array.

 
gvi2504 писал(а) >>

Buenas noches.

Pueden aconsejarme, tengo dos preguntas relacionadas.

1. Cómo poner a cero los elementos del array en cada tick (si es necesario según el ejemplo).

2. Cómo sumar correctamente los valores de los elementos del array.

Por ejemplo:

En cada tick se llenan los elementos del array, puede llenar 1 o 2 o 3 o 4.... o 15 elementos,

pero cada vez necesito la suma aritmética de los valores de los elementos del array.

1. Función ArrayInitialize(ArrayName,0).

2. En el transcurso del llenado del array suma inmediatamente. Declare una variable, por ejemplo suma, asígnele un valor de 0, luego en el transcurso del llenado del array añada un valor a esta variable.

 
Integer >> :

1. Función ArrayInitialize(ArrayName,0).

2. Mientras se llena el array, suma inmediatamente. Declara una variable, como suma, asígnale un valor de 0, y luego añade un valor a esta variable mientras se llena el array.

Genial.

Justo lo que necesitas. >>Muchas gracias.

 
Bion писал(а) >>

Sleep(300000000);

Una suspensión tan larga no es una opción, incluso si Sleep() funcionara en el probador. Una vez abierto, se puede memorizar la hora:

LastTime=TimeCurrent();

Al principio de la función start() hacer la comprobación:

if(TimeCurrent()<LastTime+Pause)return(0);

Pausa - tiempo de "dormir" después de la apertura (en segundos).

 
Integer писал(а) >>

Un tiempo de reposo tan largo no es una opción, incluso si Sleep() funcionara en el probador. Después de la apertura, puede recordar la hora de apertura:

LastTime=TimeCurrent();

Al principio de la función start() hacer la comprobación:

if(TimeCurrent()<LastTime+Pause)return(0);

Pausa - tiempo de "dormir" tras la apertura (en segundos).

Hice lo que me aconsejó.

datetime LastTime;
datetime Pausa=3600;

int inicio()
{
if(TimeCurrent()<LastTime+Pause)return(0);

...

bool cl() {if(OrderSelect(0,SELECT_BY_POS)==true){ int t=OrderType();
double l=LotesdeOrden();
int tik=OrderTicket();Alert("tik=", tik);
}
si (t==OP_BUY) OrderClose(tik,l,Bid,3,Red);
if (t==OP_SELL) OrderClose(tik,l,Ask,3,Green);
LastTime=TimeCurrent();
}

Sin embargo, en el probador, la orden se abre de acuerdo con la condición pero no reacciona a la hora.

Además, el probador no muestra ninguna reacción al parámetro "tiempo de existencia de la orden pendiente", es decir, la orden no se borra cuando es el momento de eliminarla.

¿Se supone que es así?

¿Cómo podemos hacer que el probador considere el tiempo transcurrido desde que se cerró la orden?