English Русский 中文 Deutsch 日本語 Português 한국어 Français Italiano Türkçe
Uso del análisis discriminante para desarrollar sistemas de trading

Uso del análisis discriminante para desarrollar sistemas de trading

MetaTrader 5Sistemas comerciales | 12 marzo 2014, 14:22
1 508 0
ArtemGaleev
ArtemGaleev

Introducción

Una de las mayores tareas del análisis técnico es determinar la dirección en la que el mercado se moverá en el futuro próximo. Desde un punto de vista estadístico, esto puede reducirse a elegir los indicadores y determinar sus valores en base a los que será posible dividir la situación futura del mercado en dos categorías: 1) movimiento hacia arriba y 2) movimiento hacia abajo.

El análisis discriminante ofrece una de las formas de decidir qué clase de indicadores y qué valores permiten una mejor discriminación entre estas categorías. En otras palabras, el análisis discriminante permite construir un modelo que predecirá la dirección del mercado en base a los datos recibidos de los indicadores.

Dicho análisis es sin embargo más complicado y requiere una gran cantidad de datos a la entrada. Por tanto, consume mucho tiempo al usarlo manualmente para el análisis de la situación del mercado. Por suerte, la aparición del lenguaje MQL5 y el software estadístico nos ha permitido automatizar la selección de datos y la elaboración y aplicación del análisis discriminante.

El artículo muestra un ejemplo del desarrollo de un asesor experto para la recopilación de datos del mercado. Sirve como tutorial para la aplicación del análisis discriminante para la elaboración de modelo de pronóstico para el mercado FOREX en el software Statistica.


1. ¿Qué es el análisis discriminante?

El análisis discriminante (en adelante AD) es uno de los métodos de reconocimiento de patrones. Las redes neuronales pueden ser consideradas como un caso especial de AD. El AD se usa en la mayoría de los sistemas de defensa de éxito que están basados en el reconocimiento de patrones.

Permite saber qué variables dividen (discriminan) el flujo de datos entrante en grupos y ver el mecanismo de dicha discriminación.

Vamos a ver un ejemplo simplificado usando el AD para el mercado FOREX. Tenemos los datos de los indicadores Relative Strength Index (RSI), MACD y Relative Vigor Index (RVI) y necesitamos predecir la dirección del precio. Como resultado del AD obtenemos lo siguiente.

a. El indicador RVI no contribuye a la predicción. Por tanto vamos a excluirlo del análisis.

b. El AD ha generado dos ecuaciones discriminantes:

  1. G1 = a1*RSI+b1*MACD+с1, la ecuación para los casos en los que el precio subió;
  2. G2 = a2*RSI+b2*MACD+с2, la ecuación para los casos en los que el precio bajó.

Al calcular G1 y G2 al principio de cada barra predecimos si G1>G2 y el precio subirá, mientras que si G1<G2, el precio bajará.

El AD puede ser útil para familiarizarnos inicialmente con las redes neuronales. Al usar el AD, obtenemos ecuaciones similares a las calculadas para el funcionamiento de redes neuronales. Esto ayuda a entender mejor su estructura y determina de forma preliminar si merece la pena utilizar las redes neuronales en nuestras estrategias.


2. Etapas del análisis discriminante

El análisis puede dividirse en varias etapas.

  1. Preparación de datos;
  2. Elección de las mejores variables de los datos preparados;
  3. Análisis y prueba del modelo resultante usando los datos de prueba;
  4. Construcción del modelo en base a las ecuaciones discriminantes.

El AD es parte de casi todos los paquetes de software modernos diseñados para el análisis de datos estadísticos. El más popular es Statistica (de StatSoft Inc.) y SPSS (de IBM Corporation). Veremos más tarde la aplicación del AD usando el software Statistica. Las capturas de pantalla se han obtenido de Statistica versión 8.0. Tendrá un aspecto más o menos similar en las versiones anteriores del software. Debe señalarse que Statistica ofrece muchas otras herramientas útiles para el operador incluyendo las redes neuronales.


2.1. Preparación de datos

La recopilación de datos depende de una cierta tarea manual. Vamos a definir la tarea de la siguiente forma: usando indicadores para predecir la dirección del gráfico del precio en la barra tras la barra con valores conocidos de los indicadores. Se desarrollará un asesor experto para la recopilación de datos para guardar los valores del indicador y los precios en un archivo.

