Comprar en el máximo del primer minuto

Viewing 11 posts - 1 through 11 (of 11 total)
  • Author
    Posts
  • #228098 quote
    shadowfax82
    Participant
    New

    Hola a todos,

    Es mi primer mensaje en el foro, disculpas si la pregunta es muy obvia:

    Me gustaría programar un trading automático que haga lo siguiente:

    • Calcule el máximo del primer minuto de la sesión en USA (15:30 horario España – 9:30 horario USA).
    • Compre una cantidad de acciones determinada por un dinero (en el caso que pongo 1000$) mediante una orden STOP LIMIT, donde STOP será el máximo de la vela del primer minuto y LIMIT será el 0’3% por encima
    • Coloque automáticamente un StopLoss al 1% por abajo y un TakeProfit al 1% por arriba.

     

    Lo quier hacer cuando se produzca un gap bajista, aprovechar esa primera tendencia del mercado a corregir e intentar tapar el gap.

    Esto es lo que he hecho yo, pero no me hace caso:

    // Definición de los parámetros del código
    DEFPARAM CumulateOrders = False // Acumulación de posiciones desactivada
    
    If time = 093000 THEN
    IF NOT ONMARKET AND CLOSE<=high*1.003 THEN
    BUY 1000 CASH AT high STOP
    ENDIF
    
    // Stops y targets
    SET STOP %LOSS 1
    SET TARGET %PROFIT 1
    ENDIF
    

     

    ¿Alguien me puede ayudar? Gracias de antemano

    #228100 quote
    robertogozzi
    Moderator
    Master

    La hora debe ser CET (o UTC+1), no US EST, es decir, 153000, no 093000.
    El primer minuto se devuelve usando OPENTIME, ya que TIME es cuando comienza la vela 093000.
    ¿El GAP tiene que ocurrir también en el primer minuto?

    shadowfax82 thanked this post
    #228102 quote
    shadowfax82
    Participant
    New
    // Definición de los parámetros del código
    DEFPARAM CumulateOrders = False // Acumulación de posiciones desactivada
     
    If OPENTIME = 153000 THEN
    IF NOT ONMARKET AND CLOSE<=high*1.003 THEN
    BUY 1000 CASH AT high STOP
    ENDIF
     
    // Stops y targets
    SET STOP %LOSS 1
    SET TARGET %PROFIT 1
    ENDIF
    
    

    Hola Roberto (no sé como citarte para que lo veas),

    Gracias por responder.

    El Gap ocurre porque el día anterior cierra a un precio y hoy abre a un precio inferior (meto en una lista los valores que abren con gap, y el trading automático lo ejecutaría sobre todos los valores de esta lista).

    Edito mi primer mensaje cambiando lo de TIME por OPENTIME

    #228113 quote
    Iván González
    Moderator
    Master

    Hola
    Podría ser algo así (definiendo el gaplimit)

    DEFPARAM CumulateOrders = False
    gap = (open - close[1])/close[1]*100
    gaplimit = -0.35
    IF NOT ONMARKET AND gap < gaplimit and OPENTIME = 153000 THEN
    BUY 1000 CASH AT high STOP  
    ENDIF
    // Stops y targets
    SET STOP %LOSS 1
    SET TARGET %PROFIT 1
    shadowfax82 thanked this post
    #228117 quote
    shadowfax82
    Participant
    New

    Hola Roberto e Iván

    Me gustaría citaros sin incluir vuestro mensaje, para que podáis ver mi post, pero no lo consigo…

    Con este código que pongo me compra entre 15:30h y 16:00h siempre que se encuentre un nuevo máximo.

    DEFPARAM CumulateOrders = FALSE
    
    ONCE HH  = higH
     
    IF OpenTime >= 153000 AND OpenTime <= 160000 THEN
    
    IF OpenTime = 153000 THEN
    HH  = high
    ENDIF
    
    IF NOT ONMARKET THEN
    BUY 1000 CASH AT HH STOP
    ENDIF
    
    SET STOP %LOSS 1
    SET TARGET %PROFIT 1
    
    ENDIF

    Me gustaría que comprara UNA ÚNICA VEZ, se superara el máximo de la sesión, o no.

    Y por último, me gustaría que cuando comprara en lugar de ejecutar una orden STOP, fuera una orden STOP LIMIT.

    Gracias

    #228149 quote
    robertogozzi
    Moderator
    Master

    No te preocupes, no hace falta que me cites, solo somos 3 y de todos modos leo todos los posts, aunque no respondo a todos.

    Puedes comprar LIMIT cuando el precio actual sea superior al precio de entrada, es decir, HH:

    DEFPARAM CumulateOrders = FALSE
    ONCE HH = 0
    IF OnMarket THEN
       HH = 0
    ENDIF
    IF OpenTime >= 153000 AND OpenTime <= 160000 THEN
       IF OpenTime = 153000 THEN
          HH  = high
       ENDIF
       IF NOT ONMARKET AND HH <> 0 AND close > HH THEN
          BUY 1000 CASH AT HH LIMIT
       ENDIF
       SET STOP %LOSS 1
       SET TARGET %PROFIT 1
    ENDIF
    shadowfax82 thanked this post
    #228535 quote
    shadowfax82
    Participant
    New

    Hola,

    He conseguido mejoras relevantes en mi código. Sólo me compra una única vez.

    He notado lo siguiente, y mando fotos para explicarme mejor:

    – Me compra en el máximo del primer minuto, si la vela siguiente supera ese máximo; poniendo SL y TP al 1% (foto adjunta 1: GB_compra1.jpg)
    – No me compra en el máximo del primer minuto, si la vela siguiente no lo supera. Aunque sí lo superaría en unos minutos después (foto adjunta 2: GB_compra2.jpg)

    El comportamiento que tiene mi código en el primer caso es el correcto.

    En el segundo caso, me gustaría que siguiera intentando comprar en los minutos sucesivos (al menos los 10 primeros minutos). Luego ya, con el arreón de apertura del mercado más apaciguado, podría ir mirando manualmente a qué valor entrar.

    A continuación muestro el código que tengo, a ver si me podéis echar una mano a solucionar el segundo caso:

    DEFPARAM CumulateOrders = FALSE
    
    ONCE HH = 0
    
    IF OpenTime >= 153000 AND OpenTime <= 160000 THEN
    
    IF OpenTime = 153000 THEN
    HH  = high
    ENDIF
    
    IF NOT ONMARKET AND HH<>0 THEN
    BUY 1000 CASH AT HH STOP
    SET STOP %LOSS 1
    SET TARGET %PROFIT 1
    HH=0
    ENDIF
    
    ENDIF

    Muchas gracias de antemano, un saludo,

    GB_compra1.jpg GB_compra1.jpg GB_compra2.jpg GB_compra2.jpg
    #228958 quote
    shadowfax82
    Participant
    New

    Hola !!

    Casi lo tengo !!

    En ProBackTest me funciona sin problemas el siguiente código

    Ahora, siempre compra en el máximo de la primera vela de minuto (da igual si la siguiente vela marca un nuevo máximo o no):

    DEFPARAM CumulateOrders = FALSE
    
    ONCE HH = 0
    
    IF OpenTime >= 153000 AND OpenTime <= 160000 THEN
    
    IF OpenTime = 153000 THEN
    HH  = high
    ENDIF
    
    // SI EL MÁXIMO DE LA VELA DEL MINUTO 1 SUPERA HH, HH VALE 0
    IF high>HH THEN
    HH=0
    ENDIF
    
    IF NOT ONMARKET AND HH<>0 THEN
    BUY 2500 CASH AT HH STOP
    SET STOP %LOSS 1
    SET TARGET %PROFIT 1
    ENDIF
    
    ENDIF
    

    Pero cuando voy a ProOrden AutoTrading (de momento en PaperTrading porque lo quiero probar bien antes), sólo me funciona si el segundo minuto no establece un nuevo máximo.

    Y no entiendo muy bien por qué…. Ya conseguí que sólo comprara una vez reseteando HH a 0 y así no entra en el IF del mercado.

    Sé que es una tontería lo que me falta, pero no consigo dar con ella.

    ¿Alguien me ayuda? Estaría muy agradecido 🙂

    Un aludo,

    #229000 quote
    robertogozzi
    Moderator
    Master

    Si entiendo correctamente, ¿quieres comprar como MÁXIMO el primer minuto de la sesión de USA?
    ¿Pero se puede comprar sólo en el segundo minuto o incluso después?

    shadowfax82 thanked this post
    #229001 quote
    shadowfax82
    Participant
    New

    Hola Roberto,

    Quiero comprar a partir del minuto 15:31 – segunda vela (puede ser en 15:31h – segunda vela, 15:32h – tercera vela,… hasta 16:00h porque la volatilidad en USA ya baja bastante a partir de las 16:00h).

    Y el precio al que quiero comprar es el máximo de la primera vela (lo recojo donde digo;

    IF OpenTime = 153000 THEN
    HH  = high
    ENDIF
    Ya lo ideal sería comprar con orden STOP LIMIT, pero de momento no me corre prisa solucionar ese problema
    #229029 quote
    robertogozzi
    Moderator
    Master

    Tu escribiste “Pero cuando voy a ProOrden AutoTrading (de momento en PaperTrading porque lo quiero probar bien antes), sólo me funciona si el segundo minuto no establece un nuevo máximo“, pero en el código pones estas líneas para impedir la entrada cuando haya un nuevo Máximo.

    Simplemente quítatelos:

    IF high>HH THEN
       HH=0
    ENDIF

    Este código me funciona correctamente, sin embargo NO ingresa si se logra un nuevo máximo después de la barra inicial de las 15:30:

    DEFPARAM CumulateOrders = FALSE
    ONCE HH = 0
    IF OpenTime >= 153000 AND OpenTime <= 160000 THEN
       IF OpenTime = 153000 THEN
          HH  = high
       ENDIF
       // SI EL MÁXIMO DE LA VELA DEL MINUTO 1 SUPERA HH, HH VALE 0
       IF high>HH THEN
          HH=0
       ENDIF
       IF NOT ONMARKET AND HH<>0 THEN
          BUY 2500 CASH AT HH STOP
          SET STOP %LOSS 1
          SET TARGET %PROFIT 1
       ENDIF
    ENDIF
Viewing 11 posts - 1 through 11 (of 11 total)
  • You must be logged in to reply to this topic.

Comprar en el máximo del primer minuto


ProOrder: Trading Automático y Backtesting

New Reply
Author
Summary

This topic contains 10 replies,
has 3 voices, and was last updated by robertogozzi
1 year, 11 months ago.

Topic Details
Forum: ProOrder: Trading Automático y Backtesting
Language: Spanish
Started: 02/13/2024
Status: Active
Attachments: 2 files
Logo Logo
Loading...