EJEMPLO SIMPLE DE CREACIÓN DE UN INDICADOR USANDO LA LÓGICA DIFUSA Introducción El uso de distintos métodos en el análisis de los mercados financieros se está haciendo cada vez más popular entre los operadores en los últimos años. Me gustaría realizar mi aportación y mostrar cómo realizar un buen indicador escribiendo un par de docenas de líneas de código. También le mostraré brevemente los fundamentos de la lógica difusa. Cualquiera que esté interesado en este tema y quiera explorarlo en mayor profundidad puede leer los siguientes trabajos: 1. Leonenkov А . " Fuzzy Simulation in MATLAB and fuzzyTECH " (en ruso). 2. Bocharnikov V." Fuzzy Technology: Mathematical Background. Simulation Practice in Economics " (en ruso). 3. S.N. Sivanandam, S. Sumathi, S.N. Deepa. Introduction to Fuzzy Logic using MATLAB. 4. C. Kahraman. Fuzzy Engineering Economics with Applications (Studies in Fuzziness and Soft Computing). 1. Fundamentos de la lógica difusa ¿Cómo podemos explicar a nuestras máquinas informáticas los significados de las expresiones simples "..un poco más", "...demasiado rápido" o "...casi nada..."? De hecho, esto puede hacerse usando los elementos de la teoría de conjuntos difusos o las llamadas "funciones de afiliación". Este es un ejemplo del libro de A. Leonenkov: Vamos a describir la función de afiliación para la frase "café caliente": la temperatura del café se estimará en el rango de 0 a 100 grados centígrados por la simple razón de que a temperaturas inferiores a 0 grados se convertirá en hielo, mientras que a temperaturas por encima de los 100 grados centígrados se evaporará. Es bastante obvio que de una taza de café con una temperatura de 20 grados centígrados no puede decirse que esté caliente, es decir, la función de afiliación en la categoría "caliente" es igual a 0, mientras que una taza de café con una temperatura de 70 grados centígrados pertenece definitivamente a la categoría "caliente" y, por tanto, el valor de la función se iguala a 1 en este caso. Por lo que respecta a los valores de la temperatura que se sitúan entre estos dos valores extremos, la situación no es tan clara. Algunas personas pueden considerar que una taza de café con una temperatura de 55
Ejemplo Simple de Creación de Un Indicador Usando La Lógica Difusa
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
EJEMPLO SIMPLE DE CREACIÓN DE UN INDICADOR USANDO LA LÓGICA DIFUSA
IntroducciónEl uso de distintos métodos en el análisis de los mercados financieros se está haciendo cada vez más popular entre los operadores en los últimos años. Me gustaría realizar mi aportación y mostrar cómo realizar un buen indicador escribiendo un par de docenas de líneas de código. También le mostraré brevemente los fundamentos de la lógica difusa.
Cualquiera que esté interesado en este tema y quiera explorarlo en mayor profundidad puede leer los siguientes trabajos:
1. Leonenkov А. "Fuzzy Simulation in MATLAB and fuzzyTECH" (en ruso).2. Bocharnikov V."Fuzzy Technology: Mathematical Background. Simulation Practice in Economics" (en ruso).3. S.N. Sivanandam, S. Sumathi, S.N. Deepa. Introduction to Fuzzy Logic using MATLAB.4. C. Kahraman. Fuzzy Engineering Economics with Applications (Studies in Fuzziness and Soft Computing).
1. Fundamentos de la lógica difusa¿Cómo podemos explicar a nuestras máquinas informáticas los significados de las expresiones simples "..un poco más", "...demasiado rápido" o "...casi nada..."? De hecho, esto puede hacerse usando los elementos de la teoría de conjuntos difusos o las llamadas "funciones de afiliación". Este es un ejemplo del libro de A. Leonenkov:
Vamos a describir la función de afiliación para la frase "café caliente": la temperatura del café se estimará en el rango de 0 a 100 grados centígrados por la simple razón de que a temperaturas inferiores a 0 grados se convertirá en hielo, mientras que a temperaturas por encima de los 100 grados centígrados se evaporará. Es bastante obvio que de una taza de café con una temperatura de 20 grados centígrados no puede decirse que esté caliente, es decir, la función de afiliación en la categoría "caliente" es igual a 0, mientras que una taza de café con una temperatura de 70 grados centígrados pertenece definitivamente a la categoría "caliente" y, por tanto, el valor de la función se iguala a 1 en este caso.
Por lo que respecta a los valores de la temperatura que se sitúan entre estos dos valores extremos, la situación no es tan clara. Algunas personas pueden considerar que una taza de café con una temperatura de 55 grados está "caliente" mientras que otras pueden pensar que "no lo son tanto". Esto es "difusión".
No obstante, podemos imaginar el aspecto aproximado de la función de afiliación: es "monótona creciente":
La figura anterior muestra la función de afiliación "lineal por segmentos".
Por tanto, la función puede ser definida por la siguiente expresión analítica:
Usaremos tales funciones para nuestro indicador.
2. Función de afiliaciónDe una u otra forma, la tarea de cualquier indicador técnico es determinar el estado actual del mercado (plano, tendencia al alza, tendencia a la baja), así como la generación de señales de entrada/salida del mercado. ¿Cómo puede hacerse esto con la ayuda de las funciones de afiliación? Muy fácil.
En primer lugar necesitamos definir las condiciones límite. Supongamos que tenemos las siguientes condiciones límite: para "100% de tendencia al alza" será el cruce de EMA con un periodo 2, basado en el precio típico (H+L+C)/3 con el borde superior de Envelopes con los parámetros 8, 0.08 SMA, Close, mientras que para "100% de tendencia a la baja" será el cruce de la misma EMA con el borde inferior de Envelopes. Todo lo que está entre estas condiciones se asumirá que es plano. Vamos a añadir un envelope más con los parámetros 32, 0.15, SMA, Close.
Como resultado obtendremos dos funciones de afiliación idénticas. La señal buy se activará cuando ambas funciones sean iguales a 1, mientras que la señal sell se activará cuando ambas funciones sean iguales a -1, respectivamente. Al ser conveniente construir gráficos con el rango de -1 a 1, el gráfico resultante se obtendrá como la media aritmética de dos funciones F(x)= (f1(x)+f2(x))/2.
Así es como aparece en el gráfico:
En este caso la función de afiliación tendrá la siguiente representación gráfica:
Analíticamente puede escribirse de la siguiente forma:
,
donde a y b son líneas envelope superiores e inferiores, respectivamente, mientras que x es un valor de EMA(2).
Con la función definida podemos ahora seguir escribiendo el código del indicador.
3. Crear el código del programaEn primer lugar, debemos definir qué y cómo vamos a dibujar.
Los resultados de los cálculos de la función de afiliación se mostrarán en pantalla como una línea roja y azul, respectivamente.
La media aritmética se mostrará en pantalla como un histograma de línea cero y en uno de los cinco colores en función del valor resultante de la función:
Para esto se usará el estilo de dibujo DRAW_COLOR_HISTOGRAM.
Vamos a dibujar los rectángulos azules y rojos como señales comprar/salir sobre las barras del histograma, los valores iguales a 1 o -1.
Es el momento de ejecutar MetaEditor y empezar. Nuevo -> Indicador personalizado -> Siguiente... Rellenamos el campo "Parámetros":
Creamos los buffers:
Después de hacer clic en el botón "Finalizar" recibimos un código fuente y empezamos a mejorarlo.
Antes de nada vamos a definir el número de buffers. Siete de ellos ya fueron creados por el Wizard (5 para los datos y 2 para el color). Necesitamos 5 más:
Los comentarios que siguen a las variables declaradas son prácticos. El texto de los comentarios es insertado en la ventana de parámetros del indicador.
La posibilidad de crear listas también es muy útil:
Reservar las variables para los controladores del indicador y buffers:
int Envelopes_Fast; // Fast envelope
int Envelopes_Slow; // Slow envelope
int MA_Signal; // Signal line
double Env_Fast_Up[]; // Fast envelope upper border
double Env_Fast_Dn[]; // Fast envelope lower border
A continuación debemos dibujar las barras del histograma con los colores adecuados: como tenemos cinco colores, ResultColors[i] puede tener cualquier valor comprendido entre 0 y 4.
Generalmente, el número de colores posibles es de 64. Por tanto, es una gran oportunidad para aplicar las capacidades creativas de cada uno.
for (int ColorIndex=0;ColorIndex<=4;ColorIndex++)
{
if (MathAbs(ResultBuffer[i])>0.2*ColorIndex && MathAbs(ResultBuffer[i])<=0.2*(ColorIndex+1))
{
ResultColors[i] = ColorIndex;
break;
}
}
A continuación debemos dibujar los rectángulos de la señal. Usaremos el estilo de dibujo DRAW_COLOR_HISTOGRAM2.
Tiene dos buffers de datos con una barra del histograma y un buffer de color construido entre ellos.
Los valores de los buffers de datos serán siempre los mismos: 1.1 y 1.3 para una señal buy, y -1.1 y -1.3 para una señal sell, respectivamente.
EMPTY_VALUE significará ausencia de señal..
if (ResultBuffer[i]==1)
{
SignalBuffer1[i]=1.1;
SignalBuffer2[i]=1.3;
SignalColors[i]=1;
}
else if (ResultBuffer[i]==-1)
{
SignalBuffer1[i]=-1.1;
SignalBuffer2[i]=-1.3;
SignalColors[i]=0;
}
else
{
SignalBuffer1[i]=EMPTY_VALUE;
SignalBuffer2[i]=EMPTY_VALUE;
SignalColors[i]=EMPTY_VALUE;
}
Hacemos clic en "Compilar" y ¡voilá!
Conclusión¿Qué más puede añadirse? En este artículo he tratado el enfoque más básico de la lógica difusa.
Es posible hacer aquí varios experimentos. Por ejemplo, podemos usar la siguiente función:
Creo que no le será difícil escribir la expresión analítica para ella y encontrar las condiciones adecuadas.