Sistema de trading Intradia de Rompimientos Kumo

Los mejores corredores de opciones binarias 2020:
  • Binarium
    Binarium

    1er lugar! El mejor broker de opciones binarias!
    Ideal para principiantes! Entrenamiento gratis! Bonos de registro!

  • FinMax
    FinMax

    Broker honesto!

Sistema de trading de rompimientos Kumo

El sistema de trading que vamos a presentar en este artículo es una estrategia de trading intradiario basado en el indicador Ichimoku Kynko Hyu, el cual fue desarrollado en Japón junto con tantas otras interesantes herramientas de análisis del mercado. También hace uso de los puntos pivote para determinar objetivos de beneficios. Por sus características, este sistema fue desarrollado para realizar operaciones de trading de alta frecuencia en gráficos de corto plazo (5 minutos y 15 minutos). Además, es una estrategia de seguimiento de tendencia pura que no utiliza otros filtros para las señales de trading y por lo tanto es clara y simple de aplicar.

En este caso, para mejorar la claridad de las señales de trading el sistema usa una serie de indicadores técnicos modificados para MT4, lo que significa que solo puede emplearse en esta plataforma de trading. Estos sistemas se describen más adelante y se incluyen para su descarga sin costo alguno.

Como siempre, se recomienda probar este sistema antes de usarlo para operar con dinero real en una cuenta en vivo.

Configuración del sistema de trading intradía Kumo

  • Instrumentos (mercados) recomendados – Este sistema de trading puede usarse en cualquier mercado, sin embargo se recomienda principalmente para operar en los pares de divisas principales, metales preciosos (oro y plata) e índices.
  • Marco de tiempo recomendado: Este sistema fue diseñado para operar en los marcos de tiempo de 5 minutos y 15 minutos.
  • Brokers recomendadados: Como ya se indicó, este sistema cuenta con indicadores modificados para MT4, por lo tanto solo puede usarse en brokers que ofrecen esta plataforma (ver lista de brokers de MT4).
  • Indicadores del sistema: Los indicadores usados en el sistema con su respectiva configuración son los siguientes:
  • ZB-cloudlines (8, 24, 48) : indicador modificado para MT4
  • Fast MA Arrow (1,3,1,5): indicador modificado para MT4
  • Niveles de puntos pivote (indicador modificado para MT4)
  • Kimo Breakout histo (8 , 24, 48): indicador modificado para MT4

Los indicadores personalizados y la plantilla del sistema para Metatrader 4 pueden descargarse mediante el siguiente enlace:

Reglas del sistema

Las reglas para este sistema de trading intradía son las siguientes:

  • Solo se toman las señales que concuerdan con la dirección mostrada por el Kimo Breakout histo.
  • No se abren posiciones de compra arriba de los niveles R2 o posiciones de venta debajo de los niveles S2 de los puntos pivote.

Operaciones de compra

  • Indicador Kumo Breakout Histo presenta barras verdes (señal alcista, filtro inicial del sistema)
  • El precio sube y rompe arriba de las líneas de la nube Kumo (indicador ZB Cloudlines).
  • Se abre la posición de compra cuando aparece la flecha alcista del indicador Fast MA Arrow.
  • No se deben abrir operaciones de compra cuando el precio está arriba de los niveles pivote R2.
  • Stop inicial: Se puede colocar el stop loss inicial debajo del nivel de soporte previo.
  • Toma de ganancias: Se cierran las operaciones de compra abiertas con ganancias cuando el precio alcanza el siguiente nivel pivote de resistencia.

Operaciones de venta

  • Indicador Kumo Breakout Histo presenta barras rojas (señal bajista, filtro inicial del sistema)
  • El precio baja y rompe debajo de las líneas de la nube Kumo (indicador ZB Cloudlines).
  • Se abre la posición de venta cuando aparece la flecha bajista del indicador Fast MA Arrow.
  • No se deben abrir operaciones de venta cuando el precio está debajo de los niveles pivote S2.
  • Stop inicial: Se puede colocar el stop loss inicial arriba del nivel de resistencia previo.
  • Toma de ganancias: Se cierran las operaciones de venta abiertas con ganancias cuando el precio alcanza el siguiente nivel pivote de soporte.

Ejemplos de señales del sistema

Gráfico del par GBP/USD con 4 señales de trading del sistema Kumo

En la imagen anterior vemos un gráfico de precios de 5 minutos del par GBPUSD, en donde se aplicó este sistema de trading intradía Kumo. Como podemos ver, el sistema produce varias señales, 2 señales de compra y 1 señal de venta bastante claras. En las señales de compra el precio está arriba de la nube Kumo, una señal bajista, el indicador Kumo Breakout Histo presenta barras verdes, otra señal alcista, y una vez que aparecen las flechas alcistas del indicador Fast MA Arrow se abre la posición de compra. En ambas señales de compra el precio sube y podemos cerrar las operaciones con ganancias.

En la señal de venta, primero tenemos que el precio rompe a la baja la nube Kumo, y esta señal bajista es confirmada por el indicador Kumo Breakout Histo que presenta barras de color rojo. La posición de venta se abre cuando aparece la flecha bajista del indicador Fast MA Arrow.

Sistema de trading

Sistema de trading de rompimientos Kumo
El sistema de trading que vamos a presentar en este artнculo es una estrategia de trading intradiario basado en el indicador Ichimoku Kynko Hyu, el cual fue desarrollado en Japуn junto con tantas otras interesantes herramientas de anбlisis del mercado. []

Este sistema de trading intradнa en Forex se caracteriza por abrir posiciones durante las horas de menor volatilidad, para cerrarlas cuando lleguen los momentos de mayor movimiento.
Sistema de momentum . []

El sistema de Trading Bill Williams tambiйn hace hincapiй en alinearse con el mercado, basбndose en el supuesto de que lo que a menudo mueve a los mercados tiene poco que ver con valoraciones objetivas y mucho mбs con «percepciones de valor». []

Los mejores corredores de opciones binarias 2020:
  • Binarium
    Binarium

    1er lugar! El mejor broker de opciones binarias!
    Ideal para principiantes! Entrenamiento gratis! Bonos de registro!

  • FinMax
    FinMax

    Broker honesto!

con Walk-Forward
A la hora de hacer trading, uno de los mayores problemas que puedes encontrarte es que las estrategias que crees no sean capaces de mantener un buen desarrollo en el futuro.

definido: Uno de los elementos mбs importantes para tener йxito en el mercado financiero, es mantener una constancia en la aplicaciуn de una estrategia.

algorнtmico que opera automбticamente en su MetaTrader.
Bitcoin
La primera moneda digital internacional que funciona sin un banco central.

de las tortugas
Comparte este artнculo
SI TE HA GUSTADO ESTE ARTНCULO, TE RECOMENDAMOS LEER: .

Buscar o alcanzar el

perfecto para un mercado de valores imperfecto.

Vamos a suponer que nuestro

nos indica que podemos entrar en compra en el par de divisas EUR/USD en 1.3150 con un stop loss en 1.3100. Supongamos que segъn nuestra gestiуn del riesgo y capital disponible el tamaсo ideal de la posiciуn sea de 1 lote.

Hoy vamos a repasar nuestro

en cуmo estбbamos en un dнa en el que habнa pocas oportunidades para abrir operaciones en bolsa.

Si una idea, indicador,

o mйtodo de inversiуn promete altos beneficios sin ningъn riesgo. desconfнa. Sй escйptico y busca tus propias conclusiones ante las miles de ideas que puedes analizar. Piensa que un buen sistema falla incluso mбs veces de las que acierta, el secreto es maximizar esas ganancias.

Ahora bien, esto es para un

equivalente.
Otros sistemas de trading con otros stops H, J, o K, nos darбn unas equivalencias diferentes.
Lo que quiero que veas es que el ATR nos puede servir de barуmetro a la hora de aplicar sistemas a activos muy diferentes.

Total, en resumen, que me estб gustando mucho el backtesting con este

que estoy haciendo, es una estrategia muy interesante y que tiene muy buena pinta ademбs de ser sencilla y que admite una buena gestiуn del riesgo sin tener que ir con prisas en las entradas salidas del mercado.

del day trader suele estar formado por multitud de seсales cuya acciуn conjunta genera una seсal de compra o venta. Las seсales de trading forex estбn disponibles de forma gratuita o previo pago, aunque los operadores tambiйn pueden desarrollar sus propias seсales.

que genere seсales con el cruce del momento con al lнnea 0 que se filtra con una media mуvil de tal forma que las seсales de compra son validas cuando se produce el corte del momento por encima de la lнnea de 0 y los precios por encima de la media mуvil.

A muchos les sonarб la palabra trading, que proviene del analisis tйcnico, un trader es el que analiza la posibilidad de vender o comprar un valor en torno a los anбlisis estadнsticos, matemбticos y grбficos que su

le ofrece. Un buen ejemplo de esto serнa: Trading: El estudio de las tres emes.

que aъn no parece que hayan calado entre el pъblico en general ni entre la mayorнa de los analistas, ni parece claro que proporcionen mejores resultados que las decisiones basadas en el anбlisis grбfico, tйcnico o en el anбlisis fundamental, o las basadas en un

diseсado por un inversor particular, .

Si usted no utiliza estas herramientas, ya sea porque no tiene tiempo o porque no posee los conocimientos para aplicarlas, esto no serб un inconveniente, pero si por ejemplo desea crear un

automбtico, muchas plataformas no le servirбn para esto.

UNIVERSIDAD PILOTO DE COLOMBIA INVESTIGACIÓN FINAL PREGRADO. Ichimoku Kinko Hyo e implementación de trading Algoritmico. David Ricardo Balaguera Mesa

    Jaime San Martín Moreno hace 1 años Vistas:

1 UNIVERSIDAD PILOTO DE COLOMBIA INVESTIGACIÓN FINAL PREGRADO Estrategias de trading para la paridad EUR/USD a través de la optimización del indicador Ichimoku Kinko Hyo e implementación de trading Algoritmico. David Ricardo Balaguera Mesa 11/23/2020 Este trabajo se basa en el indicador Ichimoku Kinko Hyo, modificado para generar estrategias cuya aplicación se constituye en un prototipo de trading algorítmico de comercio electrónico implemetado en el lenguaje MQL4.

2 2 Contenido 1. Resumen Abstract Introducción Planteamiento del Problema Objetivo General Objetivo Especificos Justificación Marco Referencial Marco Conceptual Marco Teórico Ichimoku Kinko Hyo Estrategias Ichimoku Estrategia de Trading Parámetros Datos Históricos Metodología Aristos Modificaciones al Indicador Ichimoku Kinko Hyo Herramienta de Backtesting Algoritmo de Control Algoritmo-I Ejecución del Algoritmo-I Modificación del Algoritmo-I Malas prácticas Comercio Electronico Trading Electrónico en el Mercado Forex Metaeditor de Metatrader Programación en el Metaeditor Asesor Experto Prototipo de Asesor Experto para Ichimoku Kinko Hyo Variables externas Función Principal Cálculo de ordenes vigentes en mercado Apertura de Posiciones Cierre de Posiciones Consideraciones adicionales cruces de promedios o parámetros de indicador Resultados Resultados 15 minutos

3 Resultado 60 minutos Resultado 240 minutos Análisis Backtesting Análisis Optimización Resultados del Prototipo Asesor Experto Ichimoku Conclusiones Recomendaciones Referencias

4 4 1. Resumen La investigación plantea una estrategia de inversión para la paridad EUR/USD a través del indicador técnico conocido como Ichimoku Kinko Hyo propuesto por Goichi Hosada en Se plantea una configuración óptima de los parámetros del indicador que surge de la modelación y programación de algoritmos, además se propone el código en mql4 para modificar el indicador en la plataforma metatrader 4.0 dando como resultado una estrategia con el 51% de eficiencia y pips.

5 5 2. Abstract The research proposes an investment strategy for the EUR/USD parity through technical indicator Ichimoku Kinko Hyoof Goichi Hosoda proposed in 1930, raises the optimal parameter settings of the indicator arising from the modeling and programming algorithms and proposes the MQL4 code to modificated the indicator in metatrader 4.0 platform. Resulting in a strategy with 51% of eficiency and pips of profit.

6 6 3. Introducción A través de los años, la cuantificación y transferencia de los poderes adquisitivos (Muñoz, 2003) ha presentado importantes variaciones en la fijación de las cotizaciones para las monedas de los diferentes países, que generan fluctuaciones diarias de los tipos de cambio, creando un mercado en sí y generando oportunidades de especulación, inversión y arbitraje, en donde se intercambian a diario el valor de una divisa con respecto a otra (Soto, 2001), de forma dinámica y en un número de operaciones cada vez mayor desde sus orígenes. Las aproximaciones de los inicios del mercado de divisas se remontan al año 1875 con el surgimiento del patrón oro, indicando que una divisa consta del valor que representa su equivalente en oro, sin embargo este tipo de sistema presentaría problemas durante la primera y segunda guerra mundial (Calicchio, 2020) cuando los países transformaron sus divisas extranjeras en oro ante la llegada del conflicto. Como consecuencia, se presentó una importante inestabilidad en el sistema, prefiriendo adoptar una nueva norma internacional, que se conoce como el acuerdo de Bretton Woods, el cual fijó el valor de las demás monedas al dólar estadounidense y éste a su vez se fijó al precio del oro ( 35usd por onza de oro) (Rahnema, 2007). La disolución del tratado se presentó en 1971, y trajo como consecuencia el mercado cambiario actual en donde el dólar estadounidense ya no se intercambia por el oro, aumentando así la volatilidad en los precios de las diferentes divisas de los países industrializados; dando como consecuencia el incremento en la volatilidad de las divisas en general (Morandé, 2002), que a su vez provocó significativos movimientos, útiles en la negociación de estos instrumentos.

7 7 La inversión o negociación en el mercado de divisas es la compra o venta del poder adquisitivo de la moneda de un país o de una zona, las fluctuaciones de este poder de compra de la divisa con respecto a otra se generan en esencia por la existencia de una oferta y una demanda del tipo de cambio, este es afectado por la variación de la suma intercambiable de la divisa frente al precio de los diferentes productos comercializados en los diferentes mercados globales, lo anterior hace posible que en un instante se fije dicho precio y que cambie en otro periodo con gran velocidad (Crespo, 2008). Gracias a la variación de los tipos de cambio se puede lograr beneficios en la operación sobre los mismos, partiendo de la especulación financiera del futuro comportamiento de dichas fluctuaciones. La toma de decisiones de inversión en este tipo de mercado se realiza por medio de un análisis previo del mismo; existen dos principales enfoques o tipos de análisis: el primero muestra las fluctuaciones como un compendio de las consecuencias de los datos económicos, política gubernamental, condiciones socio-políticas, noticias y rumores de inversión, este es conocido como análisis fundamental (Chen, 2009); el segundo se conoce como análisis técnico y se basa en una serie de indicadores, que son aplicados a datos históricos con el fin de obtener los mejores momentos para entrar y salir del mercado. Gran parte de este tipo de análisis se basa en patrones psicológicos que revelan el comportamiento alcista o bajista del mercado y dado que estos patrones han funcionado bien en el pasado, se asume que seguirán funcionando bien en el futuro, es decir que se parte de la premisa de que la historia se repite (Murphy, Análisis Técnico de los mercados financieros, 2003). Otro aspecto que se considera como fundamento del análisis técnico es que precio contiene todos los datos y noticias relevantes sobre el activo o instrumento, debido a que los traders ya han incorporado toda la información fundamental, es decir que el precio descuenta todos elementos fundamentales en el instante en que se difunden.

8 8 En la primera parte de este documento se analizará técnicamente una aplicación del indicador Ichimoku Kinko Hyo a los datos históricos de la paridad Euro/Dólar, con el objetivo de identificar patrones de comportamiento mediante el cálculo de precios medios que realiza este indicador, característica esencial del Ichimoku Kinko Hyo que resulta útil para el mercado de divisas, y mercados manipulados en el periodo de cumplimiento (Elliot N., Creating Ichimoku charts, 2007, p. 14), permitiendo promediar la volatilidad inherente de los precios y compararlos mediante el desplazamiento de los rangos medios de negociación. Además, los componentes del indicador permiten fijar niveles de soporte y resistencia, logrando establecer una hipótesis de comportamiento para el futuro de la paridad, basándose en el uso de los componentes del indicador aplicados al seguimiento de la tendencia, obteniendo como resultado la estrategia de inversión en el instrumento EUR/USD. Investigaciones sobre las estrategias de inversión basadas en el indicador parten de las señales generadas por los cinco componentes del mismo y la distancia de estos con respecto al precio, dando resultados cercanos a los 900 pips anuales (Patel, 2020, p. 138). Otras se enfocan en la aplicación de dos de los cinco componentes claves, resaltando sus propiedades como pertinentes para el refinamiento de señales de entrada y salida, mediante el uso de estos como filtros de aquellas señales, el resultado es una clara disminución de las pérdidas en las estrategias de trading (Lashinski, 2008); el Ichimoku Kinko Hyo puede dar en mercados con tendencia señales con un nivel de confianza que sea cercano al cincuenta por ciento, y luego de indicar dicha entrada, el movimiento de los precios puede desarrollarse con bastante fuerza (Shah, 2020).

9 9 Los elementos anteriormente expuestos, como lo son el crecimiento de la rentabilidad, refinamiento de las señales y eficiencia en el seguimiento de la dirección de los precios, se convierten en los principales argumentos para la decisión de seleccionar cuatro de los cinco componentes del indicador Ichimoku Kinko Hyo y su posterior aplicación en la estrategia de inversión. Este documento se centra en la búsqueda de la combinación apropiada de los cuatros componentes elegidos, en donde se demuestra un importante incremento del beneficio neto, mediante el filtrado de las señales, manteniendo una eficiencia acorde al seguimiento tendencial, para su posterior implementación de una estrategia de trading. Luego de la explicación del indicador y de la estrategia se describirá y ampliará la información sobre los resultados del backtesting de los datos históricos y su ejecución, la cual parte de un conjunto de procesos finitos y definidos que se define como algoritmo (Fadul, 2004, pp ) para el testeo de los datos, el cual fue implementado en el lenguaje de Visual Basic creado y comercializado por Microsoft (MACKENZIE, 2003). El resultado de los procesos anteriormente descritos muestra un total en pips de comprendidos entre Enero de 2000 y Octubre de 2020, indicando un nivel de confianza del 51% y una relación ganancia-pérdida de 5:1, además se destaca el valor significativo de la esperanza matemática que corresponde a 43.9.

10 Planteamiento del Problema Cuál es la eficiencia, rentabilidad y confiabilidad de las estrategias de inversión propuestas, basadas en el indicador técnico Ichimoku para facilitar la inversión de perfiles con riesgo moderado en la paridad EUR/USD? 3.2 Objetivo General Evaluar la eficiencia, rentabilidad y confiabilidad de las estrategias de inversión basadas en el indicador técnico Ichimoku Kinko Hyo para la paridad EUR/USD, en los marcos de tiempo de 15 minutos, 60 minutos y 240 minutos, bajo la metodología de backtesting ARISTOS, con el fin de brindar a los inversionista una nueva herramienta de gestión óptima para la toma de decisiones en el mercado de divisas. 3.3 Objetivo Especificos De acuerdo a la taxonomía de Bloom se presentan los siguientes objetivos específicos: Comprobar las operaciones indicadas por la configuración básica de los parámetros del indicador. Implementar un algoritmo que permita definir la configuración óptima de los parámetros del indicador, a través de condicionales que generen mejoras a las presentes limitaciones del indicador Ichimoku Kinko Hyo. Comparar la configuración por defecto con los resultados del algoritmo recursivo con el fin de determinar los rangos óptimos de los parámetros del indicador. Diseñar un prototipo de algoritmo de comercio electrónico con los valores óptimos de los parámetros del indicador Ichimoku Kinko Hyo, con el fin realizar operaciones de trading de forma automática.

11 11 4. Justificación Anteriormente solamente los grandes inversionistas podían acceder al mercado Forex a través de los bancos, los cuales realizaban grandes transacciones en las diferentes paridades para operaciones de negocios internacionales e inversiones. Como consecuencia de un margen bajo y un alto apalancamiento, se ha cambiado la estructura y la forma de operar en el mercado interbancario de divisas, logrando la inclusión de nuevos inversores minoritarios (Universidad del Cema, 2020), lo que finalmente se traduce en mayores montos negociados. Según el Banco Internacional de Cumplimientos (BIS por sus siglas en ingles) el mercado Forex asciende a 5.3 billones de dólares negociados diariamente registrados a Abril de 2020, esta cifra es superior en 1.3 billones a la registrada en el 2020 y mayor en 2 billones a la reportada el (Ayala, 2020); entre 2020 y 2020 el crecimiento global del mercado de divisas se estimó en 35%, muy superior al incremento del periodo comprendido entre 2007 y 2020 que fue del 19% (Bank For International Settlements, 2020). Por tanto se prevé que para la siguiente década las transacciones logren un crecimiento del 136%, aunque algunas investigaciones estiman un incremento alrededor del 300%, (Banca y Finanza, 2020, pág. 2), que puede ser mayor a causa del volumen negociado diariamente. Las anteriores cifras de crecimiento de las transacciones son sustentadas por el ingreso de nuevos operadores de mercado, motivados por el deseo de obtener rentabilidad y por la facilidad en el proceso de apertura y operación de las cuentas de trading. Estos nuevos traders de mercado, toman decisiones basándose en sus teorías, expectativas y estrategias; realizando operaciones en el corto, mediano y largo plazo, siendo las de corto plazo las de mayor preferencia debido a la especulación financiera (Caicedo & Gaviria, 2020).

12 12 Los factores descritos anteriormente (potencial crecimiento, el manejo de la información por parte de los nuevos operadores, expectativas, especulación), estimulan un comportamiento aleatorio en los precios de los activos, incidiendo directamente en la volatilidad (Marisol Esteban Galarza, 2006) y por ende contribuyendo a la difícil estimación del riesgo financiero causado por la dificultad de predicción de los factores mencionados, además de aspectos fundamentales como la moratoria fiscal y externa, política gubernamental – que hace compleja la predicción del comportamiento spot de la divisa (Palacios, 2003, pp. 228,229) – y el pronóstico del riesgo de tipo de cambio, el cual por definición se entiende como el riesgo derivado de las fluctuaciones en las monedas (Diego Gomez Caceres, 2002, pp ). Sin embargo, desde la perspectiva de la rentabilidad, éste comportamiento también brinda oportunidades para los inversionistas (Joaquin Arias, 2003, pp. 6,7), justificando así la existencia de los mercados. De esta manera, la mitigación del riesgo y la generación de rentabilidad en cada una de las operaciones de trading dependen de los instrumentos y herramientas adecuadas los cuales pretenden abordar esta investigación. Uno de los instrumentos que pueden brindar estas características (Riesgo bajo y aumento de rentabilidad) son los sistemas de trading basados en análisis técnico y en específico que contemplen indicadores con características tales como la identificación de la dirección de la tendencia del mercado, fuerza o agotamiento en el momentum (Stanley, 2020, pp ) y las zonas óptimas de entrada, salida y consolidación, partiendo de las principales resistencias y soportes (Kovacs, 2020).

13 13 Un indicador que cumple con estas características es conocido como Ichimoku Kinko Hyo de Goichi Osada. Sin embargo, para este indicador existe una amplia cantidad de configuraciones de los parámetros tales como Tenkan Sen, Kijun Sen, Senkou B, Kumo, etc. De estos parámetros no existe información científica debidamente validada sobre la configuración que proporcione la alineación óptima de estos parámetros cuando existe una variación en el desplazamiento del Kumo o nube, es decir el número de periodos de adelantamientos (Elliot N., Ichimoku Charts An introduction to Ichimoku Kinko Clouds, 2007, p. 29). Por tanto, se hace necesario comprobar su verdadera eficiencia con la finalidad de que los traders tengan una mejor herramienta para la toma de sus decisiones de inversión, basada en los periodos, adelantamientos y marcos de tiempos óptimos de estos parámetros. Dada la cantidad de configuraciones del indicador, la búsqueda de esta configuración óptima se traduce en un problema de combinatoria de los parámetros, por eso es pertinente el diseño e implementación de un algoritmo que evalué las diferentes combinaciones del indicador aplicados a la paridad EUR/USD. Paridad que se toma como referencia por su liquidez, concentración en el volumen negociado y por la facilidad en la consecución de la información histórica, los cuales son los datos de entrada que se tendrán en cuenta para la comprobación de la eficiencia del algoritmo. Si bien los resultados del algoritmo arrojan resultados contundentes y confiables es necesario no asumir que esta configuración es óptima para cualquier tipo de paridad dada las diferencias en los movimientos de los precios.

14 14 5. Marco Referencial 5.1 Marco Conceptual El análisis técnico es un tipo de estudio realizado al comportamiento del precio con el fin de predecir su movimiento futuro, existe varios lineamientos, que a lo largo del tiempo se han convertido en los fundamentos de este tipo de análisis, uno de los principales es que el precio será determinado siempre por las expectativas de los ofertantes y demandantes, los cuales enviarán el precio hacia abajo si existe demasiada oferta o por el contario subirá si el precio encuentra una buena cantidad de demanda (Kirpartrick & Dahlquist, 2007, p. 17). Otro lineamiento del cual parte el análisis técnico es que el precio descuenta a través de medias toda la información que puede afectar la oferta y la demanda, es decir que el mercado descuenta con mayor peso aquellos escenarios más probables, incluyendo todos los datos que puedan afectar la cotización (Brun, Elvira, & Puig, 2008, p. 125). Si los precios incorporan la información de los inversores, también implícitamente los mismos incluirán sus expectativas, por lo tanto la información incorporada es comparada con eventos pasados para definir una relación de patrón en el precio, con lo cual se basa en la creencia de que la historia se repite (Cabedo, 2004, pp. 21,22). La incorporación de la información no es del todo racional, existe un grado de ineficiencia para que la actividad del trading ofrezca a los operadores oportunidades, esto puede ser explicado con el Behavioral Finance, en donde los traders basan sus decisiones en estados emocionales. Lo anterior se encuentra en oposición con la creencia del paseo aleatorio de los

15 15 precios, en donde se asume que todos los participantes actúan de forma racional en el análisis y la forma de incluir la información al mercado (Weissman, 2005, p. 25). Varios estudios concluyen que en la búsqueda de la predictibilidad de los retornos sobre activos, se encuentran algunos patrones que pueden ser utilizados por el análisis técnico, además evidencia empírica indica que la predicción puede partir del precio actual, precios históricos y otras variables, con el fin de generar rendimientos poco normales. Estos estudios son una base, que desafía la hipótesis de la eficiencia de mercado, y donde se explica la existencia de posibles vacios que conducen a retrasos en la absorción de la información incluida en el precio (Mashaushi, págs ). Otras propuestas que se evidencian son los modelos que analizan el comportamiento grupal o de manada, el cual puede ser responsable de los diferentes eventos como el stock market crash of 1987, el cual mostró que este tipo de conducta de los operadores puede resultar en información ineficiente, argumentando que los traders pueden generar una ganancia con el uso del chartismo, creando un escenario propicio para la especulación (Mashaushi, pág. 31). El uso del análisis técnico en el Mercado Foreign Exchange ha demostrado ser rentable, el cual puede alcanzar un rendimiento anual neto que oscila entre 3% y 11% para las monedas majors en el mercado de futuros, al igual que en el mercado spot, donde también se obtuvo ganancias en el periodo a finales de la década de los 70 e inicios de la década de los 90, este resultado es dado con la aplicación del promedio móvil, el cual indica señales que son generadas por la tendencia vigente en el mercado (Mashaushi, pág. 38).

