Acceder

Participaciones del usuario lectum

lectum 30/12/15 11:50
Ha respondido al tema ¿Cómo optimizar sistema de trading automático basado en la cointegración? - forex
Hola rigar, Respecto a lo de operar con los pares que estén cointegrados, esa es la idea, y es lo que no sé fijo si está bien calculado. Yo, aunque ponga muchos pares a analizar, el programa me dice "cuales están cointegrados", y sobre eso calcula las entradas según la estrategia que le indiquemos, por lo que sólo debería tratar ya los cointegrados (usando la estrategia de la cointegración, claro). El problema es que aún tratando sólo los pares cointegrados me salen unas estadísticas menores al 60% de ganadas, y como comentas tú, lo mínimo que estaría bien, según creo, sería del 70% para arriba, por eso creo qeu el problema no está tanto en tratar algunos pares concretos sino en saber identificar correctamente que pares están cointegrados, porque creo que ahora no lo debe de estar calculando bien del todo.
lectum 29/12/15 18:10
Ha respondido al tema ¿Cómo optimizar sistema de trading automático basado en la cointegración? - forex
Ok, lo que no sé cómo calcular cuantos retardos utilizar a la hora de hacer el test DFA. ¿No sabrás tú como hacerlo, no? Estuve mirando información, pero lo dicho, no me queda nada claro todo este tema.
lectum 29/12/15 16:52
Ha respondido al tema ¿Cómo optimizar sistema de trading automático basado en la cointegración? - forex
Hola Ausias Fuster, Te respondo a tus preguntas: 1) La rentabilidad sí es global. Lo que sí hago es tras cada backtesting mirar cuanta rentabilidad me produjeron los mejores y los peores pares, y miro si tienen alguna característica especial si han tenido mucho mejor o mucho peor porcentaje que la media. Voy a probar a hacer lo que me indicas, no combinar todos los pares, sino seleccionarlos 2) Sobre los retardos en DFA, tengo puesto 0, si es lo que yo pienso. Ya te comento que esa parte básicamente hice como el ejemplo adaptándolo al C#.NET con llamadas a R, no domino demasiado ese tema y por eso precisamente buscaba alguien que controlase bastante, en lugar de intentar hacerlo yo porque no es que ande muy sobrado de tiempo ahora mismo.
lectum 28/12/15 14:19
Ha respondido al tema ¿Cómo optimizar sistema de trading automático basado en la cointegración? - forex
Los activos que estoy utilizando actualmente son estos 16, combinados entre sí, lo que me dan 120 combinaciones (AUDJPY, AUDUSD, EURAUD, EURCAD, EURCHF, EURGBP, EURJPY, EURUSD, GBPCHF, GBPJPY, GBPUSD, NZDJPY, NZDUSD, USDCAD, USDCHF, USDJPY). Lo de los resultados no esperados respecto a la cointegración es porque me dan porcentajes de acierto positivos, pero no tan positivos como lo esperado. Es decir, con la cointegración igual me salen el 60% de entradas positivas y el 40% negativas, o un pelín peor (ya no digo el importe obtenido, ya que hay spread y swap, hablo sólo del porcentaje de operaciones acabadas bien y mal). Según veo en muchos sitios (y en el curso que hice), con la cointegración debería tener un porcentaje de operaciones buenas bastante mejor, como mínimo un 70% para arriba, porque sino es muy difícil sacar algo positivo. Y viendo artículos matemáticos que no tienen que ver con las inversiones, también dicen que es bastante fiable (dentro de lo que cabe, claro está). Por eso creo que me debe de faltar algún paso en mi cálculo para saber cuando 2 pares están cointegrados. Por si sirve de algo a alguien, voy a poner aquí un poco básico el algoritmo que tengo para mirar si dos pares están cointegrados. Pongo un ejemplo de donde yo luego hice el algoritmo. Este ejemplo está hecho en R. -------------------- #Métodos Cuantitativos para Arbitrajes Estadísticos por Cointegración. #Nuestro objetivo para realizar arbitrajes estadísticos es buscar series temporales #cointegradas. #Veamos un primer ejemplo: #1. Nos descargamos la serie de datos EUR/USD-GBP/USD: library(quantmod) getFX("EUR/USD") getFX("GBP/USD") plot(EURUSD) par(new=TRUE) plot(GBPUSD,type="l",col="red") cor(EURUSD,GBPUSD) #las forjamos en una tabla: FX=data.frame(merge(EURUSD,GBPUSD)) attach(FX) plot(EUR.USD,GBP.USD) abline(lm(GBP.USD~EUR.USD)) #2. Veamos cual es su relación mediante una regresión lineal simple: modelo1=lm(GBP.USD~EUR.USD,data=FX) beta=coef(modelo1) beta #3. Corregimos la serie temporal EUR.USD con los coeficientes. Corregido=EUR.USD*1.6783336-0.6583499 #4. Realizamos el test de Dickey-Fuller para comprobar estacionariedad: library(tseries) adf.test(Corregido-GBP.USD) #5. Vemos que la serie está cointegrada, calculamos el spread: spread=Corregido-GBP.USD plot(spread,type="l") #6. Calculamos la media de los periodos y las desviaciones típicas: media=mean(spread) desviacion=sd(spread) #7.Adjuntamos al gráfico: abline(media,0,col="blue") abline(2*desviacion,0,col="red") abline(-2*desviacion,0,col="red") abline(desviacion,0,col="green") abline(-desviacion,0,col="green") #Reglas de trading: # a)Comprar GBP/USD y Vender simultaneamente EUR/USD cuando el spread toca la línea verde # inferior. # b)Vender GBP/USD y Comprar simultaneamente EUR/USD cuando el spread toca la línea verde # superior. # c)Siempre comprar o vender 1,678 veces más cantidad de EUR/USD dado que la volatilidad # del GBP/USD es más alta. # d)Liquidar las posiciones simultaneamente al llegar a la línea azul. # e)Empezar a plantear estrategias de cobertura si el spread sobrepasa las líneas rojas. #Veamos un segundo ejemplo: #1. Nos descargamos la serie de datos EUR/USD-USD/CHF: getFX("EUR/USD") getFX("USD/CHF") plot(EURUSD) par(new=TRUE) plot(USDCHF,type="l",col="red") cor(EURUSD,USDCHF) #las forjamos en una tabla: FX=data.frame(merge(EURUSD,USDCHF)) attach(FX) plot(EUR.USD,USD.CHF) abline(lm(USD.CHF~EUR.USD)) #2. Veamos cual es su relación mediante una regresión lineal simple: modelo1=lm(USD.CHF~EUR.USD,data=FX) beta=coef(modelo1) beta #3. Corregimos la serie temporal EUR.USD con los coeficientes. Corregido=EUR.USD*-0.7520281+1.9250685 #4. Realizamos el test de Dickey-Fuller para comprobar estacionariedad: library(tseries) adf.test(Corregido-USD.CHF) #5. Vemos que la serie está cointegrada, calculamos el spread: spread=Corregido-USD.CHF plot(spread,type="l") #6. Calculamos la media de los periodos y las desviaciones típicas: media=mean(spread) desviacion=sd(spread) #7.Adjuntamos al gráfico: abline(media,0,col="blue") abline(2*desviacion,0,col="red") abline(-2*desviacion,0,col="red") abline(desviacion,0,col="green") abline(-desviacion,0,col="green") #¿Podemos negociar esto así tan tranquilamente? ¡NO! El valor de un pip en el EURUSD no #es el mismo que en el USDCHF ¡¡si nuestra cuenta está en euros!! #Por cada 1.000 euros, si nuestra cuenta está en euros: #Valor del pip, EUR/USD: pipUSD=1000*0.0001 pipEUR=pipUSD/1.3876 pipEUR #Creamos el par híbrido EUR/CHF: tipo=1.3876*0.8776 tipo pipCHF=1000*0.0001 pipEUR1=pipCHF/tipo pipEUR1 #Relación a multiplicar: Componente=pipEUR1/pipEUR Componente #Reglas de trading: # a)Comprar USD/CHF y Comprar simultaneamente EUR/USD cuando el spread toca la línea # verde inferior. # b)Vender USD/CHF y Vender simultaneamente EUR/USD cuando el spread toca la línea verde # superior. # c)Siempre comprar o vender 0,75 veces la cantidad de USD/CHF en EUR/USD dado que la # volatilidad del EUR/USD es más alta, pero... a esa cantidad añadirle el componente # del valor del pip. # d)Liquidar las posiciones simultaneamente al llegar a la línea azul. # e)Empezar a plantear estrategias de cobertura si el spread sobrepasa las líneas rojas. ------------------------------------------------------------- Ah, se me olvidaba. El sistema este está programado en C#.NET, utilizando para los cálculos matemáticos R, ya que es un lenguaje mucho más adecuado a este apartado, y mucho más rápido también y muchísimas funciones matemáticas. Para la conexión con el broker, utilizo las APIs que cada broker pone a disposición del público para poder utilizar su plataforma. Sobre la operativa que tengo ahora mismo activa, no se trata de cointegración. Como indiqué antes, lo bueno de este sistema es que permite muchísimas estrategias distintas. Tengo ahora mismo una estrategia de combinación de pares y detección de tendencias, en un timeframe horario, con un sistema de SL dinámico llegado a determinados niveles de beneficios, y cortando las pérdidas de determinados pares cuando se detecta cierta similitud con otras entradas con pérdidas (estas características también son personalizables), de forma que cuando hay entradas similares pero con beneficios, éstas sí se dejan continuar (resumiendo, se pueden hacer entradas parecidas en varios pares, si se dan condiciones negativas algunas de esas entradas se cortan al llegar a una pérdidas menores al SL, si se dan positivas, éstas se dejan seguir a su ritmo, así se minimizan las pérdidas pero se dejan cuando hay ganancias). Todo esto, como ya digo, es parametrizable y eliges tú las condiciones para cerrarlas, o puedes elegir no utilizar esa opción y listo. Saludos
lectum 27/12/15 17:26
Ha publicado el tema ¿Cómo optimizar sistema de trading automático basado en la cointegración? - forex