Debe ser un archivo CSV con la estructura siguiente. Las variables deben organizarse en columnas donde cada columna corresponde a un cierto indicador. Las filas deben contener medidas consecutivas (casos), es decir, valores de los indicadores para ciertas barras. En otras palabras, los encabezados de las tablas horizontales contienen indicadores, los encabezados de las tablas verticales contienen barras consecutivas.

La tabla debe tener una variable en base a la cual la agrupación pueda realizarse (la variable de agrupación). En nuestro caso, dicha variable se basará en el cambio del precio en la barra situada a continuación de aquella para la que se obtuvieron los valores del indicador. La variable de agrupación debe contener el número del grupo cuyos datos se muestran en la misma línea. Por ejemplo, número 1 para los casos en los que el precio subió y número 2 para los casos donde el precio bajó.

Necesitaremos los valores de los siguientes indicadores:

La función OnInit() crea los indicadores (obtiene los controladores del indicador) y el archivo MasterData.csv donde guarda el encabezado de datos de la columna:

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- initialization of the indicators
   h_AC=iAC(Symbol(),Period());
   h_BearsPower=iBearsPower(Symbol(),Period(),BearsPower_PeriodBears);
   h_BullsPower=iBullsPower(Symbol(),Period(),BullsPower_PeriodBulls);
   h_AO=iAO(Symbol(),Period());
   h_CCI=iCCI(Symbol(),Period(),CCI_PeriodCCI,CCI_Applied);
   h_DeMarker=iDeMarker(Symbol(),Period(),DeM_PeriodDeM);
   h_FrAMA=iFrAMA(Symbol(),Period(),FraMA_PeriodMA,FraMA_Shift,FraMA_Applied);
   h_MACD=iMACD(Symbol(),Period(),MACD_PeriodFast,MACD_PeriodSlow,MACD_PeriodSignal,MACD_Applied);
   h_RSI=iRSI(Symbol(),Period(),RSI_PeriodRSI,RSI_Applied);
   h_RVI=iRVI(Symbol(),Period(),RVI_PeriodRVI);
   h_Stoch=iStochastic(Symbol(),Period(),Stoch_PeriodK,Stoch_PeriodD,Stoch_PeriodSlow,MODE_SMA,Stoch_Applied);
   h_WPR=iWPR(Symbol(),Period(),WPR_PeriodWPR);

   if(h_AC==INVALID_HANDLE || h_BearsPower==INVALID_HANDLE || 
      h_BullsPower==INVALID_HANDLE || h_AO==INVALID_HANDLE || 
      h_CCI==INVALID_HANDLE || h_DeMarker==INVALID_HANDLE || 
      h_FrAMA==INVALID_HANDLE || h_MACD==INVALID_HANDLE || 
      h_RSI==INVALID_HANDLE || h_RVI==INVALID_HANDLE || 
      h_Stoch==INVALID_HANDLE || h_WPR==INVALID_HANDLE)
     {
      Print("Error creating indicators");
      return(1);
     }

   ArraySetAsSeries(buf_AC,true);
   ArraySetAsSeries(buf_BearsPower,true);
   ArraySetAsSeries(buf_BullsPower,true);
   ArraySetAsSeries(buf_AO,true);
   ArraySetAsSeries(buf_CCI,true);
   ArraySetAsSeries(buf_DeMarker,true);
   ArraySetAsSeries(buf_FrAMA,true);
   ArraySetAsSeries(buf_MACD_m,true);
   ArraySetAsSeries(buf_MACD_s,true);
   ArraySetAsSeries(buf_RSI,true);
   ArraySetAsSeries(buf_RVI_m,true);
   ArraySetAsSeries(buf_RVI_s,true);
   ArraySetAsSeries(buf_Stoch_m,true);
   ArraySetAsSeries(buf_Stoch_s,true);
   ArraySetAsSeries(buf_WPR,true);


   FileHandle=FileOpen("MasterData2.csv",FILE_ANSI|FILE_WRITE|FILE_CSV|FILE_SHARE_READ,';');
   if(FileHandle!=INVALID_HANDLE)
     {
      Print("FileOpen OK");
      //--- saving names of the variables in the first line of the file for convenience of working with it
      FileWrite(FileHandle,"Time","Hour","Price","AC","dAC","Bears","dBears","Bulls","dBulls",
                "AO","dAO","CCI","dCCI","DeMarker","dDeMarker","FrAMA","dFrAMA","MACDm","dMACDm",
                "MACDs","dMACDs","MACDms","dMACDms","RSI","dRSI","RVIm","dRVIm","RVIs","dRVIs",
                "RVIms","dRVIms","Stoch_m","dStoch_m","Stoch_s","dStoch_s","Stoch_ms","dStoch_ms",
                "WPR","dWPR");
     }
   else
     {
      Print("FileOpen action failed. Error",GetLastError());
      ExpertRemove();
     }