16 16 Otros estudios en donde se investigaron seis tipos de cambio (Marco, Yen, Libra Esterlina, Franco suizo, Marco/Yen, y Libra Esterlina-Franco suizo) en el periodo comprendido de 1974 a 1995, se obtuvo un retorno promedio neto anual por cada portafolio de 100 reglas de trading por cada tipo de cambio dando un rango del 1%-6%, excediendo en varios casos los retornos de la estrategia de comprar y mantener, dichas negociaciones fueron tomadas por una estrategia de trading con 50 reglas que debían dar señales para poder tomar posiciones largas o cortas en 3 paridades (dólar/marco, dólar/yen, marco/yen). Lo anterior sugiere que el análisis técnico es capaz de general patrones que son económicamente importantes, estos se pueden considerar sobre 13% y el 19% anual para el Marco y el Yen en el periodo comprendido entre 1973 y 1994, evidenciando un retorno superior que la estrategia clásica de comprar-mantener y mucho más alto que el promedio de los rendimientos del índice S&P500, considerando los costos transaccionales, diferenciales de interés y el riesgo (Mashaushi, pág. 38). En esta parte del documento se explicará qué es un promedio móvil, concepto básico para la comprensión de este indicador, luego backtesting, lote, y los tipos de órdenes. Promedio Móvil Este un indicador técnico del cual pueden derivarse otros indicadores, el promedio móvil es muy útil para lograr definir una tendencia (D.KIRKPATRICK & DAHLQUIST, 2007, pág. 271). Este es calculado como un precio promedio en un determinado tiempo, el cual se va desplazando en él mismo, dado que toma los n periodos o elementos definidos como parámetros del promedio móvil, estos no solamente pueden tomar los precios de cierre de la sesión sino que

17 17 el promedio también puede tomar las aperturas, los máximos o simplemente los mínimos. Otra variación que se aplica es la de adelantar el promedio un determinado número de periodos, por ejemplo si el valor del número de adelantos es dos, en el cálculo se excluirán los últimos dos datos (Arias, Lizarazo, Rodríguez, & Segura, 2003, pág. 16). Backtesting Es un proceso de evaluación utilizado para medir varios parámetros en la serie histórica de precios con el fin de comprobar la rentabilidad, eficiencia, número de operaciones, frecuencia de las operaciones, y mediciones de riesgo entre otros indicadores; cuyos resultados son tomados en cuenta para la optimización e implementación de la estrategia de trading. Volatilidad Es una medida de intensidad de la variación en los precios de una activo financiero, usualmente se relaciona la volatilidad con la medida estadística de dispersión como es la desviación estándar para cuantificar dicha variación en un horizonte de tiempo. Pip Es el mínimo cambio del precio de una divisa, que representa mediante la variación del cuarto decimal de la cotización de una paridad. A través del pip se calculan las ganacias o pérdidas en las operaciones del mercado de divisas.

18 18 Take Profit Es la máxima ganancia predefinida para el cierre automático de una operación, cuya medición estará dada por el trader o condicionada a un modelo o estrategia de negociación. Este tipo de acción contribuye a la gestión sobre la administración del capital invertido. Stop Loss Es un tipo de orden automática que limita las pérdidas en que pueda incurrir una operación, esta orden está condicionada a un tipo de precio determinado, limitando así los riesgos propios en la negociación de activos financieros. Tendencia Desde el punto de vista del análisis técnico, una tendencia es un movimiento direccional de los precios que permanecerá en el tiempo, lo suficiente para ser identificada y operable, con una magnitud y longitud adecuada para ser rentable (Kirkpatrick & Daulquist, Technical Analysis,The Complete Resource for Financial Market, 2007, p. 10). En los postulados propuestos por Charles Dow, se mencionan tres tipos de tendencias, en primer lugar se puede encontrar una tendencia primaria, esta suele abarcar un periodo que va de uno a varios años y refleja comportamientos al alza como a la baja en la dirección de los precios (Delgado, El Analisis técnico bursatil: Como ganar dinero en los Mercados Financieros, 1998, p. 15).

19 19 La tendencia primaria es caracterizada por tres distintas etapas o fases, por ejemplo en un comportamiento alcista, que suele iniciarse al darse una acumulación de títulos por parte de los inversores hábiles, que usualmente son los que más tienen acceso a la información, y cuyas expectativas conducen a un alza de la cotización de los títulos en el futuro (Delgado, El Analisis técnico bursatil: Como ganar dinero en los Mercados Financieros, 1998, p. 15), es decir la compra informada que hacen los inversores más astutos. Si la tendencia anterior era descendente, en este momento esos astutos inversores asumen que el mercado ha asimilado las malas noticias, esta fase recibe el nombre de acumulación (Murphy, Analisis Tecnico de los Mercados Financieros, 2003, p. 52). La anterior subida es consecuencia de que las empresas mejoran sus expectativas de beneficio y los resultados económicos actuales son favorables, a ese mercado acude gente de toda clase y condición con el fin de ganar dinero rápidamente, pueden darse compras indiscriminadas de títulos, mientras que los expertos comienzan a vender suavemente, ya que consideran que la fase al alza ha sido muy prologada, y por ello los precios de los títulos están demasiado inflados (Delgado, El Análisis Técnico Bursátil: Como ganar dinero en los Mercados Financieros, 1999, p. 15), esto se conoce como fase de participación pública. Luego de algunas caídas súbitas se convierten en pánico entre los pequeños inversores, que trae como resultado una fase bajista, hasta que los expertos observan, analizan, y según sus estimaciones buscan oportunidades de compra e ingreso al mercado (Delgado, El Análisis Técnico Bursátil: Como ganar dinero en los Mercados Financieros, 1999, p. 15), esta fase se conoce como una distribución por parte de los inversores mejor informados.

20 20 La tendencia secundaria o intermedia suele tener una duración de entre uno y cuatro meses, esta suele darse tras un fuerte retroceso de una tendencia primaria, también suele corregir un tercio y dos tercios del movimiento anterior de la tendencia y con mayor frecuencia alrededor de la mitad, o 50% del movimiento previo. Según Dow, la tendencia menor (o duración corta) suele durar menos de tres semanas. Esta tendencia de corta duración representa las fluctuaciones de la tendencia intermedia (Murphy, Analisis Tecnico de los Mercados Financieros, 2003, p. 52). Es importante mencionar que la segunda fase de las tendencias primarias, es donde la mayoría de los sistemas técnicos basados en seguidores de tendencia comienzan a identificar los movimientos existentes en el mercado, dando señales de entrada al mercado (Murphy, Analisis Tecnico de los Mercados Financieros, 2003, p. 57). A continuación se ampliará la información a cerca de los seguidores de tendencia en la aplicación del análisis técnico en la búsqueda de retornos en estrategias dinámicas. El concepto de seguidor de tendencia significa que nunca se comprará en un valle y se venderá en una cima, las estrategias basadas en estos sistemas presentan un retardo en la generación de señales, es decir que las anteriores son demoradas frente a la acción del precio, pero se pueden obtener ganancias en la dirección de la misma. Los principios de los seguidores de tendencia parten de algunos supuestos: El primer de los supuestos es la ocurrencia regular de la tendencia del precio, que son resultado de una variedad de factores. El segundo es que las tendencias van hacia arriba y hacia abajo todo el tiempo en el mercado; los datos y toda la información es reflejada en la tendencia del precio y finalmente en

21 21 los indicadores; los seguidores de tendencia parten de este lineamiento, quizás no todo el tiempo o pocas veces pero los movimientos son los suficientemente prolongados para cubrir las pérdidas asumidas por la estrategia, porque cuando el precio se encuentra sin dirección, o su movimiento de alguna forma es visto como un rango, es donde el seguidor de tendencia no es rentable (Clenow, 2020, pp. 7,8) (Fong & Tai, 2009). El tercero asume que las estrategias basadas en el seguimiento de la tendencia puede posibilitar la acumulación de ganancias de la tendencia, donde la mayoría de beneficio se obtienen cuando la estrategia lográ sincronizarse con la tendencia (Fong & Tai, 2009). El objetivo de los seguidores de tendencia es la búsqueda de estrategia que minimicen las pérdidas que puedan ocurrir en periodos sin tendencia o cuando el precio se mantiene oscilante entre un rango, y lograr maximizar las ganancias durante el desarrollo de la tendencia, caso contrario para un sistema intradia en donde en el corto plazo las ganancias y pérdidas son principalmente indicadas por la volatilidad del precio (Harris, 2008, p. 57). Desde el punto de vista de la maximización de la rentabilidad la mayoría de traders prefieren sistemas que generen un factor de ganancia de por lo menos 2, lo que significa que la cifra de ganancia duplica las pérdidas. La mayoría de sistemas intradia tienen un bajo factor mientras que los seguidores de tendencia usualmente tienen grandes factores de ganancia (Harris, 2008, p. 50). Los seguidores de tendencia son aplicados con diferentes metodologías, por ejemplos se basan en tipos de estrategias de momentum que pueden vender los peores rendimientos en la operaciones cuando se realiza un seguimiento tendencial. Las reglas básicas para estos seguidores de tendencia se basan en promedios móviles, sin embargo se desconoce si es el mejor

22 22 precio de referencia a una semana, un mes, un año, o un trimestre. Algunos seguidores de tendencia ponderan más los últimos movimientos, evaluando rompimientos y aceleraciones en la acción del precio, para analizar la fuerza de la señal, además de verificar la frecuencia de los movimientos, con adiciones de stop loss y take profit y el manejo de bandas para el trading con mercados altamente volátiles. Ajustando o no posiciones de acuerdo a la volatilidad objetivo o en función del nivel de volatilidad (Ilmanen & Asness, 2020, pp ). Uno de los indicadores que permite el desarrollo de estrategias de trading adecuadas a la tendencia es el Ichimoku Kinko Hyo, este es un seguidor de tendencia que visualmente indica varios aspectos como la dirección, fuerza, niveles de retroceso y proyección, además de momentum y equilibrios del mercado (Padia, Ichimoku Kinko Hyo – A Complete Trading System, 2020). A continuación se ampliará la información de este indicador.

23 Marco Teórico Ichimoku Kinko Hyo. Es un indicador de análisis técnico que está compuesto por diferentes componentes que trabajan conjuntamente, evaluando el movimiento tendencial debido a sus características de seguidor de tendencia, momentos de consolidación del precio y niveles de soporte o resistencia. Además la presencia de la principal característica que se conoce como Kumo o nube, ayuda a evaluar la lateralización de los precios, donde los rompimientos de otros componentes sobre el Kumo pueden mostrar alguna tendencia que va a desarrollarse próximamente. Este indicador fue desarrollado a finales de los años 30 por Goichi Hosada, quien pasó varios años modificando este indicador, su objetivo específico era desarrollar un indicador que ayudara a los traders a visualizar soportes y resistencias para la tendencia vigente. Este indicador es comparado con el uso tradicional del promedio móvil, sin embargo en el cálculo de cuatro de sus componentes se utilizan los precios máximos y mínimos de los periodos evaluados. Hosoda creía que los precios medios reflejaban mejor el movimiento del valor del activo, que la media de los precios de cierre (Muranaka, p. 2). El Ichimoku Kinko Hyo es muy utilizado en los círculos de traders asiáticos y su aplicación se ha venido incrementando en el mundo occidental, dado que es una importante herramienta para la identificación de tendencias de más largo plazo, demostrando ser una herramienta mucho más poderosa que un promedio móvil simple sin desplazamiento, dada la

24 24 capacidad propia del indicador de reconocer que las tendencias tienen dos componentes: tiempo y precio, incluyendo movimientos de corto plazo en el cálculo de otros componentes de más largo plazo, generando una proyección del probable desarrollo de la tendencia (Dolan, 2008), con la evaluación de avances y retrasos de los precios para el cálculo de sus componentes. Dentro de los componentes del Ichimoku Kinko Hyo se encuentran, el Tenkan Sen, Kijun Sen, Chikou Span, Senkou Span A, Senkou Span B (ver Figura 1), los cuales se explicarán a continuación, basados principalmente en el libro Trading With Ichimoku Clouds de Manesh Patel. TenkanSen ChikouSpan SenkouSpan A SenkouSpan B KinjunSen Figura 1. Componentes del indicador Interracción de los todos los componentes en un movimiento alcista. Fuente Metatrader 4.0 (2020).

25 25 Tenkan Sen Este componente se define como el promedio entre el máximo y el mínimo precio alcanzado, de los últimos n periodos, cuyo cálculo se realiza de siguiente fórmula: Tenkan Sen = Mayor Máximo + Menor Mínimo 2 Para n periodos [1] La configuración básica del indicador empleada como valor de (n) son 9 periodos, evidenciando a su vez el nivel de soporte o resistencia temporal cuando el mercado presenta un comportamiento lateral y sin ninguna pendiente. Así mismo, el componente apunta en la misma dirección del movimiento del precio de mercado, revelando la existencia o no de tendencia, es decir, si el precio se desarrolla constantemente cerca de la línea Tenkan Sen se esperan pocos retrocesos, sugiriendo una baja interferencia de la volatilidad sobre la tendencia. Kinjun Sen Presenta la misma naturaleza del Tenkan Sen pero se encuentra configurado con un número mayor de periodos (n) que los definidos en el anterior componente, por tanto es menos sensible al movimiento de los precios. Éste se realiza bajo la siguiente fórmula: Kinjun Sen = Mayor Máximo + Menor Mínimo 2

26 26 Para n periodos [2] La configuración habitual de este componente emplea como valor de (n) 26 periodos evidenciando los siguientes aspectos: Un nivel de soporte o resistencia temporal más fuerte que la del Tenkan Sen cuando se muestra lateral y sin ninguna pendiente. Una dirección correlacionada con la tendencia vigente del mercado. Adicionalmente, indica la fortaleza o momentun para la toma de posiciones. Una ligera consolidación a corto plazo si el Kijun Sen presenta un comportamiento aplanado; en este caso la probabilidad de un Pullback o reversión del mercado es alta y por tanto los operadores deben proceder con precaución. Un Kijun Sen cercano al precio con incrementos ligeros y constantes, evidencia baja interferencia de la volatilidad en la tendencia vigente. A mayor distancia entre el precio y la línea Kinjun Sen aumenta la probabilidad de encontrar un pullback. Chikou Span El tercer componente dibuja el precio de cierre de 26 periodos atrás. Este es un indicador de momentum es decir, puede mostrar si la tendencia tiene posibilidades de ocurrir o no. La Chikou Span muestra diferentes aspectos del comportamiento del precio como:

27 27 La primera inferencia básica de componente es mostrar si el precio actual está arriba o debajo del precio de hace 26 periodos. Indicar si el precio se encuentra en una consolidación o no, es decir si la Chikou Span está muy cerca o tocando al precio de hace 26 periodos. Caso contrario en donde la Chikou Span se encuentra en espacio abierto o muy lejano del precio de 26 periodos atrás, estaría indicando una gran probabilidad de la vigencia de la tendencia. Se puede utilizar un recuadro para visualizar la consolidación de precio frente a línea Chikou Span (ver Figura 2). Figura 2 Chikou Span Uso del componente como indicador de momentum. Fuente: Metatrader 4.0 (2020).

28 28 En la figura anterior se muestra un recuadro cuya función es visualizar la consolidación del precio, la línea del Chikou Sen se encuentra por debajo del recuadro indicando que la tendencia ha perdido momentum para continuar, favoreciendo cada vez menos los movimientos al alza. Si este componente se encuentra por encima de la nube, puede indicar una señal alcista de largo plazo, caso contrario en un movimiento bajista el Chikou Span se ubica debajo del Kumo, además es recomendable que el Kinjun Sen acompañe este movimiento, ubicándose por debajo de este componente en una tendencia alcista (Kovacs, 2020, pp. 21, 23). Senkou Span A Este componente hace parte de la nube del Ichimoku Kinko Hyo (Nube o Kumo), su fórmula consiste en promediar la Tenkan Sen y la Kinjun Sen. Senkou Span A = (Tenkan + Kinjun) 2 Dibujado n periodos adelante (Configuracion por defecto 26 periodos) [3] Senkou Span B Es la segunda parte del kumo o de la nube del Ichimoku Kinko Hyo, su comportamiento es mucho más lento ante las variaciones del precio, su fórmula es:

29 29 Senkou Span B = Mayor Máximo + Menor Mínimo 2 Dibujado x periodos adelante (Configuracion por defecto 52 periodos) [4] (Configuracion por defecto n = 52 periodos y x = 26) [4] El Senkou Span A forma la parte superior de la nube y el Senkou Span B forma la parte inferior de la misma, cuando la nube o Kumo es alcista o caso contrario cuando es es bajista. Kumo La nube muestra una gran información sobre el mercado y el desarrollo de la tendencia. Un precio que sale por encima del kumo indicaría el inicio de una tendencia alcista, contrario a que el precio se ubique por debajo de la nube, lo que indicaría un posible desarrollo de la tendencia bajista (Ver Figura 3). Cuando el precio se encuentra dentro de los límites o al interior de la nube se considera una consolidación del mismo. Los límites del Kumo nos pueden indicar soportes y resistencias para el componente Chikou Span, dando una referencia de fortaleza o debilidad de otros soportes y resistencias predefinidas por el trader, de forma tal que los operadores puedan analizar los mejores niveles del precio (Elliot N., 2007, p. 35).

30 30 Otro punto que indica la nube, es la fuerza que tiene el precio, si se observa que el Senkou Span A y el Senkou Span B apunta hacia arriba con mayor inclinación indica una señal fuerte de tendencia alcista. En caso contrario, que tanto la Senkou Span A y la Senkou Span B se encuentren apuntando hacia abajo se considera un escenario bajista. La consolidación se presenta cuando la Senkou Span A se muestra divergente a la tendencia y la Senkou Span B se muestra lateral. El efecto se puede observar cuando el precio se consolida por un tiempo, en ese caso la nube tenderá a volverse más uniforme. El Kumo puede tener dos variaciones: sentido y anchura, esta última puede brindar un referente de la volatilidad de los periodos definidos en los parámetros de Senkou Span A y Senkou Span B. Entre más ancha, mayor será la variación en los precios, sin embargo en los momentos en que el precio sufre una aceleración, tanto la pendiente de Senkou Span A y Senkou Span B se incrementará inclinando estos dos componentes, haciendo que se observe una nube muy delgada (Fortune Commodities, 2020, pp. 13,14).

31 31 Senkou span A Límites de la nube Nube o Kumo Senkouspan B Figura 3. Nube o Kumo. Los límites de la nube son definidos por los componentes Senkou Span A y Senkou Span B. Fuente: Metatrader 4.0 (2020) Estrategias Ichimoku. Existen varias aplicaciones de las estrategias que parten de los componentes del indicador como son: el rompimiento de la nube, es decir cuando el precio lográ ubicarse por encima para mostrar un escenario alcista o caso contrario una tendencia bajista, y cuando se mueve dentro de la nube se consideran consolidaciones del precio o lateralidades de la tendencia. Lo anterior se realiza tomando como referencia el Senkou Span A y Senkou Span B. Una variación de la anterior estrategia es la inclusión del Chikou Span como refinamiento del rompimiento del Kumo en los n periodos de retraso, que junto a la acción del precio definen el camino de la tendencia (Padia, , pág. 14).

32 32 El cruce de los componentes Tenkan Sen y Kinjun Sen permite generar señales de entrada o salida cuando alguno de los mismos se ubica por encima del otro para una tendencia alcista o en caso contrario se desarrollan cruces que son seguidos por la tendencia a la baja en el precio. Esta estrategia mantiene el concepto de cruces de promedios móviles simples, sin embargo varía con la esencia del Ichimoku Kinko Hyo es decir el uso de rangos medios de precios o la mitad de la distancia entre el mayor máximo y el menor mínimo (Padia, , pág. 14). Una analogía de este comportamiento es imaginar que el promedio de más largo plazo es representado por un recuadro grande cuyo valor máximo es cruzado por un recuadro más pequeño o de corto plazo (véase Figura 4) definiendo los cruces de rangos medios. Figura 4 Rangos Medios. Como se observa en la imagen, el rompimiento se produce cuando el cálculo de la Tenkan 4 cruza al valor de Kinjun Sen. Fuente: Cálculo propio (2020).

33 33 El kumo es una zona que requiere especial atención dado que es un área para generar consolidaciones o correcciones de mercado, además sus límites generan soportes y resistencia de corto plazo, por lo que se debe dar prioridad a la dirección en que ingresa el precio a la nube, es decir que si la tendencia del precio es bajista antes de ingresar a la nube muy posiblemente continuará cayendo una vez salga de la misma, sin embargo la magnitud y velocidad se desconocen (Loma, 2020, pág. 190).

34 34 6. Estrategia de Trading El modelo propuesto realiza la variación de los parámetros de 3 de los componentes que conforman el indicador Ichimoku Kinko Hyo, mas la inclusión de una modificación al indicador original, es decir la Tenkan Sen, Kinjun Sen, Senkou Span B, y un desplazamiento del Senkou Span A y Senkou Span B. Posteriormente se realizó un backtesting de los diferentes periodos, por el modelo matemático. Las entradas y salidas son tomadas de los precios de apertura de las velas japonesas que representan el precio, incluyendo la variación del Tenkan Sen, Kinjun Sen, Senkou Span B y por defecto como variación de los dos primeros el cálculo del Senkou Span A, (ver Figura 5). Figura 5 Indicadores de la estrategia Visualización de los 3 componentes básicos del modelo. Fuente Metatrader 4.0 (2020).

35 Parámetros Existen diferentes parámetros para el Tenkan Sen, Kinjun Sen y el Senkou Span B. Por defecto el sistema carga el indicador con la siguiente asignación: Variación histórica de los parámetros Tenkan Sen: 9 periodos. Kinjun Sen: 26 periodos. Senkou Span A: Calculo propio del indicador Senkou Span B: 52 y dibujado para 26 periodos. Estos periodos son una parametrización histórica de los componentes, dado que el sistema fue desarrollado antes de la segunda guerra mundial, cuando los mercados abrían los sábados, como resultado el número 9 representa una semana y media de trading, el 26 es igual al número de días de negociación en un mes normal (restando 4 domingos) y 52 es igual a 2 meses. Ahora las negociaciones de los mercados japoneses son solo de 5 días por semana, y 22 sesiones por mes (Dolan, 2008, pp. 2,3). Abriendo el debate sobre la configuración óptima del indicador.

36 36 Nueva variación de los parámetros Tenkan Sen: 8 periodos. Kinjun Sen: 22 periodos. Senkou Span A: Cálculo propio del indicador Senkou Span B: 44 e incorporado en el gráfico para 22 periodos. A continuación se evaluará la estrategia con la configuración histórica y la configuración propuesta para observar la rentabilidad y eficiencia. Esta estrategia se basa en el rompimiento de la nube con uno de los componentes del indicador, con su posterior confirmación a través del precio. Señal de compra: Se presenta cuando la Kinjun Sen perfora la parte superior de la nube en forma ascendente, se toma posición en la apertura de la vela que esté por encima del Kumo, si el precio se encuentra por debajo de la nube, es necesario esperar a encontrar una apertura de vela que esté por encima de la nube (Véase Figura 6). También, puede ser que la Kinjun Sen salga de forma lateral desde la nube (Véase Figura 7) para ubicarse en la parte inferior de la misma, mostrando la señal de venta. Sin embargo, dado que no se ubica ninguna apertura de la vela por debajo de la nube no se toma la posición corta o de venta.

37 37 Figura 6 Señal de entrada Nótese el rompiemiento de la nube a partir de precio y componente Kijun Sen. Fuente: Metatrader 4.0 (2020). Figura 7 Lateralidad Componente Kijun Sen Rompimiento lateral de la Kinjun Sen que inicialmente muestra una señal sin confirmación de venta al salir del Kumo o nube, posteriormente arroja una señal de compra la cual es confirmada

38 38 por la vela tipo Doji cuya apertura se encuentra por encima de la nube. Fuente: Metatrader 4.0 (2020) Señal de venta: Se presenta cuando la Kinjun Sen perfora la parte inferior del Kumo, se espera una apertura del precio por debajo de la nube o Kumo para tomar la posición (Véase Figura 8). Como en la señal de compra este rompimiento también puede ser lateral. Figura 8. Señal de Venta Rompimiento de la parte inferior del Kumo, la posición se toma con el precio de apertura de la vela del recuadro y no con la vela del círculo que realizó el rompimiento. Fuente: Metatrader 4.0 (2020). Tanto en la señal de compra como en la de venta se debe esperar una apertura de la vela, luego del rompimiento de la línea Kinjun Sen. La operación no se debe realizar con el precio de

39 39 rompimiento de la nube dado que este precio puede variar el periodo de la vela, es decir que se puede visualizar el rompimiento a través de un precio máximo o un precio mínimo, sin embargo el movimiento del precio puede retroceder posteriormente dando algún tipo de señal falsa. Para los dos tipos de señales tanto de compra como de venta, el cierre de las posiciones se compone de una señal y una confirmación, es importante esperar a la confirmación que indique si la tendencia puede continuar con la siguiente vela. Se debe tener en cuenta que la línea Kijun Sen ingrese de nuevo a la nube, y la confirmación se presente con un precio de apertura de la vela dentro del Kumo o nube (ver Figura 9 y 10), es decir que tanto el precio como el componente Kijun Sen deben estar simultáneamente dentro de la nube, para poder concluir la operación. Fígura 9. Señales y confirmaciones para la toma y cierre de la posición.

40 40 Notese que la apertura de la posición solo se realiza hasta la confirmación. Fuente: Metatrader 4.0 (2020)

41 41 Figura 10.Continuidad de posición de venta Nótese que se presentan reversiones hacia la nube, sin embargo existe continuidad de la tendencia vigente. Fuente Metatrader 4.0 (2020). Nótese la señal sin confirmación por parte del precio en el recuadro 1 (Ver Figura 10). En recuadro 2 (Ver Figura 10) se muestra como el precio puede llegar a superar inclusive el Kumo, sin embargo el escenario sigue siendo bajista dado que el valor del Kinjun Sen sigue estando por debajo de la Nube. Esta estrategia de trading esta diseñada para mantener una sola exposición al mercado, es decir que solamente se mantiene una posición abierta, donde el cierre de la anterior en varios casos puede ser la apertura de una nueva orden a mercado en una operación contraria.

42 42 El resumen de la estrategia que es evaluada posteriormente a través del algoritmo de Visual Basic se describe en la Tabla 1 Tabla 1: Descripción estrategia de Trading Tipo de Operación Señal Confirmación Apertura de la operación Cierre de la operación Compra Kijun Sen > Senkou Span A y Kinjun Sen > Senkou Span B Primera Vela Cuya Apertura sea mayor que los componentes Senkou Span A y Senkou Span B. En la apertura de la primera vela cuando dicha apertura sea mayor que los componentes Senkou Span A y Senkou Span B. Luego de haber evaluado la señal y la confirmación. Cuando se den las siguientes condiciones: 1)La Kijun Sen se encuentre dentro del Kumo 2) Exista una apertura dentro del kumo Venta Kijun Sen 43 43 Anexo de Precios csv), cada marco de tiempo contiene su archivo plano csv (delimitado por comas) los cuales son analizados con el algoritmo de backesting de la estrategia. Tabla 2: Base de Precios Periocidad de Vela Inicio Historico Fin Historico Tamaño de la Muestra 15 Minutos : : Velas Japonesas 60 Minutos – 1H : : Velas Japonesas 240 Minutos – 4H : : Velas Japonesas Nota: Resumen histórico de los precios relacionados por la periocidad o marco de tiempo de la vela, cada registro de la muestra contiene la fecha, hora, precio máximo, mínimo, apertura y cierre de cada Vela Japonesa. Fuente: Cálculo Propio (2020). 6.3 Metodología Aristos La metodología usada en el semillero de investigación a la que pertenece esta investigación comprende de varios pasos, para la realización y definición de estrategias de trading, los cuales serán descritos a continuación: Sondeo: Es la verificación inicial de la idea de trading este paso comprende: la definición del patrón de entrada, definición del indicador con base al conocimiento del cálculo del mismo, selección de la paridad y marco de tiempo, además de las posibles operaciones que se puedan realizar si son largas o cortas de acuerdo a la naturaleza de la estrategia. Además en esta fase se realiza la cuenta del total de operaciones exitosas durante el último trimestre y del año actual.

