cadenas de markov 2

library(readxl)
Warning: package 'readxl' was built under R version 4.3.3
accionessp500markov <- read_excel("accionessp500markov.xlsx", 
    sheet = "Hoja1")
New names:
• `` -> `...10`
• `` -> `...11`
• `` -> `...12`
head(accionessp500markov)
# A tibble: 6 × 12
  Date                 Open  High `Adj Close` retornos estados estados2
  <dttm>              <dbl> <dbl>       <dbl>    <dbl>   <dbl>    <dbl>
1 2019-10-02 00:00:00 2925. 2925.       2888. NA            NA       NA
2 2019-10-03 00:00:00 2885. 2911.       2911.  0.00791       1        2
3 2019-10-04 00:00:00 2919. 2954.       2952.  0.0140        1        2
4 2019-10-07 00:00:00 2944. 2960.       2939. -0.00450       0        1
5 2019-10-08 00:00:00 2920. 2925.       2893. -0.0158        0        1
6 2019-10-09 00:00:00 2911. 2929.       2919.  0.00902       1        2
# ℹ 5 more variables: jerarquia <dbl>, distribucion <dbl>, ...10 <chr>,
#   ...11 <dbl>, ...12 <dbl>
estados=accionessp500markov$estados
library(markovchain)
Warning: package 'markovchain' was built under R version 4.3.3
Package:  markovchain
Version:  0.9.5
Date:     2023-09-24 09:20:02 UTC
BugReport: https://github.com/spedygiorgio/markovchain/issues
P1 <- createSequenceMatrix(estados)
P1
    0   1
0 248 326
1 327 355
Fit <- markovchainFit(data=estados, confidencelevel = .95)
Fit
$estimate
MLE Fit 
 A  2 - dimensional discrete Markov Chain defined by the following states: 
 0, 1 
 The transition matrix  (by rows)  is defined as follows: 
          0         1
0 0.4320557 0.5679443
1 0.4794721 0.5205279


$standardError
           0          1
0 0.02743557 0.03145552
1 0.02651487 0.02762675

$confidenceLevel
[1] 0.95

$lowerEndpointMatrix
          0         1
0 0.3782830 0.5062925
1 0.4275039 0.4663804

$upperEndpointMatrix
          0         1
0 0.4858285 0.6295960
1 0.5314403 0.5746753

$logLikelihood
[1] -864.7018
p=Fit$estimate
p
MLE Fit 
 A  2 - dimensional discrete Markov Chain defined by the following states: 
 0, 1 
 The transition matrix  (by rows)  is defined as follows: 
          0         1
0 0.4320557 0.5679443
1 0.4794721 0.5205279
plot(p)

steadyStates(p)
             0         1
[1,] 0.4577665 0.5422335
predict(p, newdata=0,n.ahead=2)
[1] "1" "1"

Si deseas dividir los retornos en 4 estados que contemplen tanto retornos positivos como negativos, podrías establecer los siguientes rangos:

  1. Estado 1: Retornos altamente negativos: Retornos que estén muy por debajo del promedio. Puedes definir un umbral basado en la desviación estándar o percentiles, como por ejemplo:
    • Retornos menores a -2%.
  2. Estado 2: Retornos ligeramente negativos: Retornos que son negativos pero no tan extremos, que aún podrían reflejar una ligera caída en el precio.
    • Retornos entre -2% y 0%.
  3. Estado 3: Retornos ligeramente positivos: Retornos que representan un aumento moderado en el precio de la acción.
    • Retornos entre 0% y 2%.
  4. Estado 4: Retornos altamente positivos: Retornos que representan un aumento significativo en el precio de la acción.
    • Retornos mayores a 2%.

Estos rangos son solo un ejemplo, y puedes ajustarlos según el contexto del mercado o el análisis histórico de los datos de retorno. Si los retornos históricos de tus acciones tienen un comportamiento muy diferente, podrías usar criterios basados en cuartiles o percentiles para definir mejor estos estados.