//---
   return(0);
  }

El controlador de evento OnTick() identifica nuevas barras y guarda los datos en el archivo.

El comportamiento del precio vendrá determinado por la última barra completada y los valores de los indicadores se obtendrán de la barra procedente de la última barra completada. Aparte del valor del indicador absoluto, necesitamos guardar la diferencia entre el valor absoluto y el precedente para ver la dirección del cambio. Los nombres de dichas variables en el ejemplo anterior tendrán el prefijo "d".

Para indicadores de línea de señal, es necesario guardar la diferencia entre la línea principal y de señal así como sus dinámicas. Además, debemos guardar el momento de la nueva barra y el correspondiente valor de la hora. Esto puede ser útil para filtrar los datos por tiempo.

Por tanto, tendremos en cuenta 37 indicadores para elaborar un modelo de predicción para estimar el movimiento del precio.

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//| Monitoring the market situation and saving values                |
//| of the indicators into the file at the beginning of every new bar|
//+------------------------------------------------------------------+
void OnTick()
  {
//--- declaring a static variable of datetime type
   static datetime Prev_time;

//--- it will be used to store prices, volumes and spread of each bar
   MqlRates mrate[];
   MqlTick tickdata;

   ArraySetAsSeries(mrate,true);    
   
//--- obtaining the recent quotes
   if(!SymbolInfoTick(_Symbol,tickdata))
     {
      Alert("Quote update error - error: ",GetLastError(),"!!");
      return;
     }
///--- copying data of the last 4 bars
   if(CopyRates(_Symbol,_Period,0,4,mrate)<0)
     {
      Alert("Historical quote copy error - error: ",GetLastError(),"!!");
      return;
     }
//--- if both time values are equal, there is no new bar
   if(Prev_time==mrate[0].time) return;
//--- saving the time in the static variable 
   Prev_time=mrate[0].time;
 
//--- filling the arrays with values of the indicators
   bool copy_result=true;
   copy_result=copy_result && FillArrayFromBuffer1(buf_AC,h_AC,4);
   copy_result=copy_result && FillArrayFromBuffer1(buf_BearsPower,h_BearsPower,4);
   copy_result=copy_result && FillArrayFromBuffer1(buf_BullsPower,h_BullsPower,4);
   copy_result=copy_result && FillArrayFromBuffer1(buf_AO,h_AO,4);
   copy_result=copy_result && FillArrayFromBuffer1(buf_CCI,h_CCI,4);
   copy_result=copy_result && FillArrayFromBuffer1(buf_DeMarker,h_DeMarker,4);
   copy_result=copy_result && FillArrayFromBuffer1(buf_FrAMA,h_FrAMA,4);
   copy_result=copy_result && FillArraysFromBuffers2(buf_MACD_m,buf_MACD_s,h_MACD,4);
   copy_result=copy_result && FillArrayFromBuffer1(buf_RSI,h_RSI,4);
   copy_result=copy_result && FillArraysFromBuffers2(buf_RVI_m,buf_RVI_s,h_RVI,4);
   copy_result=copy_result && FillArraysFromBuffers2(buf_Stoch_m,buf_Stoch_s,h_Stoch,4);
   copy_result=copy_result && FillArrayFromBuffer1(buf_WPR,h_WPR,4);

//--- checking the accuracy of copying the data
   if(!copy_result==true)
     {
      Print("Data copy error");
      return;
     }

//--- saving to the file the price movement within the last two bars 
//--- and the preceding values of the indicators 
   if(FileHandle!=INVALID_HANDLE)
     {
      MqlDateTime tm;
      TimeCurrent(tm);
      uint Result=0;
      Result=FileWrite(FileHandle,TimeToString(TimeCurrent()),tm.hour, // time of the bar
                       (mrate[1].close-mrate[2].close)/_Point,       // difference between the closing prices of the last two bars 
                       buf_AC[2],buf_AC[2]-buf_AC[3],                // value of the indicator on the preceding bar and its dynamics
                       buf_BearsPower[2],buf_BearsPower[2]-buf_BearsPower[3],
                       buf_BullsPower[2],buf_BullsPower[2]-buf_BullsPower[3],
                       buf_AO[2],buf_AO[2]-buf_AO[3],
                       buf_CCI[2],buf_CCI[2]-buf_CCI[3],
                       buf_DeMarker[2],buf_DeMarker[2]-buf_DeMarker[3],
                       buf_FrAMA[2],buf_FrAMA[2]-buf_FrAMA[3],
                       buf_MACD_m[2],buf_MACD_m[2]-buf_MACD_m[3],
                       buf_MACD_s[2],buf_MACD_s[2]-buf_MACD_s[3],
                       buf_MACD_m[2]-buf_MACD_s[2],buf_MACD_m[2]-buf_MACD_s[2]-buf_MACD_m[3]+buf_MACD_s[3],
                       buf_RSI[2],buf_RSI[2]-buf_RSI[3],
                       buf_RVI_m[2],buf_RVI_m[2]-buf_RVI_m[3],
                       buf_RVI_s[2],buf_RVI_s[2]-buf_RVI_s[3],
                       buf_RVI_m[2]-buf_RVI_s[2],buf_RVI_m[2]-buf_RVI_s[2]-buf_RVI_m[3]+buf_RVI_s[3],
                       buf_Stoch_m[2],buf_Stoch_m[2]-buf_Stoch_m[3],
                       buf_Stoch_s[2],buf_Stoch_s[2]-buf_Stoch_s[3],
                       buf_Stoch_m[2]-buf_Stoch_s[2],buf_Stoch_m[2]-buf_Stoch_s[2]-buf_Stoch_m[3]+buf_Stoch_s[3],
                       buf_WPR[2],buf_WPR[2]-buf_WPR[3]);

      if(Result==0)
        {
         Print("FileWrite action error ",GetLastError());
         ExpertRemove();
        }
     }

  }

