PDA

Ver la versión completa : Pregunta ¿Hay alguna función en mql4 para revisar si se cumple una misma condición en varias velas?



Ciclo
28-03-2024 11:44,
:reir:

Hola amigos.

Para verificar una condicion en una vela, 2 velas o incluso 4 velas, se puede hacer como dije, logicamnete si la condición es para 100 velas habria que hacer un bucle for como ha indicado robertomar.

Saludos.

;)

trader201
28-03-2024 13:06,
dojitraderfx, casi olvido decir :sorprendido:, que tampoco lo digo por lo que comentaste pues para mi su respuesta la merece:D, y tu comentario solo me hizo recordar el tema que mencioné. Solo en caso de que hiciera falta aclarar pues es que a veces cuando no se está habando "face to face" sino por escrito, uno puede estar interpretando algo diferente a la intención o a lo que la persona quiso decir. Recuerdo que en una oportunidad trabajando con mucha comunicación online con clientes, una de las cosas que vimos es la utilidad de usar emoticons para evitar alguna mala interpretación.

Recibe un saludo.

trader201
28-03-2024 13:42,
Bueno, solo era para transmitir un poco la idea...

Lo hiciste. Y gracias de nuevo por responder.


...Pero si quereis probar el codigo exactamente, imagino que se sobreentendía dónde tenían que ir las llaves , qué tenía que ir dentro y fuera de ellas, ...

Pues... en mi caso particular entendí donde colocar las llaves. Solo que yo las he colocado tipo esquema porque no he aprendido aún como colocarlas de seguidas como he visto que lo hacen ustedes (como estoy apenas aprendiendo mql4, en algún momento supongo aprenderé).



Lo del mensaje de esperar confirmar para dar reputación es porque me gusta la idea de ese botón. No encontré donde fué que vi una vez la explicación de su función, mas si mal no recuerdo es una herramienta para facilitar, por ejemplo, una persona recién llega, al hacer una pregunta y obtener distintas repuestas, ver la reputación que le han dado otros usuarios a estos que le respondieron (algo que no tienen otros foros y que vale sobre todo para los que están llegando). En ese sentido, aunque sea solo un botón, me gusta como fue concebido (si es que la idea original era esa; o es esa). Se le pierde ese sentido al botón cuando se pide o se da reputación por cualquier cosa; y pues no vayas a pensar que lo digo porque tu me la hayas pedido pues no lo has hecho, aunque desde mi punto de vista tu respuesta es para dar reputación. Solo para expresar algo. De hecho creo que sería hasta mejor si se pudiera dar por temas: mercado y sistemas, gestión monetaria, psicología, trading automatizado. Facilita aún mas su función.

Pero bueno. Quizá es solo un botón, pero a mi me gustó la idea, y en general creo que ya la cumple si se sigue usando de esta manera.

Gracias por agregar lo de el contador y la opción para colocarle la opción de los porcentajes (y por supuesto por la respuesta inicial).
Ahí te mando reputación.
Recibe un saludo.

robertomar
28-03-2024 14:05,
Bueno, solo era para transmitir un poco la idea.

Pero si quereis probar el codigo exactamente, imagino que se sobreentendía dónde tenían que ir las llaves , qué tenía que ir dentro y fuera de ellas, etc en caso de incluir lo del counter o de no incluirlo, pero por si acaso, he editado el post de arriba, por si alguien se hace un lío,jajjajaja.

Incluyendo lo del contador para exigir que esa condición se cumpla siempre, quedaría así exactamente:

int counter = 0; // esto tiene que ir antes de empezar el bucle for

for (int i =0; i< 100; i++) {

if (Close [i] > Open[i]) counter++; // esto va dentro del bucle for

}


if (counter == 100) // ...... aqui pones lo que quieres que te haga esto ya fuera de la llave.


También se podrían chequear las 100 velas e incluir que por ejemplo eso se tenga que cumplir en 80 velas (un 80% de las veces). Entonces habría que poner:

if (counter >= 80) // es decir, si en esas 100 velas previas (incluyendo la actual, que es la vela 0) se ha cumplido eso en al menos 80 de ellas, entonces, que me haga lo que se quiera.


Si se quiere que solo compruebe desde la vela anterior (vela cerrada) habría que poner el buble empezando desde 1:

for (int i = 1; i< 101; i++)

Etc.


Fuente: Pregunta ¿Hay alguna función en mql4 para revisar si se cumple una misma condición en varias velas? (http://www.tradingunited.es/foro/trading-automatico-eas-indicadores-y-scripts/10040-hay-funcion-mql4-revisar-se-cumple-misma-condicion-varias-velas.html#ixzz37wtUxO6d)





Abrazos.

trader201
28-03-2024 17:07,
Confirma si funciona pero por si acaso, reputacion :)

hubiera preferido no decir publicamente, pero ya que lo mencionas: estaba esperando confirmar primero que funcione para dársela (que supongo que claro que funcionará), tal como hice con la respuesta que me dio yokinfx (por fa leela) (http://www.tradingunited.es/foro/trading-automatico-eas-indicadores-y-scripts/9977-utilizar-orderselect-mode_history.html).

Saludos :)