La recomendación de comprar acciones depende de la estrategia de inversión que sigas y de la situación del mercado, pero algunas pautas generales relacionadas con los estados de retorno que describimos podrían ser las siguientes:

  1. Estado 1: Retornos altamente negativos (retornos menores a -2%):
    • Este estado puede ser una oportunidad para comprar si crees que el mercado está sobre-reaccionando y los precios se van a recuperar (estrategia de “comprar barato” o “buy the dip”). Sin embargo, es arriesgado, ya que podría tratarse de una tendencia bajista prolongada.
  2. Estado 2: Retornos ligeramente negativos (entre -2% y 0%):
    • Este estado puede ser atractivo para comprar si ves que el mercado ha tenido una ligera corrección, pero tienes razones para creer que los precios repuntarán en el futuro cercano. Suele ser una estrategia moderada de compra.
  3. Estado 3: Retornos ligeramente positivos (entre 0% y 2%):
    • En este estado, podrías considerar comprar si la acción muestra un crecimiento estable y moderado, especialmente si tienes una perspectiva de crecimiento a largo plazo. Muchos inversores prefieren comprar en este estado porque implica menos riesgo que comprar en un periodo de alta volatilidad.
  4. Estado 4: Retornos altamente positivos (mayores a 2%):
    • Comprar en este estado puede ser tentador cuando los precios están subiendo rápidamente, pero también implica un mayor riesgo de que estés comprando a un precio inflado. Puede ser adecuado para inversores que buscan aprovechar un impulso a corto plazo, pero se debe tener cuidado de no entrar en una burbuja de precios.

En resumen:

  • Estrategia conservadora: Comprar en el Estado 2 o Estado 3 puede ser lo más prudente, ya que te permite adquirir acciones en momentos de estabilidad o leves correcciones.
  • Estrategia más agresiva: Comprar en el Estado 1 podría dar buenos resultados si esperas un repunte del mercado, pero es más riesgoso.
  • Evitar comprar en el Estado 4 puede ser sabio si crees que los precios ya están inflados.

La clave está en evaluar no solo los retornos, sino también el contexto del mercado, el análisis técnico y fundamental, y tu horizonte de inversión.

El estado más recomendable para comprar acciones generalmente es el Estado 2 (retornos ligeramente negativos, entre -2% y 0%).

Esto se debe a que:

  1. Corrección del mercado: Un ligero descenso en los precios podría indicar que el mercado ha corregido después de una subida, y es una buena oportunidad para entrar antes de una posible recuperación.

  2. Menor riesgo: Los retornos ligeramente negativos pueden ofrecer precios más bajos sin el alto riesgo que implica comprar en una tendencia fuertemente bajista (como en el Estado 1). Es un equilibrio entre aprovechar una pequeña caída de precios y evitar una posible tendencia de descenso prolongado.

  3. Oportunidad de crecimiento: Si después de este leve retroceso los fundamentales de la empresa son sólidos, existe una buena oportunidad de que los precios vuelvan a subir, lo que te permitiría obtener beneficios cuando el mercado se recupere.

Este enfoque sigue la estrategia de “comprar en las caídas” (buy the dip) pero sin el riesgo extremo que conlleva comprar en una fuerte tendencia bajista.

library(readxl)
accionessp500markov1 <- read_excel("accionessp500markov.xlsx", 
    sheet = "Hoja1")
New names:
• `` -> `...10`
• `` -> `...11`
• `` -> `...12`
head(accionessp500markov1)
# A tibble: 6 × 12
  Date                 Open  High `Adj Close` retornos estados estados2
  <dttm>              <dbl> <dbl>       <dbl>    <dbl>   <dbl>    <dbl>
1 2019-10-02 00:00:00 2925. 2925.       2888. NA            NA       NA
2 2019-10-03 00:00:00 2885. 2911.       2911.  0.00791       1        2
3 2019-10-04 00:00:00 2919. 2954.       2952.  0.0140        1        2
4 2019-10-07 00:00:00 2944. 2960.       2939. -0.00450       0        1
5 2019-10-08 00:00:00 2920. 2925.       2893. -0.0158        0        1
6 2019-10-09 00:00:00 2911. 2929.       2919.  0.00902       1        2
# ℹ 5 more variables: jerarquia <dbl>, distribucion <dbl>, ...10 <chr>,
#   ...11 <dbl>, ...12 <dbl>
estados2=accionessp500markov1$estados2
head(estados2)
[1] NA  2  2  1  1  2
library(markovchain)
P2 <- createSequenceMatrix(estados2)
P2
   0   1   2  3
0  5  21  21 10
1 24 198 274 21
2 18 280 327 12
3 10  19  14  2
Fit2 <- markovchainFit(data=estados2, confidencelevel = .95)
Fit2
$estimate
MLE Fit 
 A  4 - dimensional discrete Markov Chain defined by the following states: 
 0, 1, 2, 3 
 The transition matrix  (by rows)  is defined as follows: 
           0         1         2          3
0 0.08771930 0.3684211 0.3684211 0.17543860
1 0.04642166 0.3829787 0.5299807 0.04061896
2 0.02825746 0.4395604 0.5133438 0.01883830
3 0.22222222 0.4222222 0.3111111 0.04444444