Después de iniciar el asesor experto se creará el archivo MasterData.CSV en terminal_data_directory/MQL5/Files. Al iniciar el asesor experto en el probador, este se ubicará en terminal_data_directory/tester/Agent-127.0.0.1-3000/MQL5/Files. El archivo puede usarse en Statistica según se obtiene.

Puede encontrarse un ejemplo de dicho archivo en MasterData.CSV. Los datos se obtuvieron para EURUSD H1 desde el 1 de agosto de 2011 al 1 de octubre de 2011.

Para abrir el archivo en Statistica hacemos lo siguiente.

  • En Statistica vamos al menú Archivo > Abrir, elegir el tipo de archivo: Archivos de datos y abrimos el archivo.
  • Dejamos Delimitado en la venta de tipo de archivo de texto a importar y hacemos clic en OK.
  • Habilitamos los elementos subrayados en la ventana abierta.
  • Debemos tener en cuenta que hay que poner el separador decimal en el campo correspondiente con independencia de si ya está ahí o no.

Fig. 1. Importar el archivo a Statistica

Fig. 1. Importar el archivo a Statistica

Hacemos clic en OK y ya está lista la tabla que contiene nuestros datos.

Fig. 2. Base de datos en Statistica

Fig. 2. Base de datos en Statistica

Ahora creamos la variable de agrupación en base a la variable Price.

Distinguiremos los grupos dependiendo del comportamiento del precio:

  1. más de 200 puntos hacia abajo;
  2. menos de 200 puntos hacia abajo;
  3. menos de 200 puntos hacia arriba;
  4. más de 200 puntos hacia arriba;

Para añadir una nueva variable, hacemos clic con el botón derecho en el encabezado de la columna AC y elegimos la opción Añadir variable.

Fig. 3. Añadir una nueva variable

Fig. 3. Añadir una nueva variable