dojitraderfx
28-03-2024 17:47,
Si son muchas las velas en las que lo quieres comprobar, puedes hacer un bucle de tipo "for" por ejemplo si quieres comprobarlo en 100 velas y darle la condición y entonces te lo comprobará en todas. Por ejemplo:

for (int i >=0; i< 100; i++) {

if (Close[i] > Open[i]) ....... y aqui lo que quieres que te haga en cada una de las velas que se cumpla eso.
}

Te lo comprobará vela a vela, y cada vez que en una vela de las últimas 100 velas se cumpla eso, te hará lo otro.

Si quieres que algo se tenga que cumplir en todas a la fuerza, le pones un contador:
int counter = 0;
if (Close [i] > Open[i]) counter++;

Y al final, la condición de que la variable counter sea igual al número de velas que has chequeado:

if (counter == 100) ...... aqui pones lo que quieres que te haga

(Date cuenta que si la variable counter llega hasta 100 entonces es que eso se ha cumplido en todas ellas).

Más o menos se podría hacer así.

Espero que te sirva.

Saludos y abrazos.
Confirma si funciona pero por si acaso, reputacion :)

robertomar
28-03-2024 18:52,
Si son muchas las velas en las que lo quieres comprobar, puedes hacer un bucle de tipo "for" por ejemplo si quieres comprobarlo en 100 velas y darle la condición y entonces te lo comprobará en todas. Por ejemplo:

for (int i =0; i< 100; i++) {

if (Close[i] > Open[i]) ....... y aqui lo que quieres que te haga en cada una de las velas que se cumpla eso.

} // esta llave, si quereis incluir luego lo de abajo, no abría que cerrarla aquí, sino abajo donde lo indico.


Te lo comprobará vela a vela, y cada vez que en una vela de las últimas 100 velas se cumpla eso, te hará lo otro.

Si quieres que algo se tenga que cumplir en todas a la fuerza, le pones un contador:
int counter = 0; // esto tiene que ir antes de empezar el bucle for
if (Close [i] > Open[i]) counter++; // esto va dentro del bucle for
Aquí se cerraría la llave (no se cerraría arriba), si quereis incluir esto de comprobarlo que se cumple siempre en todas.
}
Y al final, la condición de que la variable counter sea igual al número de velas que has chequeado:

if (counter == 100) ...... aqui pones lo que quieres que te haga // esto ya fuera de la llave.

(Date cuenta que si la variable counter llega hasta 100 entonces es que eso se ha cumplido en todas ellas).

Más o menos se podría hacer así.

Espero que te sirva.

Saludos y abrazos.


Edito para poner comentarios adicionales, por si quereis probarlo. Todo lo adicional lo he puesto en rojo.

Wolfman
29-03-2024 15:37,
Yo creo que no lo hay.
De todos modos, que mas te da, ¿que ganas con eso?. Decir if (close4>open4 && close3>open3 && close2>open2 && close1>open1) esta bien.

Bueno, si es un indicador seria if (close[i+3]>open[i+3] && close[i+2]>open[i+2] && close[i+1]>open[i+1] && close[i]>open[i])

Si el bucle for empieza con i=1

Pero no soy un experto.

Saludos.

Igual que Ciclo no soy experto pero te doy mi idea, si lo que quieres es ahorrar trabajo de escritura lo ideal seria definir las variables con primero con esas condiciones, para luego utilizar las variables como condiciones en toda la logica del algoritmo mas si este las utiliza de diferentes manera.

Saludos

Ciclo
29-03-2024 16:54,
Saludos.

Lo que me gustaría saber es como hago referencia a una misma condición de varias velas anteriores, sin colocar la condición una a una (ya que se trata de la misma condición). Es decir: si quiero saber si las últimas 4 velas han cerrado por encima de su apertura, o de una SMA, etc...

como hago para no decir, con cada una. Por ejemplo, en vez de escribir:

if (close4>open4 && close3>open3 && close2>open2 && close1>open1)

colcoar algo como

if "desde" close4 hasta close 1, todas cerradas por encima de su apertura (o de una SMa, etc..)


Saludos, ygracias de antemano

Yo creo que no lo hay.
De todos modos, que mas te da, ¿que ganas con eso?. Decir if (close4>open4 && close3>open3 && close2>open2 && close1>open1) esta bien.

Bueno, si es un indicador seria if (close[i+3]>open[i+3] && close[i+2]>open[i+2] && close[i+1]>open[i+1] && close[i]>open[i])

Si el bucle for empieza con i=1

Pero no soy un experto.

Saludos.

trader201
29-03-2024 17:34,
Saludos.

Lo que me gustaría saber es como hago referencia a una misma condición de varias velas anteriores, sin colocar la condición una a una (ya que se trata de la misma condición). Es decir: si quiero saber si las últimas 4 velas han cerrado por encima de su apertura, o de una SMA, etc...

como hago para no decir, con cada una. Por ejemplo, en vez de escribir:

if (close4>open4 && close3>open3 && close2>open2 && close1>open1)

colcoar algo como

if "desde" close4 hasta close 1, todas cerradas por encima de su apertura (o de una SMa, etc..)


Saludos, ygracias de antemano