$standardError
            0          1          2           3
0 0.039229263 0.08039606 0.08039606 0.055478555
1 0.009475782 0.02721711 0.03201730 0.008863783
2 0.006660346 0.02626876 0.02838798 0.005438150
3 0.070272837 0.09686442 0.08314794 0.031426968

$confidenceLevel
[1] 0.95

$lowerEndpointMatrix
           0         1         2           3
0 0.01083134 0.2108476 0.2108476 0.066702603
1 0.02784947 0.3296342 0.4672279 0.023246257
2 0.01520341 0.3880746 0.4577044 0.008179724
3 0.08448996 0.2323714 0.1481441 0.000000000

$upperEndpointMatrix
           0         1         2          3
0 0.16460726 0.5259945 0.5259945 0.28417459
1 0.06499386 0.4363233 0.5927334 0.05799165
2 0.04131150 0.4910463 0.5689832 0.02949689
3 0.35995448 0.6120730 0.4740781 0.10604018

$logLikelihood
[1] -1190.522
p2<- Fit2$estimate
p2
MLE Fit 
 A  4 - dimensional discrete Markov Chain defined by the following states: 
 0, 1, 2, 3 
 The transition matrix  (by rows)  is defined as follows: 
           0         1         2          3
0 0.08771930 0.3684211 0.3684211 0.17543860
1 0.04642166 0.3829787 0.5299807 0.04061896
2 0.02825746 0.4395604 0.5133438 0.01883830
3 0.22222222 0.4222222 0.3111111 0.04444444
plot(p2)

steadyStates(p2)
              0         1         2          3
[1,] 0.04540077 0.4123762 0.5063752 0.03584782
predict(p2, newdata=1,n.ahead=3)
[1] "2" "2" "2"
library(readxl)
accionessp500<- read_excel("accionessp500markov.xlsx", 
    sheet = "Hoja2")
accionessp500
# A tibble: 10 × 3
     Día `Precio ($)` Estado  
   <dbl>        <dbl> <chr>   
 1     1          100 -       
 2     2          102 Subiendo
 3     3          101 Bajando 
 4     4          103 Subiendo
 5     5          105 Subiendo
 6     6          104 Bajando 
 7     7          106 Subiendo
 8     8          106 Estable 
 9     9          107 Subiendo
10    10          105 Bajando 
estad=accionessp500$Estado
head(estad)
[1] "-"        "Subiendo" "Bajando"  "Subiendo" "Subiendo" "Bajando" 
estad=data.frame(estad)
estad=estad[-c(1),]
library(markovchain)
T <- createSequenceMatrix(estad)
T
         Bajando Estable Subiendo
Bajando        0       0        2
Estable        0       0        1
Subiendo       3       1        1
Fit2 <- markovchainFit(data=estad, confidencelevel = .95)
Fit2
$estimate
MLE Fit 
 A  3 - dimensional discrete Markov Chain defined by the following states: 
 Bajando, Estable, Subiendo 
 The transition matrix  (by rows)  is defined as follows: 
         Bajando Estable Subiendo
Bajando      0.0     0.0      1.0
Estable      0.0     0.0      1.0
Subiendo     0.6     0.2      0.2


$standardError
           Bajando Estable  Subiendo
Bajando  0.0000000     0.0 0.7071068
Estable  0.0000000     0.0 1.0000000
Subiendo 0.3464102     0.2 0.2000000

$confidenceLevel
[1] 0.95

$lowerEndpointMatrix
         Bajando Estable Subiendo
Bajando        0       0        0
Estable        0       0        0
Subiendo       0       0        0

$upperEndpointMatrix
         Bajando   Estable  Subiendo
Bajando        0 0.0000000 1.0000000
Estable        0 0.0000000 1.0000000
Subiendo       1 0.5919929 0.5919929

$logLikelihood
[1] -4.751353
p2<- Fit2$estimate
p2
MLE Fit 
 A  3 - dimensional discrete Markov Chain defined by the following states: 
 Bajando, Estable, Subiendo 
 The transition matrix  (by rows)  is defined as follows: 
         Bajando Estable Subiendo
Bajando      0.0     0.0      1.0
Estable      0.0     0.0      1.0
Subiendo     0.6     0.2      0.2
plot(p2)

steadyStates(p2)
       Bajando   Estable  Subiendo
[1,] 0.3333333 0.1111111 0.5555556
predict(p2, newdata="Bajando",n.ahead=3)
[1] "Subiendo" "Bajando"  "Subiendo"