Especificamos el nombre "Grupo" para la nueva variable en la ventana abierta y añadimos la fórmula para la conversión de la variable Price al número de grupos.

La fórmula es como se muestra a continuación:

=iif(v3<=-200;1;0)+iif(v3<0 and v3>-200;2;0)+iif(v3>0 and v3<200;3;0)+iif(v3>=200;4;0)


Fig. 4. Descripción de la variable

Fig. 4. Descripción de la variable

El archivo está listo para el análisis discriminante. Puede encontrarse un ejemplo de dicho archivo en MasterData.STA.


2.2. Selección de las mejores variables

Ejecutamos el análisis discriminante (Statistics->Técnicas de exploración multivariante->Análisis discriminante).

Fig. 5. Ejecutar el análisis discriminante

Fig. 5. Ejecutar el análisis discriminante

Hacemos clic en Variables en la ventana que se abrió.

Elegimos la variable de agrupación en el primer campo y todas las variables en base a las cuales se realizará la agrupación en el segundo campo.

En nuestro caso la variable Group se especifica en el primer campo y todas las variables obtenidas de los indicadores así como la variable adicional Hour (la hora de recepción de los datos) en el segundo campo.

Fig. 6. Selección de las variables

Fig. 6. Selección de las variables

Hacemos clic en el botón Seleccionar casos (Figura 8). Se abrirá una ventana para la selección de los casos (filas de datos) que se usará en el análisis discriminante. Habilitamos los elementos como se muestra en la captura de pantalla siguiente (Figura 7).

Solo los primeros 700 casos se usarán en el análisis. Los restantes se usarán después para probar el modelo de predicción resultante. Los números de los casos se establecen mediante la variable V0. Especificando los casos de esta forma establecemos una muestra de los datos de instrucción para el AD.

Luego hacemos clic en OK.

Fig. 7. Definiendo la muestra de entrenamiento

Fig. 7. Definiendo la muestra de entrenamiento

Ahora vamos a elegir los grupos para los que se elaborará nuestro modelo de pronóstico.

Hay un aspecto que requiere nuestra atención. Uno de los puntos débiles del AD es la sensibilidad a los valores atípicos. Raros pero con una gran capacidad, en nuestro caso, los picos en los precios, pueden distorsionar el modelo. Por ejemplo, siguiendo las noticias inesperadas, el mercado responde con movimientos sustanciales que duran unas horas. Los valores de los indicadores técnicos fueron en este caso de poca importancia en la predicción aunque serán considerados de forma distinta en el AD ya que hubo un marcado cambio en el precio. Es por tanto aconsejable verificar los datos de los valores atípicos antes de ejecutar el AD.

Para excluir los valores atípicos de nuestro ejemplo solo analizaremos los grupos 2 y 3. Como hubo un cambio sustancial en el precio en los grupos 1 y 4, puede que haya valores atípicos en los valores del indicador.

Por tanto, hacemos clic en los códigos para la variable de agrupación (Figura 8). Y especificamos los números de los grupos para el análisis.

Fig. 8. Selección de los grupos para el análisis

Fig. 8. Selección de los grupos para el análisis 


Habilitamos las opciones avanzadas. Esto permitirá realizar un análisis paso a paso que será necesario en una etapa posterior.

Para ejecutar el AD hacemos clic en OK.

Puede que aparezca un mensaje como el de abajo. Esto significa que una de las variables elegidas es excesiva y es sustancialmente condicional para otras variables, p.ej. es la suma de otras dos variables.

Es muy probable que ocurra con los flujos de datos obtenidos de los indicadores. La presencia de dicha variable afecta a la calidad del análisis. Y deben eliminarse. Para hacer esto, vamos a la ventana para la selección de las variables para el AD e identificamos las variables excesivas añadiéndolas una a una y ejecutando el AD una y otra vez.


Fig. 9. Mensaje de valor de tolerancia bajo

Fig. 9. Mensaje de valor de tolerancia bajo


Luego se abrirá una ventana para la elección del método de AD (Figura 10). Seleccionamos Adelante paso a paso en la lista desplegable. Como los valores de los indicadores tienen poca importancia para el pronóstico, es preferible el uso del análisis paso a paso. y el modelo de discriminación del grupo se construirá automáticamente paso a paso.

