SISTEMA CON MEDIAS MOVILES DE 10 Y 35

Viewing 6 posts - 1 through 6 (of 6 total)
  • Author
    Posts
  • #75117 quote
    Nuria
    Participant
    New

    Hola. Buenos dias. Estoy probando un sistema con medias móviles de 15 y 35. El sistema es sencillo. Es un sistema contratendencia, y consiste en comprar cuando el precio está por debajo de ambas medias y vender  cuando está por encima. En la plataforma de prueba de pro-realtime va bastante bien. El problema está al usarla en IG, ya que los spreads se cargan la estrategia. Os voy a enviar mi código actual y a ver si alguien me puede ayudar a cambiar lo siguiente, que creo que solucionaría el problema: necesito que la orden de compra o venta no sea a mercado, sino en el mismo punto donde empieza la siguiente vela. De esta forma se perderán algunas ordenes, ya que con el spread habrá veces que no se comprará o venderá, pero serán solo algunas, ya que la mayoria de las veces el precio retrocede lo suficiente como para que la operación se dé. Os envío mi código actual. Gracias de antemano.

    // Definición de los parámetros del código
    DEFPARAM CumulateOrders = False // Acumulación de posiciones desactivada
    
    // Impide al sistema operar en días precisos de la semana
    daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
    
    // Condiciones para entrada de posiciones largas
    indicator1 = ExponentialAverage[14](close)
    c1 = (close < indicator1)
    indicator2 = ExponentialAverage[35](close)
    c2 = (close < indicator2)
    
    IF (c1 AND c2) AND not daysForbiddenEntry THEN
    BUY 1 SHARES AT MARKET
    ENDIF
    
    // Condiciones de salida de posiciones largas
    indicator3 = ExponentialAverage[14](close)
    c3 = (close > indicator3)
    indicator4 = ExponentialAverage[35](close)
    c4 = (close > indicator4)
    
    IF c3 AND c4 THEN
    SELL AT MARKET
    ENDIF
    
    // Condiciones de entrada de posiciones cortas
    indicator5 = ExponentialAverage[14](close)
    c5 = (close > indicator5)
    indicator6 = ExponentialAverage[35](close)
    c6 = (close > indicator6)
    
    IF (c5 AND c6) AND not daysForbiddenEntry THEN
    SELLSHORT 1 SHARES AT MARKET
    ENDIF
    
    // Condiciones de salida de posiciones cortas
    indicator7 = ExponentialAverage[14](close)
    c7 = (close < indicator7)
    indicator8 = ExponentialAverage[35](close)
    c8 = (close < indicator8)
    
    IF c7 AND c8 THEN
    EXITSHORT AT MARKET
    ENDIF
    
    // Stops y objetivos
    SET STOP pLOSS 10
    SET TARGET pPROFIT 10
    
    #75120 quote
    TempusFugit
    Participant
    Veteran

    Hola Nuria,

    Creo que no se puede abrir posición con el precio de inicio de vela puesto que en PRT el código se ejecuta al final de cada vela pero sí se puede hacer al precio de cierre de la vela anterior que normalmente será casi igual salvo en el caso de velas de 1 día o mayores que puede haber gaps.

    Si quieres abrir posición con el precio de cierre de la vela debes sustituir el comando BUY/SELLSHORT AT MARKET por BUY/SELLSHORT AT CLOSE LIMIT.

    Como bien dices con esta opción te ahorras el spread (y también el posible slippage) pero tiene la desventaja de que algunas operaciones no llegarán a ejecutarse, normalmente las mejores. Yo he hecho pruebas con esta opción en mis sistemas y mi conclusión es que merece la pena cuando son sistemas que realizan bastantes operaciones aunque te aviso que a veces te llevarás grandes disgustos por operaciones muy buenas que no se ejecutan.

    Otra opinión personal es que si un sistema depende del spread para ser rentable no es muy interesante, en esta misma página encontrarás sistemas que tienen, al menos en backtest, una rentabilidad mucho mayor.

    Buena suerte

    Nicolas thanked this post
    #75134 quote
    Nuria
    Participant
    New

    Muchas gracias. Acabo de cambiarlo. Ya te cuento que tal va.

    #75262 quote
    Nuria
    Participant
    New

    A ver si alguien me puede ayudar con otro problema. Ahora mismo la estrategia funciona de la siguiente manera. Cuando el precio está por debajo de las dos medias, compra. Y cuando el precio está por encima de las dos medias, vende. Pero cuando hay una subida importante cada vez que salta el stop (10 p), vuelve a hacer otra compra u otra venta, y si sigue subiendo, otra. Esto se carga la estrategia. necesito poner una orden para que cuando salte el stop, no se vuelva a hacer otra compra hasta que el precio este por debajo de las dos medias. O sea, una vz que salte el stop, la siguiente operación tiene que ser en sentido contrario. Si salta el stop cuando estoy en compra, ya no vuelvo a entrar hasta que el precio esté por debajo de las dos medias, que sería en venta. Os mando el código tal y como está ahora mismo.

    // Definición de los parámetros del código
    DEFPARAM CumulateOrders = False // Acumulación de posiciones desactivada
    
    // Impide al sistema operar en días precisos de la semana
    daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
    
    // Condiciones para entrada de posiciones largas
    indicator1 = ExponentialAverage[14](close)
    c1 = (close < indicator1)
    indicator2 = ExponentialAverage[35](close)
    c2 = (close < indicator2)
    
    IF (c1 AND c2) AND not daysForbiddenEntry THEN
    BUY 1 CONTRACT AT CLOSE LIMIT
    ENDIF
    
    // Condiciones de salida de posiciones largas
    indicator3 = ExponentialAverage[14](close)
    c3 = (close > indicator3)
    indicator4 = ExponentialAverage[35](close)
    c4 = (close > indicator4)
    
    IF c3 AND c4 THEN
    SELL AT CLOSE LIMIT
    ENDIF
    
    // Condiciones de entrada de posiciones cortas
    indicator5 = ExponentialAverage[14](close)
    c5 = (close > indicator5)
    indicator6 = ExponentialAverage[35](close)
    c6 = (close > indicator6)
    
    IF (c5 AND c6) AND not daysForbiddenEntry THEN
    SELLSHORT 1 CONTRACT AT CLOSE LIMIT
    ENDIF
    
    // Condiciones de salida de posiciones cortas
    indicator7 = ExponentialAverage[14](close)
    c7 = (close < indicator7)
    indicator8 = ExponentialAverage[35](close)
    c8 = (close < indicator8)
    
    IF c7 AND c8 THEN
    EXITSHORT AT CLOSE LIMIT
    ENDIF
    
    // Stops y objetivos
    SET STOP pLOSS 10
    
    #75270 quote
    TempusFugit
    Participant
    Veteran

    Hay varias formas de lidiar con el problema que tienes, la que me parece más sencilla es creando una variable para que no entre más de una vez seguida en un solo sentido. Quedaría así:

     

    // Definición de los parámetros del código
    DEFPARAM CumulateOrders = False // Acumulación de posiciones desactivada
    
    // Impide al sistema operar en días precisos de la semana
    daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
    
    //Variable para NO entrar mas de una vez seguida en el mismo sentido
    ONCE ULTIMAENTRADA=0
    
    // Condiciones para entrada de posiciones largas
    indicator1 = ExponentialAverage[14](close)
    c1 = (close < indicator1)
    indicator2 = ExponentialAverage[35](close)
    c2 = (close < indicator2)
    
    IF ULTIMAENTRADA<>1 AND c1 AND c2 AND not daysForbiddenEntry THEN
    BUY 1 CONTRACT AT CLOSE LIMIT
    ULTIMAENTRADA=1
    ENDIF
    
    // Condiciones de salida de posiciones largas
    indicator3 = ExponentialAverage[14](close)
    c3 = (close > indicator3)
    indicator4 = ExponentialAverage[35](close)
    c4 = (close > indicator4)
    
    IF c3 AND c4 THEN
    SELL AT CLOSE LIMIT
    ENDIF
    
    // Condiciones de entrada de posiciones cortas
    indicator5 = ExponentialAverage[14](close)
    c5 = (close > indicator5)
    indicator6 = ExponentialAverage[35](close)
    c6 = (close > indicator6)
    
    IF ULTIMAENTRADA<>-1 AND c5 AND c6 AND not daysForbiddenEntry THEN
    SELLSHORT 1 CONTRACT AT CLOSE LIMIT
    ULTIMAENTRADA=-1
    ENDIF
    
    // Condiciones de salida de posiciones cortas
    indicator7 = ExponentialAverage[14](close)
    c7 = (close < indicator7)
    indicator8 = ExponentialAverage[35](close)
    c8 = (close < indicator8)
    
    IF c7 AND c8 THEN
    EXITSHORT AT CLOSE LIMIT
    ENDIF
    
    // Stops y objetivos
    SET STOP pLOSS 10

     

    Nicolas thanked this post
    #75276 quote
    Nuria
    Participant
    New

    Muchas gracias. Lo pruebo y te digo que tal va. Un saludo

Viewing 6 posts - 1 through 6 (of 6 total)
  • You must be logged in to reply to this topic.

SISTEMA CON MEDIAS MOVILES DE 10 Y 35


ProOrder: Trading Automático y Backtesting

New Reply
Author
author-avatar
Nuria @nuria Participant
Summary

This topic contains 5 replies,
has 2 voices, and was last updated by Nuria
7 years, 8 months ago.

Topic Details
Forum: ProOrder: Trading Automático y Backtesting
Language: Spanish
Started: 07/03/2018
Status: Active
Attachments: No files
Logo Logo
Loading...