44 44 BD Algoritmo: Es el análisis y control del cálculo de indicador y su definición en la estrategia a partir de los datos calculados. Pathway: Es la definición del pérdidas y ganancias (PyG) de las operaciones desde su inicio hasta el cierre. Para el cálculo de cada ruta se utiliza el histórico de precio con los máximos, minimos de cada, de esta forma se conoce el valor máximo de utilidad y máximo de pérdida en cada operación de tal forma que se pueda conseguir el escenario inicial. ST-TP Settings : Es el estado de la ruta en la cual se fija el mismo limit y stop loss para obtener el PYG más alto mediante la acumulación o sumatorias de rentabilidades de posiciones de la estrategia. Para poder obtener este escenario es necesario realizar diferentes modelaciones de la ruta. Optimization: Se realiza con base en el escenario inicial, modelando el limit para obtener la utilidad más alta posible y a su vez simulando el stop para determinar el mínimo riesgo de la operación. Final Report: refleja el total de trades positivos, trades negativos, eficiencia, trades en limit, trades en stop, rentabilidad y esperanza matemática, además de la ruta mensual contemplando la máxima ganancia y máxima pérdida soportada en la administración de la cuenta y el máximo apalancamiento.

46 46 7. Modificaciones al Indicador Ichimoku Kinko Hyo En este documento se evaluará la inclusión del desplazamiento de la nube, junto a la variación de los demás parámetros de los componentes. Para obtener este proceso se implementó una modificación de la estructura del indicador, de tal forma que se le pueda agregar un nuevo parámetro, éste es el que modifica el número de periodos de adelantamientos del Kumo o la nube. Para la implementación de este parámetro se realizó la modificación del código fuente del indicador original, que es escrito en el lenguaje MQL4, diseñado para la plataforma Metatrader 4.0. Inicialmente se debe modificar la forma en que se dibuja el indicador en esta herramienta, para ello se debe abrir el código en el Metaeditor de Metatrader que se encuentra alojado en la ruta c:\fxdd\mql4\indicators y cuyo nombre es Ichimoku.mq4 Figura 11. Vista general del Metaeditor Nótese la numeración de cada línea de código. Fuente Metaeditor de Metatrader 4.0. (2020).

47 47 Como se puede observar en la Figura 11 el Metaeditor muestra en la parte izquierda los indicadores que ya han sido compilados, es decir aquellos que se encuentran traducidos en lenguaje binario; en este caso existe un archivo principal, denominado Ichimoku.mq4, el cual se toma como referencia para el desarrollo del nuevo indicador. En la parte izquierda del Metaeditor se encuentra la numeración de la línea de código, que es la referencia por la cual se puede identificar cada renglón para llevar una secuencia de las órdenes (ver Figura 11). Del archivo original se han modificado ciertas líneas de código para así obtener una nueva versión del indicador que pueda desplazar la nube de acuerdo al parámetro que el trader desee simular (ver Anexo de Codificación Indicador). Las líneas que han sufrido inclusiones o modificaciones del código fuente original son las siguientes: 19-23; es la inclusión de las variables externas las cuales serán modificadas por el usuario, nótese que la variable externa ShiftCloud será el número de adelantos de la nube ; se le asignan nuevos nombres para facilitar la interpretación. 41, 46, 52, 57, 63,68; son asignaciones para ser cargadas en el buffer (o espacio de memoria), cada uno de estos buffers representará una línea diferente del indicador. Para asignar datos a un

48 48 Buffer se realiza a través de la instrucción SetIndexBuffer(int x, int y), tal que x sea cualquier número entero al cual se le asignará el Buffer, mientras que y es la variable de entrada del indicador, esta puede ser Tenkan, Kinjun, etc. 59, 70; es la asignación del número de periodos en que se va adelantar la nube a través del parámetro ShiftCloud, en el archivo original este parámetro es una suma del Kinjun a los otros dos parámetros que son SenkouA y SenkouB, esto se lográ a través de la función SetIndexShift(Int a, Int b), tal que a es el buffer asignado y b es la variable dada del número de adelantamiento o ShiftCloud.

49 49 8. Herramienta de Backtesting En este acápite se presenta el diseño del modelo backtesting para la estrategia del rompimiento y desplazamiento del Kumo con la aplicación del parámetro Kinjun Sen. Esta herramienta utiliza un algoritmo implementado en Visual Basic (lenguaje de programación de Microsoft Office) cuyas instrucciones del modelo se explican posteriormente. De tales instrucciones se abstraen las principales para la realización del cálculo de estrategia. El algoritmo está construido de tal forma que en su arquitectura utiliza tres archivos para realizar su ejecución: Precios, Informe Base y Creador de Backtesting, este último mantiene el control de ejecución principal sobre los otros 2 archivos. El archivo de precios es descargado de la plataforma Metatrader 4.0, este es un tipo de archivo que mantiene una extensión.cvs, cuyos elementos contenidos en el mismo archivo se encuentran separados por comas, al ser un archivo de esta naturaleza es necesario que el algoritmo en su primera instancia realice una separación de los precios. Para que este archivo pueda ser manejado se debe proceder a la realización de la delimitación de los campos como lo son: fecha, precio de apertura, precio máximo, precio mínimo y precio de cierre por periodo del marco de tiempo, en algunos casos el archivo es delimitado por el mismo paquete de Excel en el momento en que se genera la apertura del documento, este archivo puede ser descargado de la plataforma Metatrader 4.0. Como se observa en esta tabla en la columna A se observa la fecha, la B corresponde a la hora, las siguientes columnas a partir de la B corresponden en orden de izquierda a derecha, al precio de apertura de la sesión, precio máximo alcanzado en la sesión, el

50 50 mínimo del periodo, el valor de cierre y finalmente el valor del volumen proporcionado por el Broker.

51 51 Tabla 3: Formato de precios históricos en Ms.Excel. Nota: Cada una de las celdas son los elementos históricos con los cuales el algoritmo de backtesting realizada la ejecución. Fuente: Modelo Creador de Backtesting (2020). El siguiente archivo fue creado con el objetivo de realizar el cálculo de la estrategia de una forma visual que permitiera a cualquier usuario con conocimientos de Excel, modificar los rangos y las fórmulas de acuerdo a las necesidades de las nuevas estrategias planteadas por traders. Con este archivo se evita que el trader tenga que interactuar directamente con el lenguaje de programación de Visual Basic para realizar los cambios que considere necesarios. Este archivo contiene el cálculo del indicador, por tanto se pueden encontrar todos los parámetros del indicador calculados, a través de la hoja de Excel de office para obtener los valores del Ichimoku Kinko Hyo. Los valores son evaluados por condicionales celda a celda, facilitando el discernimiento, en primera instancia, del momento en que la acción del precio indica las condiciones para que la estrategia marque la apertura o cierre de una operación ya sea de compra o de venta.

52 52 El archivo contiene cinco hojas para realizar el cálculo de la estrategia, las cuales son Precios, Resultado Corto, Resultado Largo, Resultado Histórico, Formato para Macro. La Hoja Precios contiene los datos históricos, como lo son Fecha, Open, High, Low, Close. Estos campos son copiados desde el archivo de precios a esta hoja, las siguientes columnas corresponden a los campos de los parámetros del Ichimoku Kinko Hyo (Tenkan, Kinjun, A, B), los cuales son modificados por el código del archivo Creador de Backtesting. Lo anterior fue diseñado de tal forma que el cálculo propio del indicador sea más accesible a usuarios sin el conocimiento adecuado para realizar modificaciones. Los siguientes campos contenidos en la hoja precios son posición, cierre y apertura, en donde cada uno de estos contiene un condicional diferente que permite la diferenciación según su asignación, por ejemplo la evaluación de las celdas de la columna posición son condicionadas al valor de la apertura del precio en relación con la nube y el Kinjun Sen, cuyo resultado es la verificación de la vigencia de la operación, es decir, celda a celda se evalúa si las condiciones anteriores que señalaban una operación larga y se mantendrán nuevamente en la siguiente celda para poder seguir mostrando una posición larga o en caso contrario demarcará un espacio en blanco en la celda, el mismo análisis aplica para la evaluación de las posiciones cortas. Con el objetivo de ampliar la explicación del condicional anteriormente expuesto, a continuación se realiza la descripción de este condicional en pseudocódigo para mejorar la compresión del algoritmo. Si Fecha Vacio y Open Vacio y Kinjun Vacio y A Vacio y B Vacio Entonces

53 53 Si ((Open > A y Open > B y Kinjun > A y Kinjun > B) o (Celda Anterior = LARGO y Open A y Kinjun > B) o (Celda Anterior = LARGO y Open >= A y Open A y Kinjun > B ) o (Celda Anterior = LARGO y Open =B y Kinjun > A y Kinjun > B ) o (Celda Anterior = LARGO y Open > A y Open > B y Kinjun >= A y Kinjun A y Open > B y Kinjun = B ) o (Celda Anterior = LARGO y Open > A y Open > B y Kinjun A y Open > B y Kinjun = A y Open =B y Kinjun = A y Kinjun = B ) o (Celda Anterior = CORTO y Open A y Kinjun > B)) Entonces Celda Actual CORTO FIN SI FIN SI

54 54 Mediante este algoritmo el campo POSICION de la hoja PRECIOS del archivo InformeBase.xlsx, se evalúa cuando se cumple algunos de los condicionales de la estrategia con el objetivo de diferenciar cuándo se está en una posición larga o corta, y cuándo simplemente las condiciones no están dadas para reflejar una posición en la celda evaluada. Continuando con la descripción del archivo InformeBase.xlsx, en forma siguiente se explicará en pseudocódigo el algoritmo de APERTURA de las operaciones: Si (Tenkan Vacio y Kinjun Vacio y A Vacio y B Vacio) Entonces Si Celda Anterior Posición=Vacio y Celda Actual Posición= LARGO o Celda Anterior Posición= CORTO y Celda Actual Posición= LARGO o Celda Actual Apertura Largo Si Celda Anterior Posición=Vacio y Celda Actual Posición= CORTO o Celda Anterior Posición= LARGO y Celda Actual Posición= CORTO o Celda Actual Apertura Corto Si no Celda Actual Vacio Si no Celda Actual Vacio Si no Celda Actual Vacio

55 55 El anterior algoritmo evalúa a través de condicionales el cambio de las celdas del campo POSICION, por ejemplo si el cambio de largo a corto indica que se debe abrir una operación corta, o si el cambio se muestra de una celda vacía a largo, el algoritmo abrirá una posición larga (ver tabla 4). Tabla 4: Condicionales claves para la apertura de operaciones Nota. Las flechas rojas indican los estados de las celdas del campo POSICION y del campo APERTURA y su correspondiente cambio en cada uno de los estados. A continuación se mostrará el algoritmo del campo CIERRE, el cual evalúa principalmente el resultado de las celdas del campo POSICION, y se menciona como Celda Anterior Posición y es la celda anterior a la Celda Actual Posición. Si (Kinjun Vacio y A Vacio y B Vacio) Entonces Si Suma (Open, Kinjun, A, B) 0 Entonces Si (Celda Anterior Posición = CORTO y Open >= A y Open = A y Kinjun = B y Kinjun = B) o

58 58 La siguiente hoja del archivo InformeBase.xlsx es el Resultado Histórico, en donde se resumen todos los datos relevantes producto de la variación de los parámetros del indicador Ichimoku Kinko Hyo y de la estrategia del rompimiento de la nube. En esta hoja se podrá encontrar el resultado de la rentabilidad medida en pips año por año, además se mostrará los trades positivos, trades negativos, total de trades, la eficiencia, el valor máximo alcanzado en el mejor trade, el valor mínimo o peor trade realizado, el promedio de la rentabilidad y la desviación de la misma. Esta Hoja también fue construida de forma que existiese una descripción más amplia de los trades positivos y de los trades negativos. La información incluye el mayor trade positivo o el mayor de los trades negativos, el menor de los positivos o de los negativos, su promedio y la desviación de los mismos, además se plantea una serie de campos brindando una visión general de los niveles a los cuales se puede presentar una mayor acumulación, estos niveles pueden ser vistos como zonas las cuales son descritas en el Figura 12, 13,14 y 15, los cuales tienen un orden jerárquico que parte de la parte inferior de cada figura, dado que todos los trades rentables son mayores que cero y el promedio será menor que el mayor máximo encontrado, evidenciando qu la desviación estándar se mantiene por debajo del promedio.

59 59 Figura 12. Zona 1 Conteo de trades en donde el valor de la utilidad es mayor a la desviación estándar total e inferior al máximo trade encontrado. Los puntos azules ilustran la ubicación de cada uno de los trades en la zona mencionada. Fuente: Modelo Creador de Backtesting (2020). Figura 13. Zona 2 Conteo de trades en donde el valor de la utilidad es mayor a cero pero inferior a la desviación estándar. Los puntos azules ilustran la ubicación de cada uno de los trades en la zona con las condiciones anteriormente mencionadas. Fuente: Modelo Creador de Backtesting (2020). Figura 14. Zona 3

60 60 Conteo de trades en donde el valor de la utilidad es menor a la desviación estándar total e inferior al máximo trade encontrado pero superior al promedio del total de trades. Los puntos azules ilustran la ubicación de cada uno de los trades en la zona con las condiciones anteriormente mencionadas. Fuente: Modelo Creador de Backtesting (2020). Figura 15. Zona 4 Conteo de trades en donde el valor de la utilidad es positivo e inferior al promedio del total de los trades. Los puntos azules ilustran la ubicación de cada uno de los trades en la zona con las condiciones anteriormente mencionadas. Fuente: Modelo Creador de Backtesting (2020). Para los trades negativos se mantiene un orden diferente dado que el mayor de los trades negativos se ubicaría por debajo de cero y valor más lejano y opuesto a cero, y el promedio sería el segundo valor más negativo seguido en orden ascendente por la desviación.(ver Figuras 16, 17 y 18)

61 61 Figura 16. Zona 5 Conteo de trades, en donde el valor de la utilidad es inferior a la desviación del total de los trades y superior al trade más mínimo. Los puntos azules ilustran la ubicación de cada uno de los trades en la zona con las condiciones anteriormente mencionadas. Fuente: Modelo Backtesting (2020). Figura 17. Zona 6 Conteo de trades en donde el valor de la utilidad es inferior a la desviación del total de los trades y superior al valor del promedio. Los puntos azules ilustran la ubicación de cada uno de los trades en la zona con las condiciones anteriormente mencionadas. Fuente: Modelo Backtesting (2020).

62 62 Figura 18. Zona 7 Conteo de trades, en donde el valor de la utilidad es superior al promedio del total de los trades e inferior a cero. Los puntos azules ilustran la ubicación de cada uno de los trades en la zona con las condiciones anteriormente mencionadas. Fuente: Modelo Backtesting (2020). Estas zonas fueron creadas con el objetivo de identificar los niveles claves en donde es bueno encontrar una mayor concentración de trades, dado que niveles óptimos de baja dispersión en cada uno de los niveles históricamente evaluadas presentan un medición rápida mas no trivial del riesgo. Como se puede observar en las figuras deberían mantener una parte sustancial de los trades superiores a su promedio y con una distancia mínima al máximo trade logrado para las operaciones positivas, mientras que para las operaciones negativas se debería estimar una zona con una gran participación de operaciones superiores a su promedio, lo anterior se explica como una aproximación a la consistencia en las negociaciones, además una mayor dispersión en estas zonas puede mostrar un resultado con valores más altos de eficiencia, sin embargo debido a que no solamente se debe tener en cuenta la dispersión de los datos para asegurar un mejor desempeño en los trades, se debe tener en cuenta el valor de cada trade mediante la Metodología Aristos.

63 63 Por último, la hoja Formato para Macro muestra las operaciones largas y cortas, con sus respectivas fechas de entrada, salida y los precios a los cuales se negociaron dichas operaciones. Estos datos son copiados desde esta hoja a la macro rutas.xlsx la cual fue creada bajo la Metodología Aristos Algoritmo de Control Esta codificación es la que realiza el control de la ejecución, de tal forma que la manipulación y los procedimientos necesarios para obtener a través de la combinación de parámetros definen el resultado final de la estrategia. Este algoritmo fue escrito a través del entorno de programación de Microsoft con el lenguaje de programación de visual Basic, el cual se considera que mantiene una sintaxis y una semántica que es traducida y direccionada mediante eventos, es decir que los mismos pueden activar algún procedimiento del código con el cual fueron programados. En el caso del Algoritmo de control este fue escrito en el evento Open (ver Figura 19) del libro en ejecución Thisworkbook. Figura 19. Evento Open

64 64 Vista general de la Selección del evento del archivo CreadorBacktestingIchimoku.xlsm. Fuente Editor Visul Basic Modelo de Backtesting (2020). Al escribir el código en el evento en que se realiza la apertura del archivo creador de backtesting, el código contenido dentro de este evento es ejecutado de forma automática cuando el evento es activado. Bajo este criterio existen dos macros que fueron desarrolladas, la primera de estas ejecuta el algoritmo una única vez, evaluando una sola combinación, es por esto que se requiere de una tarea programada que realice la apertura del archivo. Esta tarea programada es una herramienta del sistema, la cual permite realizar la apertura del archivo varias veces, con el fin de que nunca sea interrumpida la ejecución sí las sesiones son realizadas por diferentes usuarios que desconocen el proceso activo. Cada valor de los diferentes componentes puede ser modificado de manera consecutiva, indicando un proceso dispendioso para elaborar manualmente, sin embargo de forma automática, se puede obtener una gran cantidad de información con solo variar un componente en toda la configuración del indicador. Por ejemplo la Tenkan Sen puede realizar inicialmente un promedio sobre 5 datos, y en un proceso futuro es aumentado por la macro a 6 datos. Estos cambios también son realizados para los demás parámetros de los componentes del indicador. Tabla 5: Parámetros del modelo. LINEA PERIODO INICIAL LIMITE DIFERENCIA LINEA PERIODO ACTUAL TENKAN SEN TENKAN SEN 8 KINJUN SEN KINJUN SEN 15 SENKOU SPAN B SENKOU SPAN B 49 SHIFT CLOUD SHIFT CLOUD 17

65 65 Nota: Variación de los parámetros del modelo, lo valores del período son aumentados en uno por el modelo durante cada proceso o ciclo. Fuente: Modelo de Backtesting (2020). Como se puede observar en la macro, aparecen los cuatro parámetros (columna LÍNEA) modificables, donde los tres primeros son los originales del indicador, mientras que el cuarto parámetro, que es el movimiento o adelanto de la nube es una modificación del indicador original, este parámetro se menciona como Shift Cloud, como se puede observar en el ejemplo, este tiene un periodo inicial de 3 adelantos de la nube y con un límite de 25, lo que da una diferencia de 22, es decir que la macro aumentará este parámetro desde 3 hasta llegar a 25. Mediante la variación de cada uno de los parámetros tales como el Tenkan Sen, Kinjun Sen, Senkou Span B, y Adelanto de la Nube, se realiza un proceso de combinatoria, el cual inicia con la variación de la Nube, la cual tiene que moverse 22 valores para que el siguiente parámetro aumente uno, es decir que el Senkou Span B se incremente una unidad y pase al otro valor, el siguiente parámetro por orden de jerarquía sería el Kinjun Sen, que para realizar su variación se necesitaría la multiplicación de los anteriores parámetros descritos (Número de variaciones del parámetro Adelanto de la Nube multiplicado por el parámetro Senkou Span B). Por último, el parámetro Tenkan Sen que también varía cuando los demás parámetros desarrollan sus respectivos ciclos (ver Tabla 5 y Figura 20), con este proceso de combinatoria se intenta establecer la configuración con mejor desempeño en rentabilidad y eficiencia.

66 66 Figura 20. Esquema del desarrollo Nótese la variación de los parámetros en la Macro, lo que se traduce en un movimiento de combinatoria de los mismos. En la tabla se muestra cada combinación posible y el valor de cada parámetro en ese momento específico. Fuente: Modelo de Backtesting (2020). Para el análisis de la combinatoria se realiza una diferenciación por cada una de las variaciones del parámetro Tenkan Sen o cada valor tomado por este, el cual se incrementará cuando los demás ciclos de los otros parámetros también lo hagan, mostrando un comportamiento general de la variación de todos los parámetros y a su vez un comportamiento de la rentabilidad. A continuación se explicará en pseudocódigo los dos tipos de algoritmo del archivo creador de Backtesting los cuales fueron creados con el fin de analizar los datos históricos de la paridad EURUSD.

67 Algoritmo-I En esta parte del documento se encontrará la estructura del Algoritmo-I (sin ciclo) segmentada en partes y de forma siguiente se observará su explicación general de las líneas más importantes de cada fracción del Algoritmo-I. Procedimiento Workbook_Open() Variables u, w, x, y, z como cadena de caracteres Variables t, t2, k, k2, sb, sb2, s, s2, tlim, klim, sblim, slim, cont como entero Variables fso como objeto En la anterior parte del pseudocódigo se realiza la declaración de las variables u, w, x, y, z las cuales son de tipo cadena de caracteres, estas contienen las direcciones o rutas de los archivos dentro del ordenador o en el caso de dos de estas variables que guardan solamente el nombre. La última declaración corresponde a la creación de fso, un objeto del sistema. Asignar Objeto fso Crear Objeto ( Objeto del sistema de archivo ) Eventos Aplicación False Alertas Aplicación False Refrescamiento Aplicación False Cálculos celdas Aplicación Automáticos Refrescamiento de Saltos de Pagina Aplicación False Seleccionar Hoja Rutas

68 68 Si Ruta Precios Vacio y Ruta Informe Resultante Vacio y Ruta Informe Base Vacio y Nombre Archivo de Precios Vacio Entonces Seleccionar Hoja Precios Seleccionar Rango de Precios Borrar Rango de Precios Seleccionar Hoja Rutas t 0 k 0 sb 0 s 0 cont 0 t valor entero(periodo actual Tenkan) k valor entero(periodo actual Kinjun) sb valor entero(periodo actual Senkou Span B) s valor entero(periodo actual Adelantamiento) tlim valor entero(límite Tenkan) klim valor entero(límite Kinjun) sblim valor entero(límite Senkou Span B) slim valor entero(límite Adelantamiento) u Nombre Archivos de precios cadena de caracter(periodo actual Tenkan) cadena de caracter(periodo actual Kinjun) cadena de caracter(periodo

69 69 actual Senkou Span B) cadena de caracter(periodo actual Adelantamiento) +.xlsx w Ruta Informe Resultante Nombre archivo de Precios cadena de caracter(periodo actual Tenkan) cadena de caracter(periodo actual Kinjun) cadena de caracter(periodo actual Senkou Span B) cadena de caracter(periodo actual Adelantamiento). x Nombre archivo de Precios +.csv y Ruta Precios + x z Ruta informe Base + Informe Base.xlsx En el anterior fragmento del pseudocódigo se muestran los diferentes eventos que pueden hacer que la ejecución se torne más lenta, la condición Si_Entonces tiene la función de verificar que los campos estén completos; adicionalmente dentro de esta estructura se realiza la inicialización y asignación de las variables. Abrir libro (y) Seleccionar Rango Precios Copiar Rango Precios Activar Ventana Archivo CreadorBacktestingIchimokuOpen.xlsm Seleccionar Hoja Precios Seleccionar Celda A1 Pegar Precios Guardar

70 70 Cerrar Archivo de Precios Reemplazar Formatos de Fechas Puntos por backslash Reemplazar Formatos de número Si Archivo Existe fso(y) = Verdadero Entonces Si Archivo Existe fso (z) = Verdadero Entonces Cálculos celdas Aplicación Manuales CrearLibro(z) Guardar Como (w) Luego de Abrir el archivo de precios se realizan las correcciones en el formato, como puntos, comas y formatos de fechas. Posteriormente se verifica la existencia del archivo Informe Base a través del objeto del sistema fso, y así poder realizar una copia de este fichero. Activar Ventana Archivo CreadorBacktestingIchimokuOpen.xlsm Copiar Rango Precios Activar Ventana (u) Seleccionar Hoja Precios Seleccionar Celda B1 Pegar Precios Seleccionar Celda G2 Desplazarse (t-1) veces celdas hacia abajo t2 -t+1