Específicamente, a cada paso, todas las variables serán revisadas y evaluadas para determinar cuál de ellas contribuirá más a la discriminación ente los grupos. Esa variable será entonces incluida en el modelo y el proceso empezará de nuevo. Todas las variables que mejor discriminen entre la muestra de datos serán seleccionadas en la forma especificada paso a paso.


Fig. 10. Elección del método

Fig. 10. Elección del método

Hacemos clic en OK y se abrirá una ventana informándonos de que se ha completado con éxito el AD.

Fig. 11. Ventana de resultados del AD

Fig. 11. Ventana de resultados del AD


Hacemos clic en Resumen: Variables en el modelo para ver la lista de variables incluidas en el modelo siguiendo el análisis paso a paso. Estas variables discriminan mejor en nuestro grupo. Tenga en cuenta que las variables que generan una precisión en la discriminación mayor de 95% (0,05) se muestran en rojo. La precisión de la discriminación relativa a las demás variables es menor. El modelo solo debe incluir las variables que generen la precisión de discriminación al menos del 95%.

Sin embargo, según la regla general de la estadística, solo las variables que generen la precisión mayor al 95% deben usarse. Por tanto excluiremos del análisis todas las variables que no se muestren en rojo. Estas son dBulls, Bulls, FrAMA y Hour. Para excluir estas variables, vamos a la ventana donde se eligió el análisis paso a paso y las especificamos en la ventana que se abrirá después de hacer clic en las Variables.

Repetimos el análisis. Haciendo clic en el Resumen: Variables en el modelo, veremos de nuevo que aparecen ahora otras tres variables como insignificante. Estas son DeMarker, Stoch_s, AO. También las excluiremos del análisis.

Como resultado, tendremos un modelo que incluye las variables que generan una discriminación precisa entre grupos (p<0,01).


Fig. 12. Valores incluidos en el modelo.

Fig. 12. Valores incluidos en el modelo.


De esta forma, solo siete de las 37 variables fueron en nuestro ejemplo las más significativas para la predicción.

Este enfoque nos permite elegir los indicadores clave en base al análisis técnico para un desarrollo posterior de sistemas de trading personalizados, incluyendo los que utilizan redes neuronales.


2.3. Análisis y prueba del modelo resultante usando los datos de prueba

Una vez completado el AD, obtenemos el modelo de predicción y los resultados de su aplicación a los datos.

Para ver los resultados de la discriminación del modelo y el grupo, abrimos la pestaña Clasificación.

Fig. 13. Pestaña Clasificación

Fig. 13. Pestaña Clasificación

Hacemos clic en la matriz Clasificación para ver la tabla que contiene los resultados de la aplicación del modelo a los datos.

Las filas muestran las clasificaciones observadas. Las columnas contienen las clasificaciones predichas según el modelo calculado. Las celdas que contienen predicciones precisas se marcan en verde y las predicciones inexactas en rojo.

La primera columna muestra la precisión de la predicción en %.

Fig. 14. Clasificación de los datos

Fig. 14. Clasificación de los datos

La precisión de la predicción (Total) usando los datos resultó ser del 60%.

Vamos a probar el modelo usando los datos de prueba. Para hacer esto, hacemos clic en Seleccionar (Figura 3) y especificamos v0>700 y a continuación el modelo será comprobado en el rango de datos que no se usaron para su elaboración.

Tendremos lo siguiente:


Fig. 15. Clasificación de los datos de prueba

Fig. 15. Clasificación de los datos de prueba

La precisión general de la predicción usando la muestra de prueba resultó ser casi del mismo orden llegando al 55%. Este es un muy buen nivel para el mercado FOREX.


2.4. Desarrollar un sistema de trading

El modelo de pronóstico en el AD se basa en el sistema de ecuaciones lineales según el cual los valores de los indicadores se clasifican en un grupo o en otro.

Para ver las descripciones de estas funciones, vamos a la pestaña Clasificación en la ventana de resultados del AD (Figura 13) y hacemos clic en las funciones de Clasificación. Veremos una ventana con una tabla que contiene los coeficientes de las ecuaciones discriminantes.

Fig. 16. Ecuaciones discriminantes

Fig. 16. Ecuaciones discriminantes

Vamos a desarrollar un sistema de dos ecuaciones en base a la tabla de datos siguientes:

Group2 = 157.17*AC - 465.64*Bears + 82.24*dBears - 0.006*dCCI + 761.06*dFrAMA + 2418.79*dMACDm + 0.01*dStoch_ms - 1.035
Group3 = 527.11*AC - 641.97*Bears + 271.21*dBears - 0.002*dCCI + 1483.47*dFrAMA - 726.16*dMACDm - 0.034*dStoch_ms - 1.353

Para usar este modelo introducimos los valores del indicador en las ecuaciones y calculamos el valor de Grupo.

La predicción se hará respecto al grupo cuyo valor Grupo sea mayor. Según nuestro ejemplo, si el valor Group2 es mayor que el valor Group3, se predice que dentro de la próxima hora el gráfico del precio se moverá probablemente hacia abajo. La predicción resultará ser opuesta en caso de que Group 3 sea mayor que Group2.

Debe señalarse que los valores de los indicadores y el periodo de análisis en nuestro ejemplo se seleccionaron casi aleatoriamente. Pero incluso esta cantidad de datos fue suficiente para demostrar el potencial y poder del AD.


Conclusión

El AD es una herramienta útil cuando se aplica al mercado FOREX. Puede usarse para buscar y comprobar un conjunto óptimo de variables permitiendo clasificar los valores del indicador observado en diferentes predicciones. También puede utilizarse para elaborar modelos de predicción.

Los modelos elaborados a partir del análisis discriminante pueden integrarse fácilmente en los asesores expertos que no requieren una experiencia de programación considerable. El AD es en sí mismo también relativamente fácil de usar. El anterior tutorial paso a paso es suficiente para que usted pueda analizar sus propios datos.

Puede encontrar más información sobre el análisis discriminante en la sección de libros de texto electrónicos.


Traducción del ruso hecha por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/ru/articles/335

Archivos adjuntos |
masterdata.zip (662.43 KB)
da_demo.mq5 (12.36 KB)
Predicción de series de tiempo usando el ajuste exponencial (continuación) Predicción de series de tiempo usando el ajuste exponencial (continuación)
Este artículo pretende actualizar el indicador creado anteriormente y trata brevemente sobre un método para estimar intervalos de confianza en las predicciones usando bootstrapping y cuantiles. Como resultado, obtendremos el indicador de predicción y los scripts a usar para la estimación de la precisión de la predicción.
Analizando los parámetros estadísticos de los indicadores Analizando los parámetros estadísticos de los indicadores
El análisis técnico implementa ampliamente los indicadores mostrando las cotizaciones básicas "más claramente" y permitiendo a los operadores realizar el análisis y la predicción del movimiento de precios del mercado. Es bastante obvio que no tiene sentido usar los indicadores y mucho menos aplicarlos a la creación de sistemas de trading, a menos que podamos resolver los problemas relativos a la transformación de las cotizaciones iniciales y la credibilidad del resultado obtenido. En este artículo mostramos que hay serias razones para dicha conclusión.
Crear asesores expertos usando el Expert Advisor Visual Wizard Crear asesores expertos usando el Expert Advisor Visual Wizard
El Expert Advisor Visual Wizard para Meta Trader 5 proporciona un entorno gráfico muy intuitivo con un conjunto completo de bloques de trading predefinidos que le permitirá diseñar Expert Advisors en minutos. El enfoque clic, arrastrar y soltar del Expert Advisor Visual Wizard le permitirá crear representaciones visuales de las estrategias y señales de trading forex como lo haría con lápiz y papel. Estos diagramas de trading se analizan automáticamente por el generador de código de MQL5 Molanis que los transforma para que puedan usarse directamente como Expert Advisors. El entorno gráfico interactivo simplifica el proceso de diseño y elimina la necesidad de escribir código MQL5.
Predicción de series de tiempo usando el ajuste exponencial Predicción de series de tiempo usando el ajuste exponencial
Este artículo familiariza al lector con los modelos de ajuste exponencial utilizados en la predicción a corto plazo de series de tiempo. Además, toca los temas relacionados con la optimización y estimación de los resultados de las predicciones y proporciona algunos ejemplos de scripts e indicadores. Este artículo será útil como primera toma de contacto con los principios de la predicción basados en los modelos de ajuste exponencial.