English Русский 中文 Deutsch 日本語 Português 한국어 Français Italiano Türkçe
preview
Aprendizaje automático y data science (Parte 04): Predicción de una caída bursátil

Aprendizaje automático y data science (Parte 04): Predicción de una caída bursátil

MetaTrader 5Trading | 17 agosto 2022, 07:28
554 0
Omega J Msigwa
Omega J Msigwa

Introducción

En la Parte 2 de esta serie de artículos, creamos un modelo logístico simple basado en los datos del Titanic. Hoy crearemos un modelo logístico que podrá ayudarnos a predecir la caída del mercado de valores.

En este artículo, veremos la aplicación útil de nuestros modelos logísticos; así, crearemos un modelo predictivo para la caída del mercado de valores. Para probar nuestro modelo, usaremos datos de prueba sobre la caída actual del mercado de valores. Creo que todo ello será relevante para nosotros.

Imagen del artículo sobre la caída del mercado de valores


Caída de la bolsa

Un colapso del mercado es una caída precipitada en el valor general de un mercado, en el que los precios pueden precipitarse más del 10% durante varios días. Algunos ejemplos famosos de crisis importantes son el Lunes Negro de 1987 y la burbuja inmobiliaria de 2008. La caída generalmente se asocia con el estallido de una burbuja de precios y sucede como resultado de una venta masiva, cuando la mayoría de los participantes en el mercado de valores intentan vender sus activos simultáneamente.

Antes de explorar este tema, querríamos advertir a los lectores:

¡Atención! Este artículo no contiene consejos financieros ni comerciales. Usted debe comprender que no soy Warren Buffett o Charlie Munger, ni un inversionista profesional en el mercado de valores. Solo soy un científico de datos que busca una forma de conectar los modelos científicos con el trading. No tome la información de este artículo demasiado en serio, ya que la mayoría de las opiniones han sido recopiladas de varias fuentes en Internet (aunque he tratado de usar una variedad de fuentes fiables; encontrará el enlace a la sección de ayuda al final del artículo). Haga su propia investigación antes de decidir usar cualquiera de los enfoques discutidos en este artículo para tomar decisiones comerciales.

Bien, aclarado este punto, podemos seguir adelante.

En primer lugar, vamos a definir los factores que influyen en el valor de las acciones. Una vez que los asimilemos, quedará claro por dónde empezar, porque estos factores se pueden usar como datos (variables independientes) para nuestro modelo logístico.


Factores que influyen en el precio de las acciones

Hay muchos factores distintos que influyen en el mercado de valores, aquí hay algunos. Tenga en cuenta que por ahora no existe un indicador exacto que describa con precisión el comportamiento del mercado. Usaremos los siguientes factores:

  1. Oferta y demanda
  2. Factores relacionados con la empresa
  3. Tasas de interés
  4. Eventos actuales
  5. Inflación

1. Oferta y demanda

Son muchos los factores que influyen en el mercado de valores, pero si separamos todo lo externo, quedará el factor más básico. Es simple: la oferta y la demanda. Un desequilibrio entre la oferta y la demanda empujará el precio de las acciones hacia arriba y hacia abajo.

Si las manzanas escasean de pronto, más y más personas harán cola para comprarlas y el precio de las estas se disparará de inmediato.

De forma similar, si a una empresa le va bien y todos quieren comprar acciones de esa empresa en particular, habrá escasez de estas, lo cual aumentará el valor de las acciones. Por el contrario, si hay demasiadas acciones y nadie quiere comprarlas, los precios de las acciones bajarán.

Resulta imposible conseguir datos de oferta y demanda que puedan ser utilizados en nuestro modelo. Por consiguiente, no incluiremos este factor en nuestro conjunto de datos. Sin embargo, estoy seguro de que si alguien puede obtener los datos exactos, estará un paso más cerca de crear el Santo Grial.


2. Factores relacionados con la empresa

Todo lo que suceda dentro de la empresa afectará directamente el valor de las acciones: si la empresa cotiza al alza, tiene lanzamientos exitosos de productos, sus beneficios aumentan, su deuda disminuye y atrae inversores con éxito, su valor inevitablemente subirá porque todos querrán comprar acciones de una empresa que crece constantemente.

Por el contrario, si la empresa registra pérdidas, su producto es inestable y las deudas aumentan, la mayoría de los accionistas querrán vender las acciones de la empresa, lo cual reducirá su valor.

Para explicar este factor, tenemos un buen ejemplo en Netflix y Apple.

Hemos visto a Netflix perder más de 200 000 suscriptores de servicios durante los primeros tres meses de 2022 debido a sus políticas de precios y asuntos internos que directamente han hecho bajar el precio de las acciones de Netflix.

Apple, por otra parte, ha sido una empresa exitosa durante mucho tiempo gracias a la popularidad de sus productos, su buena gestión y otras situaciones internas positivas que han llevado a un precio bursátil alcista en los últimos años.

Para determinar el estado de la empresa, usaremos la relación precio-beneficio.

Relación precio-beneficio

La relación precio-beneficio (PE) en la valoración de una empresa mide el precio actual de sus acciones en relación con su beneficio por acción (EPS). La relación PE también se puede usar como un indicador de la salud general de una empresa. Este es el aspecto de los gráficos según el precio de las acciones y la relación PE para Apple y Netflix.

APPLE:

Gráfico del precio de las acciones de Apple respecto al beneficio

Fuente de datos: macrotrends.net


NETFLIX

Precio de las acciones de Netflix y relación respecto al beneficio

Fuente de datos: macrotrends.net

Dado que la relación PE se calcula trimestralmente (cuatro veces al año) , al menos estos datos están disponibles en fuentes abiertas, aunque ciertamente hay recursos de pago. Para nosotros, sin embargo, resulta que existen lagunas en los datos, pues necesitamos el mismo número de filas en todas las columnas de nuestro conjunto de datos para que los cálculos en los modelos sean eficientes. Estos son los datos de APPLEL:

Lagunas de datos en la relación precio-beneficio de Apple

Como los datos se calculan cada trimestre del año, para el resto del trimestre usaremos los mismos datos previamente calculados hasta el próximo trimestre, por lo que en este caso simplemente duplicaremos los datos:

Datos duplicados de la relación PE de Apple

Repetiremos lo mismo para NETFLIX.

3. Tasas de interés

Las acciones del Banco de la Reserva Federal influyen directamente en los precios de las acciones. Los Bancos de la Reserva/Bancos Centrales cambian regularmente las tasas para estabilizar la economía. Naturalmente, una tasa de interés más alta significará que las empresas tendrán que pagar más por los préstamos, lo cual redundará en menores beneficios. Esto hará descender el precio de sus acciones. Por el contrario, las tasas bajas implicarán que la empresa puede pedir prestado más a un coste menor, retener capital y obtener mayores beneficios. En este caso, los precios de las acciones ascenderán.

La Fed ha estado subiendo las tasas últimamente para frenar la demanda y obligar a las empresas a reducir los precios y, en última instancia, ayudar a reducir la inflación.

El cronograma para la tasa de fondos federales desde 2010 hasta el día de hoy tiene el aspecto siguiente:

Tasa de fondos federales

4. Eventos actuales

Los eventos que tienen lugar en un país o en el mundo, en su conjunto, también pueden ejercer una gran influencia en el mercado de valores. Creo que todos estarán de acuerdo en que la pandemia de Covid-19 tuvo un intenso impacto negativo en el mercado de valores a finales de 2019 y en 2020. Y no olvidemos los disturbios y el movimiento por la igualdad en los Estados Unidos en el mismo año.

El mercado de valores también se ve afectado por las guerras y el terrorismo. 

Todos estos eventos provocarán inevitablemente a una fuerte caída en los precios de las acciones y afectarán la volatilidad del mercado.

No vamos a recopilar ningún dato sobre este factor porque se necesitaría mucho trabajo y modelos para entrenar estos eventos. Esto va más allá del alcance de lo que ya hemos abarcado en esta serie de artículos.

5. Inflación

La inflación es la disminución del poder adquisitivo de una determinada divisa a lo largo del tiempo. La cuantificación de la tasa a la que disminuye el poder adquisitivo puede reflejarse en el aumento del nivel de precios promedio de una cesta de ciertos bienes y servicios en una economía durante un periodo de tiempo determinado. Un aumento en el nivel general de precios, a menudo expresado como porcentaje, indica que una unidad monetaria en realidad puede comprar menos que en periodos anteriores.

Lea más sobre la inflación a través de estos enlaces: https://www.investopedia.com/terms/i/inflation.asp

Hay dos tipos esenciales de inflación: El IPC básico y el IPC.

  • El IPC básico es un índice de precios para todo salvo la energía y los alimentos.
  • El IPC abarca todo lo que existe en la economía, incluyendo la energía, los alimentos, la educación, el entretenimiento, etc. Todo lo que existe en la vida cotidiana de las personas de una economía concreta.

Como la inflación reduce el valor del dólar, puede resultar difícil para el mercado evaluar el valor actual de las empresas que componen los índices de mercado. Además, los precios más altos de materiales, equipos y mano de obra pueden afectar los beneficios de las empresas. Como resultado, los precios de las acciones fluctúan y el mercado se torna volátil.

La buena noticia es que, si bien el endurecimiento de la Reserva Federal podría perjudicar la inversión en renta fija, históricamente, la renta variable a menudo se ha comportado bien en esos ciclos.

Veamos el gráfico del IPC de los EE.UU. desde 1970.

  Gráfico de IPC de los EE.UU.


Ahora vamos a recopilar todos los datos necesarios y guardarlos en un archivo CSV.

Comenzaremos por Apple:

Recopilación de datos

3

Estos son los datos que recopilaremos para el archivo CSV: el IPC básico, el IPC, la tasa de interés de la Reserva Federal, el EPS y la relación PE. Ya tenemos todos estos datos.

Solo falta un dato en este conjunto: nuestra variable dependiente. Solo disponemos de datos sobre los precios de las acciones sin procesar. Vamos a crear un script que muestre si ha habido una caída en un mes en particular o no.

Código CrashClassifyScript.mq5:

void DetectCrash(double &prices[], int& out_binary[])
 {
     double prev_high = prices[0];
     
     ArrayResize(out_binary,ArraySize(prices)-1); //we reduce the size by one since we ignore the current we predict the previous one
     for (int i=1; i<ArraySize(prices); i++)
        {
           int prev = i-1;
            if (prices[i] >= prev_high)
                prev_high = prices[i]; //grab the highest price 
                
            double percent_crash = ((prev_high - prices[i]) / prev_high) * 100.0; //convert crash to percentage
            printf("crash percentage %.2f high price %.4f curr price %.4f ", percent_crash,prev_high,prices[i]);  
          
            //based on the definition of a crash; markets has to fall more than 10% percent
            if (percent_crash > 10)
                out_binary[prev] = 0; //downtrend (crash)
            else
                out_binary[prev] = 1; //uptrend (no crash )
        }
 }

Si observamos detenidamente el primer prev_high, notaremos que primero se estableció en el precio anterior porque copiamos los datos de Apple del 1 de diciembre de 2009, en lugar del 1 de enero de 2010. Queríamos poder detectar una caída en el primer cálculo, y esto resultó posible gracias a la adición de este mes. En el conjunto de salida, ignoramos este mes porque no necesitábamos este periodo. Es por eso que el índice anterior es out_binary[prev] en el código, es decir, el valor en el índice i-1y el ciclo comienza en el índice 1.

Aquí está el resultado que enviamos a la matriz output binary:

 CrashClassifyScript  DATE 1/1/2010 TREND 1

 CrashClassifyScript  DATE 2/1/2010 TREND 1

.........

 CrashClassifyScript  DATE 4/1/2022 TREND 0

 CrashClassifyScript  DATE 5/1/2022 TREND 0

Añadimos todas las columnas a un solo archivo csv en Excel y obtenemos este archivo como resultado:

Descripción general del conjunto de datos de Apple

¡Fabuloso! Ahora ya está todo listo y podemos empezar a trabajar en el código.

Ya hemos averiguado que hay un algoritmo de regresión lineal detrás de nuestro modelo logístico, y antes de utilizar datos en el modelo lineal, deberemos verificar si están correlacionados con su variable independiente. Probaremos esto llamando al método corrcoeff que añadimos a nuestra biblioteca LinearRegression creada en el artículo anterior.

Aquí tenemos el script TestScript.mq5:

m_lr = new CMatrixRegression;
      
Print("Matrix multiple regression");
m_lr.Init(8,"2,4,5,6,7",file_name,",",0.7);
      
m_lr.corrcoeff();
m_lr.MultipleMatLinearRegMain();    
delete m_lr;       

La salida será así:

Regresión matricial múltiple

TestScript  Init, number of X columns chosen =5

TestScript  "2" "4" "5" "6" "7"

TestScript  All data Array Size 740 consuming 52 bytes of memory

TestScript  Correlation Coefficients

TestScript  Independent Var Vs Trend = 0.225

TestScript  Independent Var Vs CPI = -0.079

TestScript  Independent Var Vs Core CPI  = -0.460

TestScript  Independent Var Vs EPS($) = -0.743

TestScript  Independent Var Vs   PE Ratio = -0.215

Parece que todos los datos que hemos recopilado de varios lugares no están correlacionados con el precio de las acciones. Aunque muchos en Internet afirman que estos factores influyen en al mercado de valores. Entendemos que las fuentes muestran inicialmente una advertencia de que no hay un indicador claro del comportamiento de los mercados. Sin embargo, los números en el modelo lineal muestran una historia completamente distinta. Por ejemplo, el índice de precios al consumidor (IPC) y el precio de las acciones de Apple. Esperábamos ver una correlación negativa muy fuerte, pero resulta que la correlación es demasiado débil para usarla en una regresión lineal. Solo el IPC básico (Core CPI) muestra una correlación negativa de alrededor de -0.46. El EPS (beneficio por acción) muestra un resultado más fuerte, que indica una correlación negativa de alrededor de 0,743, es decir, -74,3%

No nos detendremos en esto. Es muy importante visualizar los datos en python y asegurarnos de esto, por si se nos ha pasado alguna cifra, en caso de tener problemas en los cálculos:

Visualización por gráficos de Seaborn

Muestra

Análisis de las acciones de Apple

Creo que a estas alturas estará bastante claro que no existe una relación sólida entre la mayoría de los datos recopilados. Así que vamos a filtrar nuestros datos.

Usaremos solo tres variables independientes para construir nuestro modelo, que serán: 

  • El IPC básico (la correlación es aproximadamente del -46 %, casi la mitad)
  • El EPS (tiene una correlación de aproximadamente el -74,2%, está mejor correlacionado que otros datos)
  • Finalmente, la tasa de interés de la Fed (correlacionada en alrededor del -33%, la menos correlacionada. No recomendaríamos estos datos para construir un modelo serio.)

Ahora vamos a inicializar nuestra biblioteca con solo las columnas requeridas:

log_reg.Init(file_name,delimiter,2,"3,5,6",0.7);

Si usted se perdió las funciones básicas de la regresión logística, le recomendamos leer este artículo.

Mejoras posteriores de la biblioteca. 

//These should be called before the Init 
                           
void    FixMissingValues(string columns);
void    LabelEncoder(string columns, string members);

Los modelos logísticos son sensibles a los valores faltantes y, como se trata de un modelo de aprendizaje automático clasificador, manejará datos cero que pueden indicar datos faltantes.. Como clase, también puede procesar valores nan y cadenas como datos cero, dependiendo de cómo leamos los archivos en MQL5. Así que hemos hecho algunas mejoras en la biblioteca.

Hemos añadido una función para reemplazar los valores faltantes con el valor promedio y una función para convertir cadenas en etiquetas. 

Estas deberán llamarse antes de la función Init.

Ahora nuestra biblioteca logística heredará componentes de la biblioteca MatrixRegression que creamos en el artículo anterior.

class CLogisticRegression: protected CMatrixRegression

Ya es hora de pasar a la siguiente parte y ver cómo de bueno es nuestro modelo.

Llamando a la biblioteca de regresión logística

El resultado de la llamada será el siguiente. 

  Confusion Matrix 
   [ 0  13 ]
    [  0  31  ] 
  Tested model accuracy =0.7045

La precisión de nuestro modelo con los datos de prueba ha sido del 70,45% 😲. Estoy estupefacto.

Pensé que, debido a la falta de los datos mencionados anteriormente, ni siquiera podría alcanzar la marca del 50%. Además, me vino a la cabeza que en algún momento debería de haber un error, hasta que lo probé yo mismo en Python: el resultado fue el mismo.

Precisión del modelo probado en Python

¡Ta-dam!

Tenga en cuenta que nuestra variable dependiente es la columna de tendencia que recopilamos con nuestro script de búsqueda de caídas anteriormente en este artículo. La columna de precios solo se usaba para mostrar los coeficientes de correlación de nuestros modelos lineales porque, para buscar la correlación, no podemos usar los valores binarios 0 y 1, que indican una tendencia alcista y bajista, respectivamente. En este caso, estos son más bien los precios de acciones reales.

Ahora vamos a pasar a los datos de NETFLIX.

Así es como se ven los coeficientes de correlación para esta empresa.

        Correlation Coefficients
         Independent Var Vs Trend = 0.071
         Independent Var Vs  rate (FEDs rate) = 0.310
         Independent Var Vs CPI = 0.509
         Independent Var Vs Core CPI  = 0.607
         Independent Var Vs  EPS = 0.917
         Independent Var Vs PE Ratio = -0.213


Parece que la mayoría de los factores que hemos discutido influyen positivamente en NETFLIX. El único impacto negativo ha sido la relación precio-beneficio. El factor más fuerte ha sido el beneficio por acción con una correlación de alrededor del 92% con el precio de la acción. Por ello, para analizar NETFLIX, usaremos solo tres opciones de datos para construir el modelo:

  • EPS - beneficio por acción
  • IPC básico - índice básico de precios al consumidor 
  • e IPC - índice de precios al consumidor

Vamos a visualizar los datos de nuevo.

Gráfico de datos de Netflix

Con los datos de NETFLIX, ha resultado mucho mejor que la última vez en Apple.

Tenemos lo siguiente:

   log_reg = new CLogisticRegression();
    
    Print("NETFLIX"); 
    
    file_name =  "Netflix Dataset.csv";
    
    log_reg.Init(file_name,delimiter,2,"4,5,6",0.7);
    log_reg.LogisticRegressionMain(accuracy);
    
    printf("Tested model accuracy =%.4f",accuracy);
    delete log_reg;

Conclusión: 

FN      0       07:54:45.106    TestScript      NETFLIX
PN      0       07:54:45.108    TestScript      ==== TRAINED LINEAR REGRESSION MODEL COEFFICIENTS ====
ED      0       07:54:45.108    TestScript      [ 
RO      0       07:54:45.108    TestScript       1.43120 -0.05632 -0.54159  0.48957
EE      0       07:54:45.108    TestScript      ] 
CQ      0       07:54:45.108    TestScript      columns = 4 rows = 1
PH      0       07:54:45.108    TestScript      ========= LINEAR REGRESSION MODEL TESTING STARTED =========
QP      0       07:54:45.108    TestScript      Tested Linear Model R square is = -0.35263665822405277
GR      0       07:54:45.108    TestScript      Confusion Matrix 
EE      0       07:54:45.108    TestScript       [ 0  18 ]
HN      0       07:54:45.108    TestScript        [  0  26  ] 
MJ      0       07:54:45.108    TestScript      Tested model accuracy =0.5909

A pesar de la presencia de datos con una fuerte correlación lineal con el precio de las acciones, el modelo de NETFLIX ha mostrado menos precisión: alrededor del60 %, mientras que el modelo de APPLE ha mostrado una precisión del 70%. Puede jugar usted mismo con el resto del conjunto de datos y ver el aspecto que tendría el modelo.

Pruebas del mercado de valores en tiempo real

Para poder realizar pruebas en el mercado real, deberemos introducir algunos cambios en nuestra función principal de regresión logística: la función deberá almacenar los valores de pronóstico con las fechas correspondientes en un archivo CSV que usaremos en el simulador de estrategias para obtener señales sobre la dirección del mercado según nuestro modelo.

Así es como recopilaremos los datos y los almacenaremos en un archivo csv:

WriteToCSV(TestPredicted,dates,"Predicted "+m_filename,m_delimiter);

Permítanme recordarlesque aquí solo estamos reuniendo los resultados del conjunto de datos de prueba.

Aquí podrá ver una descripción general rápida del almacenamiento de datos en un archivo CSV:

NETFLIX

Predicted, date_time
1,8/1/2018
1,9/1/2018
1,10/1/2018
1,11/1/2018
1,12/1/2018
1,1/1/2019

APPLE 

Predicted, date_time
1,9/1/2018
1,10/1/2018
1,11/1/2018
1,12/1/2018
1,1/1/2019
1,2/1/2019      

Si lee detenidamente sobre la matriz de confusión, notará que nuestro modelo es un buen predictor de una tendencia alcista y de take-profit (un gran número de todas las filas de la matriz en Matrix fue realmente positiva).

Asesor experto para probar los precios de las acciones en tiempo real

El primer paso para crear nuestro asesor experto será recopilar los datos de nuestro archivo CSV. Pero primero deberemos decirle a nuestro simulador de estrategias que vamos a usar este archivo durante la prueba.

#property tester_file "Predicted Apple Dataset.csv"

La siguiente es solo una descripción general rápida de las funciones añadidas a la función OnInit.

 GetColumnDatatoArray(1,Trend);
 GetColumnDatatoArray(2,dates);

Usaremos estas funciones con frecuencia en nuestra biblioteca. De hecho, recopilaremos los datos de la primera columna y luego los almacenaremos en el array Trend[]. Lo mismo haremos para el array dates[].

El siguiente punto importante es la conversión de la hora que recibimos del archivo csv a un formato de hora estándar que pueda entenderse en MQL5.

ConvertTimeToStandard();

Esto es lo que vemos dentro de esa función:

void ConvertTimeToStandard()
 {
// A one time attempt to convert the date to yy.mm.dd
    
    ArrayResize(date_datetime,ArraySize(dates));
    for (int i=0; i<ArraySize(dates); i++)
       {
         StringReplace(dates[i],"/","."); //replace comma with period in each and every date
         //Print(dates[i]);
         string mm_dd_yy[];
         
         ushort sep = StringGetCharacter(".",0);
         StringSplit(dates[i],sep,mm_dd_yy); //separate month, day and year 
         
         //Print("mm dd yy date format");
         //ArrayPrint(mm_dd_yy);
         
         string year = mm_dd_yy[2];
         string  day = mm_dd_yy[1];
         string month = mm_dd_yy[0];
                
         dates[i] = year+"."+month+"."+day; //store to a yy.mm.dd format
         
         date_datetime[i] = StringToTime(dates[i]); //lastly convert the string datetime to an actual date and time
       }  
 }

Creo que esas son todas las funciones que vale la pena explicar: esto es lo que ocurre en la función Init().

El siguiente paso será probar las predicciones del modelo en la función Ontick. Esta será la base de nuestro asesor:

    datetime today[1];
    int trend_signal = -1; //1 is buy signal 0 is sell signal
    
    CopyTime(Symbol(),PERIOD_D1,0,1,today);
    
    if (isNewBar())
     for (int i=0; i<ArraySize(date_datetime); i++)
      {
          if (today[0] == date_datetime[i]) //train in that specific day only
              {
                 
                  if ((int)Trend[i] == 1)
                    trend_signal = 1;
                  else 
                     trend_signal = 0; 
                     
                  // close all the existing positions since we are coming up with new data signals
                  ClosePosByType(POSITION_TYPE_BUY);
                  ClosePosByType(POSITION_TYPE_SELL);
                  break;
              }
          
          if (MQLInfoInteger(MQL_TESTER) && today[0] > date_datetime[ArrayMaximum(date_datetime)])
             {
                 Print("we've run out of the testing data, Tester will be cancelled");
                 ExpertRemove();
             }
     } 
     
//--- Time to trade

      MqlTick tick;
      SymbolInfoTick(Symbol(),tick);
      double ask = tick.ask , bid = tick.bid;

//---

      if (trend_signal == 1 && PositionCounter(POSITION_TYPE_BUY)<1)
        {
           m_trade.Buy(Lots,Symbol(),ask,0,0," Buy trade ");
           ClosePosByType(POSITION_TYPE_SELL); //if the model predicts a bullish market close all sell trades if available
        }
        
      if (trend_signal == 0 && PositionCounter(POSITION_TYPE_SELL)<1)
        {
            m_trade.Sell(Lots,Symbol(),bid,0,0,"Sell trade");
            ClosePosByType(POSITION_TYPE_BUY); //vice versa if the model predicts bear market
        }
  }

