Variable de vela anterior

Viewing 7 posts - 1 through 7 (of 7 total)
  • Author
    Posts
  • #148081 quote
    Alturron
    Participant
    New

    Hola a todos.

    Tengo un problema cuando uso la sencilla instrucción VARMOVIL=VARMOVIL[1]

    El problema aparece cuando en la primera vela se ejecuta esa igualdad, ya que es como si se quedara sin informar y a partir de aquí, ya no puedo preguntar por ella, por ejemplo IF VARMOVIL=0. Ya que no se cumple ninguna igualdad.

    He probado a preguntar por el barindex = 1 ó barindex = 0 para que no se ejecute VARMOVIL=VARMOVIL[1] en esas primeras velas, pero no me funciona.

    ¿Alguna ayuda por favor?

    Gracias

    #148101 quote
    TempusFugit
    Participant
    Veteran

    Alturron,

    No estoy seguro de entender bien tu duda sin ver más de tu código. Puede ser que mientras que la variable VARMOVIL no ha recibido ningún valor la condición VARMOVIL=VARMOVIL[1] se cumpla siempre puesto que su valor no ha cambiado?

    Si ese es el problema puedes probar con:

    ONCE VARMOVIL=0
    IF VARMOVIL<>0 AND VARMOVIL=VARMOVIL[1] THEN
    (LO QUE SEA QUE QUIERES QUE SE EJECUTE CON ESA CONDICION)
    ENDIF

    Buena suerte!

    #148108 quote
    Alturron
    Participant
    New

    Gracias TempusFugit.

    No creo que me valga. Te pego el código:

    Lo que necesito es que una variable se informe por primera vez en la vela de las 9:00 y se vaya arrastrando en el tiempo. En el código que ves, está esto que digo. La variable en alguna parte más del programa, (que no pongo por razones de tamaño exclusivamente), se informa con otros valores, a partir de esa primera vez.

    El problema, es que el código que ves, no devuelve nada. Si quito o comento, la linea VARMOVIL=VARMOVIL[1] del else más interno, funciona, pero mal, ya que devuelve el valor de varmovil con valor cero desde el primer día en la vela de las 9 y durante un día completo hasta la siguiente vela de las 9 que devuelve el valor correspondiente al ATR durante otro día completo y de nuevo cero y así sucesivamente. Por otra parte, si también comento o quito VARMOVIL=VARMOVIL[1] del else más externo, devuelve en la vela de las 9 el valor correspondiente y en el resto de velas 0. En este caso, si que en la primera vela de las 9 del primer día, ya devuelve el valor del ATR correspondiente, a diferencia del supuesto anterior, que en la vela de las 9 del primer día, devuelve cero.

    No se si me habré hecho entender. Espero que si. Llevo mucho tiempo con este asunto y no consigo solucionarlo. Gracias de nuevo.

    HORADEENTRADA = 090000
    
    
    OPERAR = 0
    VARMOVIL = 0
    
    IF TIME = HORADEENTRADA THEN
      OPERAR = 1
    ENDIF
    
    IF OPERAR = 1 THEN
      IF VARMOVIL[1] = 0 THEN
         VARMOVIL=AverageTrueRange[14](close) 
      ELSE
         VARMOVIL=VARMOVIL[1]
      ENDIF
    ELSE
      VARMOVIL=VARMOVIL[1]
    ENDIF
    RETURN  VARMOVIL AS "EJE"
    #148111 quote
    JC_Bywan
    Moderator
    Master

    Hola, hay la vela anterior, y tambien dentro del “if operar=1” la necesidad de haber 14 velas, por eso podemos intentar con “if barindex>14 then” antes de la linea 11 para que “varmovil” aparezca

    #148112 quote
    TempusFugit
    Participant
    Veteran

    Si pones VARMOVIL=0 al principio del código ese es el valor con el que se va a reiniciar en cada vela. Quizás esto es lo que buscas…

    
    ONCE OPERAR = 0
    ONCE VARMOVIL = 0
    
    HORADEENTRADA = 090000 
    
    IF TIME = HORADEENTRADA THEN
      OPERAR = 1
    VARMOVIL=AverageTrueRange[14](close) 
    ENDIF
    
    RETURN  VARMOVIL AS "EJE"
    #148117 quote
    Alturron
    Participant
    New

    hola y gracias a los 2.

    No es ese el problema. Por un lado, hay más de 14 velas cargadas antes que se ejecute. Y en cuanto a la segunda respuesta con once he probado y tampoco.

    Intento simplicarlo más con el siguiente código. Ese código que pongo ahora, devuelve en todas las velas a partir de las 9 del primer día, el valor “5”. La pregunta es, porque la primera vez no se cumple el if IF VARMOVIL[1] = 0 ???

    Como decía antes, el código es algo más complejo, pero el problema lo tengo detectado ahí. Tened en cuenta que antes que se ejecute el IF que digo, se han ejecutado otras velas antes (las anteriores a las 9 de la mañana) por lo tanto el programa ejecuta la línea VARMOVIL=VARMOVIL[1] en velas que tan solo ejecutan esa línea, ya que no entra en la condición operar = 1.

    Para mi, el problema está ahí, en informar una variable “X” con su “X[1]” cuando lo único que se ha hecho con ella es informarla a cero, pero no se ha usado. El tema, es que necesito hacerlo o algo similar, pero no se como.

    HORADEENTRADA = 090000
    OPERAR = 0
    
    IF TIME = HORADEENTRADA THEN
       OPERAR = 1
    ENDIF
    
    VARMOVIL = 0
    
    IF OPERAR = 1 THEN
       IF VARMOVIL[1] = 0 THEN
          VARMOVIL = 25
       ELSE
          VARMOVIL = 5
       ENDIF
    ELSE
       VARMOVIL=VARMOVIL[1]
    ENDIF
    RETURN VARMOVIL AS "EJE"
    #148121 quote
    robertogozzi
    Moderator
    Master

    Prueba:

    IF BarIndex > 0 THEN
       VARMOVIL = VARMOVIL [1]
    ENDIF
Viewing 7 posts - 1 through 7 (of 7 total)
  • You must be logged in to reply to this topic.

Variable de vela anterior


ProBuilder: Indicadores y Herramientas

New Reply
Author
author-avatar
Alturron @alturron Participant
Summary

This topic contains 6 replies,
has 4 voices, and was last updated by robertogozzi
5 years, 5 months ago.

Topic Details
Forum: ProBuilder: Indicadores y Herramientas
Language: Spanish
Started: 10/22/2020
Status: Active
Attachments: No files
Logo Logo
Loading...