71 71 CeldaActual Promedio(Max(Rango(CeldaInicio(Fila(t2),Columna(- 3)),CeldaRangoAmplitud(Columna(-3),Fila(-3)), Min(Rango(CeldaInicio(Fila(t2),Columna(- 3)),CeldaRangoAmplitud(Columna(0),Fila(-3)))) Copiar Formulación celda actual Pegar Hasta la celda G Seleccionar Celda H2 Desplazarse (k-1) veces celdas hacia abajo k2 -k+1 CeldaActual Promedio(Max(Rango(CeldaInicio(Fila(k2),Columna(- 4)),CeldaRangoAmplitud(Columna(-4),Fila(-4)), Min(Rango(CeldaInicio(Fila(k2),Columna(- 3)),CeldaRangoAmplitud(Columna(0),Fila(-3)))) Copiar Formulación celda actual Pegar Hasta la celda H Seleccionar Celda I2 Desplazarse (s+k-1) veces celdas hacia abajo CeldaActual Promedio(Max(Rango(CeldaInicio(Fila(-s),Columna(- 2)),CeldaRangoAmplitud(Columna(-s),Fila(-1))) Copiar Formulación celda actual Pegar Hasta la celda I100000

72 72 Seleccionar Celda J2 Desplazarse (s+sb-1) veces celdas hacia abajo Seleccionar Celda I2 Desplazarse (s+sb-1) veces celdas hacia abajo sb2=-sb+1 CeldaActual Promedio(Max(Rango(CeldaInicio(Fila(sb2-s),Columna(- 6)),CeldaRangoAmplitud(Columna(-s),Fila(-5))) Copiar Formulación celda actual Pegar Hasta la celda J Modo de corta desactivado Cálculos celdas Aplicación Automáticos En esta parte del algoritmo-i se realizaron los pasos esenciales para el desarrollo de las distintas combinaciones, donde a la celda actual se le asigna el rango de datos a tomar para el cálculo de los parámetros del indicador, mediante el uso de promedios y la movilización de los diferentes rangos. Este segmento del pseudocódigo fue enfocado a la estructura que se debe tener en cuenta para la programación en Visual Basic, es decir la referenciación de los rangos se basó en la misma lógica usada para escribir una fórmula a través de este lenguaje. Seleccionar Hoja Precios Filtrado con criterio apertura largo

73 73 Seleccionar Rango B1 hasta J1 Ampliar Selección Hasta el final de los datos Mover Selección Una celda más sin incluir títulos Copiar Selección Seleccionar Hoja Resultado Largo Pegar Rango de Datos Filtrados Reemplazar Formatos de Hora Seleccionar Hoja Precios Quitar Filtro, Criterio: apertura largo Filtrado con criterio Cierre largo Seleccionar Rango B1 hasta J1 Ampliar Selección Hasta el final de los datos Mover Selección Una celda más sin incluir títulos Copiar Selección Seleccionar Hoja Resultado Largo Pegar Rango de Datos Filtrados Reemplazar Formatos de Hora Seleccionar Hoja Precios Filtrado con criterio cierre corto Seleccionar Rango B1 hasta J1 Ampliar Selección Hasta el final de los datos Mover Selección Una celda más sin incluir títulos Copiar Selección

74 74 Seleccionar Hoja Resultado Corto Pegar Rango de Datos Filtrados Reemplazar Formatos de Hora Seleccionar Hoja Precios Quitar Filtro, Criterio: apertura corto Filtrado con criterio cierre corto Seleccionar Rango B1 hasta J1 Ampliar Selección Hasta el final de los datos Mover Selección Una celda más sin incluir títulos Copiar Selección Al continuar con la descripción del algoritmo se muestra otra parte esencial, en la cual se realiza el filtrado de las operaciones debido a la opción que presenta la hoja de cálculo para realizar la selección de los renglones, específicamente en el caso del Algoritmo-I la aplicación de este filtrado parte de los criterios de selección, los cuales son los tipos de operaciones que se realizan (largos o cortas) y los momentos en que se realiza la apertura y cierre de las mismas, estos criterios fueron nombrados en el algoritmo-i como apertura corto, apertura largo, cierre corto, cierre largo. Seleccionar Hoja Resultado Corto Pegar Rango de Datos Filtrados Reemplazar Formatos de Hora Seleccionar Hoja Resultado Corto

75 75 Copiar Fechas de entrada Seleccionar Hoja Formato para macro Pegar Fechas de entrada Seleccionar Hoja Resultado Corto Copiar Fechas de Salida Seleccionar Hoja Formato para macro Pegar Fechas de Salida Seleccionar Hoja Resultado Corto Copiar Precio de entrada Seleccionar Hoja Formato para macro Pegar Precio de entrada Seleccionar Hoja Resultado Largo Copiar Fechas de Entrada Seleccionar Hoja Formato para macro Pegar Fechas de entrada Seleccionar Hoja Resultado Largo Copiar Fechas de Salida Seleccionar Hoja Formato para macro Pegar Fechas de Salida

76 76 Seleccionar Hoja Resultado Largo Copiar Precio de Entrada Seleccionar Hoja Formato para macro Pegar Precio de Entrada Las operaciones son copiadas y pegadas en la Hoja Formato para macro, la cual es una plantilla cuyas directrices son dadas por la Macro Pathway desarrollada por la Metología Aristos, a través de esto se intenta evaluar mediante la simulación histórica los límites de ganancia o pérdida. Seleccionar Hoja Resultado Historico Seleccionar Celda I3 CeldaActual (u) Seleccionar Celda I7 CeldaActual (u) Seleccionar Celda I11 CeldaActual (u) Cálculos celdas Aplicación Automáticos Seleccionar Hoja Resultado Historico Copiar Rango I3:S3 Activar CreadorBacktestingIchimokuOpen.xlsm Seleccionar Hoja Informe General

77 77 Desplazarse hasta el final de los datos + 1 celda Pegar Rango I3:S3 Activar (u) Seleccionar Hoja Resultado Historico Copiar Rango I7:Q7 Activar CreadorBacktestingIchimokuOpen.xlsm Seleccionar Hoja Trades Positivos Desplazarse hasta el final de los datos + 1 celda Pegar Rango Rango I7:Q7 Activar (u) Seleccionar Hoja Resultado Historico Copiar Rango I11:Q11 Activar CreadorBacktestingIchimokuOpen.xlsm Seleccionar Hoja Trades Negativos Desplazarse hasta el final de los datos + 1 celda Pegar Rango Rango I11:Q11 Activar (u) Cerrar Libro activo Guardar como (w)

78 78 Finalmente, los resultados son llevados y ordenados según los campos de la hoja Resultado Histórico para poder generar las tres tablas resumen de los trades positivos y negativos, para la combinación de los parámetros con la cual se realizó el proceso. Además, estos datos también son copiados de forma consolidada a la hoja Informe General y los resultados específicos de los trades positivos y negativos son copiados en sus respectivas hojas dentro del archivo CreadorBacktestingIchimokuOpen.xlsm Si (cont 79 79 t = t + 1 Fin Si Fin Si Fin Si Fin Si Fin Si Fin Si cont = cont + 1 Si no Mostrar Mensaje Proceso Finalizado Fin Si Esta parte del algoritmo-i es la que genera la combinatoria entre los parámetros, y es donde las variables s, sb, k y t, son aumentadas de acuerdo a los condicionales, los cuales no permiten que se supere los límites asignados para los parámetros adelantamiento de la nube, Senkou Span B, Kinjun Sen y Tenkan Sen, respectivamente. Nótese la jerarquía de las variables, dado que ninguna de estas aumentará si la variable cont es mayor que la multiplicación de los límites de las demás variables, si se continua con el orden la siguiente variable es el adelantamiento de la

80 80 nube, aumenta de uno en uno hasta llegar al último valor posible que sea menor a su propio límite, una vez el valor del adelantamiento de la nube se incrementa y la condición (s>slim) no se cumple, el algoritmo-i restablece el valor inicial de s y procede a incrementar la siguiente variable en orden jerárquico. El anterior fragmento en pseudocódigo, se considera como un algoritmo para evaluar las diferentes combinaciones. La combinación en la forma general es: ( n k ) Para todos los multiconjuntos dados por los parámetros del indicador El algoritmo se puede aplicar para diferentes combinaciones posibles entre n variables distintas, que en este caso representan las variaciones de los cálculos del indicador o parametrizacion del mismo. Seleccionar Hoja Rutas Celda K3 Valor( t ) Celda K4 Valor( k ) Celda K6 Valor( sb ) Celda K7 Valor( s )

81 81 Celda C14 Valor( cont ) Eventos Aplicación False Alertas Aplicación False Guardar Libro Guardado no mostrar mensaje de guardado Si no Si Celda C10 = Vacio Entonces Mostrar Mensaje El nombre del archivo de precios es incorrecto Fin si Si Celda C5 = Vacio Entonces Mostrar Mensaje No se encuentran la ruta del archivo Base Fin si Si Celda C4 = Vacio Entonces Mostrar Mensaje No se encuentran la ruta para el informe resultado Fin si Si Celda C3 = Vacio Entonces Mostrar Mensaje No se encuentran la ruta del archivo de precios Fin si Fin si Refrescamiento Aplicación True Refrescamiento de Saltos de Pagina Aplicación True

82 82 Vaciar Recortes de papelera False Cálculos celdas Aplicación Automáticos Finalmente en esta última estructura se asignan los valores incrementados de las variables a los campos de la hoja Rutas (Pathway) del archivo CreadorBacktestingIchimokuOpen para poder guardar estos datos de forma permanente hasta que se realice una nueva ejecución. Posteriormente se observan los mensajes de las validaciones de la existencia de los archivos necesarios para la ejecución, y de forma eficiente para no alterar el siguiente proceso en el computador se activan nuevamente los eventos de refrescamiento, sin embargo esto puede ser opcional en el algoritmo. Al seleccionar el evento open, este crea la subrutina o el procedimiento en el workbook, toda el código que interpreta el algoritmo-i, es escrito dentro de esta parte del código. Como se puede observar, los delimitadores son las dos instrucciones anteriormente mencionadas. La primera de estas instrucciones contenidas en el procedimiento Workbook_Open() es la instrucción Dim. As, Esta instrucción dimensiona las variables, asignando un espacio en memoria para contener la información asignada. En las siguientes líneas de código se muestra la forma en que son dimensionadas las variables u, w, x, y, z como cadena de caracteres (As String), caso contrario las variables t, t2, k, k2,sb, s, s2, tlim, klim, sblim, slim, ta, ka, sba, sa, l, iter, cont

83 83 como entero (As Integer), la diferencia entre los dos tipos de variables será el peso que ocupen en memoria, dado que la cadena de caracteres incrementa su peso en la medida en que la longitud de la ruta del archivo sea mucho más larga, esto contrasta con la declaración de tipo entero que es un espacio fijo en la memoria. Las siguientes líneas de VB muestra la codificación referente a la palabra reservada e instrucción Dim. En el uso eficiente de la memoria es indispensable para realizar una ejecución rápida de los programas, una menor cantidad de variables declaradas dado que es necesario consumir menos recursos en la memoria, una mala práctica que resulta mucho más ineficiente que lo anterior es declarar todos los tipos de variables como variant, es decir variables de tipo entero, doble, cadena de caracteres se convierten en un sólo tipo. Un tipo de variable que cambia según la naturaleza que se le asigne, resultando costoso en el uso de los recursos del computador. La especial atención en la declaración de variables resulta en el uso eficiente de la memoria, indispensable para realizar una ejecución rápida con el fin de obtener el resultado de cada combinación, para ello es importante controlar la cantidad de variables declaradas y evitar la lectura constante de valores desde la hoja de cálculo, dado que lo anterior consume muchos más recursos en la maquina. Es importante la asignación correcta de los tipos dado que errores en la declaración de los mismos pueden generar errores en la ejecución, uno de estos errores se presentó en esta investigación cuando se declaro la variable cont como cadena de carácter, y al aumentarse en uno, como una variable entera se generaba un error en el cual la macro realizaba constantemente el mismo proceso, sin variar las condiciones los cual resulta en contra oposición con el objetivo del algoritmo y la naturaleza de las variables.

84 84 Para la reducción de los tiempos de ejecución es importante realizar una desactivación de los eventos generados por el sistema como lo es el refrescamiento de la pantalla (Application.ScreenUpdating = False), ya sea por los saltos generados al cambiar la página (ActiveSheet.DisplayPageBreaks = False. Al dejar activados estos eventos se presenta un incremento en el uso de recursos del sistema, el cual puede variar dependiendo de las capacidades de cada computador. Otro elemento que mejora la velocidad cuando se manipulan archivos, es la desactivación del calculó automático (Application.Calculation = xlcalculationmanual) que se realiza en la hoja de excel, por último cada vez que se copia y se pega elementos de una hoja de cálculo también se hace en la papelera de reciclaje (Application.CutCopyMode = False) dando como consecuencia un mayor uso de la memoria. Lo anterior trae como consecuencia mayor tiempo en la ejecución. En el siguiente bloque se puede observar las órdenes anteriormente descritas. Las anteriores órdenes son aplicadas al inicio de la ejecución, posteriormente se desactiva el cálculo en las hojas. Finalmente se debe realizar la activación de todos los eventos y el cálculo de las hojas

85 85 En este bloque se realiza la inicialización de las diferentes variables en cero, cuyo fin es evitar valores en memoria de procesos anteriores que puedan generar algún tipo de valores basura. Mediante la función Val( cadena de caracteres ), en donde el input de la función es una cadena de caracteres que para este caso la propiedad.text representa la cadena de caracteres. La función Val() retorna los valores encontrados en la cadena de caracteres, o en caso contrario devolverá el valor de error 6 cuando la cadena de caracteres es demasiado larga o 438 cuando la cadena no es convertible dado que no coinciden los tipos (Microsoft, 2020).

86 86 Para la creación de objetos del sistema se realiza la dimensión del objeto, a través de la instrucción Dim y el tipo es As Object, en la siguiente línea la instrucción Set permite asignar al objeto fso a otro objeto que mantiene un tipo del sistema permitiendo acelerar la ejecución en la validación de la existencia de archivos o ficheros A partir del anterior objeto creado se realizó una verificación de los archivos, para ello es importante mantener la ruta de la ubicación del archivo. Estas rutas fueron escritas en la hoja de cálculo Rutas con el objetivo de facilitar la escritura, para que el trader no tenga que realizar ajustes directamente en el código de Visual Basic. La lectura de las rutas se realiza mediante la propiedad.value de la instrucción.range y se hace una concatenación de las cadenas de caracteres a través del operador +. La variable u es el nombre del archivo resultante con la configuración ya mencionada anteriormente, w representa la ruta del archivo informe base, x representa el nombre del archivo de precios descargado de la plataforma Metatrader 4, adicionando en código la extensión csv, y representa la ruta del archivo de precios y z representa la ruta del informe base. Esto es una parte importante del código dado que la manipulación de archivos es sustancial para el algoritmo y para la creación de estrategias.

87 87 En la manipulación de archivos de Excel es importante el desplazamiento de las celdas y más aún seleccionar datos que se encuentren a la final de una lista a la derecha o izquierda y al final de la misma. La anterior instrucción permite seleccionar una nueva celda partiendo de la ubicación dada de la celda actual, los parámetros que utiliza la propiedad.offset son la fila y la columna, en donde son números enteros. Y cuyo valor representa el número de movimientos en que se realizará la selección de nueva celda. Estos parámetros pueden ser negativos o positivos, donde los negativos representan un movimiento hacia arriba o hacia la izquierda, dependiendo si es fila o columna (Cuando son positivos el desplazamiento es mayor). Como se puede observar en la siguiente línea, los parámetros de entrada también pueden ser una variable, que para el caso de esta investigación es asignada a la variable t. La anterior instrucción fue realizada con el fin de abrir los diferentes archivos de Excel, para el input de esta función es necesario dar la ruta absoluta incluyendo la unidad o disco en que está alojado el archivo, mediante un tipo de cadena de caracteres.

88 88 Esta instrucción permite el retorno del objeto seleccionado, que para este caso la selección devuelve el rango de los datos encerrados (msdn.microsoft.com, 2020). Como se puede observar Selection y Seletion.End(xlToRight)) son los parámetros de entrada de la orden Range(). El primer parámetro mantiene como referencia la primera celda, mientras que el segundo incrementa el rango hacia el final de los datos del renglón en que se encuentra la selección. En conclusión la instrucción ejecutada en su totalidad selecciona todo el rango de datos que se encuentre en mismo renglón que la celda seleccionada por el parámetro Selection. Con la anterior instrucción se realiza una redimensión del rango anteriormente seleccionado, todas las columnas y restando una, además mantiene la cantidad de filas de la selección actual indicada por el conteo. Finalmente el rango se amplía hasta el final de los datos con xldown y es copiado a través de la segunda instrucción.

89 89 La anterior instrucción permite pegar los datos como valores, nótese la sintaxis en donde.pastespecial es una propiedad del objeto Selection. Para realizar esta operación se debe especificar el tipo de pegado si es por ejemplo de texto (Paste:=xlPasteText) o por valores (Paste:=xlPasteValues), el siguiente argumento es el tipo de operación si es suma, multiplicación, etc, y que en este caso no es necesario, por lo tanto se específica como Operation:=xlNone. El siguiente campo se denota como skipblanks y permite pegar las celdas que solo contengan los datos evitando aquellas celdas que no tenga información pero si algún tipo de formato, que para el caso de este algoritmo se le asigna a este campo un valor de False, finalmente al último parámetro Tranpose:=False se asigna le asigna falso dado que no se desea transponer los datos al momento de pegar los datos. Las anteriores dos instrucciones permiten realizar un cambio de formato en los valores numéricos, al ejecutar la primera de estas se cambia el formato del número por dos decimales y su respectiva puntuación. En la segunda instrucción aumenta a tres decimales, mediante el siguiente formato:»_(* #,## _);_(* (#,## );_(* en donde el formato aparece divido en cuatro secciones separadas por (;), como se puede observar en las dos primeras secciones se mantiene el #,##0.000 para los números positivos e igualmente para los

90 90 negativos dado que se buscó mantener los tres decimales en las cifras, para la tercera sección se predefine «»-«» para todos los valores que sean cero y en la cuarta sección se mostrará en blanco. Las dos instrucciones anteriores permiten verificar la existencia de los archivos informe Base e Histórico de precios a través del objeto fso y su método FileExists. Esta validación es pertinente dado que el usuario debe conocer la inexistencia de este archivo en el disco duro de la máquina, para posteriormente realizar una copia exacta del informe base. Mediante la instrucción Workbooks.Add se lográ crear una copia de un archivo ya existente, partiendo de una ruta definida, el cual fue para la investigación el archivo base, por tanto la estructura de la instrucción es Workbooks.Add( ruta del archivo informe base ). Por último, la segunda instrucción es la que renombra y guarda ese nuevo archivo creado, bajo el parámetro Filename:=w, del método.saveas Tal vez la instrucción más importante de este código en Visual Basic, dado que brinda la posibilidad de vincular fórmulas a la variabilidad de rangos y datos a través de los tipos de variables. El anterior desarrollo surge como solución ante el problema de la modificación de los

91 91 rangos que debe tomar para poder realizar el cálculo indicador. Sin embargo no se debe asumir que es la solución más eficiente en tiempo de ejecución. Para realizar la asignación a la propiedad.formular1c1 se tuvo en cuenta que el tipo de variable de la fórmula a asignar fuera una cadena de caracteres, es decir que visualmente la fórmula aparece entre comillas, sin embargo dado que se necesita incluir en esta cadena de caracteres las variables referentes a los parámetros del indicador, para realizar este procedimiento se concatena varias cadenas de caracteres, realizando la separaciones en los lugares donde se debe incluir las variables referentes a los rangos. Como se puede observar en la instrucción la primera cadena de caracteres es una parte de la fórmula «=+AVERAGE(MAX(R[«, esta se concatena mediante el operador (+) con la función Str(), dicha función tiene como parámetro la variable t2, esta función permite convertir un entero en una carácter. A continuación se puede observar la estructura de la asignación con la cadena de carácter. Cadena 1 Cadena Cadena + variable + Cadena 2 + variable + Cadena En conclusión el uso de la función Str() es sustancial para incluir la variabilidad en asignación de las diferentes fórmulas, dado que los cálculos no pueden ser fijos para usos prácticos de este algoritmo.

92 92 La anterior instrucción reemplaza los datos en las celdas que contenga (.) y es reemplazado con (/), mediante el método.replace, este contiene siete parámetros; el primero de esos parámetros es What :=., el cuya modificación altera el valor que se desea seleccionar, para Replacement:= se asigno el símbolo /, con el objetivo de cambiar todos los puntos y colocarlos en formato de fecha, los anteriores parámetros se consideran como requeridos. El siguiente parámetro se refiere si realiza la búsqueda enfocándose en la totalidad del texto como lo es xlwhole. Sin embargo, en caso contrario cuando sea cualquier parte del texto se tomará como referencia xlpart (msdn.microsoft.com, 2020), éste se considera como opcional, al igual que MatchCase:= aumenta la sensibilidad de la búsqueda, finalmente SearchFormat:= y ReplaceFormat:=, son dados para realizar el reemplazo del formato de la celdas. La anterior línea muestra la implementación del procedimiento de filtrado de las celdas, esta instrucción parte del objeto Application, el cual es usado cada vez que se tiene varios libros abiertos, y se activa el libro de la colección de archivos abiertos a través de la propiedad.activesheet. Posteriormente el objeto.range permite seleccionar un rango de datos, cuyo objetivo es tomar la primera fila del rango, y es indiferente a la cantidad de datos seleccionados. Dado que el proceso de filtrado permite tomar todos los datos de la hoja de cálculo, para realizar este filtrado se utilizó el método.autofilter, este tiene dos parámetros necesarios para poder

93 93 realizar la ejecución, el primero es el Filed=: que es el campo que se desea filtrar, es decir la columna con los datos que se desean seleccionar, el otro parámetro es el criterio con la instrucción Criteria1:=, este será el dato con el cual se realiza la comparación para hacer el filtrado de los datos. En la anterior instrucción el objeto.range realiza la selección del rango desde la selección actual hasta el final de los datos, y con la acción la propiedad.offset(1,0).select, el rango es movido en una fila hacia la parte inferior de la hoja. Finalmente con el método.close se realizá el cierre del archivo aceptando guardar cambios y con el nombre del archivo (w). A través del objeto ActiveWorkbook o del libro que se desea cerrar. Al realizar esta instrucción se evita que se muestre un evento al usuario para pedir si se graba o no el archivo. Finalmente algunas de estas instrucciones del código, se debe tener en cuenta que en el momento en que se realiza la apertura de varios archivos, se debe anteponer la instrucción del objeto Application., para las instrucciones.cutcopymode,.worksheets,. ActiveSheets,.Selection.PasteSpecial y.selection. Esto es importante dado que si no se antepone esta instrucción, se puede generar un error al momento de realizar la ejecución.

94 94 Este algoritmo tiene la función de realizar una copia al archivo original, renómbralo, cambiar los rangos y valores según los parámetros establecidos. El anterior archivo contiene toda la programación de la estrategia, más el cálculo de los componentes del indicador, es decir que en cada columna de este archivo contiene los valores del Tenkan Sen, Kinjun Sen, Senkou Span A y Senkou Span B; para implementar la estrategia se definen tres columnas adicionales que en primera instancia permiten saber cuando existían según las condiciones de una posición larga y una posición corta, mientras que las siguientes columnas evalúan a través de condicionales la apertura o cierre de las operaciones, cabe resaltar que la evaluación de los condicionales se realizá renglón por renglón, esta es la razón por la cual, la solución del problema se plantea mediante la división del mismo en 3 columnas. Al realizar la copia del archivo original por parte de la macro se permite el fraccionamiento de los procesos, esto con el fin utilizar el modelo de Visual Basic, y así dividir la evaluación de las combinaciones de los parámetros en varias maquinas. A continuación se explicarán dos segmentos de códigos y sus ejecuciones.

95 Ejecución del Algoritmo-I Para la ejecución del algoritmo-i, se realizá mediante la creación de una tarea programada, dando uso a las herramientas del sistemas proporcionadas por Windows, con el fin de abrir de forma automática un archivo de excel. Para poder abrir el programador de tareas en Windows 8 se debe ir al Inicio Panel de Control Herramientas Administrativas Programador de Tareas, Vease Figura 21. Figura 21. Visualización del Explorador de Ventanas de Windows En la parte izquierda se observa el Panel de Control, mientras que en el lado derecho se observa el Programador de Tareas o Task Scheduler. Fuente: Windows Vista (2020).

96 96 Para el sistema operativo de Windows Vista la ubicación del Programador de Tareas cambia, este se encuentra en el Inicio Todos los programas Accesorios Herramientas del sistema Programador de tareas. Véase la Figura 22 Figura 22. Programador de Tareas Visualización del acceso al Programador de Tareas en Windows Vista y Windows 7. Fuente: Windows Vista (2020). Nótese que el programa cuando se encuentra abierto mantiene varias funciones para realizar tarea de forma automática, sin embargo solo se usaron las opciones que fueron pertinentes para garantizar la ejecución del Algoritmo-I que se encuentra contenido en el CreadordeBacktestingIchimoku-I, Una vez se realizado la apertura del Programador de tareas, se realizó el registro de la tarea dentro del mismo programa, a través de la opción Crear tarea, esta opción lanza una nueva ventana de propiedades con los diferentes campos algunos

97 97 necesarios otros opcionales. Como se puede observar en el Figura 22 en la ventana de propiedades existen dos opciones para la tarea designada, la primera de estas es Ejecutar solo cuando el usuario haya iniciado sesión y la segunda Ejecutar tanto si el usuario inicio sesión como si no, mediante estas opciones se puede hacer que la ejecución cuando el usuario deja bloqueada su sesión para realizar otra actividad o se planea dejar la maquina encendida durante un largo periodo de tiempo. Sin embargo, para emplear esta función se debe tener en cuenta que el usuario debe tener los permisos necesarios para que sus sesiones no sean finalizadas y se mantengan en ejecución, otra opción es Ejecutar con los privilegios más altos, con la cual se elevan los privilegios para aumentar los permisos como administrador (Freddi, 2020, pág. 470). Las anteriores dos opciones mantienen una ejecución restrictiva dependiendo de las políticas de seguridad de la compañía. En el caso de esta investigación se realizó en máquinas con restricciones por lo que se optó por seleccionar la opción de Ejecutar solo cuando el usuario haya iniciado sesión.

98 98 Figura 23. Ventana Propiedades – Pestaña General Configuración del programador de tareas. Fuente: Windows 7 (2020). Al ser una tarea programada debe tener un desencadenador que active la misma, para configurar dicha reacción se debe activar la pestaña Desencadenadores en la parte superior de la ventana en la opción nuevo, desplegando la ventana Nuevo desencadenador en donde se encuentran diferentes tipos de acciones para desencadenar la tarea; el primer campo de esta ventana es Iniciar la tarea, en donde se pueden diferenciar diez ítems. Cada uno de estos ítems es la referencia a un evento desencadenador, por ejemplo este puede ser realizado según una programación en una fecha dada como es el caso de esta investigación, pero también puede ser al inicio, cierre, o inactividad de la sesión del usuario, al producirse un evento de un programa, o realizar la conexión de forma remota con otro usuario. Para el caso de ítem Según una

99 99 programación es necesario registrar la periocidad de la tarea, la fecha y hora de la misma. Además, este ítem dispone de una configuración avanzada con sus diferentes opciones; una de estas opciones es la de Retraso Max o Retraso aleatorio, el cual retarda el inicio de la tarea. Para la ejecución del Algoritmo-I se utilizó la selección de este procedimiento con el fin lanzar nuevamente el creadordebacktestingichimokuopen.xlsm sin que la anterior ejecución interrumpiera el nuevo proceso ejecutado. Esto se realizó dado La opción de Repetir cada cinco minutos permite realizar la apertura del archivo varias veces, permitiendo entre cada apertura una lapso para desencadenar nuevamente una apertura, para esta investigación inicialmente se implemento un tiempo de cinco minutos, dadas las capacidades de las maquinas empleadas, sin embargo este tiempo tuvo una reducción ver Figura 23 Figura 24. Programador de tareas

100 100 Vista general de la pestana desencadenadores, en la parte inferior derecha se muestra la ventana Nuevo desencadenador en donde se realiza la configuración seleccionando el ítem Según una programación. Fuente: Windows Vista (2020). Una vez se configuró el desencadenador se procedió a seleccionar la acción, esta puede ser enviar un correo electrónico, mostrar un mensaje en la pantalla con forma de Pop up en la barra de inicio; sin embargo para esta investigación se seleccionó la opción de Iniciar un programa, y se específica la ruta del creadordebacktestingichimokuopen.xlsm. La siguiente pestaña corresponde a las condiciones, en esta se puede configurar el inicio de una tarea programada cuando el equipo no se encuentre inactivo, o que mantenga las condiciones de conexión en la red y opciones de activar el equipo para ejecutar la tarea, es decir cuando se encuentran en modo de hibernación sin embargo este tiene restricciones de políticas de seguridad de las empresas véase Figura 25.

101 101 Figura 25. Visualización de la pestaña de acciones Nótese la ruta de la ubicación del CreadorDeBacktestingIchimokuOpen.xlsm, antepuesto de la acción Iniciar un programa. Fuente: Windows Vista (2020). Figura 26. Visualización de las condiciones para la ejecución de la tarea Nótese las condiciones para iniciar cuando el equipo esta inactivo. Fuente: Windows Vista (2020). Por último, la pestaña configuración (Ver Figura 26) presenta campos adicionales para la administración de la tarea programada. Esta pestaña muestra diferentes campos como por ejemplo Permitir que la tarea se ejecute a petición es decir que el usuario puede realizar el inicio de la tarea programada sin esperar al desecadenador, la opción Ejecutar tarea lo antes posible si no hubo inicio programado esta iniciará la tarea si la ejecución de la misma se programo para una determinada hora, pero por alguna razón esta no fue ejecutada ya sea porque se desactivó el

102 102 equipo o porque el programador de tareas estaba ocupado, reiniciando la tarea que paso por alto diez minutos después de la última ejecución, si la tarea no se ejecuta-reiniciarla cada cierto intervalo de tiempo que va transcurrir entre los intentos de reinicio de la tarea; los elementos anteriormente descritos, fueron seleccionados dadas su relevancia para la investigacion, debido a que en el momento de la ejecución es pertinente activar la tarea a voluntad, ejecutarla lo antes posible y además se reinició varias veces dado que el proceso fue interrumpido en varias ocasiones. Las siguiente opción es Detener la tarea si se ejecuta durante más de cierto tiempo limitado, evitando que la tarea ejecutada pero inconclusa se prolongue por largos periodos, La opción Detener tarea en ejecución si no finaliza cuando se solicite, permite que la tarea programada se vea obligada a detenerse si no responde a su programación, esta opción debe ser verificada dado que se pueden dar casos en la tarea programada reaccione y se ejecute de forma normal, sin embargo en esta investigación no fue contemplada esta opción dado que se buscaba optimizar el tiempo entre las repeticiones de la tarea. Eliminar tareas no programadas después de la cantidad de días especificados esta opción borra todas las tareas programadas que han caducado, por lo que no resulta relevante en la investigación. La siguiente opción es la de Aplicar la siguiente regla si la tarea ya está en ejecución cuyos ítems son: -No iniciar una nueva instancia: no inicia una nueva instancia y no detiene la ya existente, esta opción fue seleccionada para la investigación dado los recursos limitados de las maquinas, que en las primeras ejecuciones fueron domesticas.

103 103 -Ejecutar una instancia nueva en paralelo: Esta opción lográ que el programador ejecute una nueva instancia de la tarea en paralelo con la instancia que ya se está ejecutando. -Poner en cola una instancia nueva: agrega una nueva instancia de la tarea a la cola de tareas para ser ejecutada posteriormente -Detener la instancia existente: el servicio programador de tareas detendrá la instancia de la tarea que ya este ejecutándose y ejecutará la nueva instancia de la tarea. Las opciones anteriormente explicadas como ejecutar en paralelo, agregar y detener tareas programadas son opciones que pueden resultar de gran utilidad (véase Figura 27 como resumen del proceso), sin embargo estas opciones no fueron evaluadas en los procesos ejecutados por esta investigación. Figura 27. Visualización de las opciones generales de la pestana configuración

104 104 Las tareas programadas permiten ejecuciones en paralelo bajo las condiciones de esta pestaña. Fuente: Windows Vista (2020). A continuación se mostrará la codificación del Algoritmo-I en Visual Basic. Las líneas se muestran con los diferentes colores, generados bajo el editor de Visual Basic. La siguiente Hoja mostrará la totalidad de la codificación de estos elementos.

105 Modificación del Algoritmo-I La diferencia entre los dos algoritmo parte de la inclusión de un ciclo mientras que la condición dada se cumpla, el algoritmo realizará la iteración de la copia de un nuevo archivo con la configuración de los parámetros establecidos. En este caso la condición para el ciclo es dada por el número de repeticiones que el usuario desee realizar. Esto se lográ a través de la instrucción For de vb y la inclusión de la variable Iter que actuará como contador del número de repeticiones del ciclo. Dicho contador es una variable de tipo entero. Como se puede observar en el anterior segmento de código, la estructura es delimitada por las palabras reservadas For y Next, con el fin de realizar varias repeticiones delimitadas por el valor de la variable Iter (véase Figura 28), cuyo valor es designado por el usuario. Dentro del ciclo se observa como existe el condicional If y demás instrucciones del Algoritmo-I. El Objetivo de la inclusión de este segmento de codificación es la reducción de tiempos optimizando el tiempo de ejecución, dado que existe una pérdida de tiempo no medible entre la finalización de cada ejecución. Debido a lo anterior se evidenció una reducción en este sentido, sin embargo en varias ocasiones se presento una detención definitiva del proceso, el cual no podía ser reiniciada de forma automática bajo la codificación del Algoritmo-II, es decir que la

106 106 ejecución debía ser activada manualmente. Dado lo anterior la ejecución fue supervisada en varios casos por el usuario y la decisión fue la implementación del Algoritmo-II, sin embargo no se desconoce el potencial del programador de tareas de Windows, además de que esta investigación no contempla el total de las herramientas del mismo. Figura 28 Visualización de la Hoja de cálculo Rutas del Algoritmo-II Se observa la Celda ITERACIONES con un valor de 770, este dato es asignado a la variable Iter. Fuente: Modelo de Backtesting Ichimoku (2020). 8.5 Malas prácticas Uno de los errores en los que se incidió en esta investigación fue la declaración y posterior asignación de la variable de iter dado que la naturaleza es de tipo entero por ser un contador, se le asigna un tipo de valor que corresponde al dato contenido de la celda ITERACIONES, cuyo contenido se puede leer como un dato y no valor, es decir como un dato de cadena de carácter. Lo anterior genera un valor erróneo en la variable Iter y en el momento de darle un incremento a esta variable no se incrementa por ser de naturaleza carácter, realizando varias veces el mismo proceso.

107 107 Una mala práctica que es mucho más ineficiente que lo anterior es declarar todos los tipos de variables como variant como solución a este inconveniente, es decir variables de tipo entero, doble, cadena de caracteres se convierten en un sólo tipo. Un tipo de variable que cambia según la naturaleza que se le asigne, resultando costoso en el uso de los recursos del computador. Como se menciona anteriormente el uso del Algoritmo-II, resulta mucho más eficiente y menos costoso en el uso de los recursos de la maquina dada que su implementación en Visual y cualquier otro lenguaje resulta mucho más eficiente en la solución del problema (mencionar problema). A continuación se muestra el total de la codificación del Algoritmo-II implementada en Visual Basic.

108 Comercio Electronico El desarrollo tecnológico en el área de la computación y comunicaciones ha permitido la realización de tareas automáticas por parte de los servidores, cambiando el curso de las finanzas, específicamente en el Mercado Forex con el uso del análisis Technical Trading. Desde la era de las tasas de cambio flotantes en los 70, el Technical Trading ha llegado a extenderse en el mercado accionario y de divisas, además la ampliación de los desarrollos técnicos y tecnológicos ha generado que la industria de los mercados financieros, incremente la investigación en la automatización de los intercambios electrónicos. (Idvall & Jonsson, 2008, p. 3). Uno de los primeros mercados en cambiar el concepto de la negociación en donde no se requiriese el contacto físico entre los participantes fue el mercado NASDAQ, posteriormente lo hizo el NYSE que mantuvo algunas negociaciones en físico, sin embargo realizó la contratación electrónica, dando paso al comercio electrónico y al enrutamiento de órdenes de forma automática, además de generar una amplia difusión de las cotizaciones, creando un entorno que permite la ejecución rápida de órdenes y transmisión de los datos de relevancia para los analistas de los diferentes mercados (Idvall & Jonsson, 2008, p. 3). El crecimiento tecnológico originó que los distintos Brokers, recibieran las distintas órdenes y lograran realizar el pedido y cumplimiento de forma electrónica, representando una forma más centralizada de mercado; rápidamente el Mercado Forex adoptó la figura de este mercado, dada la liquidez y los grandes volúmenes de negociación, haciendo pertinente el uso del comercio electrónico o Electronical Trading. (Idvall & Jonsson, 2008, p. 3).

109 109 Con la implementación de este tipo de comercio se ha generado una mayor transparencia en el mercado, dado que en primera medida se observa la distribución de señales y precios de todos los trades generados por el Broker, en segunda instancia facilita el seguimiento de la formación de los precios y sus órdenes que afectan al mismo (Rime, 2003, págs ). La formación de precios es afectada por una mayor liquidez, la cual es relevante en periodos de pánico en los mercados financieros, por tal motivo el comercio electrónico puede ser más útil en la generación de liquidez que el comercio de viva voz, haciendo más relevante este tipo de comercio para la disminución de los costos de transacción, como consecuencia de la amplia liquidez, específicamente en menores spreads entre la oferta y la demanda (Rime, 2003, págs ). El enrutamiento de órdenes de forma electrónica generó un espacio propicio para el envío masivo de las mismas, dando como consecuencia un menor costo de las transacciones y slippage bajo, incentivando la inclusión de sistemas informáticos en la decisiones de inversión y negociación directa, momento en que se combina la actividad de trading con la estructuración de rutinas y codificaciones en lenguajes de programación para el desarrollo de la negociación en los mercados financieros. Esta nueva modalidad en la negociación utiliza algoritmos de comercio para realizar las diferentes operaciones sobre los activos (Rime, 2003, págs ). El trading por algoritmos o algorithmic trading se define como la actividad del comercio electrónico en la que las decisiones de compra o venta de títulos valores se realiza a través de una

110 110 serie de pasos sucesivos o algoritmos, los cuales son traducidos a un lenguaje de programación para realizar un análisis de diversas variables asignadas por los traders, analistas, programadores y demás involucrados en el desarrollo de las estrategias. Cuando el algoritmo analiza toda la información enruta las órdenes a través de algún acceso directo al mercado. Otros autores lo definen como la colocación de órdenes de venta o compra, con una cantidad determinada en un modelo cuantitativo, que automáticamente genera el envío de operaciones, basado en los objetivos específicos de los parámetros y delimitaciones del algoritmo (Kim, 2007, pág. 9). La definición de programa y trading algorítmico es a menudo confundida e incomprendida, términos como programa de trading, trading algorítmico y caja negra de trading son usualmente intercambiables. El programa de trading fue definido por el New Stock Exchange como la compra de acciones de al menos quince especies por un monto mínimo de un millón de dólares, en el caso del trading algorítmico se refiere al enrutamiento de órdenes bajo una serie de reglas predefinidas y finalmente la caja negra realiza una descomposición de órdenes grandes, en otras más pequeñas con el fin de evitar movimientos sobre reaccionados en el mercado. (Kim, 2007, págs. 9,10). Con el trading algorítmico se disminuyen las negociaciones en bloque, es decir el envío de una orden demasiado grande la cual puede sobre reaccionar al mercado, este ha disminuido con la implementación del trading algorítmico además de realizar un mejor manejo de la volatilidad (Kim, 2007, págs ), ayudando a los inversores de largo plazo. Ver Figura 29.

111 111 Figura 29 Participación de las operaciones de Bloque. Nótese la disminución de este tipo de órdenes en el tiempo.fuente: Aite Group, NYSE (2003). Al minimizar la volatilidad se ofrece mayores oportunidades a los inversores de largo plazo, y bajo este delineamiento la SEC, se ha enfocado en la reducción del costo de transacción, mediante la profundización, o habilidad de los inversores de estabilizar mercados sin afectar de forma sustancial el diferencial entre la oferta y la demanda. Sin embargo, inversores de muy corto plazo pueden observar oportunidades en mercados excesivamente volátiles (Kim, 2007, pág. 2). El trading algoritmo ha promovido la reducción de los costos transaccionales, y ha generado un crecimiento en el volumen y en la liquidez del Mercado de Divisas, Acciones, ETFs, Renta Fija, e inclusive derivados de Crédito como MBS. Además ha promovido la externalización del frontoffice, generando una competencia la disminución de costo de la transacción y la latencia o reducción del tiempo de retardos del envío y recepción de datos, lo anterior se traduce en un aumento de la velocidad de propagación y transmisión de paquetes dentro de la red, logrando la colocación de órdenes de forma rápida, creando la competencia por la ventaja de la velocidad,

112 112 llegar primero para lograr mayor rentabilidad, con el arbitraje por latencias entre los diferentes mercados, donde los diferentes algoritmos intervienen de forma directa, y cuya naturaleza ha incidido en las formas de realizar la negociación, algunos pueden enfocarse en la liquidez, mientras que otros en las señales de comercio (Kim, 2007). Existen algunos pasos que deberían ser considerados con el fin de observar la viabilidad de un algoritmo, como por ejemplo analizar la naturaleza de la estrategia ya que puede ser un algoritmo que realiza la ejecución automática, o su naturaleza le permite reconocer patrones de liquidez, o replicar los patrones de comercio para órdenes canceladas, además el tipo de algoritmo debe tener una mejor ejecución que la humana especialmente en mercado ilíquidos y la habilidad del algoritmo de procesar gran cantidad de datos históricos y en tiempo real. Otro elemento que el algoritmo debe tener en cuenta es el spread entre bid-ask a la hora de enrutar las órdenes, algunos algoritmos sofisticados analizan los patrones de liquidez con el objetivo de encontrar un ahorro en el que el spread del bid y el ask y llevarlo al mínimo, con el objetivo de optimizar el costo de la transacción. (Kim, 2007, pág. 66). 9.1 Trading Electrónico en el Mercado Forex El comercio electrónico ha tenido una importante presencia en el mercado interdealer de contado para las transacciones de divisas desde hace más de una década. El banco internacional de cumplimiento, muestra que del 20-30% del comercio interbancario en las principales monedas o major, fue ejecutado electrónicamente en 1995 y posteriormente este incremento fue del 50% en 1998, y superior al 90% en el El tamaño de los trades se ha incrementado bajo una base

113 113 electrónica, llegando a cifras que exceden los $100 millones de dólares, denotando la importancia de este tipo de trading, y la relevancia de los algoritmos de comercio, cuyas oportunidades se encuentran en el movimiento diario que supera la 2 trillones de dólares. El mercado de divisas en la negociación al contado, se realiza de forma 100% electrónica entre los bancos, los cuales compiten por ofrecer estrategias de trading algorítmico efectivas a clientes compradores, que optan por este servicio en vez del ofrecido por bróker-dealers con precios resagados y servicio ineficiente. (Kim, 2007, pág. 122). Fondos de Cobertura y otras firmas administradoras de inversión que demandan liquidez más profunda y desean participar en el mercado interbancario escriben sus propios algoritmos para capitalizar los cambios en el movimiento de los precios. En conclusión el crecimiento del trading algorítmico es altamente influenciado por el crecimiento del trading en múltiples activos alrededor del mundo, en la medida en que las barreras geográficas desaparecen, la tecnología es cada vez más sofisticada y las plataformas ofrecen todo un mundo de productos financieros. El crecimiento del trading algorítmico estará vinculado a la disminución de las barreras entre los diferentes mercados, y las conexiones interbancarias para las operaciones de contado como se observa en el mercado Forex.

115 Trading Algoritmico en MQL4 En la actualidad la inclusión de los lenguajes de programación en la actividad de trading, ha ascendido a los traders a un nuevo nivel de comercio, el comercio electrónico, con el enrutamiento automático de órdenes y la negociación algorítmica. La ventaja es el poder realizar operaciones de acuerdo a los parámetros dados por el trader, con la ayuda de un algoritmo basado en indicadores propios de la plataforma o los que son desarrollados de forma personalizada, procesamiento digital de señales, análisis fractal, o una red neuronal entre otros tipos de análisis que permiten realizar el comercio de forma automática. El desarrollo del lenguaje MQL4 fue diseñado para que la terminal del usuario realice la ejecución del algoritmo cuyas órdenes generadas sean enviadas al servidor de forma automática y son recibidas por el mismo dealing center (Servidor del Broker), los programas de aplicación que son ejecutados en la terminal como asesores expertos (programas de negociación), indicadores personalizados, o scripts diseñados por el trader para volver su ambiente de trabajo más personalizado, son ejecutados directamente desde la terminal, al igual que otras codificaciones adicionales a las anteriormente descritas. Ver Figura 30

116 116 Servidores – Broker Terminal de Metatrader Asesor Experto Indicador Personalizado Codificaciones personalizadas o Scripts Figura 30 Diagrama de ejecución e interacciones. En la línea azul se muestran los algoritmos que mantiene una interacción solamente con la terminal de usuario como es el caso de los script e indicadores personalizados, mientras que la línea roja muestra la conexión con el servidor del Broker o también del Dealer dado que los algoritmos mencionados como asesores expertos, realizan un conexión con la terminal del usuario para que esta realice el debido enrutamiento de órdenes con los servidores. Fuente: Propia (2020). Dado el que servidor solo permite procesar señales procedentes de la Terminal, es decir el algoritmo no realizará operaciones si la terminal no se encuentra activa, sin embargo el algoritmo puede lograr advertir al trader la pérdida de la conexión mediante la reproducción de una alerta

117 117 sonora o escrita en forma popups. Asesor Experto reduce el tiempo ejecución y la reducción de las emociones y errores subsecuentes en los periodos de extrema tensión para el trader. La ejecución en el lenguaje MQL4 se encuentra evaluada por la ingeniería de sistemas con el concepto de evento del programa y las finanzas con el concepto de tick, en donde para el lenguaje de programación mencionado y para el mercado de divisas el evento tick en el contexto de la plataforma Metatrader 4 es la mínima variación de los precios que generan una actualización de los metadatos alojados en la plataforma como lo son: precio de apertura, precio máximo, precio mínimo, y volumen negociado, que sucede en el momento en que se actualiza dichos metadatos con la mínima variación del precio de cierre, variación que comprende entre el cambio del precio de cierre actual y el inmediatamente anterior en su mínima expresión. Por qué en MQL4 la ejecución del algoritmo de comercio e indicadores personalizados, se realizan en el lapso de tiempo entre un tick y otro? El flujo de la ejecución o control es supervisado por la terminal una vez se recibe un tick, el algoritmo de comercio o asesor experto comienza su ejecución para posteriormente ceder el control cuando haya finalizado su operación, esto incluye condicionales y ciclos. Tan pronto como se termine el proceso de ejecución el algoritmo cambia al modo de espera de ticks, sin embargo si el algoritmo se encuentra en ejecución y se produce un nuevo tick, este evento no tiene ningún efecto sobre la ejecución del programa, es por eso que no todos los tick generan el lanzamiento de un Asesor Experto, solo aquellos que se reciben cuando el algoritmo se encuentra

118 118 en modo de espera. En el caso de los script la ejecución se realizará una sola en el instante en que el algoritmo sea asociado a la ventana. Al ser vinculado a una ventana, solo los indicadores personalizados pueden ser vinculados simultaneamente a una ventana de un símbolo o instrumento, se pueden poner en marcha simultáneamente programas de los tres tipos, manteniendo las limitaciones de un solo script y asesor experto por ventana, sin embargo estos pueden ejecutarse de forma simultaneas en diferentes ventanas, además cualquier programa puede crear variables globales, es decir definidas fuera de la función principal o la función en la que se activa la ejecución, las cuales permiten compartir información entre los diferentes Asesores Expertos (Kovalyov, 2020, pág. 57). 9.3 Metaeditor de Metatrader 4 Es un editor especializado multifunción destinado a crear, editar y compilar programas de aplicación escritos en MQL4. El editor tiene una interfaz de fácil navegación, la cual contiene una distribución de 3 módulos: el primero es el navegador que permite observar y obtener de forma eficaz todas las codificaciones guardadas en el sistema de archivos, el segundo es la caja de herramientas en donde se pueden observar los errores detectados por el compilador (pestaña errores), observar la pestaña diario que muestra los diferentes retornos tanto de las variables que se deseen mostrar, como de los mensajes provistos por la terminal, finalmente el módulo principal o vista principal es la parte en donde se escriben las instrucciones para ser

119 119 posteriormente compiladas y generar el Asesor Experto, indicador personalizado, o un script. (ver Figura 31). Figura 31 Vista general del Metaeditor de Metatrader 4. El Metaeditor mantiene su propio sistema de archivos con sus elementos subordinados, la ruta de estos elementos es \expertos, los indicadores en la ruta \expertos\indicadores y los scripts en la dirección relativa expertos/scripts. Fuente: Metatrader 4.0 ( 2020). Los asesores expertos, indicadores y scripts, generan un ejecutable con extensión.ex4 (executable from mql4) a partir del archivo con el código fuente del algoritmo, este tiene la extensión.mql4. Otras extensiones son la del tipo de archivo mqh el cual incluye la descripción de funciones importadas (como ejemplo los archivos stdlib.mqh o WinUser32.mqh) o una descripción de constantes y variables comunes (stderror.mqh o WinUser.mqh), estos se pueden encontrar en la ruta /include.

120 Programación en el Metaeditor Asesor Experto La codificación para crear un algoritmo de comercio en Metatrader 4 mantiene una estructura de tres funciones principales estas son: int init(), int deinit(), int start(), para el caso de Metatrader 5(MT5) el nombre y la estructura cambian dejando de ser funciones y pasan a ser procedimientos de tal forma que no retorna ningún valor, la función int init() sigue manteniendo su estructura de función, sin embargo esta se nombra como int Oninit(), la siguiente función int deinit () pasa a ser un procedimiento y se renombra como void OnDeinit() y la función int Start() cambia a ser un procedimiento con un nombre más amigable para el programador el cual es void OnTick(). (Kovalyov, 2020, pág. 43). La función int OnInit()es compilada y ejecutada una sola vez, cuando es cargado el Asesor experto y se encuentra en modo de espera hasta que se produzca el nuevo tick, esta función puede retornar tres tipos de eventos de control: INIT_SUCCEEDED: El asesor experto ha sido cargado y adjuntado de forma exitosa, este evento puede ser usado como un valor de retorno Nulo que en algunos compiladores resulta ser necesaria para poder realizar la compilación, debido a que todas las funciones deben retornar algún dato. Este evento específicamente es el que permite continuar con la

121 121 ejecución hacia las demás funciones principales, de forma tal que el retorno puede ser utilizado con una condición para realizar alguna validación. (MQL5 Ltd, 2020). INIT_FAILED: El asesor experto presenta un error, lo cual no permite continuar con la ejecución, este puede ser retornado posteriormente después de realizar una validación sobre el valor de la cuenta y elementos de Money Management (MQL5 Ltd, 2020). INIT_PARAMETERS_INCORRECT: Se presenta cuando los parámetros están de forma incorrecta porque se detiene la ejecución (MQL5 Ltd, 2020). INIT_AGENT_NOT_SUITABLE: No hay errores durante la inicialización, sin embargo por capacidades de la maquina o problemas de interacción con el kernel o programas que interactúan directamente con el hardware, se pueden generar errores. Por ejemplo, en algunos casos pueden ser problemas de espacio en la memoria RAM para cargar un número amplio de variables, o problemas de interacción del Algoritmo con la tarjeta de video, a través del programa Open CL, para realizar cálculos básicos en los chips o integrados de la tarjeta de video (MQL5 Ltd, 2020). La siguiente función es el int deinit() o en el caso del MT5 es un procedimiento el cual es ejecutado en el momento en el que se inhabilita el Asesor Experto, esta función acepta códigos para la desinicialización, por ejemplo, dentro de esta función se puede mostrar un mensaje de validación como producto de los códigos que entran a esta función. Dichos códigos son los siguientes (MQL5 Ltd, 2020):

122 122 -REASON_PROGRAM (0): El Asesor Experto terminó su operación llamando a la función ExpertRemove() función. -REASON_REMOVE (1): El programa fue borrado. -REASON_RECOMPILE(2): El Programa ha sido recompilado -REASON_CHARTCHANGE(3): Símbolo o periodo de la figura ha cambiado. -REASON_CHARTCLOSE(4): La figura ha sido cerrada. -REASON_PARAMETERS(5): Los parámetros de entrada han sido cambiados por el usuario. -REASON_ACCOUNT(6): Otra cuenta ha sido activada o se ha producido la reconexión con el servidor de comercio debido a los cambios en los ajustes de la cuenta. -REASON_TEMPLATE(7): Una nueva plantilla se ha aplicado. Los códigos REASON_REMOVE y REASON_RECOMPILE se implementan para los indicadores. Finalmente está la función int start() o procedimiento Void Ontick para la versión 5 del lenguaje MQL. En este procedimiento se centrará en la ejecución del programa de comercio casi en la totalidad del tiempo de uso del programa, además dado que el MQL es un lenguaje que se enfoca principalmente en el evento tick, este evalúa como desencadenador principal entre el programa y el mercado cambios en el precio, de este modo se toma como referencia la variación del precio del activo dando de forma inferencial un condicional para evaluar el mercado (si el precio cambia-el programa hace), lo que a su vez es tomado como referencia por los algoritmos de comercio creados en este lenguaje (MQL5 Ltd, 2020). Ver Figura 32 y Figura 33.

123 123 Figura 32.Visualizacion de la plantilla del Asesor Experto en MQL4 Nótese las tres funciones principales de la codificación, separadas por líneas de comentarios para hacer más fácil la compresión. Fuente: Cálculo Propio – Metaeditor (2020).

124 124 Figura 33.Visualizacion de la plantilla del Asesor Experto en MQL5 Nótese la función OnInit(), el procedimiento OnDeinit(), y el procedimiento OnTick() igual a la función Star() en versión 5 del lenguaje. Fuente: Cálculo Propio – Metaeditor (2020) Prototipo de Asesor Experto para Ichimoku Kinko Hyo. En este acápite se explicarán las diferentes instrucciones para poder realizar la implementación de un algoritmo de comercio basado en el indicador Ichimoku Kinko Hyo en el lenguaje mql4. A continuación se mostrarán las instrucciones en este lenguaje con su respectiva descripción sobre cada segmento de código.

125 125 Todo Asesor Experto (EA por su siglas en ingles) inicia su ejecución en la función init (), dicha función está dada para poder realizar acciones cuando se carga el algoritmo de comercio. Algunos de los usos de esta función inicial puede ser evaluar a través de condicionales estados de margen, capital y condiciones de mercado y del bróker. En la Figura 34 y 35 se observa la forma para reproducir un archivo de tipo.wav (Waveform Audio File Format), el cual puede usarse para activar una alerta sonora cuando es cargado el Asesor Experto, o en casos en que se desee generar un aviso de una apertura una posición, desconexión del servidor central, o el bróker no acepta las solicitudes porque la cuenta está bloqueada. Los audios pueden ser cargados al asesor experto solo si se encuentran en la carpeta /sounds de la estructura de archivos de la terminal (Figura 35), cada uno de estos archivos de sonido pueden ser modificados por un editor de sonido como Audacity (Figura 36),. Figura 34 Funciones Funcion Init() o OnInit(), dentro de esta función se encuentra contenida la instrucción PlaySound( Intro ). Fuente: Cálculo Propio – Metaeditor (2020).

126 126 Figura 35 Estructura de Archivos de MQL4 para la reproducción de sonidos del sistema. En la imagen se muestra el archivo expert cuya extensión es.wav. Fuente: Explorador Windows (2020) Figura 36 Audicity Editor de audio. Fuente: Programa de Audacity (2020) Variables externas Las variables externas son las variables de entrada del modelo, las cuales mediante la instrucción extern seguida de la instrucción int, double, o cualquier otro tipo de variable. Estas

127 127 pueden ser visualizadas en un cuadro de diálogo de la terminal para realizar el cambio de su valor (MQL5 Ltd, 2020). Ver Figura 37 y 38. Figura 37 Variables Externas A través de la instrucción extern en el lenguaje Mql. Fuente: Fuente: Cálculo Propio – Metaeditor (2020). Figura 38 Propiedades del Asesor Expert. En la pestaña input se observan todas las variables escritas en la codificación con la instrucción extern. Fuente: Metatrader 4.0 (2020). Luego de la declaración de las variables externas, se usan archivos de inclusión, los cuales contienen definiciones de constantes, variables y funciones; en este ejemplo se realizó la inclusión del archivo stderror.mqh, el cual contiene las definiciones de cada uno de los errores retornados, con un total de errores descritos en este archivo, además el archivo stdlib.mqh

128 128 contiene el prototipo de cinco funciones, principalmente ErrorDescription(int error_code), cuyo desarrollo se encuentra en el archivo stdlib.mq4 el cual contiene la estructura case para evaluar cada uno de los casos según el número de error encontrado Ver Figura 39. Figura 39 Archivos de inclusión. Vinculados mediante la instrucción #include. Fuente: Cálculo Propio – Metaeditor (2020). La función de un algoritmo de comercio es analizar las condiciones de mercado, estas pueden reflejarse en instante y con un evento dado, por tal motivo es fundamental la explicación de las instrucciones contenidas del procedimiento void OnTick(). Varios tipos de algoritmos pueden ser incluidos en esta parte y para poder decir cuáles instrucciones incluir en el procedimiento se parte de la idea de que el evento tick es un ciclo parecido a la estructura while, dado que la codificación se mantendrá en ejecución cada vez que se produzca un refrescamiento de precios, este se puede dar varias veces de tal forma que puede ser continuo, similiar a un ciclo. Sin embargo, unos de los inconvenientes que se planteó inicialmente fue la forma de generar una conexión del mercado con el resto de las órdenes para ello se desconocieron las funciones principales y se utilizó la estructura While cuyo condicional se le adicionó la función refreshrate() la cual realizá un llamado al sistema para que actualice la base de los precios, lo cual resulta erróneo dado que esta función solo descarga precios, y su uso con este propósito presenta una forma errónea de programar en este lenguaje. Por tanto para crear un algoritmo de comercio en cualquier lenguaje de programación, se debe tener en cuenta la manera correcta de vincular la actualización de precios dados por el mercado y el algoritmo que enrutará las órdenes de las diferentes operaciones.

129 Función Principal Como se explicó anteriormente las instrucciones principales están contenidas en el procedimiento principal (ver Figura 40). A continuación se mostrarán las instrucciones del prototipo, además se resalta que las instrucciones en su orden pueden ser usadas para otros tipos de algoritmos de comercio. Figura 40. Procedimiento OnTick Instrucciones respectivas delimitadas por los corchetes. Fuente: Cálculo Propio – Metaeditor (2020). Como se puede observar en el primer condicional if se evalúa la función Bars 130 130 indicando que la primera condición no incluye a la segunda, la cual es IsTradeAllowed(), cuyo valor si es falso retornará un valor cero y se finalizara la ejecución del programa. El segundo condicional if evalúa que no existan posiciones abiertas en la plataforma con la función OrdenesActuales() y asi poder invocar el procedimiento de AperturaPosicion(), en caso contrario de que no se cumpla esta condicional, se llama al procedimiento CierrePosicion().

131 Cálculo de órdenes vigentes en mercado La función Ordenes Actuales() calcula la cantidad de órdenes vigentes en la plataforma, es el número de posiciones largas o cortas que se encuentran abiertas en la terminal del usuario (ver Figura 41). Figura 41 Función Órdenes Actuales Mediante el uso de contadores se realiza el control de operaciones abiertas a partir de la función OrdersTotal().Fuente: Cálculo Propio – Metaeditor (2020). Esta función crea dos variables enteras de largos y cortos, las cuales son usadas como tipos de contadores, estas variables son inicializadas con el valor de cero evitando datos erróneos en memoria. En las siguientes líneas se maneja la estructura principal de la función, este es un bucle for cuya variable de control es i, esta maneja un rango que va desde cero hasta el total de las órdenes en la terminal, se lográ con el uso de la función OrdersTotal(). La variable de control del For realizará el número de iteraciones que sean necesarias hasta que llegue a la cantidad de posiciones abiertas y órdenes pendientes.

132 132 Dentro del ciclo for se encuentra contenido la estructura if cuyo condicional parte de la función OrderSelect (), que cuenta con tres parámetros de entrada; el primero de estos es i cuyo valor es variable dentro de la estructura for y de la función mencionada, indicando cada una de posiciones en la lista de las diferentes operaciones, dependiendo del segundo parámetro dado que toda operación puede ser tomada por posición o por su ticket. Para poder realizar la distinción en el uso de la función se debe seleccionar en el segundo parámetro SELECT_BY_POS (para tomar la operación por posición) o SELECT_BY_TICKET (por la identificación de la operación). El tercer parámetro permite seleccionar las operaciones desde las operaciones vigentes o en caso contrario desde las transacciones históricas. Para tomar operaciones de la lista vigentes en la terminal o pendientes se selecciona la opción MODE_TRADES, sin embargo si se desean de las órdenes cerradas y canceladas se ingresa la opción MODE_HISTORY. Una vez los parámetros son definidos, la función retorna verdadero (true) si encuentra una operación en la posición indicada, de lo contrario devolverá falso (false) cuando se selecciona SELECT_BY_POS; en caso contrario al seleccionar SELECT_BY_TICKET se ingresa el número del ticket correcto para que la función seleccione la operación que coincida con el ticket dado. Por tanto, la instrucción final if(orderselect(i,select_by_pos,mode_trades)==false) break evalúa el retorno de la función de selección de orden, con el fin seleccionar las órdenes de la lista, en caso de no encontrar se utiliza el operador break; para salir de la estructura for (MQL5 Ltd, 2020). El siguiente condicional contiene internamente dos condiciones que son evaluadas de forma simultánea, los anteriores condicionales son funciones cuyos nombres son OrderSymbol(),

133 133 Symbol(), y OrderMagicNumber(). En donde las dos primeras funciones evalúan si las operaciones abiertas corresponden al símbolo actual de la figura en donde es colocado el Asesor Experto, la tercera función es la que compara el número mágico de las operaciones, con el designado por el algoritmo de comercio. La identificación de las operaciones a través del Magic Number es evaluada para evitar cerrar posiciones no relacionadas al Asesor Experto que está en ejecución (MQL5 Ltd, 2020). Por tanto la instrucción en la totalidad de la línea es la siguiente: if(ordersymbol()==symbol() && OrderMagicNumber()==id) Los últimos condicionales son anidados con condiciones que se basan en la función OrderType(), para disernir cuándo se debe aumentar las variables largos y cortos, de forma que son contadores de los tipos de operaciones (largos++ y cortos++) y se aumentan evaluando cada tipo de operación. Al final de la función OrdenesActuales() se realizan los retornos de los valores contenidos en los contadores largos y cortos, esta se realizá mediante la función return(largos), solo si los contadores son diferentes de cero (MQL5 Ltd, 2020) Apertura de Posiciones A continuación se describirá el procedimiento AperturaPosicion(), sin embargo dada la extensión, las funciones, comportamiento y tipo de acciones de las instrucciones, se realizá un fraccionamiento de la explicación.

134 134 Figura 42 Parte I – procedimiento AperturaPosicion() Notese la inicialización de los parámetros del indicador. Fuente: Cálculo Propio – Metaeditor (2020). Como se puede observar en la Figura 42 en las dos primeras líneas de esta función se declara los tipos de variables doublé y de tipo entero (int). Las variables de tipo doublé son los parámetros del indicador (t,k,sa,sb) y el precio de apertura (Open), estas no son inicializadas con valores en cero, caso contrario las variables enteras resb y ress son inicializadas con cero para evitar datos erróneos en estas variables (MQL5 Ltd, 2020). Las variables t,k,sa,sb son inicializadas mediante la funcion icustom(), esta permite solicitar los datos de los cálculos del indicador personalizado o creado por el usuario. Esta función presenta nueve parámetros de los cuales cinco son propios de la función original y los restantes pueden variar de acuerdo al número de parámetros del indicador personalizado. En su orden de izquierda a derecha el primer parámetro hace referencia a la paridad que es evaluada, este puede recibir de forma explícita el nombre como por ejemplo EURUSD, también es posible colocar NULL o utilizar la función Symboll() para referenciar la función a la figura actual. El siguiente parámetro se refiere al timeframe en que se realiza la evaluación del indicador, para

135 135 ello se específica explícitamente el período mediante la escritura PERIOD_M15, sin embargo este también puede darse en forma NULL o usando la función Period() para seleccionar el período de tiempo actual de la figura. El tercer parámetro es el nombre del indicador personalizado (MQL5 Ltd, 2020). Los siguientes parámetros son definidos en su cantidad por el número de inputs que tiene el indicador personalizado, estas entradas son indicadas en las propiedades del indicador (ver Figura 20), sin embargo los inputs del indicador personalizado también se pueden observar en el código mql del mismo, estos están definidos con la instrucción #input + la variable. Por ejemplo, para el indicador personalizado Ichimoku2 la instrucción es #input Tenkan. Ver Figura 43 Figura 43 Inputs del indicador personalizado En la ventana de la terminal se puede hacer doble click en cualquier línea del indicador y seleccionar la pestaña de inputs. Fuente: Cálculo Propio en Metatrader 4.0 (2020). El siguiente parámetro corresponde al valor del buffer asignado, es decir que asigna un espacio en la memoria del computador para cargar todos los datos desde las particiones del

136 136 mismo (MQL5 Ltd, 2020). Estos buffers deben ser asignados al indicador personalizado durante su creación teniendo en cuenta quela máxima cantidad de buffers que se pueden crear es de 512. Mediante la instrucción SetIndexBuffer() son asignados los diferentes cálculos de los parámetros del indicador a cada espacio en memoria. En el caso del indicador Ichimoku cada parámetro como Tenkan Sen, Kijun Sen, Senkou Span A, Senkou Span B y chikou, tienen un buffer asignado cuyos valores van desde el cero hasta el 7, realizando la distinción entre las líneas y los histogramas de Senkou Span A y Senkou Span B que rellenan la nube. Por tanto, se debe asignar el valor del buffer que represente las líneas y no los histogramas, ellos serán los valores de entrada para la función icustom(). El último parámetro de entrada de esta función se refiere a qué dato se desea extraer del vector, estos se encuentran alojados en orden de derecha a izquierda, dado que en el lenguaje Mql el dato más reciente se encuentra a la derecha del penúltimo dato véase Figura 21. Es decir que para la funcion icustom() el último parámetro es cero para así comparar todos los cálculos pertinentes a la ultima vela. Figura 44 Diagramacion del espacio en memoria y asociación con el mercado. Los espacios en memoria son mencionados como vectores, nótese que el orden de derecha izquierda corresponde a cada una de las velas japonesas del mercado, donde la posición cero corresponde a la vela mas reciente. Fuente: Propia (2020). La siguiente instrucción Alert( ) permite publicar los datos en un Popup o ventana emergente mas una alerta sonora (ver Figura 22), mientras MessageBox lanza una ventana de

137 137 diálogo y espera la aceptación por parte del usuario (ver Figura 44), estos eventos quedan registrados en el diario de la terminal (ver Figura 47). Sin embargo, solo el evento Alert( ) puede mostrar valores de las variables en el histórico de metatrader, por tanto la función Alert( ) resulta útil para evaluar los valores retornados por la función Icustom(), cuando se solicitan los datos de los parámetros de Ichimoku (MQL5 Ltd, 2020).. Figura 45 Ventana Alert – generado por la instrucción Alert( Mensaje de Alerta Ichimoku ), también posible mostrar variables a través de la instrucción Alert(«t = «,t), para mostrar el valor de t. Fuente: Metaeditor (2020). Figura 46 Cuadro de diálogo

138 138 Instrucción MessageBox(«Mensaje»,»ventana nombre»,0x ), nótese que el tercer parámetro de esta función es la codificación pertinente para tipo de ventana. Fuente: Metaeditor (2020). Figura 47 Journal o Diario de la terminal, Nótese los distintos mensajes de Alertas para control de las variables. Fuente: Metatrader (2020). El tercer parámetro de la función MessageBox() son valores establecidos por el lenguaje para los distintos tipos de ventanas (ver Figura 45). Estos valores son banderas, los cuales son códigos expresados exclusivos para el lenguaje MQL4. Adicionalmente se puede generar ventanas con iconos ingresando los códigos correspondientes a la función. Para imprimir mensajes en el diario es posible utilizar dos funciones, la primera es Print() cuyo único parámetro es una cadena caracteres. La segunda función es Printformat() la cual permite definir el formato para mostrar las variables (MQL5 Ltd, 2020). Una vez son cargados los datos propios del indicador es necesario revisar datos propios de las velas japonesas, para ello existen varias funciones las cuales facilitan el análisis de los precios.

139 139 La primera de estas función es iopen(), en donde los parámetros de entrada de esta función son: el símbolo que corresponde a la figura actual que puede ser expresado como EURUSD o con la instrucción NULL para indicar que es la figura actual o de forma opcional se puede utilizar la función symbol(); el siguiente parámetro de la función indica el TimeFrime, el cual puede ser expresado explícitamente con PERIOD_M15, o con el valor de cero para utilizar la figura actual; finalmente el último parámetro está relacionado con la vela japonesa, y el número depende de la posición, por ejemplo, si la que se desea adquirir es la última vela el parámetro será cero mientras que para la vela anterior el parámetro tomará el valor de uno. Los parámetros anteriormente descritos son los mismos para las funciones iclose(),la cual retorna el valor de cierre de la vela seleccionada, ihigh() cuya función corresponde al precio máximo, y finalmente ilow() para conocer el menor precio registrado en esta vela japonesa (MQL5 Ltd, 2020). Otras funciones importantes vinculadas a los datos de las velas son ihighest() y ilowest(), este tipo de funciones mantiene el mismo concepto de los dos primeros parámetros y el último de la función iclose(), es decir para estas funciones el manejo de estos es igual a la función iclose(), exceptuando el tercer y cuarto parámetro de estas funciones dado que: el tercer parámetro es el tipo, este se refiere al tipo de arreglo seleccionado (open, high, low,close, volume) por ejemplo si se desea tomar el mayor volumen negociado en un rango de se utiliza la expresión MODE_VOLUME (MQL5 Ltd, 2020). El cuarto parámetro count de la función se refiere al número de velas que serán tomadas para realizar la búsqueda con la función, este contador comienza desde el valor seleccionado indicado en el siguiente parámetro que recibe el nombre start y no desde la vela cero o última

140 140 vela que registra el último cambio del precio. Esto permite definir rangos a los cuales la función registra la búsqueda del máximo con la funcion ihighest () o su mínimo con la función ilowest(), de tal forma que no necesariamente el rango de búsqueda debe comenzar en la última vela de variación. Esto permite realizar algoritmos que realicen la creación, comparación y trazado de soportes y resistencias. Por ejemplo, la comparación de dos rangos mensuales si los dos mínimos retornos por ilowest() son iguales o por desfases de cinco pips en la resta positivo o negativa de los mismo es posible definir un soporte, otro uso de estas funciones es el de crear líneas de tendencia, canales, banderas, banderines y de algunos otros patrones geométricos, mediante el uso de la fórmula (1) de la pendiente de una recta. y = kx + b Donde k es la pendiente de la tendencia Formula (1): Formula de la recta numérica La fórmula (1) puede ser implementa en algoritmos de comercio y de forma similar al uso de esta fórmula se puede implementar en el lenguaje la codificación ihighest 2 ihighest 1 > 0 lo cual definirá que hay una tendencia en el mercado para ese rango de tiempo y para saber que tan alcista esta el mercado se puede definir la inclinación en grado mediante la fórmula (2) k = Δy = tan θ Δx Formula (2): Formula de la pendiente de una recta y ángulo de inclinación. La aplicación de la fórmula (2) como algoritmo implementado en el lenguaje sería la siguiente instrucción:

141 141 tan 1 ( ihighest 2 ihighest 1 tiempo 2 tiempo 1 ) Donde tiempo 2 tiempo 1 se pueden desarrollar mediante la función ihigh() contenida en una estructura For e If, tal que la variable de control retornada sea la referencia de la posición en el tiempo cuando encuentre que ihigh() y ihighest 1 son iguales. Finalmente y como se ha explicado anteriormente estas funciones pueden ser pertinentes y por tal motivo se amplió la información dado que son útiles para el desarrollo de algoritmos de comercio basados en el análisis discrecional. Por último, como se puede observar en la Figura 18 la última línea es un comentario //e2=getlasterror(), instrucción que fue aplicada como un procedimiento para evaluar los errores dados en la recepción de valores, esta instrucción es útil cuando se encuentra en proceso de desarrollo del algoritmo (MQL5 Ltd, 2020). El valor retornado por esta función es el código del error. Para realizar la lectura de la descripción se deben contemplar los valores y sus correspondientes descripciones especificadas para el lenguaje en el anexo modos. La siguiente parte de este algoritmo es la comparación de los datos dado que la estrategia se enfoca en la posición de la Kijun Sen con respecto a la nube. Se debe tener en cuenta los datos de los parámetros del indicador Ichimoku. Por tanto, las variables evaluadas son k(kijun Sen), sa(senkou span a), sb(senkou span b) y open (precio de apertura de la vela. cuyas comparaciones se realizan mediante la estructura if véase Figura 48. Como se observa el primer condicional se encuentra debajo del comentario //— condiciones corto, este evalúa que la Kinjun Sen Sea

142 142 menor que la Senkou Span A y a la vez que sea menor que la Senkou Span B además para que el algoritmo envíe una orden de posición corta es necesario que la variable open (el valor de esta variable es determinado por la función iopen()) sea menor a estos dos parámetros, es decir que tanto la Kinjun Sen como el precio Open de la vela deben ser menores que el Kumo o nube. Esta condiciones varian para realizar una posición larga (condicional debajo del comentario //— condiciones largo), donde tanto la variable k y open deben ser mayores que las variables sa y sb. Figura 48 Parte II – procedimiento AperturaPosicion() Evaluación de posiciones, envío de órdenes y análisis de errores de retorno desde el Broker. Fuente: Cálculo Propio-Metaeditor (2020). Luego de los condicionales anteriormente descritos en ambos casos (para aperturas de posiciones cortas y para posiciones largas) se encuentran dos estructuras do while, estas fueron incluidas en la codificación con el objetivo de reenviar las órdenes de forma automática en caso

143 143 de presentarse una respuesta negativa por parte del bróker referente al envío de la orden. El servidor del broker retorna (-1) a la solicitud de trading por tanto la estructura evalúa este valor en la variable ress (para el envío órdenes de posiciones cortas) y resb (para órdenes de posiciones largas). El uso de la estructura do-while es pertinente dado que garantiza que se realice el envío de la operación como mínimo una vez y en caso de no darse el envío correcto de la orden el ciclo while realiza el nuevamente el envío, sin esperar un nuevo tick por parte del mercado. Para realizar envíos de operaciones en el lenguaje mql existen dos tipos de funciones para el envío de órdenes al servidor del bróker, estas son OrderSend() y OrderSendAsync. La primera presenta una comunicación sincrónica es decir que la orden es enviada a través de una comunicación en tiempo real en donde se envía la orden y se espera la confirmación de la misma desde el servidor para que la función retorne el valor de confirmación o negación de la petición al algoritmo de comercio. Este procedimiento resulta tener una alta latencia o retardo en la velocidad de propagación para el envío de múltiples órdenes o peticiones de trading al servidor, lo que se traduce en un costo de tiempo y este a su vez en rentabilidad cuando se envían grandes paquetes de órdenes. Caso contrario es la función OrderSendAsync() la cual permite la comunicación asincrónica difiriendo la confirmación de las órdenes en momentos futuros, pero enrutando órdenes de forma simultánea disminuyendo de esta forma la latencia en la transmisión de órdenes hacia el bróker; esta función está diseñada para trading de alta frecuencia cuando en términos del algoritmo de negociación es inaceptable perder tiempo esperando una respuesta desde el servidor (MQL5 Ltd, 2020) ver Figura 49.

144 144 Figura 49 Diagrama ilustrativo del envío de órdenes Funciones OrderSendAsync( ) y OrderSend( ), nótese que esta última tiene retorno de la petición lo que incrementa la latencia en el envío de peticiones de trading. Fuente: Propia (2020). La funcion OrdenSend( ) tiene once parámetros para poder enviar la petición de trading, en su orden estos son: símbolo, tipo de operación, volumen, precio, deslizamiento del precio, stop loss, take profit, comentario, identificador, expiración, color-flecha. El parámetro símbolo corresponde a la paridad que se desea negociar, este puede ser escrito como una cadena de caracteres, utilizando NULL o simplemente la función Symbol( ) para seleccionar la figura actual. El tipo de operación es un comando (cmd) para seleccionar el tipo de orden con la que se va enviar la petición de trading, para ello se utiliza OP_BUY o el valor (0) para solicitar una operación larga a mercado, OP_SELL o (1) realiza una petición de venta de posición corta con orden de mercado, OP_BUYLIMIT o (2) orden comercial para comprar al precio Ask igual o menor que el indicado en la orden. En este caso el nivel actual de precios es más alto que el valor establecido en la orden. Normalmente las órdenes de este tipo se colocan a la espera de que el precio del símbolo decienda hasta un cierto nivel, OP_SELLLIMIT(3) orden comercial para vender al precio Bid igual al mayor que el indicado en la orden. En este caso el nivel actual de precios es más bajo que el valor establecido en la orden. Normalmente las órdenes de este tipo se colocan a la espera que el precio del símbolo suban hasta un cierto nivel, y empiece a bajar,

145 145 OP_BUYSTOP(4) orden comercial para comprar al precio Ask igual o mayor que el indicado en la orden. En este caso el nivel actual de precios es más bajo que el valor establecido en la orden. Normalmente las órdenes de este tipo se colocan a la espera que el precio del símbolo alcance un cierto nivel y siga creciendo, OP_SELLSTOP(5) orden comercial para vender al precio Bid igual a menor que el indicado en la orden. En este caso el nivel actual de precios es más alto que el valor establecido en la orden. Normalmente las órdenes de este tipo se colocan a la espera que el precio del símbolo alcance un cierto nivel y siga bajando (MQL5 Ltd, 2020). El siguiente parámetro es volumen, este se refiere a la cantidad de lotes que desea comprar con la operación, dicha cantidad se puede expresar en número por ejemplo 0.01, también se puede usar una variable externa como lotes para que sea modificada por el trader; el parámetro precio se refiere al nivel que se va enviar la orden, para posiciones relacionadas con Buys, se coloca el precio Ask, para ello se utiliza la variable predefinida por el sistema Ask, mientras que para las posiciones sells se utiliza la variable del sistema Bid. El desplazamiento del precio o slippage debe ser considerado como un valor para el margen de error en el envío de la operación para ello se considera que el precio ha cambiado lo suficientemente rápido como para que la operación se encuentre del nivel establecido, este es un elemento en el cual se debe realizar una medición adicional. Para el algoritmo propuesto un slippage de 0 sin presentar alguna incidencia negativa. Para los parámetros de stop loss y take profit se debe considerar que el concepto de stop loss para el lenguaje MQL es una orden que sirve para minimizar las pérdidas si el precio del

146 146 instrumento financiero empieza a moverse en la dirección opuesta a la estimada. Si el precio del símbolo alcanza este nivel, la posición se cierra automáticamente. Esta orden siempre está relacionada con una posición abierta o una orden pendiente. El take profit es también un tipo de orden que sirve para obtener beneficios cuando el precio del instrumento financiero ha alcanzado un nivel estimado. La ejecución de esta orden lleva al cierre completo de la posición. Siempre está relacionada con una posición abierta o una orden pendiente. Esta orden se puede colocar sólo junto con una orden de mercado o pendiente (MQL5 Ltd, 2020). Para poder enviar estos dos tipos de órdenes se debe tener en cuenta el spread, dado que la zona comprendida por los precios ASK y BID no permite ubicar órdenes dentro de ella véase Figura 50. Es decir que la correcta ubicación del stop loss para una operación Buy es debajo del precio Bid y el take profit debe ser superior al precio Ask; caso contrario para una orden Sell en donde el stop loss es superior al Ask y el take profit es inferior al Bid. Además, se aclara que los parámetros deben ser ingresados como niveles de precios, mediante un tipo double y adicionar la instrucción Point (para conocer los decimales de la divisa) para ello se debe tener en cuenta las siguientes recomendaciones a la hora de manejar estos dos parámetros (stop loss y take profit): Orden de tipo OP_BUY o Bid-stop*Point*10 (instrucción para el parámetro stop loss). o Ask+limit*Point*10 (instrucción para el parámetro take profit).

147 147 Orden de tipo OP_SELL o Ask+stop*Point*10 (instrucción para el parámetro stop loss). o Bid-limit*Point*10 (instrucción para el parámetro take profit). La multiplicación por el número diez es un elemento de ajuste para stop loss y el take profit. Para las demás órdenes (OP_BUYLIMIT,OP_SELLLIMIT, etc) se debe considerar la naturaleza de estas, es decir si son de tipo Buy o Sell para utilizar las instrucciones anteriormente descritas. El uso de los siguientes parámetros es trivial y no requiere una mayor explicación sobre el tema por lo que a continuación se relacionan de acuerdo al orden de la función OrderSend( ): -Comentario: Cadena de caracteres que permite crear una observación sobre la orden enviada. -Identificador: Representa el id de la operación, con el fin de diferenciar las operaciones realizadas por cada algoritmo de comercio o las realizadas por el Trader de manera independiente. Para ello se define previamente una constante con el valor de identificación, usualmente este se presenta magic number, para el prototipo del algoritmo se definió mediante la instrucción #define id 2, dónde id es la constante que pondremos como parámetro para la función OrderSend( ). -Expiración: Este parámetro sólo aplica para las órdenes limitadas (OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP) en cuyos casos se utiliza la función TimeCurrent( ), mas una cantidad de tipo entero que representa el número en segundos, la

148 148 instrucción completa para este puede ser TimeCurrent( ) Para las órdenes a mercado el valor debe ser cero. -Color-Flecha: Se refiere al color con que se mostrará en la figura la operación. Figura 50 Spread entre Ask-Bid Correcta ubicación del stop loss y take profit para una operación Buy.Fuente: Metatrader 4.0 (2020).

149 149 Otra función que puede enviar una petición de trading es OrderSendAsync( ), en donde los parámetros son una petición o request y un resultado o result. Estos parámetros son estructuras siendo en su orden respectivo, MqlTradeRequest y MqlTradeResult (MQL5 Ltd, 2020). El primero de estos parámetros contiene diferentes propiedades las cuales deben ser llenadas para efectuar la petición de trading que se desea enviar al servidor, los siguientes campos mencionados hacen parte estructura MqlTradeRequest: o Acción: en donde se utiliza un valor ya preestablecido por ejemplo TRADE_ACTION_DEAL para colocar una orden comercial de conclusión inmediata de una transacción u orden a mercado, TRADE_ACTION_PENDING indicando el envío de una orden comercial para la conclusión de una transacción bajo ciertas condiciones u orden pendiente, la tercera opción es TRADE_ACTION_SLTP para modificar los valores del stop loss o del take profit, la siguiente TRADE_ACTION_MODIFY permite modificar los parámetros de una orden comercial colocada anteriormente, finalmente TRADE_ACTION_REMOVE remueve una orden pendiente colocada con anterioridad. o Magic Number: identicador del asesor experto o Algoritmo de comercio. o Orden u order: cuya referencia es el ticket de la operación pendiente que se desea modificar. o Símbolo o Symbol: es el instrumento financiero para el que se coloca la orden, no es necesario incluir este campo para modificar y cerrar posiciones, en la estructura.

150 150 o MqlTradeRequest se coloca la instrucción _Symbol como propiedad de la misma en vez de la función symbol(). o Volumen: Cantidad de lotes a comprar. o Precio: Es el precio indicado para realizar una operación, para indicar este precio se puede utilizar la instrucción symbolinfodouble(req.symbol,symbol_ask), donde el primer parámetro de la función symbolinfodouble( ) puede ser la función symbol( ) o dado que su uso es en la MqlTradeRequest se puede usar propiedades ya definidas en la estructura como lo es req.symbol. La instrucción SYMBOL_ASK indica a la función que debe retornar el precio Ask del actual símbolo. o Stop loss: Precio para limitar la pérdida se debe tener en cuenta la misma fórmulacion que se explicó para el parámetro en la función OrderSend( ). o Take Profit: Precio para limitar las ganancias se debe considerar la misma explicación de la anterior propiedad. o Desviación: Este se considera cómo un entero que describe los pips de la máxima amplitud aceptable al enviar el precio. o Tipo: Es el tipo de la orden sus valores pueden ser: o ORDER_TYPE_BUY: Orden de compra a mercado. o ORDER_TYPE_SELL: Orden de venta a mercado. o ORDER_TYPE_BUY_LIMIT: Comprar a límite.

151 151 o ORDER_TYPE_SELL_LIMIT: Vender a límite. o ORDER_TYPE_BUY_STOP: Orden pendiente para comprar después del stop. o ORDER_TYPE_SELL_STOP: Orden pendiente para vender después del stop. o ORDER_TYPE_BUY_STOP_LIMIT: Al llegar al precio del pedido, se activa una orden pendiente Buy Limit por el precio Stop Limit. o ORDER_TYPE_SELL_STOP_LIMIT: Al alcanzar el precio de la orden se coloca la orden pendiente Sell Limit por el precio Stop Limit. o Tipo de política Este se refiere a condiciones como ejecutar al volumen especificado a través de ORDER_FILLING_FOK, o mediante la opción ORDER_FILLING_IOC significa que el desarrollador del Algoritmo acepta negociar sus órdenes con el volumen disponible, al seleccionar ORDER_FILLING_RETURN esta opción el desarrollador acepta cierto desfase en el volumen negociado frente a la orden, si la orden supera al volumen se genera una orden pendiente por la cantidad no negociada. o Tipo de tiempo: Esta propiedad se refiere al plazo de ejecución de la orden, los diferentes modos son: ORDER_TIME_GTC la orden se cancelará, ORDER_TIME_DAY para que esté vigente al día comercial, ORDER_TIME_SPECIFIED cuya función es dejar activa la orden hasta que se expire el plazo de vigencia. o Expiración: Tiempo para que se venza la orden. o Comentario: Comentario para cada operación.

152 152 Algunas propiedades son opcionales para al momento de utilizar la estructura MqlTradeRequest y MqlTradeResult, que en segunda instancia son parámetros de la función OrderSendAsync( ) para facilitar la comprensión de la implementación véase la Figura 51. Figura 51 Función BuyAsync( ) Nótese las variables creada req como estructura MqlTradeRequest, las propiedades se muestran como reg.propiedad y se le asigna el valor correspondiente según su propio manejo. Además en la función BuyAsync( ) se declará la estructura res la cual es de naturaleza MqlTradeResult(req,res). Observe los parámetros de la función OrderSendAsync( ). Fuente: Metaeditor (2020). Una vez enviada la operación ya sea con las funciones anteriormente mencionadas para envío, se procede en el caso del prototipo del algoritmo a realizar el chequeo del retorno de la función OrderSend( ) mediante la generación de una alerta con la función Alert( ) para conocer el ticket de la operación o en su defecto valor (-1), este retorno es asignado a las variables ress y

153 153 resb que son variables de control para el ciclo Do-While; además es aconsejable evaluar los errores provenientes de este proceso mediante la función GetLastError() con el fin de identificar el código del último error y así determinar cada caso con la implementación del procedimiento errores(e). Este se evalúa tanto en la apertura de las operaciones como en el cierre de las mismas. El procedimiento errores(e) está conformado por la estructura Switch-Case véase Figura 52 en donde cada uno de los código evaluados de la instrucción e = GetLastError() representa un caso de estudio y la forma para proceder en cada uno de ellos. La variable e es una parámetro de entrada del procedimiento errores( ), y a su vez es evaluada dentro del switch-case (MQL5 Ltd, 2020). A continuación se relacionan cada uno de los casos y su solución: o Caso valor 4: Cada vez que el servidor se encuentra ocupado se debe esperar dado que no hay otro tipo de conexión directa con el bróker y el algoritmo no permite confirmaciones por voz. Por tanto se duerme 1 milisegundo, para no afectar el envío de órdenes. o Caso valor 6: Por problemas de la red, la conexión puede perderse, sin embargo a pesar de esto se debe considerar inicialmente como intermitencia, por tanto se crea un contador ConexError, el cual es modificado dependiendo del condicional if, si este contador tiene un valor de 10 o de 30 (número de veces que se envío la orden y tuvo este fallo), reproduce un audio con la instrucción PlaySound() y espera un segundo con la instrucción Sleep(1000) hasta exista conexión.

154 154 o Caso valor 128: Para este tipo de error se considera un tiempo de dos segundos, como máximo. o Caso valor 132: Inicialmente para este error se espera un segundo, para retomar de nuevo el envío de operaciones, sin embargo si es viernes y el mercado cierra por el fin de semana. Se cuenta el tiempo desde el cierre del viernes hasta la apertura del domingo, y se deja en modo de espera, adicionalmente a esto se genera una alerta. o Caso valor 135: Cuando los precios de mercado cambian con mucha velocidad es posible que las órdenes sean rechazadas porque fueron enviadas a precios no disponibles para el bróker, por esto en este caso es útil realizar una actualización de los datos, mediante la función RefreshRates( ), esta actualiza todos los arreglos y vectores de las series de precios. o Caso valor 136: Para este caso se presenta que no hay precios, por lo que al realizar un refrescamiento de precios la función retornará el valor de falso. Este valor es usado como condición para el ciclo While para mantener al algoritmo en espera de precios. o Caso valor 137: El bróker se encuentra ocupado por lo que es necesario detenerlo un milisegundo mientras se genera conexión con el bróker. o Caso valor 146: Para este caso se detiene 0.5 segundos y se utiliza RefreshRates( ).

155 155 Figura 52 Procedimiento errores() Procedimiento de errores para los códigos retornados por el servidor del Broker. Fuente: Cálculo Propio-Metaeditor(2020) Cierre de Posiciones En la primera parte del código se puede observar la declaración de las diferentes variables destacadas en la función apertura posición. Estas variables son chequeadas nuevamente para poder realizar la operación de cierre. En esta función también se cargan los valores mediante la función icustom. Para poder realizar el cierre de la posición se utiliza la estructura for dado que se desea recorrer cada una de las operaciones abiertas en la cartera de la terminal. Este ciclo va

156 156 desde la variable i declarada en el mismo ciclo, teniendo como límite la totalidad de las órdenes con el uso de OrderTotals(). En esta estructura for se selecciona cada una de las órdenes abiertas, mediante la función OrderSelect(), para esta función los parámetros son: la posición, en la que se emplea el valor de la variable de control i de la estructura for como primer argumento de la estructura OrderSelect(), el segundo parámetro de esta función es el tipo de selección SELECT_BY_POS para poder realizar posición por posición las operaciones, si el retorno de este es false o falsa se utiliza la instrucción break para salir del ciclo for, es decir sin posiciones abiertas no tiene sentido recorrer la lista. Posteriormente, se evalúa el magic number del algoritmo a través de OrderMagicNumber(), mediante esta función y el condicional se compara si las operaciones existentes fueron realizadas por el algoritmo de comercio, además mediante el operador (o) se compara si hay operaciones existentes para el tipo de cambio actual en la figura, de darse falso en cualquiera de estas dos opciones, la estructura puede continuar con la siguiente ejecución del ciclo for, mediante la instrucción continue. A su vez existe un condicional para cerrar la posición mediante la instrucción if(k 157 157 Ticket: Este se refiere a la identificación de la operación, es posible utilizar la función OrderTicket() para obtener el ticket de forma automática sobre la operación ya seleccionada con OrderSelect(). Lotes: Cantidad de unidades de la moneda base. Precio: Se refiere al precio con que se desea cerrar la posición, para el caso de una compra se debe colocar el precio Bid y para realizar operaciones de naturaleza de venta, se utiliza el precio Ask. Desplazamiento: Valor máximo de desviación con que se puede aceptar un precio. Color: Visualización de la operación, se específica el color mediante la palabra correspondiente (White, red, blue, green por ejemplo). Una vez enviada la operación es opcional la evaluación de errores mediante la función GetLastError( ), para posteriormente, realizar el análisis de los casos se utiliza el procedimiento errores(). El siguiente condicional if((k>=sa k>=sb) && (open>=sa open>=sb)) anidado junto a la instrucción if(ordertype()==op_sell), para evaluar las posiciones de venta se utiliza el mismo procedimiento anterior para las de compra. Como se observa en el primer condicional mencionado, se espera que el valor de la Kinjun (k) sea mayor o iguales de los parámetros Senkou Span A (sa) y Senkou Span B (sb) o de la nube, además el precio open debe cumplir esta misma condición. A continuación se muestra en la Figura 53 la codificación de la función cierre de posiciones.

158 Figura 53 Codificación de la función CierrePosicion( ) Prototipo de la función con uso del do-while. Fuente: Cálculo Propio Metaeditor

159 Consideraciones adicionales cruces de promedios o parámetros de indicador Para realizar la codificación de un cruce entre dos parámetros del indicador ya sea el indicador Ichimoku Kinko Hyo, promedios móviles u osciladores, y asi desarrollar estrategias basadas en este tipo de movimientos. Para poder crear un algoritmo de comercio basado en este tipo de estrategia se debe tener en cuenta que las comparaciones a través de los condicionales parten de los datos registrados en el instante n y los dados en un momento pasado n-1, es decir se deben comparar los datos consignados para la vela cero y la vela uno. Figura 54 Diagramación de la estructura comparativa para la comprensión de los datos En los dos instantes claves n, n-1 y n-2, nótese cada uno de los posibles condicionales en pseudocódigo para la comparación del precio contra la media, cuando se usan velas japonesas. Fuente: Propia (2020).

160 160 Para el caso del prototipo que se explica en este documento se debe tomar los datos de la Kijun Sen de la vela cero mediante la instrucción: k1=icustom(symbol(),period(),»ichimoku2″,tenkan,kinjun,senkoub,shiftcloud,1,0), En donde para la mayoría de funciones sobre los indicadores estándar o también de los personalizados mediante la función icustom() manejan el último parámetro como referencia a la instante o posición de la vela de la cual se desean obtener los datos. Por ejemplo, para evaluar el cruce de un indicador ya sea un promedio móvil, entradas y salidas de zonas del indicador RSI, y otros osciladores basándose en instrucciones declaradas en pseudocódigo de la Figura 54 los condicionales serian los siguientes: si(open[1] Kinjun) para generar una posible operación largar. si(open[1] Kinjun) para generar una posible operación de venta. Para realizar la codificación en mql de estos mismos condicionales se utilizan las funciones icustom() y Open[] ver Figura 55. Figura 55 Codificacion en MQL Evaluación del cruce de una media con el precio, con el fin de enviar una operación de venta partiendo del condicional. Fuente: Propia Metaeditor (2020).

162 RESULTADOS Los siguientes son los datos obtenidos del backtesting para los siguientes históricos de precios: -Paridad: Euro/Dólar, Periodo de Tiempo: 15 minutos, Histórico: 30/11/ /12/2020 -Paridad: Euro/Dólar, Periodo de Tiempo: 60 minutos, Histórico: 30/11/ /02/2020 -Paridad: Euro/Dólar, Periodo de Tiempo: 240 minutos, Histórico: 03/01/ /10/2020 Los datos obtenidos al realizar la ejecución con la configuración histórica, frente a la configuración propuesta para el indicador en donde se plantea una disminución de los parámetros, como la se observa en la Tabla 6, la evaluación de los resultados de la histórica frente a la propuesta muestra un mejor comportamiento al reducir el valor de los parámetros en general. Tabla 6: Resultados por configuración. Resultado General Nombre Resultado Trades(+) Trades(-) Trades Eficiencia Max Min Promedio Desviación EURUSD xlsx % EURUSD xlsx % EURUSD xlsx % EURUSD xlsx % EURUSD xlsx % EURUSD xlsx % Nota: Resultados generales de la evaluación de la estrategia de cada una de las configuraciones, los cuatro últimos dígitos representan los valores que toma cada componente del indicador (columna nombre). Fuente: Modelo de Backtesting (2020).

163 163 Como se puede observar, el modelo de Visual Basic realizá el cálculo de la estrategia a través de su algoritmo, mostrando el resultado final medido en pips, cantidad de trades positivos, negativos, y la totalidad de los mismos, eficiencia, el trade más rentable, el menos, promedio de la ganancia y la desviación. En la columna Nombre de la Tabla 1 se observa que los primeros seis dígitos representan el nombre de la paridad y el marco de tiempo, luego tenemos la fecha en formato dd-mm-aa y finalmente los 4 últimos dígitos que se presentan como T-K-B-D, donde T es parámetro que afecta al componente Tenkan Sen, K afecta a Kinjun Sen, B a Senkou Span B y D es el desplazamiento del Kumo o Nube. El formato completo sería EURUSD15-dd-mm-aa-T-K-B-D; como se puede observar la configuración histórica de que por defecto está cargada en la plataforma para este indicador siendo menos rentable que las demás configuraciones de la tabla (configuraciones ) para los tres marcos de tiempo de acuerdo a las directrices de los cambios en la estructura del indicador, mencionadas anteriormente. Al realizar una consolidación de los datos del indicador y aplicar un filtro de calor, con el fin evaluar zonas con una mayor acumulación de rentabilidad. Esta consolidación de datos se realizá para los máximos trades logrados por configuración, así como para el mayor rendimiento promedio evaluando en los mapas los componentes Senkou Span B y el adelantamiento de la nube o Shiftcloud, adicionalmente se analizó el comportamiento del promedio frente a los máximos registrados en cada configuración ante el cambio de estos componentes o parámetros.

164 164 Además, se analizaron los resultados de la comparación del promedio y la desviación cuando se presentan las variaciones de los componentes anteriormente mencionados. El análisis considera los marcos de tiempo de 15 minutos, 60 minutos y 240 minutos para la paridad Euro/Dólar, a continuación se muestran los resultados y posteriormente el análisis.

165 Resultados 15 minutos Tabla 7: Mapa de calor del comportamiento de los máximos. Máx. d B Total Total Nota: Valores medidos en pips; Tenkan sen con valor de 6 periodos y Kinjun Sen de 10 a 15 periodos, aplicado en la paridad EURUSD, con un marco de tiempo de 15 minutos. Los valores más altos se muestran en azul los cuales son los mayores máximos, en blanco máximos neutrales y en rojo los menores máximos. En la primera columna de la Tabla se muestra la variación del parámetro Senkou Span B y en la segunda fila de la misma se puede observar la variación del parámetro adelantamiento de la nube o shiftcloud. Fuente: Modelo de Backtesting (2020).

166 166 Tabla 8: Mapa de calor del comportamiento del promedio Promedio Column de Resultado Labels Etiquetas de fila Total 2 (6,346) (7,480) (6,843) (4,595) (2,957) (2,493) (358) 850 2,029 2,597 2,925 2,956 3,702 3,938 3,971 4,027 3,224 3,167 2,838 3,056 2,955 3,553 2,546 2, (7,383) (8,094) (6,014) (3,520) (1,794) (1,136) 1,833 2,390 3,174 3,726 3,678 4,210 4,422 4,625 4,411 4,411 4,135 3,474 3,450 3,171 3,627 3,825 2,750 2,534 1,496 4 (7,736) (7,808) (5,424) (2,689) (778) 550 3,133 3,189 4,672 4,651 5,172 5,071 5,351 5,327 4,979 4,983 4,555 3,946 3,745 3,676 4,290 3,992 3,179 2,721 2,198 5 (7,711) (7,793) (4,842) (2,026) 725 1,675 3,413 4,236 5,178 5,972 5,734 6,003 5,428 5,565 5,214 5,254 4,816 4,138 3,956 4,423 4,417 4,175 3,378 3,058 2,683 6 (7,900) (7,697) (3,912) (762) 2,166 1,967 4,431 4,710 6,138 5,685 6,471 6,338 5,772 5,907 5,378 5,471 5,020 4,406 4,626 4,592 4,764 4,322 3,823 2,949 3,111 7 (7,207) (5,146) (1,407) 1,758 3,902 3,787 5,467 6,057 6,586 6,899 6,438 6,898 6,109 5,865 5,869 5,736 5,343 4,919 4,925 4,799 4,969 4,669 3,829 3,346 3,934 8 (3,862) (2,365) 1,337 3,659 5,149 4,987 6,579 6,540 7,388 7,173 6,919 6,962 6,169 6,456 6,189 6,028 5,908 5,218 4,980 5,024 5,197 4,579 4,102 3,539 4,744 9 (1,231) 462 3,645 4,527 6,490 5,790 6,884 7,211 7,449 7,360 7,151 7,081 6,517 6,646 6,232 6,549 6,063 5,113 5,322 5,248 5,044 4,651 4,282 3,710 5, ,203 2,103 4,416 5,876 6,952 6,270 7,581 7,143 8,110 7,592 7,488 7,289 6,841 6,823 6,843 6,636 5,953 5,353 5,369 5,073 5,008 4,748 4,506 3,956 5, ,004 3,481 5,831 6,243 7,108 6,888 7,616 7,255 8,444 7,653 7,655 7,450 6,770 7,334 6,952 6,377 6,122 5,323 5,241 4,972 5,124 4,891 4,592 3,973 6, ,460 4,531 5,951 6,359 7,471 7,021 7,769 7,468 8,451 7,743 7,784 7,475 7,353 7,492 6,649 6,499 6,070 5,301 5,062 5,139 5,120 4,881 4,491 3,964 6, ,250 4,083 5,705 6,541 7,628 7,115 7,738 8,165 8,405 7,914 7,608 7,901 7,690 7,273 6,640 6,430 6,074 5,256 5,248 5,115 5,148 4,941 4,363 3,815 6, ,742 3,786 6,080 6,643 7,621 6,964 8,502 8,094 8,575 7,756 8,020 8,126 7,510 7,227 6,557 6,379 5,991 5,360 5,186 5,006 5,307 4,855 4,209 3,738 6, ,358 3,840 6,108 6,640 7,536 7,661 8,438 8,206 8,490 8,096 8,221 8,026 7,501 7,035 6,474 6,305 5,904 5,349 5,013 5,200 5,349 4,580 4,203 3,700 6, ,054 4,018 5,865 6,588 7,564 7,716 8,542 8,053 8,930 8,444 8,045 8,089 7,255 7,073 6,496 6,232 5,912 5,233 5,268 5,261 5,077 4,600 4,136 3,872 6, ,011 3,601 5,604 6,534 7,644 7,878 8,394 8,476 9,149 8,236 8,018 7,930 7,158 6,954 6,530 6,296 5,794 5,399 5,350 5,179 5,020 4,514 4,182 3,748 6, ,901 3,512 5,538 6,666 7,761 7,722 8,821 8,720 8,991 8,252 7,861 7,766 7,033 7,014 6,589 6,011 6,042 5,518 5,346 5,145 4,888 4,493 4,053 3,563 6, ,860 3,680 5,749 6,921 7,616 8,146 9,087 8,694 9,058 8,141 7,677 7,711 7,174 7,037 6,501 6,360 6,160 5,496 5,375 5,185 4,821 4,347 3,857 3,509 6, ,499 4,014 6,346 7,283 8,563 8,298 8,974 8,756 8,994 7,992 7,568 7,872 7,277 7,019 6,635 6,388 6,086 5,489 5,277 4,980 4,569 4,151 3,796 3,345 6, ,066 4,179 6,220 7,559 8,692 8,129 9,045 8,671 8,831 7,891 7,645 7,761 7,195 7,135 6,709 6,420 6,099 5,422 5,056 4,812 4,369 4,105 3,591 3,495 6, ,255 4,112 6,589 7,591 8,549 8,069 8,950 8,555 8,702 7,995 7,617 7,686 7,302 7,127 6,627 6,304 5,881 5,159 4,955 4,639 4,436 3,913 3,779 3,627 6, ,010 4,409 6,454 7,426 8,439 8,006 8,829 8,316 8,671 7,910 7,565 7,823 7,360 6,994 6,572 6,091 5,690 5,039 4,801 4,636 4,153 4,003 3,869 3,780 6, ,159 4,364 6,266 7,281 8,370 7,839 8,609 8,338 8,622 7,856 7,717 7,815 7,157 6,912 6,456 5,927 5,520 4,941 4,800 4,305 4,226 4,157 4,048 3,735 6, ,099 4,124 6,201 7,278 8,205 7,769 8,460 8,313 8,475 7,995 7,765 7,645 7,118 6,906 6,290 5,897 5,477 4,897 4,385 4,288 4,371 4,315 4,058 3,707 6, ,837 3,989 6,090 7,202 8,101 7,682 8,484 8,231 8,638 8,065 7,570 7,553 7,134 6,709 6,069 5,830 5,448 4,627 4,382 4,411 4,501 4,333 3,965 3,900 6, ,805 3,901 6,113 7,111 8,134 7,707 8,411 8,356 8,756 7,937 7,535 7,542 6,893 6,438 5,939 5,714 5,122 4,522 4,565 4,487 4,525 4,225 4,055 3,916 6, ,646 3,825 5,981 7,097 8,135 7,657 8,524 8,411 8,576 7,864 7,559 7,345 6,659 6,382 5,843 5,436 5,113 4,707 4,595 4,505 4,348 4,304 4,110 3,843 6, ,434 3,596 5,829 7,084 8,068 7,662 8,712 8,224 8,551 7,865 7,423 7,136 6,622 6,331 5,606 5,452 5,278 4,737 4,650 4,290 4,397 4,330 4,122 3,681 5, ,170 3,591 4,197 4,935 5,847 5,980 8,317 9,537 9,207 8,497 8,246 7,893 7,438 6,420 5,887 6,125 5,284 4,965 4,961 4,988 4,815 4,742 4,346 4,105 6, ,592 4,020 5,000 5,963 6,013 8,247 9,560 9,040 8,282 8,052 7,886 7,073 6,485 6,061 6,137 5,407 4,782 4,889 4,866 4,791 4,730 4,573 4,210 6, ,520 3,998 5,040 5,951 5,782 8,257 9,509 8,937 8,080 8,008 7,587 7,083 6,619 6,104 6,251 5,237 4,845 4,845 4,846 4,670 4,933 4,740 4,147 6, ,400 4,148 4,995 5,715 5,677 8,149 9,248 8,657 7,988 7,647 7,638 7,142 6,588 6,165 6,089 5,257 4,734 4,830 4,860 4,840 5,029 4,688 4,073 5, ,967 3,481 4,122 4,962 5,749 5,657 8,006 9,006 8,577 7,704 7,688 7,769 7,102 6,657 6,033 6,092 5,160 4,714 4,897 5,014 4,994 5,021 4,723 4,221 5, ,984 3,570 4,129 4,846 5,594 5,443 7,624 8,823 8,274 7,659 7,792 7,792 7,186 6,505 6,054 5,965 5,071 4,698 5,005 5,148 4,895 5,015 4,814 4,250 5, ,824 3,362 3,919 4,681 5,569 5,075 7,634 8,476 8,223 7,774 7,761 7,869 7,005 6,626 6,068 5,882 5,262 4,800 5,134 5,044 4,985 5,164 4,838 4,339 5, ,694 3,283 3,808 4,585 5,163 5,026 7,240 8,461 8,319 7,864 7,792 7,654 7,116 6,631 5,966 6,005 5,253 4,909 5,010 5,107 5,173 5,118 4,948 4,507 5, ,506 3,079 3,546 4,249 5,082 4,661 7,194 8,591 8,326 7,898 7,568 7,759 7,141 6,405 6,020 6,008 5,391 4,901 5,016 5,308 5,112 5,199 5,100 4,545 5, ,322 2,726 3,255 4,230 4,658 4,658 7,416 8,623 8,278 7,718 7,593 7,774 6,921 6,520 5,953 6,194 5,325 4,924 5,240 5,298 5,277 5,351 5,110 4,387 5, ,019 2,633 3,299 3,826 4,743 4,971 7,436 8,669 8,162 7,743 7,506 7,555 7,106 6,407 6,099 6,164 5,269 5,183 5,195 5,481 5,281 5,373 5,003 4,343 5, ,050 2,664 2,987 3,899 4,916 5,032 7,451 8,455 8,141 7,629 7,395 7,738 6,987 6,554 6,021 6,052 5,469 5,149 5,383 5,483 5,469 5,281 4,907 4,376 5, ,877 2,176 2,973 3,986 4,924 5,063 7,256 8,382 7,979 7,371 7,566 7,649 7,144 6,413 5,959 6,243 5,431 5,403 5,489 5,653 5,340 5,180 4,957 4,115 5, ,479 2,268 3,085 3,926 4,989 4,871 7,266 8,210 7,774 7,571 7,512 7,814 7,009 6,328 6,201 6,212 5,657 5,478 5,583 5,491 5,155 5,302 4,891 4,107 5, ,510 2,155 3,018 3,959 4,796 4,759 6,993 8,021 8,007 7,525 7,727 7,683 6,826 6,638 6,167 6,384 5,868 5,605 5,428 5,322 5,287 5,185 4,782 4,127 5, ,344 2,206 3,116 3,828 4,716 4,583 6,839 8,173 7,906 7,621 7,580 7,520 7,071 6,637 6,262 6,593 5,938 5,464 5,369 5,518 5,163 5,087 4,716 4,100 5, ,387 2,317 2,929 3,652 4,444 4,440 6,940 8,116 7,999 7,539 7,509 7,770 7,016 6,739 6,445 6,614 5,788 5,411 5,529 5,428 5,111 5,017 4,735 3,343 5, ,479 2,240 2,818 3,512 4,318 4,566 6,839 8,195 8,070 7,410 7,725 7,789 7,203 6,941 6,529 6,488 5,804 5,514 5,348 5,352 5,007 5,107 4,060 2,936 5, ,415 2,085 2,701 3,475 4,435 4,399 6,953 8,247 7,896 7,633 7,720 7,832 7,414 6,932 6,382 6,506 5,869 5,337 5,265 5,266 5,007 4,336 3,624 3,040 5, ,359 1,944 2,609 3,463 4,342 4,547 6,986 8,006 8,021 7,616 7,710 8,049 7,410 6,933 6,428 6,545 5,721 5,316 5,232 5,285 4,244 4,038 3,677 3,005 5, ,256 1,811 2,596 3,350 4,381 4,456 6,752 8,234 8,087 7,618 7,939 8,106 7,419 6,898 6,412 6,471 5,675 5,193 5,215 4,510 3,941 4,091 3,627 2,765 5,325 Total 1,206 1,299 3,408 4,730 5,993 5,871 7,201 7,293 7,778 7,326 7,169 7,195 6,712 6,562 6,119 5,945 5,523 4,933 4,823 4,725 4,681 4,439 4,001 3,579 5,358 Nota: Valores medidos en pips; Tenkan sen con valor de 6 periodos y Kinjun Sen de 10 a 15 periodos, aplicado en la paridad EURUSD, con un marco de tiempo de 15 minutos. Los valores más altos se muestran en azul los cuales tienen un promedio más alto, en blanco los promedios que son significativos o neutrales y en rojo los promedios con un valor más bajo. En la primera columna se muestra la variación del parámetro Senkou Span B y en la segunda fila la variación del parámetro adelantamiento de la nube o shiftcloud. Fuente: Modelo de Backtesting (2020).

167 Resultado Promedio en Pips Resultado Máximo en Pips Figura 56 Comportamiento valores máximos y promedio del resultado. Realizado con la variación del parámetro adelantamiento de la nube o shiftcloud; Tenkan sen con valor de 6 periodos y Kinjun Sen de 10 a 15 periodos aplicado en la paridad EURUSD, con un marco de tiempo de 15 minutos. Fuente: Modelo de Backtesting (2020) Resultado Máximo en Pips Resultado Promedio en Pips Figura 57 Valores máximos y promedio del resultado Realizado con la variación del parámetro Senkou Span B; Tenkan sen con valor de 6 periodos y Kinjun Sen de 10 a 15 periodos aplicado en la paridad EURUSD, con un marco de tiempo de 15 minutos. Fuente: Modelo de Backtesting (2020).

168 Máximo Resultado en Pips Máxima Desviación en Pips Figura 58 Valores máximos del resultado y desviación máxima de los trades Realizado con la variación del parámetro Senkou Span B; Tenkan sen con valor de 6 periodos y Kinjun Sen de 10 a 15 periodos aplicado en la paridad EURUSD, con un marco de tiempo de 15 minutos. Fuente: Modelo de Backtesting (2020) Máximo Resultado en Pips Máxima Desviación en Pips Figura 59 Valores máximos del resultado y desviación máxima de los trades Realizado con la variación del parámetro adelantamiento de la nube o ShiftCloud; Tenkan sen con valor de 6 periodos y Kinjun Sen de 10 a 15 periodos aplicado en la paridad EURUSD, con un marco de tiempo de 15 minutos. Fuente: Modelo de Backtesting (2020).

169 169 Tabla 9: Mapa de Calor del comportamiento de los máximos. Máx. de B Total Total Nota: Valores medidos en pips; Tenkan sen con valor de 7 periodos y Kinjun Sen de 10 a 15 periodos, aplicado en la paridad EURUSD, con un marco de tiempo de 15 minutos. Los valores más altos se muestran en azul los cuales son los mayores máximos, en blanco máximos neutrales y en rojo los menores máximos. En la primera columna de la Tabla se muestra la variación del parámetro Senkou Span B y en la segunda fila de la misma se puede observar la variación del parámetro adelantamiento de la nube o shiftcloud.fuente: Modelo de Backtesting (2020).

170 170 Tabla 10: Mapa de Calor del comportamiento del promedio Promedio Etiquetas de Resultado de columna Etiquetas de fila Total general 2 (4,930) (4,910) (4,516) (2,818) (1,990) (1,108) 90 1,500 2,451 3,057 3,179 2,861 3,534 3,729 4,262 4,461 3,422 3,181 2,986 3,173 3,105 3,440 2,477 2,278 1,371 3 (6,186) (5,597) (3,795) (1,648) (592) 453 2,347 3,024 3,626 4,088 3,703 4,194 4,180 4,387 4,698 4,730 4,294 3,472 3,569 3,310 3,845 3,758 2,708 2,618 2,049 4 (6,647) (5,159) (3,014) (607) 669 2,316 3,698 3,848 5,084 4,744 5,158 5,026 5,147 5,187 5,259 5,282 4,640 3,927 3,822 3,841 4,547 3,942 3,094 2,841 2,777 5 (6,830) (5,067) (2,269) 254 2,205 3,477 3,936 4,854 5,267 6,140 5,731 5,934 5,189 5,392 5,525 5,574 4,922 4,134 4,066 4,564 4,689 4,025 3,223 3,135 3,253 6 (6,822) (4,797) (1,159) 1,585 3,744 3,640 4,804 5,004 6,243 5,780 6,434 6,258 5,630 5,738 5,706 5,816 5,116 4,447 4,746 4,715 4,951 4,150 3,620 2,994 3,681 7 (7,207) (4,119) 227 3,057 4,658 4,595 5,049 6,384 6,554 6,792 6,370 6,630 5,770 5,699 6,046 5,921 5,495 4,847 4,914 4,823 5,006 4,369 3,650 3,399 4,122 8 (3,577) (1,088) 3,055 4,970 5,718 5,151 6,430 6,757 7,360 7,096 6,909 6,786 5,899 6,192 6,405 6,277 6,007 5,156 4,976 4,940 5,276 4,354 3,907 3,642 4,942 9 (443) 2,106 5,493 5,882 6,075 6,364 6,793 7,346 7,359 7,266 7,023 6,896 6,221 6,436 6,470 6,777 6,166 5,001 5,182 5,180 5,192 4,499 4,120 3,799 5, ,175 4,028 6,349 6,183 7,129 6,810 7,435 7,298 8,008 7,427 7,334 7,031 6,501 6,561 7,072 6,877 5,949 5,231 5,272 5,024 5,167 4,574 4,331 4,109 5, ,793 5,340 6,487 7,195 7,443 7,427 7,473 7,309 8,297 7,537 7,524 7,268 6,550 7,113 7,180 6,648 6,140 5,241 5,200 4,954 5,313 4,681 4,488 4,159 6, ,280 4,940 7,218 7,341 7,836 7,625 7,586 7,545 8,386 7,649 7,681 7,277 7,107 7,234 6,796 6,700 6,088 5,202 5,070 5,133 5,329 4,643 4,413 4,149 6, ,335 5,262 7,163 7,613 8,124 7,694 7,502 8,175 8,303 7,808 7,533 7,711 7,413 7,040 6,775 6,666 6,073 5,167 5,299 5,117 5,364 4,767 4,295 3,981 6, ,740 5,058 7,434 7,712 8,126 7,541 8,298 8,030 8,465 7,710 7,957 7,895 7,227 6,996 6,706 6,614 5,979 5,307 5,237 4,994 5,508 4,691 4,156 3,899 6, ,345 5,223 7,568 7,699 7,925 8,416 8,175 8,201 8,407 8,128 8,202 7,862 7,296 6,817 6,636 6,569 5,917 5,283 5,078 5,207 5,502 4,396 4,112 3,857 6, ,125 5,375 7,419 7,661 8,573 8,457 8,338 8,027 8,793 8,402 8,045 7,956 7,000 6,785 6,658 6,489 5,890 5,210 5,297 5,247 5,248 4,459 4,071 3,998 6, ,096 5,056 7,167 7,615 8,605 8,584 8,117 8,451 9,061 8,213 8,016 7,689 6,943 6,738 6,741 6,543 5,782 5,378 5,362 5,175 5,190 4,353 4,120 3,867 6, ,010 4,879 7,143 7,688 8,756 8,478 8,573 8,668 8,874 8,268 7,788 7,580 6,793 6,785 6,805 6,248 6,045 5,417 5,307 5,196 5,106 4,310 3,948 3,669 6, ,905 5,068 7,207 7,945 8,563 8,933 8,841 8,618 8,920 8,091 7,676 7,530 6,983 6,784 6,665 6,586 6,132 5,412 5,360 5,168 4,978 4,149 3,765 3,611 6, ,599 5,375 7,699 7,972 9,003 9,046 8,758 8,656 8,797 7,943 7,567 7,651 6,983 6,725 6,769 6,652 6,138 5,424 5,302 5,000 4,748 3,950 3,687 3,404 6, ,041 5,648 7,765 8,654 9,082 8,874 8,823 8,599 8,644 7,863 7,692 7,580 6,926 6,867 6,822 6,663 6,102 5,371 5,042 4,793 4,555 3,910 3,488 3,601 6, ,301 5,537 8,157 8,687 9,002 8,850 8,686 8,477 8,495 7,932 7,660 7,498 7,082 6,856 6,803 6,599 5,920 5,130 4,914 4,646 4,600 3,687 3,643 3,721 6, ,064 5,853 8,041 8,599 8,906 8,806 8,589 8,317 8,551 7,884 7,617 7,654 7,096 6,740 6,712 6,361 5,693 4,963 4,732 4,642 4,323 3,809 3,694 3,880 6, ,325 5,830 7,924 8,384 8,771 8,646 8,345 8,293 8,454 7,842 7,755 7,676 6,913 6,631 6,638 6,211 5,533 4,857 4,762 4,305 4,390 3,961 3,912 3,864 6, ,129 5,540 7,676 8,340 8,617 8,544 8,266 8,308 8,366 8,015 7,813 7,503 6,827 6,651 6,481 6,111 5,486 4,826 4,351 4,290 4,495 4,158 3,927 3,798 6, ,003 5,422 7,651 8,229 8,507 8,468 8,259 8,229 8,544 8,073 7,583 7,416 6,873 6,459 6,238 6,026 5,454 4,499 4,362 4,374 4,626 4,170 3,808 3,982 6, ,868 5,330 7,636 8,150 8,529 8,492 8,224 8,329 8,613 7,900 7,528 7,457 6,653 6,205 6,119 5,928 5,111 4,424 4,531 4,466 4,665 4,069 3,902 4,032 6, ,692 5,320 7,530 8,188 8,512 8,438 8,334 8,387 8,442 7,862 7,558 7,238 6,364 6,129 6,011 5,664 5,080 4,584 4,573 4,530 4,477 4,163 3,970 3,975 6, ,617 5,171 7,462 8,216 8,521 8,471 8,486 8,187 8,407 7,887 7,377 7,007 6,343 6,080 5,719 5,685 5,209 4,650 4,638 4,263 4,527 4,188 3,971 3,778 6, ,372 3,391 5,304 6,160 7,814 8,356 9,091 9,006 8,834 8,284 7,812 7,583 7,010 6,130 6,134 6,217 5,537 5,081 4,934 4,844 4,900 4,654 4,115 4,220 6, ,691 4,817 5,355 6,715 7,401 9,683 9,534 8,738 8,265 8,164 7,860 7,000 6,306 6,391 6,312 5,535 4,962 5,081 4,955 4,895 4,705 4,385 4,359 6, ,717 4,837 5,469 6,718 7,289 9,665 9,455 8,608 8,074 8,118 7,537 7,085 6,473 6,434 6,439 5,317 4,980 5,016 4,931 4,777 4,921 4,571 4,284 6, ,565 4,978 5,512 6,602 7,193 9,603 9,247 8,361 7,975 7,812 7,522 7,113 6,433 6,539 6,273 5,350 4,856 5,005 4,945 4,959 5,036 4,536 4,268 6, ,639 5,028 5,348 6,563 7,096 9,391 9,008 8,310 7,632 7,877 7,663 7,042 6,506 6,386 6,253 5,324 4,842 5,041 5,109 5,093 5,000 4,526 4,403 6, ,733 4,977 5,286 6,452 6,906 9,133 8,878 7,998 7,633 7,930 7,667 7,158 6,374 6,419 6,128 5,218 4,860 5,171 5,221 5,029 4,994 4,618 4,451 6, ,530 4,844 5,134 6,364 6,514 9,059 8,523 7,964 7,779 7,967 7,753 6,962 6,469 6,424 6,053 5,363 4,981 5,305 5,126 5,086 5,142 4,613 4,529 6, ,430 4,789 5,123 5,994 6,486 8,675 8,491 8,047 7,829 8,002 7,575 7,062 6,470 6,309 6,151 5,364 5,121 5,174 5,202 5,292 5,104 4,758 4,719 6, ,157 4,527 4,676 5,914 6,107 8,627 8,547 8,029 7,852 7,819 7,692 7,087 6,246 6,398 6,159 5,507 5,091 5,182 5,403 5,236 5,209 4,925 4,744 6, ,860 4,204 4,648 5,520 6,140 8,808 8,590 8,059 7,661 7,781 7,680 6,831 6,334 6,322 6,341 5,457 5,132 5,406 5,404 5,381 5,351 4,901 4,559 6, ,766 4,181 4,218 5,653 6,405 8,824 8,648 7,897 7,709 7,754 7,499 7,027 6,281 6,463 6,304 5,385 5,399 5,342 5,571 5,398 5,333 4,811 4,517 6, ,817 3,836 4,310 5,822 6,445 8,801 8,456 7,879 7,621 7,613 7,688 6,926 6,434 6,415 6,200 5,603 5,383 5,533 5,595 5,591 5,277 4,700 4,558 6, ,384 3,848 4,464 5,824 6,437 8,567 8,387 7,698 7,373 7,784 7,572 7,050 6,295 6,347 6,377 5,566 5,607 5,632 5,750 5,468 5,202 4,747 4,306 6, ,424 3,941 4,412 5,820 6,235 8,514 8,218 7,450 7,545 7,725 7,756 6,925 6,200 6,576 6,352 5,763 5,703 5,739 5,593 5,272 5,289 4,653 4,288 6, ,279 3,822 4,425 5,603 6,197 8,349 8,052 7,731 7,519 7,929 7,601 6,751 6,482 6,545 6,518 5,941 5,783 5,578 5,457 5,412 5,224 4,562 4,353 6, ,329 3,949 4,301 5,586 5,983 8,185 8,202 7,646 7,610 7,778 7,439 7,035 6,509 6,676 6,762 6,058 5,664 5,509 5,644 5,283 5,093 4,538 4,280 6, ,385 3,780 4,222 5,332 5,854 8,310 8,140 7,745 7,544 7,724 7,669 6,988 6,610 6,864 6,769 5,897 5,594 5,664 5,554 5,235 5,028 4,540 3,511 5, ,264 3,613 4,064 5,224 5,989 8,272 8,224 7,796 7,399 7,942 7,686 7,122 6,774 6,952 6,660 5,897 5,698 5,508 5,475 5,137 5,085 3,904 3,143 5, ,177 3,447 3,973 5,343 5,845 8,352 8,272 7,618 7,621 7,915 7,757 7,375 6,784 6,748 6,691 5,927 5,508 5,417 5,363 5,110 4,293 3,409 3,198 5, ,111 3,362 4,016 5,267 5,983 8,388 8,033 7,743 7,628 7,915 7,958 7,371 6,779 6,763 6,738 5,770 5,521 5,374 5,409 4,348 4,022 3,488 3,173 5, ,947 3,317 3,898 5,331 5,930 8,175 8,286 7,771 7,606 8,169 8,015 7,370 6,764 6,749 6,637 5,712 5,416 5,357 4,647 4,047 4,067 3,427 2,931 5,720 Total general1,379 2,764 4,991 5,859 6,664 6,816 7,325 7,437 7,747 7,336 7,198 7,065 6,500 6,362 6,336 6,197 5,567 4,908 4,856 4,762 4,849 4,303 3,886 3,714 5,649 Nota: Valores medidos en pips; Tenkan sen con valor de 7 periodos y Kinjun Sen de 10 a 15 periodos, aplicado en la paridad EURUSD, con un marco de tiempo de 15 minutos. Los valores más altos se muestran en azul los cuales tienen un promedio más alto. En la primera columna se muestra la variación del parámetro Senkou Span B y en la segunda fila la variación del parámetro adelantamiento de la nube o shiftcloud. Fuente: Modelo de Backtesting (2020).

171 Resultado Promedio en Pips Resultado Máximo en Pips Figura 60 valores máximos y promedio del resultado Realizado la variación del parámetro adelantamiento de la nube o shiftcloud; Tenkan sen con valor de 7 periodos y Kinjun Sen de 10 a 15 periodos aplicado en la paridad EURUSD, con un marco de tiempo de 15 minutos. Fuente: Modelo de Backtesting (2020) Resultado Máximo en Pips Resultado Promedio en Pips Figura 61 Valores máximos y promedio del resultado Realizado con la variación del parámetro Senkou Span B; Tenkan sen con valor de 7 periodos y Kinjun Sen de 10 a 15 periodos aplicado en la paridad EURUSD, con un marco de tiempo de 15 minutos. Fuente: Modelo de Backtesting (2020).

172 172 Máximo Resultado en Pips Máxima Desviación en Pips Figura 62 Valores máximos del resultado y desviación máxima de los trades Realizado con la variación del parámetro adelantamiento de la nube o ShiftCloud; Tenkan Sen con valor de 7 periodos y Kinjun Sen de 10 a 15 periodos aplicado en la paridad EURUSD, con un marco de tiempo de 15 minutos. Fuente: Modelo de Backtesting (2020) Máximo Resultado en Pips Máxima Desviación en Pips Figura 63 Valores máximos del resultado y desviación máxima de los trades Realizado con la variación del parámetro Senkou Span B; Tenkan sen con valor de 7 periodos y Kinjun Sen de 10 a 15 periodos aplicado en la paridad EURUSD, con un marco de tiempo de 15 minutos. Fuente: Modelo de Backtesting (2020).

173 173 Tabla 11: Mapa de Calor del comportamiento de los máximos Máx. de B Total Total Nota: Valores medidos en pips; Tenkan sen con valor de 8 periodos y Kinjun Sen de 10 a 15 periodos, aplicado en la paridad EURUSD, con un marco de tiempo de 15 minutos. Los valores más altos se muestran en azul los cuales tienen un promedio más alto, en blanco los promedios que son significativos o neutrales y en rojo los promedios con un valor más bajo. En la primera columna se muestra la variación del parámetro Senkou Span B y en la segunda fila la variación del parámetro adelantamiento de la nube o shiftcloud. Fuente: Modelo de Backtesting (2020).

174 174 Tabla 12: Mapa de calor del comportamiento del promedio. Promedio Column de Resultado Labels Etiquetas de fila Total 2 (2,456) (2,940) (3,358) (2,826) (1,739) (1,286) 79 1,263 2,133 3,011 3,482 3,099 3,506 3,986 4,544 4,545 3,254 3,223 3,092 3,358 3,037 3,321 2,492 2,408 1,635 3 (3,371) (3,396) (2,716) (1,661) (449) 246 2,328 2,787 3,298 4,126 4,204 4,356 4,216 4,724 4,930 4,935 4,139 3,499 3,688 3,529 3,773 3,656 2,743 2,747 2,347 4 (3,828) (3,159) (2,049) (706) 632 1,844 3,610 3,690 4,875 5,070 5,678 5,183 5,246 5,484 5,487 5,412 4,524 4,009 3,956 4,015 4,488 3,840 3,183 2,970 3,061 5 (3,857) (3,217) (1,389) 27 2,029 2,999 4,126 4,753 5,354 6,405 6,245 6,113 5,310 5,697 5,736 5,663 4,806 4,230 4,231 4,767 4,635 3,998 3,355 3,319 3,556 6 (3,986) (2,978) (375) 1,129 3,546 3,321 5,139 5,188 6,325 6,085 6,994 6,453 5,697 6,077 5,876 5,900 5,021 4,529 4,863 4,934 4,939 4,123 3,764 3,170 3,989 7 (4,213) (2,450) 825 2,572 4,410 4,343 5,671 6,371 6,559 7,194 6,924 6,840 5,858 5,997 6,294 6,032 5,365 4,946 5,037 5,087 5,011 4,324 3,732 3,551 4,428 8 (3,895) (1,696) 1,976 3,441 4,919 4,990 6,649 6,707 7,312 7,350 7,309 6,910 5,960 6,382 6,488 6,220 5,782 5,163 5,135 5,116 5,245 4,278 3,924 3,696 4,807 9 (1,381) 1,203 4,213 4,496 6,104 5,994 6,947 7,402 7,261 7,570 7,536 7,002 6,206 6,645 6,549 6,793 5,948 5,079 5,322 5,419 5,136 4,368 4,148 3,917 5, ,414 3,298 5,255 5,977 6,929 6,604 7,755 7,394 7,917 7,775 7,790 7,141 6,537 6,714 7,169 6,926 5,806 5,241 5,444 5,233 5,118 4,449 4,362 4,132 5, ,234 4,893 6,971 6,743 7,419 7,283 7,853 7,397 8,288 7,849 8,004 7,326 6,534 7,304 7,306 6,693 6,026 5,308 5,320 5,155 5,229 4,585 4,493 4,207 6, ,926 6,104 7,488 7,053 7,897 7,543 7,970 7,656 8,362 8,086 8,229 7,465 7,135 7,465 7,000 6,802 6,021 5,310 5,163 5,316 5,212 4,552 4,423 4,194 6, ,048 5,894 7,490 7,430 8,183 7,656 8,028 8,474 8,383 8,098 7,984 7,813 7,419 7,230 7,005 6,766 6,006 5,248 5,331 5,347 5,270 4,668 4,294 4,048 6, ,710 5,770 7,906 7,485 8,234 7,579 8,701 8,385 8,509 8,006 8,388 8,006 7,230 7,217 6,990 6,684 5,900 5,341 5,310 5,239 5,451 4,594 4,145 3,947 6, ,223 5,889 7,994 7,539 8,106 8,301 8,568 8,477 8,440 8,431 8,596 7,914 7,284 7,035 6,877 6,589 5,835 5,348 5,131 5,424 5,435 4,283 4,105 3,908 6, ,192 6,104 7,797 7,444 8,631 8,329 8,709 8,319 8,861 8,772 8,482 8,050 7,062 7,018 6,885 6,513 5,834 5,281 5,394 5,435 5,143 4,280 4,020 4,063 6, ,242 5,902 7,701 7,757 8,741 8,457 8,503 8,689 9,104 8,585 8,416 7,783 6,938 6,936 6,919 6,588 5,721 5,412 5,474 5,367 5,135 4,228 4,134 3,938 6, ,098 5,796 7,606 7,875 8,785 8,317 8,977 8,987 8,955 8,605 8,232 7,678 6,905 7,034 7,000 6,335 5,985 5,518 5,437 5,381 4,998 4,222 3,959 3,749 6, ,033 5,932 7,719 8,141 8,675 8,801 9,279 8,948 8,994 8,448 8,120 7,629 7,090 7,074 6,878 6,683 6,061 5,480 5,491 5,369 4,891 4,050 3,771 3,700 6, ,768 5,719 7,767 7,896 9,005 8,987 9,195 8,971 8,892 8,328 8,016 7,787 7,074 6,979 6,986 6,746 6,066 5,468 5,372 5,178 4,669 3,852 3,712 3,503 6, ,246 6,375 7,983 8,348 9,100 8,827 9,209 8,909 8,734 8,258 8,169 7,664 6,980 7,103 7,106 6,788 6,044 5,461 5,172 5,018 4,471 3,818 3,491 3,691 6, ,562 6,412 8,665 8,403 8,968 8,777 9,152 8,777 8,584 8,311 8,123 7,571 7,136 7,093 7,062 6,677 5,860 5,193 5,056 4,854 4,525 3,650 3,692 3,837 6, ,281 6,720 8,580 8,351 8,908 8,699 9,014 8,578 8,574 8,260 8,037 7,745 7,167 7,012 7,000 6,452 5,645 5,059 4,884 4,872 4,274 3,720 3,779 3,973 6, ,617 6,787 8,444 8,204 8,829 8,558 8,827 8,624 8,490 8,221 8,166 7,741 6,968 6,898 6,881 6,290 5,490 4,930 4,903 4,560 4,382 3,880 3,980 3,937 6, ,421 6,524 8,189 8,058 8,644 8,461 8,696 8,574 8,392 8,336 8,258 7,590 6,898 6,915 6,732 6,241 5,420 4,885 4,523 4,542 4,500 4,071 3,988 3,882 6, ,238 6,321 8,190 7,945 8,512 8,367 8,689 8,523 8,604 8,426 8,042 7,499 6,940 6,728 6,481 6,172 5,386 4,574 4,533 4,646 4,624 4,079 3,835 4,079 6, ,076 6,256 8,144 7,841 8,480 8,416 8,669 8,624 8,668 8,237 7,960 7,494 6,711 6,507 6,384 6,072 5,029 4,523 4,676 4,690 4,641 3,971 3,915 4,095 6, ,947 6,170 7,970 7,831 8,462 8,354 8,735 8,693 8,469 8,208 7,981 7,275 6,483 6,430 6,276 5,787 5,019 4,682 4,733 4,749 4,498 4,078 3,993 4,082 6, ,893 6,018 7,938 7,812 8,440 8,388 8,938 8,497 8,450 8,205 7,839 7,065 6,422 6,350 6,005 5,793 5,170 4,756 4,841 4,500 4,563 4,095 4,009 3,897 6, ,264 5,624 5,872 7,258 9,121 9,653 9,412 8,785 8,637 8,750 7,820 7,275 6,455 6,476 6,408 5,358 5,172 5,097 5,017 4,865 4,361 4,154 4,174 6, ,298 5,387 5,822 7,317 9,059 9,625 9,367 8,637 8,423 8,524 7,798 6,973 6,566 6,658 6,397 5,479 4,987 5,071 4,938 4,882 4,357 4,377 4,313 6, ,326 5,408 6,006 7,322 9,051 9,611 9,377 8,545 8,243 8,504 7,485 7,043 6,753 6,724 6,510 5,220 5,022 5,060 4,939 4,736 4,560 4,589 4,264 6, ,140 5,569 6,049 7,273 8,955 9,506 9,178 8,288 8,178 8,160 7,506 7,102 6,727 6,809 6,285 5,240 4,901 5,012 4,963 4,920 4,663 4,557 4,192 7, ,223 5,639 5,918 7,219 8,862 9,280 8,940 8,234 7,845 8,164 7,624 7,030 6,817 6,685 6,331 5,187 4,908 5,045 5,109 5,047 4,628 4,542 4,345 6, ,371 5,563 5,823 7,108 8,694 9,070 8,809 7,871 7,855 8,216 7,625 7,112 6,666 6,678 6,276 5,106 4,896 5,172 5,205 4,963 4,610 4,672 4,397 6, ,171 5,548 5,704 7,018 8,348 9,006 8,418 7,901 8,019 8,273 7,787 6,936 6,746 6,669 6,175 5,263 5,041 5,296 5,099 5,039 4,750 4,660 4,486 6, ,131 5,477 5,619 6,609 8,324 8,663 8,430 8,035 8,092 8,354 7,567 7,046 6,737 6,568 6,276 5,302 5,168 5,134 5,156 5,210 4,713 4,784 4,666 6, ,912 5,216 5,213 6,544 7,954 8,646 8,491 8,016 8,141 8,216 7,687 7,069 6,540 6,671 6,254 5,451 5,145 5,182 5,381 5,183 4,860 4,964 4,693 6, ,629 4,810 5,208 6,152 7,977 8,772 8,538 8,016 7,932 8,183 7,684 6,828 6,651 6,588 6,453 5,372 5,179 5,395 5,350 5,313 4,980 4,931 4,487 6, ,499 4,814 4,806 6,288 8,216 8,812 8,672 7,868 7,915 8,064 7,452 6,975 6,589 6,723 6,425 5,310 5,419 5,367 5,526 5,356 4,961 4,806 4,451 6, ,542 4,419 4,875 6,424 8,257 8,782 8,407 7,848 7,837 7,942 7,668 6,946 6,725 6,654 6,284 5,519 5,402 5,558 5,582 5,507 4,895 4,685 4,500 6, ,061 4,468 5,040 6,397 8,264 8,580 8,340 7,690 7,609 8,101 7,558 7,069 6,600 6,568 6,471 5,490 5,617 5,650 5,756 5,434 4,836 4,750 4,251 6, ,048 4,512 4,978 6,420 8,031 8,522 8,143 7,425 7,797 8,000 7,704 6,920 6,492 6,808 6,446 5,691 5,707 5,754 5,595 5,253 4,894 4,655 4,207 6, ,508 2,936 4,467 5,015 6,232 7,881 8,337 7,936 7,655 7,773 8,205 7,548 6,752 6,772 6,790 6,602 5,865 5,801 5,594 5,450 5,351 4,839 4,558 4,272 6, ,399 2,895 4,569 4,806 6,202 7,758 8,171 8,123 7,599 7,852 8,055 7,369 7,017 6,790 6,929 6,821 5,936 5,676 5,502 5,640 5,244 4,707 4,540 4,196 6, ,498 3,020 4,456 4,805 5,929 7,636 8,315 8,061 7,705 7,790 8,007 7,658 7,021 6,942 7,145 6,865 5,797 5,621 5,646 5,543 5,175 4,665 4,532 3,432 6, ,531 2,929 4,325 4,610 5,835 7,763 8,277 8,170 7,748 7,645 8,255 7,662 7,151 7,121 7,196 6,744 5,777 5,731 5,513 5,472 5,113 4,708 3,875 3,111 5, ,436 2,812 4,194 4,563 5,943 7,675 8,350 8,194 7,573 7,873 8,192 7,707 7,328 7,179 7,010 6,738 5,818 5,533 5,403 5,383 5,056 3,967 3,404 3,171 5, ,345 2,646 4,109 4,609 5,832 7,780 8,385 7,945 7,689 7,867 8,184 7,903 7,359 7,099 7,020 6,742 5,655 5,557 5,376 5,408 4,288 3,633 3,482 3,152 5, ,168 2,539 4,116 4,504 5,934 7,784 8,158 8,205 7,719 7,868 8,436 7,946 7,332 7,097 7,014 6,594 5,632 5,462 5,386 4,615 4,003 3,694 3,416 2,858 5,770 Total 2,571 3,576 5,398 5,680 6,707 6,859 7,580 7,540 7,701 7,687 7,619 7,142 6,528 6,594 6,558 6,279 5,473 4,964 4,959 4,940 4,792 4,161 3,902 3,775 5,811 Nota: Valores medidos en pips; Tenkan sen con valor de 8 periodos y Kinjun Sen de 10 a 15 periodos, aplicado en la paridad EURUSD, con un marco de tiempo de 15 minutos. Los valores más altos se muestran en azul los cuales tienen un promedio más alto, en blanco los promedios que son significativos o neutrales y en rojo los promedios con un valor más bajo. En la primera columna se muestra la variación del parámetro Senkou Span B y en la segunda fila la variación del parámetro adelantamiento de la nube o shiftcloud. Fuente: Modelo de Backtesting (2020).

175 Resultado Promedio en Pips Resultado Máximo en Pips Figura 64 valores máximos y promedio del resultado Realizado con la variación del parámetro adelantamiento de la nube o shiftcloud; Tenkan sen con valor de 8 periodos y Kinjun Sen de 10 a 15 periodos aplicado en la paridad EURUSD, con un marco de tiempo de 15 minutos. Fuente: Modelo de Backtesting (2020) Resultado Máximo en Pips Resultado Promedio en Pips Figura 65 Valores máximos y promedio del resultado. Elaborado con la variación del parámetro Senkou Span B; Tenkan sen con valor de 8 periodos y Kinjun Sen de 10 a 15 periodos aplicado en la paridad EURUSD, con un marco de tiempo de 15 minutos. Fuente: Modelo de Backtesting (2020).

176 Máximo Resultado en Pips Máxima Desviación en Pips Figura 66 Valores máximos del resultado y desviación máxima de los trades Elaborado con la variación del parámetro adelantamiento de la nube o ShiftCloud; Tenkan Sen con valor de 8 periodos y Kinjun Sen de 10 a 15 periodos aplicado en la paridad EURUSD, con un marco de tiempo de 15 minutos. Fuente: Modelo de Backtesting (2020) Máximo Resultado en Pips Máxima Desviación en Pips Figura 67 Valores máximos del resultado y desviación máxima de los trades. Elaborado con la variación del parámetro Senkou Span B; Tenkan sen con valor de 8 periodos y Kinjun Sen de 10 a 15 periodos aplicado en la paridad EURUSD, con un marco de tiempo de 15 minutos. Fuente: Modelo de Backtesting (2020).

Los mejores corredores de opciones binarias 2020:
  • Binarium
    Binarium

    1er lugar! El mejor broker de opciones binarias!
    Ideal para principiantes! Entrenamiento gratis! Bonos de registro!

  • FinMax
    FinMax

    Broker honesto!

Like this post? Please share to your friends:
Cómo negociar opciones binarias
Deja un comentario

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: