SISTEMA DE TRADING QUE ME DA ENTRADAS DIFERENTES EN PROBACKTEST Y EN PROORDER
Forums › ProRealTime foro Español › Soporte ProOrder › SISTEMA DE TRADING QUE ME DA ENTRADAS DIFERENTES EN PROBACKTEST Y EN PROORDER
- This topic has 2 replies, 2 voices, and was last updated 1 year ago by cmadonar.
-
-
02/23/2023 at 6:40 PM #210322
Buenas tardes,
Tengo el siguiente sistema de trading:
- Opero en Nasdaq y SP500
- En minutos
- Horario ampliado de trading (ETH)
- Realiza una entrada diaria en los primeros minutos de cotización tras la apertura de mercado.
- Para hacer esa entrada el sistema utiliza la media móvil de 200 minutos y la media móvil de 20 minutos
Lo he probado en backtest y funciona perfectamente. Hace lo que quiero que haga
Sin embargo cuando lo opero en ProOrder, el mismo sistema no hace las entradas donde debería.
Tras analizar el problema he visto que lo que hace el sistema en ProOrder es operar en ETH, como debe ser, pero sin embargo la M20 y la M200 no las considera en horario ampliado. Creo que las considera en horario regular. Y claro, en los primeros minutos de cotización la M20 y la M200 son muy distintas si están en ETH o en RTH.
En definitiva, la misma operación en Probacktest o en ProOrder dan resultados diferentes.
Como ejemplo: Unity Software (U), 16 de Febrero de 2023:
- En ProBacktest el sistema da entrada a las 10.05 (bien)(ver adjunto)
- En ProOrder el sistema dio entrada a las 09.40 (mal)(ver adjunto)
En ambos casos la M200 y M20 que se ven en el gráfico son las correspondientes a ETH pero veis que las entradas son diferentes. Y solo se me ocurre que es porque en ProOrder a pesar de pesar de tener en gráfico las medias en ETH, las está considerando en RTH, porque las entradas en ProOrder son coherentes con la M20 y M200 en (RTH).
El sistema es el siguiente:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253DEFPARAM FLATAFTER = 160000//Condición 0: Existencia de gap (con fecha posterior a 1 de Enero de 2016)://Defino el momento de cierre del día anterior (cierre de la vela de las 15.59 o hasta 5 minutos antes, o cierre de la vela de las 12.59 o hasta 5 minutos antes) y el momento de apertura del día de hoy (comienzo de la vela de las 09.30 o hasta 5 minutos después)://Cierre de la vela de las 15.59 o hasta 5 minutos antes, o cierre de la vela de las 12.59 o hasta 5 minutos antes:a0 = (Time = 160000)a1 = (Time = 155900)a2 = (Time = 155800)a3 = (Time = 155700)a4 = (Time = 155600)a10 = (Time = 130000)a11 = (Time = 125900)a12 = (Time = 125800)a13 = (Time = 125700)a14 = (Time = 125600)//Comienzo de la vela de las 09.30 o hasta 5 minutos después:b0 = (Time = 93100)b1 = (Time = 93200)b2 = (Time = 93300)b3 = (Time = 93400)b4 = (Time = 93500)IF a0 THENCierre = CloseELSIF a1 THENCierre = CloseELSIF a2 THENCierre = CloseELSIF a3 THENCierre = CloseELSIF a4 THENCierre = CloseELSIF a10 THENCierre = CloseELSIF a11 THENCierre = CloseELSIF a12 THENCierre = CloseELSIF a13 THENCierre = CloseELSIF a14 THENCierre = CloseENDIFIF b0 THENApertura = OpenELSIF b1 THENApertura = OpenELSIF b2 THENApertura = OpenELSIF b3 THENApertura = OpenELSIF b4 THENApertura = OpenENDIF//Con este contador://1. Para cada vela, "Resultado" devuelve 1 cuando se cumplen todas las condiciones (b0, b1, b2, b3 o b4) y devuelve 0 en el caso contrario.//2. Para cada vela compruebo una por una las 5 velas anteriores a ella.//3. "Suma" va sumando los resultados uno a uno.IF b0 OR b1 OR b2 OR b3 OR b4 THENResultado = 1Suma = 0FOR z = 5 DOWNTO 0 DOSuma = Suma + Resultado[z]NEXTELSEResultado = 0Suma = 0ENDIF//"C0" devuelve el valor del gap cuando "Suma" = 1, es decir calcula el gap con la primera vela existente en la sesión (b0, b1, b2, b3 o b4). Y a partir de la vela 390 desde las 4.00, devuelve 0:IF Suma = 1 THENIF ABS((Apertura - Cierre) / Cierre) * 100 >= Gap and Date >= 20160101 THENC0 = 1ELSEC0 = 0ENDIFELSIF IntradayBarIndex > 390 THENC0 = 0ENDIF//Condición 1: Entrada a partir de la quinta vela y antes de la primera hora:C1 = Time > InicioHoraEntrada AND Time =< FinHoraEntrada//Defino las medias: Media larga y media corta:MediaLarga = Average[MLarga](close)MediaCorta = Average[MCorta](close)//Condición 2: Entrada a largo por encima de la media corta, la cual está por encima de la media larga, ambas ascendentes, al final de la primera vela verde después de una o varias rojas (retroceso):C21 = MediaCorta > MediaLargaC22 = MediaCorta[1] < MediaCortaC23 = MediaLarga[1] < MediaLargaC24 = Close > MediaCortaC25 = Close[1] < Open[1] AND Close > OpenC2 = C21 and C22 and C23 and C24 and C25//Condición 3: Entrada a corto por debajo de la media corta, la cual está por debajo de la media larga, ambas descendentes, al final de la primera vela roja después de una o varias verdes (retroceso):C31 = MediaCorta < MediaLargaC32 = MediaCorta[1] > MediaCortaC33 = MediaLarga[1] > MediaLargaC34 = Close < MediaCortaC35 = Close[1] > Open[1] AND Close < OpenC3 = C31 and C32 and C33 and C34 and C35//Condición 4: Una sola operación por día (la primera que dé entrada):C4 = (BarIndex - TRADEINDEX(1) > IntraDayBarIndex)//Condiciones de entrada:EntradaLargo = C0 = 1 AND C1 AND C2 AND C4EntradaCorto = C0 = 1 AND C1 AND C3 AND C4//Capital:CapitalInicial = 14000Capital = CapitalInicial + STRATEGYPROFIT// Condiciones para entrada de posiciones largasIF NOT LongOnMarket AND EntradaLargo THENBUY Capital CASH AT MARKETENDIF// Condiciones de entrada de posiciones cortasIF NOT ShortOnMarket AND EntradaCorto THENSELLSHORT Capital CASH AT MARKETENDIF// Condiciones de salidaIF (OnMarket AND Not OnMarket[1]) OR (LongOnMarket AND ShortOnMarket[1]) OR (ShortOnMarket AND LongOnMarket[1]) THENIf LongOnMarket THENSet Stop %loss 1ELSIF ShortOnMarket THENSet Stop %loss 1ENDIFENDIF// Stop escalonado:Trailingstart = TradePrice * 0.5/100 //Trailing empezará cuando el beneficio llega a 0.5%Trailingstep = TradePrice * 0.5/100 //Trailing irá en escalones de 0.5%//Cuando no haya ninguna operación abierta:IF NOT OnMarket THENNewSL = 0ENDIF//Posiciones largas:IF LongOnMarket THENIF NewSL > 0 AND High - NewSL >= 21 * Trailingstart THENNewSL = NewSL + 20 * TrailingstartELSIF NewSL > 0 AND High - NewSL >= 20 * Trailingstart THENNewSL = NewSL + 19 * TrailingstartELSIF NewSL > 0 AND High - NewSL >= 19 * Trailingstart THENNewSL = NewSL + 18 * TrailingstartELSIF NewSL > 0 AND High - NewSL >= 18 * Trailingstart THENNewSL = NewSL + 17 * TrailingstartELSIF NewSL > 0 AND High - NewSL >= 17 * Trailingstart THENNewSL = NewSL + 16 * TrailingstartELSIF NewSL > 0 AND High - NewSL >= 16 * Trailingstart THENNewSL = NewSL + 15 * TrailingstartELSIF NewSL > 0 AND High - NewSL >= 15 * Trailingstart THENNewSL = NewSL + 14 * TrailingstartELSIF NewSL > 0 AND High - NewSL >= 14 * Trailingstart THENNewSL = NewSL + 13 * TrailingstartELSIF NewSL > 0 AND High - NewSL >= 13 * Trailingstart THENNewSL = NewSL + 12 * TrailingstartELSIF NewSL > 0 AND High - NewSL >= 12 * Trailingstart THENNewSL = NewSL + 11 * TrailingstartELSIF NewSL > 0 AND High - NewSL >= 11 * Trailingstart THENNewSL = NewSL + 10 * TrailingstartELSIF NewSL > 0 AND High - NewSL >= 10 * Trailingstart THENNewSL = NewSL + 9 * TrailingstartELSIF NewSL > 0 AND High - NewSL >= 9 * Trailingstart THENNewSL = NewSL + 8 * TrailingstartELSIF NewSL > 0 AND High - NewSL >= 8 * Trailingstart THENNewSL = NewSL + 7 * TrailingstartELSIF NewSL > 0 AND High - NewSL >= 7 * Trailingstart THENNewSL = NewSL + 6 * TrailingstartELSIF NewSL > 0 AND High - NewSL >= 6 * Trailingstart THENNewSL = NewSL + 5 * TrailingstartELSIF NewSL > 0 AND High - NewSL >= 5 * Trailingstart THENNewSL = NewSL + 4 * TrailingstartELSIF NewSL > 0 AND High - NewSL >= 4 * Trailingstart THENNewSL = NewSL + 3 * TrailingstartELSIF NewSL > 0 AND High - NewSL >= 3 * Trailingstart THENNewSL = NewSL + 2 * TrailingstartELSIF NewSL > 0 AND High - NewSL >= 2 * Trailingstart THENNewSL = NewSL + TrailingstartELSIF NewSL = 0 AND High - TradePrice >= Trailingstart THENNewSL = TradePriceENDIFENDIF//Posiciones cortas:IF ShortOnMarket THENIF NewSL > 0 AND NewSL - Low >= 21 * Trailingstart THENNewSL = NewSL - 20 * TrailingstartELSIF NewSL > 0 AND NewSL - Low >= 20 * Trailingstart THENNewSL = NewSL - 19 * TrailingstartELSIF NewSL > 0 AND NewSL - Low >= 19 * Trailingstart THENNewSL = NewSL - 18 * TrailingstartELSIF NewSL > 0 AND NewSL - Low >= 18 * Trailingstart THENNewSL = NewSL - 17 * TrailingstartELSIF NewSL > 0 AND NewSL - Low >= 17 * Trailingstart THENNewSL = NewSL - 16 * TrailingstartELSIF NewSL > 0 AND NewSL - Low >= 16 * Trailingstart THENNewSL = NewSL - 15 * TrailingstartELSIF NewSL > 0 AND NewSL - Low >= 15 * Trailingstart THENNewSL = NewSL - 14 * TrailingstartELSIF NewSL > 0 AND NewSL - Low >= 14 * Trailingstart THENNewSL = NewSL - 13 * TrailingstartELSIF NewSL > 0 AND NewSL - Low >= 13 * Trailingstart THENNewSL = NewSL - 12 * TrailingstartELSIF NewSL > 0 AND NewSL - Low >= 12 * Trailingstart THENNewSL = NewSL - 11 * TrailingstartELSIF NewSL > 0 AND NewSL - Low >= 11 * Trailingstart THENNewSL = NewSL - 10 * TrailingstartELSIF NewSL > 0 AND NewSL - Low >= 10 * Trailingstart THENNewSL = NewSL - 9 * TrailingstartELSIF NewSL > 0 AND NewSL - Low >= 9 * Trailingstart THENNewSL = NewSL - 8 * TrailingstartELSIF NewSL > 0 AND NewSL - Low >= 8 * Trailingstart THENNewSL = NewSL - 7 * TrailingstartELSIF NewSL > 0 AND NewSL - Low >= 7 * Trailingstart THENNewSL = NewSL - 6 * TrailingstartELSIF NewSL > 0 AND NewSL - Low >= 6 * Trailingstart THENNewSL = NewSL - 5 * TrailingstartELSIF NewSL > 0 AND NewSL - Low >= 5 * Trailingstart THENNewSL = NewSL - 4 * TrailingstartELSIF NewSL > 0 AND NewSL - Low >= 4 * Trailingstart THENNewSL = NewSL - 3 * TrailingstartELSIF NewSL > 0 AND NewSL - Low >= 3 * Trailingstart THENNewSL = NewSL - 2 * TrailingstartELSIF NewSL > 0 AND NewSL - Low >= 2 * Trailingstart THENNewSL = NewSL - TrailingstartELSIF NewSL = 0 AND TradePrice - Low >= Trailingstart THENNewSL = TradePriceENDIFENDIF//Orden de salida, tanto para posiciones largas como para posiciones cortas:IF newSL>0 THENSELL AT NewSL STOPEXITSHORT AT NewSL STOPENDIFEn definitiva ¿me podéis ayudar para que el sistema en ProOrder se comporte igual que en ProBacktest? No sé si es un sistema de código o de configurar algo que se me escapa.
Yo lo que quiero es que tanto en backtest como en ProOrder me considere la M200 y la M20 en ETH, no en RTH.
Gracias anticipadas y un saludo,
Carlos
02/24/2023 at 10:26 AM #21036602/24/2023 at 11:24 AM #210403Gracias por la respuesta Nicolas,
Entonces ¿cuál piensas que puede ser la razón de que el sistema haga las entradas diferentes en ProOrder y en Backtest? (porque en Backtest las hacía bien, pero en ProOrder las hace siempre donde no es).
Un saludo,
-
AuthorPosts
Find exclusive trading pro-tools on