La razón por la que hemos decidido entrenar el modelo con los datos de este día. Usaremos el identificador de eventos NewBar, que debería reducir el gasto derivado de probar la aplicación. Para reducir aún más los costes, también hemos añadido una condición al código que requerirá que el simulador de estrategias se detenga tan pronto como nos quedemos sin datos para realizar la prueba.

Eso es todo. Podrá ver el código completo en el siguiente enlace. Ahora es el momento de probar el modelo en el simulador de estrategias.

Resultados de la prueba de APPLE

Informe de la prueba de Apple

Gráfico

Gráfico del simulador de Apple

Para realizar la comparación, vemos los datos de Netflix. Informe del simulador:

Informe del simulador de Netflix

Gráfico del simulador

Gráfico del simulador de Netflix

¡Magnífico! Como podrá ver, el modelo de Apple mostró una precisión de alrededor del 70%. Hemos creado un buen modelo predictivo con un buen gráfico en el simulador de estrategias, en comparación con NETFLIX, que ha ejercido como competidor.


Conclusión

La ventaja de los modelos logísticos reside en que son fáciles de construir y entrenar. Hacen un trabajo bastante bueno a la hora de clasificar los datos, aunque la búsqueda de los datos que se pueden encontrar en nuestro modelo no es algo que debamos dar por sentado. Este es uno de los pasos más importantes, un error que puede hacer que todo el modelo resulte ineficaz.

También podemos realizar más mejoras en nuestra biblioteca y recopilar los datos, porque sigo sintiendo que la forma en que recopilé los datos y los clasifiqué en el script Crashclassify no es la forma más eficiente de encontrar caídas en el mercado.

Enlace a mi repositorio con los códigos analizados en el artículo:https://github.com/MegaJoctan/LogisticRegression-MQL5-and-python.



Traducción del inglés realizada por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/en/articles/10983

Archivos adjuntos |
Files.zip (26.58 KB)
Redes neuronales: así de sencillo (Parte 17): Reducción de la dimensionalidad Redes neuronales: así de sencillo (Parte 17): Reducción de la dimensionalidad
Seguimos analizando modelos de inteligencia artificial, y en particular, los algoritmos de aprendizaje no supervisado. Ya nos hemos encontrado con uno de los algoritmos de clusterización. Y en este artículo queremos compartir con ustedes una posible solución a los problemas de la reducción de la dimensionalidad.
Aprendizaje automático y data science (Parte 03): Regresión matricial Aprendizaje automático y data science (Parte 03): Regresión matricial
En esta ocasión, vamos a crear modelos usando matrices: estas ofrecen una gran flexibilidad y permiten crear modelos potentes que pueden manejar no solo cinco variables independientes, sino muchas otras, tantas como los límites computacionales de nuestro ordenador nos permitan. El presente artículo será muy interesante, eso seguro.
Trading de cuadrícula automatizado utilizando órdenes límite en la Bolsa de Moscú MOEX Trading de cuadrícula automatizado utilizando órdenes límite en la Bolsa de Moscú MOEX
Hoy vamos a desarrollar un asesor comercial en el lenguaje de estrategias comerciales MQL5 para MetaTrader 5 de la Bolsa de Moscú MOEX. El asesor comerciará con una estrategia de cuadrícula en el terminal MetaTrader 5 en los mercados de la Bolsa de Moscú MOEX; también incluirá el cierre de posiciones usando stop loss o take profit, y eliminará las órdenes pendientes al suceder ciertas condiciones del mercado.
Aprendiendo a diseñar un sistema de trading con MFI Aprendiendo a diseñar un sistema de trading con MFI
Aquí tenemos un nuevo artículo de nuestra serie destinada a la creación de sistemas comerciales basados en indicadores técnicos populares. Esta vez está dedicado al índice de flujo de dinero (IMF). Estudiaremos este indicador con todo detalle y desarrollaremos sistemas comerciales MQL5 simples para su ejecución en MetaTrader 5.