en otra ventana

Anuncio
ANEXOS
A Módulo de Clase
Public Class Solucion
'Estructura de la Cartera o Portafolio
Public Structure Cartera
Dim Nombres() As String
Dim Porcentaje() As Double
Dim VecRend() As Double
Dim MatCov(,) As Double
Dim Rendimiento As Double
Dim Variacion As Double
Dim DesvEst As Double
Dim Penalizacion As Double
'Dim Suma As Double
End Structure
'Caracteristicas de la Cartera Ingresadas por Usuario
Public Shared Nombres() As String 'Nombres de los Activos de la Cartera
Public Shared vectorRend() As Double 'Vector de Rendimientos
Public Shared matrizCov(,) As Double 'Matriz de Covarianzas o Variaciones de
TODOS LOS ACTIVOS
Public Shared nreng, ncolu, nTotAct As Integer 'Renglones y columnas y Total de
Activos
Public Shared RendEsp, RendEspMax As Double 'Rendimiento Esperado de la
Cartera
Public Shared Iteraciones As Integer 'Numero de Iteraciones que hará el algoritmo
(genético)
Public Shared selElitista, selRuleta, selMetodo As Integer 'Metodo para saber el
número de seleccionados por cada método
Public Shared ccACT, ccCAR As Single 'Modificando Los activos: frecuencia de
cambio por activo y por cartera, frecuencia de mutacion de un activo donde muta uno al
azar y los demas se ajustan
Public Shared fcACT, fcCAR, fmActivo As Single 'Sin modificar Los activos:
frecuencia de cambio por activo y por cartera, frecuencia de mutacion de un activo
donde muta uno al azar y los demas se ajustan
Public Shared xmin, xmax As Single 'Para limite inferior y superior del activo i:
xmin y xmax se incluyeron en el metodo de penalización
Public Shared Bmin, Smin As Single 'Para Combra (buy) y venta(sale) minima: se
reflejan en los metodos mutacion para los mismos activos
Public Shared seleccionSolInicio As Integer 'selecciona el tipo de solucion de inicio
(aleatorio o ingresando por el usuario)
Public Shared P00, P01, P02, P000, P001, P002, P010, P011, P012, P020, P021,
P022 As Double 'Probabilidades del Árbol de Escenarios
Public Shared R0, R00, R01, R02, R000, R001, R002, R010, R011, R012, R020,
R021, R022 As Double 'Rendimientos del Árbol de Esceanrios
119
'Variables del Proyecto
Public Shared vecesQueAbre, vecesQueAbreAE, cuentaParaSalir, cuentaErrores As
Integer
Public Shared iniIngresa As Boolean 'Escoger si escojo una Solucion Inicial a
Ingresar o Predeterminada
Public Shared recadoErr As Boolean 'recado si es que el rendimiento del escenario
no esta en el rango deseado
Public Shared sumaRecadoErr As Integer 'cuenta el nuero de veces que no se llego al
rendimiento esperado para cada escenario
Public Shared todoElModelo As Boolean = False ' nos avisa durante el programa si
queremos el resultado de todo el modelo o imprimimos otra cosa.
Private Xaux() As Cartera
Public Shared limCuentaParaSalir As Integer = 10000 'para salir si n llega al
rendimiento
Public Shared Xi(), Xn(), Xmodelo As Cartera
Public Shared X0(), X00(), X01(), X02(), X000(), X001(), X002(), X010(), X011(),
X012(), X020(), X021(), X022() As Cartera
Public Shared XResultados() As Cartera 'Un vector con el mejor resultado de cada
escenario
Public Shared nombresXResultados() As String
Public Shared Escenarios As Boolean = False
Public Shared CierraResultadoEscenarios As Boolean = False
Public Shared DeNuezPredeterminada As Boolean = True
Public Shared CuentaEscenarios As Integer
Public Shared RendTotalModelo(), VarTotalModelo() As Double
Public Shared noRepitoActivo() As Integer
'Aplico escenarios a principal
Sub EscenariosCarteraPredeterminada()
recadoErr = False
sumaRecadoErr = 0
For CuentaEscenarios = 0 To 12 '({1 escenario en t0} + {3 escenario en t1} + {9
escenario en t2} - 1)
Principal()
LlenoCarterasT1y2() 'Lleno las carteras del tiempo 0, 1 y 2
Beep()
Next
frmMain.BarraProgreso.Visible = False
Dim res As New frmResultadosEscenarios
res.ShowDialog()
End Sub
'Obtengo el resultado de todo el modelo
Public Shared Sub todoModelo()
Dim s As Integer
ReDim RendTotalModelo(nreng - 1)
ReDim VarTotalModelo(nreng - 1)
For s = 0 To nreng - 1
120
RendTotalModelo(s) = P00 * (P000 * X000(s).Rendimiento + P001 *
X001(s).Rendimiento + P002 * X002(s).Rendimiento)
RendTotalModelo(s) += P01 * (P010 * X010(s).Rendimiento + P011 *
X011(s).Rendimiento + P012 * X012(s).Rendimiento)
RendTotalModelo(s) += P02 * (P020 * X020(s).Rendimiento + P021 *
X021(s).Rendimiento + P022 * X022(s).Rendimiento)
VarTotalModelo(s) = P00 * (P000 * (X000(s).Rendimiento ^ 2) + P001 *
(X001(s).Rendimiento ^ 2) + P002 * (X002(s).Rendimiento ^ 2))
VarTotalModelo(s) += P01 * (P010 * (X010(s).Rendimiento ^ 2) + P011 *
(X011(s).Rendimiento ^ 2) + P012 * (X012(s).Rendimiento ^ 2))
VarTotalModelo(s) += P02 * (P020 * (X020(s).Rendimiento ^ 2) + P021 *
(X021(s).Rendimiento ^ 2) + P022 * (X022(s).Rendimiento ^ 2))
VarTotalModelo(s) -= (RendTotalModelo(s) ^ 2)
Next
If recadoErr = True Then
MsgBox("No se mostrará el Rendimiento ni la Varianza del Modelo debido" &
Chr(13) _
& " a que en " & sumaRecadoErr & " escenarios no se logró el rendimiento
esperado. " & Chr(13) _
& " Se mostrarán los resultados a continuación.", MsgBoxStyle.Critical,
"CUIDADO")
Dim respuesta As New frmResultados
respuesta.ShowDialog()
End If
If recadoErr = False Then
Dim respuesta As New frmResultados
respuesta.ShowDialog()
End If
End Sub
'Public Sub principal()
Sub Principal()
Dim i, k As Integer 'Índices o Contadores
Randomize()
cuentaErrores=0
If ((Escenarios = False) Or ((Escenarios = True) And (CuentaEscenarios = 0)))
Then
If ((Escenarios = True) And (CuentaEscenarios = 0)) Then
Dim ae As New frmArbolEscenarios
ae.ShowDialog()
End If
'construye y manda a llamar para llenar las variables de numero de renglones y
numero de columnas de la solucion
Dim ryc As New frmParametros
ryc.ShowDialog()
'redefine cartera de solucion, vector y matriz de ingreso de parametros
redefinir()
121
'lleno Rendimientos y Variaciones dependiendo del Ingreso Inicial
If iniIngresa = True Then
Dim ver As New frmIngresoRR
ver.ShowDialog()
Else
inicialPredeterminado()
End If
Else
For i = 0 To nreng - 1
Xi(i).Rendimiento = 0
Xn(i).Rendimiento = 0
Xaux(i).Rendimiento = 0
Xi(i).Variacion = 0
Xn(i).Variacion = 0
Xaux(i).Variacion = 0
Next
End If
If ((Escenarios = True) And (CuentaEscenarios > 0)) Then
ReDim Xn(nreng - 1)
'ReDim Xaux(nreng - 1)
For i = 0 To nreng - 1
ReDim Xn(i).Porcentaje(ncolu - 1)
ReDim Xn(i).Nombres(ncolu - 1)
ReDim Xn(i).VecRend(ncolu - 1)
ReDim Xn(i).MatCov(ncolu - 1, ncolu - 1)
'ReDim Xaux(i).Porcentaje(ncolu - 1)
Next
cambiarendimientosesperados()
End If
'lleno la poblacion inicial de carteras de inversion de manera aleatoria
For x As Integer = 0 To nreng - 1
LlenaCartera(x) 'lleno una cartera de inversion
Next
'Subrutina que hace la nueva cartera a partir de la inicial
nuevaPoblacion()
If Iteraciones = 0 Then penalizaITERACION_CERO()
'Subrutina comunmente llamado burbuja: ordenamos el RIESGO en Cartera Inicial
ordena()
For k = 0 To Iteraciones - 1
'se ve lo que es la barra de progreso...
barraprogresoBueno(k)
seleccionNP() 'Seleccion para la nueva población de carteras
122
'CAMBIOS DE LOS ACTIVOS Q PARTICIPAN EN LA CARTERA POR
OTROS
cambiodeActivosPorOtroActivo()
cambiodeTotaldeActivos()
'CAMBIOS ALTERARANDO UNICAMENTE A LOS ACTIVOS Q
PARTICIPAN EN LA CARTERA
'NOTA: los 3 metodos siguientes se utilizan en la poblacion excepto en los
selecc. por elitismo
cambioCartera() 'Cambia una cartera de Pob.auxiliar por otra nueva con los
mismos activos
cambioActivo() 'Cambia un activo por otro en caso de la frecuencia de cambio,
pero de la misma lista de activos q se tenia
mutacion() 'mutacion de un activo donde muta uno al azar y los demas se
ajustan
'metodos para obtener resultados en cada corrida
penaliza()
nuevaPoblacion2() 'Convierte la poblacion auxiliar a la nueva poblacion
ordena() 'Ordena la nueva poblacion
Next
If (Escenarios = False) Then
If cuentaErrores > 0 Then
MsgBox("Se tuvieron " & cuentaErrores & " número de errores", ,
cuentaErrores & " VECES NO LLEGO AL RENDIMIENTO ESPERADO EN
ALGUNO DE LOS PASOS PARA LA CREACION DE ALGUNA CARTERA")
End If
Solucion.todoElModelo = False
frmMain.BarraProgreso.Visible = False
Dim res As New frmResultados
res.ShowDialog()
Else
'si es cartera me muestar el resultado, si es escenario entonces resultados se
imprimiran de otro userform
paraImprimir()
End If
End Sub
Sub barraprogresoBueno(ByVal k As Integer)
If (Escenarios = False) Or ((Escenarios = True) And (CuentaEscenarios = 0)) Then
frmMain.BarraProgreso.Visible = True
End If
If (Escenarios = True) Then
If CuentaEscenarios = 0 Then
frmMain.BarraProgreso.Visible = True
End If
frmMain.BarraProgreso.Value = (100 * CuentaEscenarios / 13) + ((100 * k) /
(13 * (Iteraciones - 1)))
frmMain.BarraProgreso.Show()
Else
123
frmMain.BarraProgreso.Value = 100 * (k / (Iteraciones - 1))
frmMain.BarraProgreso.Show()
End If
End Sub
Private Sub paraImprimir()
Dim i As Integer
If CuentaEscenarios = 0 Then
nombresXResultados(CuentaEscenarios) = "0 : "
Else
If CuentaEscenarios <= 3 Then
nombresXResultados(CuentaEscenarios) = "0" & CuentaEscenarios - 1 & "
:"
Else
If CuentaEscenarios <= 6 Then
nombresXResultados(CuentaEscenarios) = "00" & CuentaEscenarios - 4 &
":"
Else
If CuentaEscenarios <= 9 Then
nombresXResultados(CuentaEscenarios) = "01" & CuentaEscenarios - 7
&":"
Else
If CuentaEscenarios <= 12 Then
nombresXResultados(CuentaEscenarios) = "02" & CuentaEscenarios
- 10 & " : "
End If
End If
End If
End If
End If
For i = 0 To ncolu - 1
XResultados(CuentaEscenarios).Porcentaje(i) = Xn(0).Porcentaje(i)
XResultados(CuentaEscenarios).Nombres(i) = Xn(0).Nombres(i)
Next
XResultados(CuentaEscenarios).Rendimiento = Xn(0).Rendimiento
If ((Xn(0).Rendimiento < RendEsp) Or (Xn(0).Rendimiento > RendEspMax))
Then
sumaRecadoErr += 1
recadoErr = True
End If
XResultados(CuentaEscenarios).Variacion = Xn(0).Variacion
XResultados(CuentaEscenarios).DesvEst = Xn(0).DesvEst
'striVe &= "DE " & Xn(0).DesvEst & " " & Chr(13)
End Sub
Public Sub redefinir()
Dim i As Integer
ReDim Xi(nreng - 1)
ReDim Xn(nreng - 1)
ReDim Xaux(nreng - 1)
124
ReDim noRepitoActivo(ncolu - 1)
For i = 0 To nreng - 1
ReDim Xi(i).Nombres(ncolu - 1)
ReDim Xn(i).Nombres(ncolu - 1)
ReDim Xaux(i).Nombres(ncolu - 1)
ReDim Xi(i).Porcentaje(ncolu - 1)
ReDim Xn(i).Porcentaje(ncolu - 1)
ReDim Xaux(i).Porcentaje(ncolu - 1)
ReDim Xi(i).VecRend(ncolu - 1)
ReDim Xn(i).VecRend(ncolu - 1)
ReDim Xaux(i).VecRend(ncolu - 1)
ReDim Xi(i).MatCov(ncolu - 1, ncolu - 1)
ReDim Xn(i).MatCov(ncolu - 1, ncolu - 1)
ReDim Xaux(i).MatCov(ncolu - 1, ncolu - 1)
Next
ReDim Nombres(nTotAct - 1)
ReDim vectorRend(nTotAct - 1)
ReDim matrizCov(nTotAct - 1, nTotAct - 1)
ReDim X0(nreng - 1)
ReDim X00(nreng - 1)
ReDim X01(nreng - 1)
ReDim X02(nreng - 1)
ReDim X000(nreng - 1)
ReDim X001(nreng - 1)
ReDim X002(nreng - 1)
ReDim X010(nreng - 1)
ReDim X011(nreng - 1)
ReDim X012(nreng - 1)
ReDim X020(nreng - 1)
ReDim X021(nreng - 1)
ReDim X022(nreng - 1)
For i = 0 To nreng - 1
ReDim X0(i).Nombres(ncolu - 1)
ReDim X00(i).Nombres(ncolu - 1)
ReDim X01(i).Nombres(ncolu - 1)
ReDim X02(i).Nombres(ncolu - 1)
ReDim X000(i).Nombres(ncolu - 1)
ReDim X001(i).Nombres(ncolu - 1)
ReDim X002(i).Nombres(ncolu - 1)
ReDim X010(i).Nombres(ncolu - 1)
ReDim X011(i).Nombres(ncolu - 1)
ReDim X012(i).Nombres(ncolu - 1)
ReDim X020(i).Nombres(ncolu - 1)
ReDim X021(i).Nombres(ncolu - 1)
ReDim X022(i).Nombres(ncolu - 1)
125
ReDim X0(i).Porcentaje(ncolu - 1)
ReDim X00(i).Porcentaje(ncolu - 1)
ReDim X01(i).Porcentaje(ncolu - 1)
ReDim X02(i).Porcentaje(ncolu - 1)
ReDim X000(i).Porcentaje(ncolu - 1)
ReDim X001(i).Porcentaje(ncolu - 1)
ReDim X002(i).Porcentaje(ncolu - 1)
ReDim X010(i).Porcentaje(ncolu - 1)
ReDim X011(i).Porcentaje(ncolu - 1)
ReDim X012(i).Porcentaje(ncolu - 1)
ReDim X020(i).Porcentaje(ncolu - 1)
ReDim X021(i).Porcentaje(ncolu - 1)
ReDim X022(i).Porcentaje(ncolu - 1)
ReDim X0(i).VecRend(ncolu - 1)
ReDim X00(i).VecRend(ncolu - 1)
ReDim X01(i).VecRend(ncolu - 1)
ReDim X02(i).VecRend(ncolu - 1)
ReDim X000(i).VecRend(ncolu - 1)
ReDim X001(i).VecRend(ncolu - 1)
ReDim X002(i).VecRend(ncolu - 1)
ReDim X010(i).VecRend(ncolu - 1)
ReDim X011(i).VecRend(ncolu - 1)
ReDim X012(i).VecRend(ncolu - 1)
ReDim X020(i).VecRend(ncolu - 1)
ReDim X021(i).VecRend(ncolu - 1)
ReDim X022(i).VecRend(ncolu - 1)
ReDim X0(i).MatCov(ncolu - 1, ncolu - 1)
ReDim X00(i).MatCov(ncolu - 1, ncolu - 1)
ReDim X01(i).MatCov(ncolu - 1, ncolu - 1)
ReDim X02(i).MatCov(ncolu - 1, ncolu - 1)
ReDim X000(i).MatCov(ncolu - 1, ncolu - 1)
ReDim X001(i).MatCov(ncolu - 1, ncolu - 1)
ReDim X002(i).MatCov(ncolu - 1, ncolu - 1)
ReDim X010(i).MatCov(ncolu - 1, ncolu - 1)
ReDim X011(i).MatCov(ncolu - 1, ncolu - 1)
ReDim X012(i).MatCov(ncolu - 1, ncolu - 1)
ReDim X020(i).MatCov(ncolu - 1, ncolu - 1)
ReDim X021(i).MatCov(ncolu - 1, ncolu - 1)
ReDim X022(i).MatCov(ncolu - 1, ncolu - 1)
Next
ReDim XResultados(13 - 1)
ReDim nombresXResultados(13 - 1)
For i = 0 To XResultados.Length - 1
ReDim XResultados(i).Nombres(ncolu - 1)
ReDim XResultados(i).Porcentaje(ncolu - 1)
ReDim XResultados(i).VecRend(ncolu - 1)
ReDim XResultados(i).MatCov(ncolu - 1, ncolu - 1)
126
Next
End Sub
Public Sub cambiodeActivosPorOtroActivo()
'LO Q HAY Q HACER ES: SACAR A UN ACTIVO DE LA CARTERA Y
METER OTRO Q NO ESTE ADENTRO.
Randomize()
Dim i, j, ii As Integer
Dim aleN2(), aleN2aux(), escojeAlea(), siguiente, cuenta As Integer
Dim aleatorio, sacoAleatoriamente, aux As Integer
Dim suma As Double = 0
Dim ran As Single
If nTotAct > ncolu Then
For i = selElitista To nreng - 1
cuentaParaSalir = 0
ran = Rnd()
If ran < ccACT Then
Do
ReDim aleN2aux(nTotAct - 1)
ReDim escojeAlea(ncolu - 1)
siguiente = 0
cuenta = 0
For ii = 0 To nTotAct - 1
aleN2aux(ii) = ii
Next
For ii = 0 To nTotAct - 1
For j = 0 To ncolu - 1
If Nombres(ii) = Xaux(i).Nombres(j) Then
aleN2aux(ii) = -1
escojeAlea(cuenta) = ii
cuenta += 1
Else
If aleN2aux(ii) = -1 Then
ii += 1
j=0
End If
End If
Next
Next
ReDim aleN2(nTotAct - ncolu - 1)
For ii = 0 To nTotAct - 1
If aleN2aux(ii) <> -1 Then
aleN2(siguiente) = aleN2aux(ii)
siguiente += 1
End If
Next
127
aleatorio = Int(Rnd() * aleN2.Length)
sacoAleatoriamente = Int(Rnd() * ncolu)
escojeAlea(sacoAleatoriamente) = aleN2(aleatorio)
'ordeno
For ii = 1 To ncolu - 1
For j = 0 To ncolu - 2
If escojeAlea(j + 1) < escojeAlea(j) Then
aux = escojeAlea(j)
escojeAlea(j) = escojeAlea(j + 1)
escojeAlea(j + 1) = aux
End If
Next
Next
'lo pongo en forma del texto
For ii = 0 To ncolu - 1
Xaux(i).Nombres(ii) = Nombres(escojeAlea(ii))
Xaux(i).VecRend(ii) = vectorRend(escojeAlea(ii))
For j = 0 To ncolu - 1
Xaux(i).MatCov(ii, j) = matrizCov(escojeAlea(ii), escojeAlea(j))
Next
Next
'Vector aleatorios - creo aleatorios para cada uno de los activos
For ii = 0 To ncolu - 1
Xaux(i).Porcentaje(ii) = Rnd() * Rnd()
suma += Xaux(i).Porcentaje(ii)
Next
For ii = 0 To ncolu - 1
Xaux(i).Porcentaje(ii) /= suma
Next
'Rendimiento esperado de la cartera o portafolio
Xaux(i).Rendimiento = 0
For ii = 0 To ncolu - 1
Xaux(i).Rendimiento += (Xaux(i).VecRend(ii) *
Xaux(i).Porcentaje(ii))
Next
cuentaParaSalir += 1
Loop Until (((Xaux(i).Rendimiento >= RendEsp) And
(Xaux(i).Rendimiento <= RendEspMax)) Or (cuentaParaSalir = limCuentaParaSalir))
If cuentaParaSalir = limCuentaParaSalir Then
cuentaErrores += 1
128
Xaux(i).Penalizacion += 0.5 'Le sumo una vario con grande para sacarlo
de la poblacion optima
End If
For j = 0 To ncolu - 1
For ii = 0 To ncolu - 1
Xaux(i).Variacion += (Xaux(i).MatCov(ii, j) * Xaux(i).Porcentaje(ii)
* Xaux(i).Porcentaje(j))
Next
Xaux(i).DesvEst = (Xaux(i).Variacion) ^ 0.5
Next
End If
Next
End If
End Sub
Public Sub cambiodeTotaldeActivos()
Randomize()
Dim i, j, k, ii As Integer
Dim aleN2(), aleN2aux(), escojeAlea(), siguiente, cuenta As Integer
Dim aleatorio, aux As Integer
Dim suma As Double = 0
If nTotAct > ncolu Then
For i = selElitista To nreng - 1
cuentaParaSalir = 0
If Rnd() < ccCAR Then
Do
ReDim aleN2aux(nTotAct - 1)
ReDim escojeAlea(ncolu - 1)
siguiente = 0
cuenta = 0
For ii = 0 To nTotAct - 1
aleN2aux(ii) = ii
Next
For ii = 0 To ncolu - 1
ReDim aleN2(nTotAct - 1 - ii)
k=0
For j = 0 To nTotAct - 1
If aleN2aux(j) <> -1 Then
aleN2(k) = aleN2aux(j)
k += 1
End If
Next
aleatorio = Int(Rnd() * aleN2.Length)
escojeAlea(ii) = aleN2(aleatorio)
aleN2aux(aleN2(aleatorio)) = -1
Next
129
'ordeno
For ii = 1 To ncolu - 1
For j = 0 To ncolu - 2
If escojeAlea(j + 1) < escojeAlea(j) Then
aux = escojeAlea(j)
escojeAlea(j) = escojeAlea(j + 1)
escojeAlea(j + 1) = aux
End If
Next
Next
'lo pongo en forma del texto
For ii = 0 To ncolu - 1
Xaux(i).Nombres(ii) = Nombres(escojeAlea(ii))
Xaux(i).VecRend(ii) = vectorRend(escojeAlea(ii))
For j = 0 To ncolu - 1
Xaux(i).MatCov(ii, j) = matrizCov(escojeAlea(ii), escojeAlea(j))
Next
Next
'Vector aleatorios - creo aleatorios para cada uno de los activos
For ii = 0 To ncolu - 1
Xaux(i).Porcentaje(ii) = Rnd() * Rnd()
suma += Xaux(i).Porcentaje(ii)
Next
For ii = 0 To ncolu - 1
Xaux(i).Porcentaje(ii) /= suma
Next
'Rendimiento esperado de la cartera o portafolio
Xaux(i).Rendimiento = 0
For ii = 0 To ncolu - 1
Xaux(i).Rendimiento += (Xaux(i).VecRend(ii) *
Xaux(i).Porcentaje(ii))
Next
cuentaParaSalir += 1
Loop Until (((Xaux(i).Rendimiento >= RendEsp) And
(Xaux(i).Rendimiento <= RendEspMax)) Or (cuentaParaSalir = limCuentaParaSalir))
If cuentaParaSalir = limCuentaParaSalir Then
cuentaErrores += 1
Xaux(i).Penalizacion += 0.5 'Le sumo una vario con grande para sacarlo
de la poblacion optima
End If
For j = 0 To ncolu - 1
For ii = 0 To ncolu - 1
130
Xaux(i).Variacion += (Xaux(i).MatCov(ii, j) * Xaux(i).Porcentaje(ii)
* Xaux(i).Porcentaje(j))
Next
Xaux(i).DesvEst = (Xaux(i).Variacion) ^ 0.5
Next
End If
Next
End If
End Sub
Public Sub mutacion()
Randomize()
Dim i, j As Integer 'Índices o Contadores
Dim aleatorio, ki As Integer
Dim sum, sumR, mmul As Double
Dim auxAux() As Double
Dim suma As Double
For i = selElitista To nreng - 1
' para que sea igual al 100%
suma = 0
For j = 0 To ncolu - 1
suma += Xaux(i).Porcentaje(j)
Next
For j = 0 To ncolu - 1
Xaux(i).Porcentaje(j) /= suma
Next
If Rnd() < fmActivo Then
cuentaParaSalir = 0
Do
ReDim auxAux(ncolu - 1)
For j = 0 To ncolu - 1
auxAux(j) = Xaux(i).Porcentaje(j)
Next
sum = 0
sumR = 0
aleatorio = CInt(Rnd() * (ncolu - 1))
sum = 1 - auxAux(aleatorio)
mmul = Rnd() * 0.025
If Rnd() > 0.5 Then
If auxAux(aleatorio) + (mmul) < 1 Then
auxAux(aleatorio) += (mmul + Bmin)
Else
auxAux(aleatorio) = 1
End If
Else
If auxAux(aleatorio) - (mmul) > 0 Then
auxAux(aleatorio) -= (mmul + Smin)
Else
131
auxAux(aleatorio) = 0
End If
End If
For j = 0 To ncolu - 1
If j <> aleatorio Then
auxAux(j) *= (1 - auxAux(aleatorio)) / sum
End If
Next
For j = 0 To ncolu - 1
sumR += (Xaux(i).VecRend(j) * auxAux(j))
Next
cuentaParaSalir += 1
Loop Until (((sumR >= RendEsp) And (sumR <= RendEspMax)) Or
(cuentaParaSalir = limCuentaParaSalir))
If cuentaParaSalir = limCuentaParaSalir Then
cuentaErrores += 1
Xaux(i).Penalizacion += 0.5 'Le sumo una vario con grande para sacarlo
de la poblacion optima
Else
For j = 0 To ncolu - 1
For ki = 0 To ncolu - 1
Xaux(i).Variacion = 0
Next
Next
For j = 0 To ncolu - 1
Xaux(i).Porcentaje(j) = auxAux(j)
Next
obtenerRendyVar()
End If
End If
Next
End Sub
Public Sub cambioCartera()
Randomize()
Dim i, j As Integer 'Índices o Contadores
Dim Suma As Double
If fcCAR > 0 Then
For i = selElitista To nreng - 1
cuentaParaSalir = 0
Do
Suma = 0
If Rnd() < fcCAR Then
Xaux(i).Rendimiento = 0
Xaux(i).Variacion = 0
For j = 0 To ncolu - 1
Xaux(i).Porcentaje(j) = Rnd()
Suma += Xaux(i).Porcentaje(j)
Next
132
For j = 0 To ncolu - 1
Xaux(i).Porcentaje(j) /= Suma
Next
obtenerRendyVar()
End If
cuentaParaSalir += 1
Loop Until (((Xaux(i).Rendimiento >= RendEsp) And (Xaux(i).Rendimiento
<= RendEspMax)) Or (cuentaParaSalir = limCuentaParaSalir))
If cuentaParaSalir = limCuentaParaSalir Then
cuentaErrores += 1
Xaux(i).Penalizacion += 0.5 'Le sumo una vario con grande para sacarlo
de la poblacion optima
End If
Next
End If
End Sub
Public Sub cambioActivo()
Randomize()
Dim i, j As Integer 'Índices o Contadores
Dim aleatorio As Integer
Dim auxW, suma As Double
Dim ban As Boolean = False
If fcACT <> 0 Then
For i = selElitista To nreng - 1
cuentaParaSalir = 0
Do
suma = 0
For j = 0 To ncolu - 1
If Rnd() < fcACT Then
Xaux(i).Rendimiento = 0
Xaux(i).Variacion = 0
Do
aleatorio = CInt(Rnd() * (ncolu - 1))
Loop Until (aleatorio <> j)
auxW = Xaux(i).Porcentaje(j)
Xaux(i).Porcentaje(j) = Xaux(i).Porcentaje(aleatorio)
Xaux(i).Porcentaje(aleatorio) = auxW
End If
Next
For j = 0 To ncolu - 1
' para que sea igual al 100%
suma += Xaux(i).Porcentaje(j)
Next
For j = 0 To ncolu - 1
Xaux(i).Porcentaje(j) /= suma
Next
obtenerRendyVar()
cuentaParaSalir += 1
Loop Until (((Xaux(i).Rendimiento >= RendEsp) And (Xaux(i).Rendimiento
<= RendEspMax)) Or (cuentaParaSalir = limCuentaParaSalir))
133
If cuentaParaSalir = limCuentaParaSalir Then
cuentaErrores += 1
Xaux(i).Penalizacion += 0.5 'Le sumo una vario con grande para sacarlo
de la poblacion optima
End If
Next
End If
End Sub
Public Sub seleccionNP()
Randomize()
Dim i, j As Integer 'Índices o Contadores
Dim wAux(ncolu - 1) As Double
Dim wEsco As Double
Dim escojo, m As Integer
'lleno la una parte de la cartera auxiliar de forma ELITISTA
For i = 0 To selElitista - 1
For j = 0 To ncolu - 1
Xaux(i).Porcentaje(j) = Xn(i).Porcentaje(j)
Xaux(i).Nombres(j) = Xn(i).Nombres(j)
Xaux(i).VecRend(j) = Xn(i).VecRend(j)
For m = 0 To ncolu - 1
Xaux(i).MatCov(j, m) = Xn(i).MatCov(j, m)
Next
Next
Xaux(i).Penalizacion = Xn(i).Penalizacion
Next
'lleno una parte de la cartera auxiliar por SELECCION DE RULETA
For i = 0 To ncolu - 1
If i = 0 Then
wAux(i) = (ncolu - i) / ((ncolu * (ncolu + 1)) / 2)
Else
wAux(i) = wAux(i - 1) + ((ncolu - i) / ((ncolu * (ncolu + 1)) / 2))
End If
Next
For i = selElitista To selElitista + selRuleta - 1
wEsco = Rnd()
escojo = 0
For j = 0 To ncolu - 1
If wEsco > wAux(j) Then
escojo = j
End If
Next
For j = 0 To ncolu - 1
Xaux(i).Porcentaje(j) = Xn(escojo).Porcentaje(j)
Xaux(i).Nombres(j) = Xn(escojo).Nombres(j)
Xaux(i).VecRend(j) = Xn(escojo).VecRend(j)
134
For m = 0 To ncolu - 1
Xaux(i).MatCov(j, m) = Xn(escojo).MatCov(j, m)
Next
Next
Xaux(i).Penalizacion = Xn(escojo).Penalizacion
Next
'cuentaParaSalir = 0
'
Do
'cuentaParaSalir += 1
'
Loop Until (((Xaux(i).Rendimiento >= RendEsp) And
(Xaux(i).Rendimiento <= RendEspMax)) Or (cuentaParaSalir = limCuentaParaSalir))
'If cuentaParaSalir = limCuentaParaSalir Then
' cuentaErrores += 1
' Xaux(i).Penalizacion += 0.5 'Le sumo una vario con grande para sacarlo de la
poblacion optima
'End If
'NO NOS VA A SERVIR PARA MODELO FINAL POR LO Q DIJO RUBÉN L.
HARO
'lleno la ultima parte de la cartera auxiliar por seleccion de OTRO METODO
mencionado en Cap.3
If nTotAct = ncolu Then
Dim selNo As Integer = selElitista + selRuleta
Dim ii, ji, ki As Integer
'Dim cuantosReng(nreng - selNo) As Integer
Dim alea As Integer
Dim suma As Double
'inicio porcentajes en cero de todas las carteras
For ii = selNo To nreng - 1
For ki = 0 To ncolu - 1
Xaux(ii).Porcentaje(ki) = 0
Next
Next
'lleno los porcentajes
For ii = selNo To nreng - 1
'cuantosReng(ii - selNo) = CInt((nreng - 1) * Rnd() * 0.5) 'a lo mucho metere
50% de las carteras para hacer el promedio
suma = 0
For ji = 0 To CInt((nreng - 1) * Rnd() * 0.75)
alea = CInt((nreng - 1) * Rnd())
For ki = 0 To ncolu - 1
Xaux(ii).Porcentaje(ki) += Xn(alea).Porcentaje(ki)
suma += Xn(alea).Porcentaje(ki)
Next
Next
For ki = 0 To ncolu - 1
Xaux(ii).Porcentaje(ki) /= suma
Next
135
Next
'obtener rendimientos y variaciones despues de aplicra los priterios de selección
obtenerRendyVar()
For i = 0 To nreng - 1
If ((Xaux(i).Rendimiento < RendEsp) Or (Xaux(i).Rendimiento >
RendEspMax)) Then
Xaux(i).Penalizacion += 0.5
End If
Next
End If
End Sub
Public Sub nuevaPoblacion()
Dim i, j, g As Integer
For i = 0 To nreng - 1
For j = 0 To ncolu - 1
Xn(i).Porcentaje(j) = Xi(i).Porcentaje(j)
Xn(i).Nombres(j) = Xi(i).Nombres(j)
Xn(i).VecRend(j) = Xi(i).VecRend(j)
For g = 0 To ncolu - 1
Xn(i).MatCov(j, g) = Xi(i).MatCov(j, g)
Next
Next
Xn(i).Rendimiento = Xi(i).Rendimiento
Xn(i).Variacion = Xi(i).Variacion
Xn(i).DesvEst = Xi(i).DesvEst
Xn(i).Penalizacion = Xi(i).Penalizacion
Next
End Sub
Public Sub nuevaPoblacion2()
Dim i, j, kk As Integer 'Índices o Contadores
For i = 0 To nreng - 1
For j = 0 To ncolu - 1
Xn(i).Porcentaje(j) = Xaux(i).Porcentaje(j)
Xn(i).Nombres(j) = Xaux(i).Nombres(j)
Xn(i).VecRend(j) = Xaux(i).VecRend(j)
For kk = 0 To ncolu - 1
Xn(i).MatCov(j, kk) = Xaux(i).MatCov(j, kk)
Next
Next
Xn(i).Rendimiento = Xaux(i).Rendimiento
Xn(i).Variacion = Xaux(i).Variacion
Xn(i).DesvEst = Xaux(i).DesvEst
Xn(i).Penalizacion = Xaux(i).Penalizacion
Next
End Sub
Public Sub penaliza()
Dim io, jo As Integer
'Restriccion que hace que si el porcentaje invertido en el activo i no esta dentro del
136
' rango deseado entonces se penaliza con un 25% sobre la variacion por cada uno
de los
' activos en que incumpla
For io = 0 To nreng - 1
For jo = 0 To ncolu - 1
If ((Xaux(io).Porcentaje(jo) < xmin) Or (Xaux(io).Porcentaje(jo) > xmax))
Then
Xaux(io).Variacion += 0.25
End If
Next
Next
For io = 0 To nreng - 1
If ((Xaux(io).Rendimiento < RendEsp) Or (Xaux(io).Rendimiento >
RendEspMax)) Then
Xaux(io).Variacion += Xaux(io).Penalizacion
End If
Xaux(io).DesvEst = Xaux(io).Variacion ^ 0.5
Xaux(io).Penalizacion = 0
Xi(io).Penalizacion = 0
Xn(io).Penalizacion = 0
Next
End Sub
Public Sub penalizaITERACION_CERO()
Dim io, jo As Integer
'Restriccion que hace que si el porcentaje invertido en el activo i no esta dentro del
' rango deseado entonces se penaliza con un 25% sobre la variacion por cada uno
de los
' activos en que incumpla
For io = 0 To nreng - 1
For jo = 0 To ncolu - 1
If ((Xn(io).Porcentaje(jo) < xmin) Or (Xn(io).Porcentaje(jo) > xmax)) Then
Xn(io).Variacion += 0.25
End If
Next
Next
For io = 0 To nreng - 1
If ((Xn(io).Rendimiento < RendEsp) Or (Xn(io).Rendimiento > RendEspMax))
Then
Xn(io).Variacion += Xn(io).Penalizacion
End If
Xn(io).DesvEst = Xn(io).Variacion ^ 0.5
Xn(io).Penalizacion = 0
Next
End Sub
Public Sub obtenerRendyVar()
Dim io, jo, ko As Integer
For io = 0 To nreng - 1
Xaux(io).Rendimiento = 0
Xaux(io).Variacion = 0
137
Next
For io = 0 To nreng - 1
For jo = 0 To ncolu - 1
Xaux(io).Rendimiento += (Xaux(io).VecRend(jo) * Xaux(io).Porcentaje(jo))
For ko = 0 To ncolu - 1
Xaux(io).Variacion += (Xaux(io).MatCov(ko, jo) *
Xaux(io).Porcentaje(ko) * Xaux(io).Porcentaje(jo))
Next
Next
Next
End Sub
Public Sub ordena()
Dim m, n As Integer
Dim i, j As Integer 'Índices o Contadores
Dim temporal As Double
Dim tempoNom As String
'For i = 0 To nreng - 1
'For j = 0 To nreng - 2
For i = 1 To nreng - 1
For j = 0 To nreng - 2
If Xn(j).Variacion >= Xn(j + 1).Variacion Then
temporal = Xn(j).Variacion
Xn(j).Variacion = Xn(j + 1).Variacion
Xn(j + 1).Variacion = temporal
temporal = Xn(j).DesvEst
Xn(j).DesvEst = Xn(j + 1).DesvEst
Xn(j + 1).DesvEst = temporal
temporal = Xn(j).Rendimiento
Xn(j).Rendimiento = Xn(j + 1).Rendimiento
Xn(j + 1).Rendimiento = temporal
For m = 0 To ncolu - 1
temporal = Xn(j).Porcentaje(m)
Xn(j).Porcentaje(m) = Xn(j + 1).Porcentaje(m)
Xn(j + 1).Porcentaje(m) = temporal
tempoNom = Xn(j).Nombres(m)
Xn(j).Nombres(m) = Xn(j + 1).Nombres(m)
Xn(j + 1).Nombres(m) = tempoNom
temporal = Xn(j).VecRend(m)
Xn(j).VecRend(m) = Xn(j + 1).VecRend(m)
Xn(j + 1).VecRend(m) = temporal
For n = 0 To ncolu - 1
temporal = Xn(j).MatCov(m, n)
Xn(j).MatCov(m, n) = Xn(j + 1).MatCov(m, n)
138
Xn(j + 1).MatCov(m, n) = temporal
Next
Next
End If
Next
Next
End Sub
Public Sub LlenaCartera(ByVal x As Integer)
Randomize()
Dim i, j As Integer 'Índices o Contadores
cuentaParaSalir = 0
Do
auxiliarLlenaCartera(x)
cuentaParaSalir += 1
Loop Until (((Xi(x).Rendimiento >= RendEsp) And (Xi(x).Rendimiento <=
RendEspMax)) Or (cuentaParaSalir = limCuentaParaSalir)) 'LIMITE INFERIOR Y
SUPERIOR
If cuentaParaSalir = limCuentaParaSalir Then
cuentaErrores += 1
Xi(x).Penalizacion += 0.5 'Le sumo una vario con grande para sacarlo de la
poblacion optima
End If
For j = 0 To ncolu - 1
For i = 0 To ncolu - 1
Xi(x).Variacion += (Xi(x).MatCov(i, j) * Xi(x).Porcentaje(i) *
Xi(x).Porcentaje(j))
Next
Xi(x).DesvEst = (Xi(x).Variacion) ^ 0.5
Next
End Sub
Public Sub auxiliarLlenaCartera(ByVal x As Integer)
Randomize()
Dim Suma As Double = 0
Dim banana As Boolean = True
Dim aleN2(), aleN2aux(), escojeAlea() As Integer
Dim i, j, k As Integer
Dim aleatorio, aux As Integer
ReDim aleN2(nTotAct - 1)
ReDim aleN2aux(nTotAct - 1)
ReDim escojeAlea(ncolu - 1)
For i = 0 To nTotAct - 1
aleN2aux(i) = i
Next
For i = 0 To ncolu - 1
139
ReDim aleN2(nTotAct - 1 - i)
k=0
For j = 0 To nTotAct - 1
If aleN2aux(j) <> -1 Then
aleN2(k) = aleN2aux(j)
k += 1
End If
Next
aleatorio = Int(Rnd() * aleN2.Length)
escojeAlea(i) = aleN2(aleatorio)
aleN2aux(aleN2(aleatorio)) = -1
Next
'ordeno
For i = 1 To ncolu - 1
For j = 0 To ncolu - 2
If escojeAlea(j + 1) < escojeAlea(j) Then
aux = escojeAlea(j)
escojeAlea(j) = escojeAlea(j + 1)
escojeAlea(j + 1) = aux
End If
Next
Next
'lo pongo en forma del texto
For i = 0 To ncolu - 1
Xi(x).Nombres(i) = Nombres(escojeAlea(i))
Xi(x).VecRend(i) = vectorRend(escojeAlea(i))
For j = 0 To ncolu - 1
Xi(x).MatCov(i, j) = matrizCov(escojeAlea(i), escojeAlea(j))
Next
Next
'Vector aleatorios - creo aleatorios para cada uno de los activos
For i = 0 To ncolu - 1
Xi(x).Porcentaje(i) = Rnd() * Rnd()
Suma += Xi(x).Porcentaje(i)
Next
For i = 0 To ncolu - 1
Xi(x).Porcentaje(i) /= Suma
Next
'Rendimiento esperado de la cartera o portafolio
Xi(x).Rendimiento = 0
For i = 0 To ncolu - 1
Xi(x).Rendimiento += (Xi(x).VecRend(i) * Xi(x).Porcentaje(i))
Next
End Sub
Public Sub inicialPredeterminado()
Dim ver As New frmIngresoRR
With ver.spsIngresa.Sheets("Ingreso_Rendimientos")
140
.cells(1, 1) = "B5 años"
.cells(1, 2) = "B10 años"
.cells(1, 3) = "IPC"
.cells(1, 4) = "ICN"
.cells(1, 5) = "ICM"
.cells(1, 6) = "ICT"
.cells(1, 7) = "CEMEX"
.cells(1, 8) = "UNEFON"
.cells(1, 9) = "WALMEX.V"
.cells(2, 1) = "21.75%"
.cells(2, 2) = "18.35%"
.cells(2, 3) = "15.72%"
.cells(2, 4) = "18.74%"
.cells(2, 5) = "12.92%"
.cells(2, 6) = "16.26%"
.cells(2, 7) = "12.35%"
.cells(2, 8) = "-12.11%"
.cells(2, 9) = "19.96%"
End With
With ver.spsIngresa.Sheets("Ingreso_Matriz_Covarianzas")
.cells(1, 2) = "B5 años"
.cells(1, 3) = "B10 años"
.cells(1, 4) = "IPC"
.cells(1, 5) = "ICN"
.cells(1, 6) = "ICM"
.cells(1, 7) = "ICT"
.cells(1, 8) = "CEMEX"
.cells(1, 9) = "UNEFON"
.cells(1, 10) = "WALMEX.V"
.cells(2, 1) = "B5 años"
.cells(3, 1) = "B10 años"
.cells(4, 1) = "IPC"
.cells(5, 1) = "ICN"
.cells(6, 1) = "ICM"
.cells(7, 1) = "ICT"
.cells(8, 1) = "CEMEX"
.cells(9, 1) = "UNEFON"
.cells(10, 1) = "WALMEX.V"
.cells(2, 2) = ".012831774"
.cells(2, 3) = ".005916547"
.cells(2, 4) = "-.020663583"
.cells(2, 5) = "-.016686564"
.cells(2, 6) = "-.011005269"
.cells(2, 7) = "-.0244418"
.cells(2, 8) = "-.014456963"
.cells(2, 9) = "-.015137884"
.cells(2, 10) = ".003597833"
141
.cells(3, 2) = ".005916547"
.cells(3, 3) = ".007320869"
.cells(3, 4) = "-.007450093"
.cells(3, 5) = "-.004671657"
.cells(3, 6) = "-.003149685"
.cells(3, 7) = "-.009805214"
.cells(3, 8) = "-3.07126E-05"
.cells(3, 9) = "-.005936188"
.cells(3, 10) = ".002592824"
.cells(4, 2) = "-.020663583"
.cells(4, 3) = "-.007450093"
.cells(4, 4) = ".069298104"
.cells(4, 5) = ".07209848"
.cells(4, 6) = ".047995004"
.cells(4, 7) = ".076779292"
.cells(4, 8) = ".068042655"
.cells(4, 9) = ".024891741"
.cells(4, 10) = ".022317634"
.cells(5, 2) = "-.016686564"
.cells(5, 3) = "-.004671657"
.cells(5, 4) = ".07209848"
.cells(5, 5) = ".086191654"
.cells(5, 6) = ".049941969"
.cells(5, 7) = ".074952889"
.cells(5, 8) = ".072460074"
.cells(5, 9) = ".012483203"
.cells(5, 10) = ".022581556"
.cells(6, 2) = "-.011005269"
.cells(6, 3) = "-.003149685"
.cells(6, 4) = ".047995004"
.cells(6, 5) = ".049941969"
.cells(6, 6) = ".035627714"
.cells(6, 7) = ".053561608"
.cells(6, 8) = ".051004001"
.cells(6, 9) = ".01583398"
.cells(6, 10) = ".023035954"
.cells(7, 2) = "-.0244418"
.cells(7, 3) = "-.00985214"
.cells(7, 4) = ".076779292"
.cells(7, 5) = ".074952889"
.cells(7, 6) = ".053561608"
.cells(7, 7) = ".087351107"
.cells(7, 8) = ".074965373"
.cells(7, 9) = ".033254771"
.cells(7, 10) = ".026292038"
142
.cells(8, 2) = "-.014456963"
.cells(8, 3) = "-3.07126E-05"
.cells(8, 4) = ".068042655"
.cells(8, 5) = ".072460074"
.cells(8, 6) = ".051004001"
.cells(8, 7) = ".074965373"
.cells(8, 8) = ".075541326"
.cells(8, 9) = ".020247925"
.cells(8, 10) = ".033786739"
.cells(9, 2) = "-.015137884"
.cells(9, 3) = "-.005936188"
.cells(9, 4) = ".024891741"
.cells(9, 5) = ".012483203"
.cells(9, 6) = ".01583398"
.cells(9, 7) = ".033254771"
.cells(9, 8) = ".020247925"
.cells(9, 9) = ".020685681"
.cells(9, 10) = ".003467606"
.cells(10, 2) = ".003597833"
.cells(10, 3) = ".002592824"
.cells(10, 4) = ".022317634"
.cells(10, 5) = ".022581556"
.cells(10, 6) = ".023035954"
.cells(10, 7) = ".026292038"
.cells(10, 8) = ".033786739"
.cells(10, 9) = ".003467606"
.cells(10, 10) = ".025076281"
End With
ver.ShowDialog()
End Sub
Public Sub LlenoCarterasT1y2()
Dim im, jm, km As Integer
Select Case CuentaEscenarios
Case 0
For im = 0 To nreng - 1
For jm = 0 To ncolu - 1
X0(im).Porcentaje(jm) = Xn(im).Porcentaje(jm)
X0(im).Nombres(jm) = Xn(im).Nombres(jm)
X0(im).VecRend(jm) = Xn(im).VecRend(jm)
For km = 0 To ncolu - 1
X0(im).MatCov(jm, km) = Xn(im).MatCov(jm, km)
Next
Next
X0(im).Rendimiento = Xn(im).Rendimiento
X0(im).Variacion = Xn(im).Variacion
X0(im).DesvEst = Xn(im).DesvEst
Next
143
Case 1
For im = 0 To nreng - 1
For jm = 0 To ncolu - 1
X00(im).Porcentaje(jm) = Xn(im).Porcentaje(jm)
X00(im).Nombres(jm) = Xn(im).Nombres(jm)
X00(im).VecRend(jm) = Xn(im).VecRend(jm)
For km = 0 To ncolu - 1
X00(im).MatCov(jm, km) = Xn(im).MatCov(jm, km)
Next
Next
X00(im).Rendimiento = Xn(im).Rendimiento
X00(im).Variacion = Xn(im).Variacion
X00(im).DesvEst = Xn(im).DesvEst
Next
Case 2
For im = 0 To nreng - 1
For jm = 0 To ncolu - 1
X01(im).Porcentaje(jm) = Xn(im).Porcentaje(jm)
X01(im).Nombres(jm) = Xn(im).Nombres(jm)
X01(im).VecRend(jm) = Xn(im).VecRend(jm)
For km = 0 To ncolu - 1
X01(im).MatCov(jm, km) = Xn(im).MatCov(jm, km)
Next
Next
X01(im).Rendimiento = Xn(im).Rendimiento
X01(im).Variacion = Xn(im).Variacion
X01(im).DesvEst = Xn(im).DesvEst
Next
Case 3
For im = 0 To nreng - 1
For jm = 0 To ncolu - 1
X02(im).Porcentaje(jm) = Xn(im).Porcentaje(jm)
X02(im).Nombres(jm) = Xn(im).Nombres(jm)
X02(im).VecRend(jm) = Xn(im).VecRend(jm)
For km = 0 To ncolu - 1
X02(im).MatCov(jm, km) = Xn(im).MatCov(jm, km)
Next
Next
X02(im).Rendimiento = Xn(im).Rendimiento
X02(im).Variacion = Xn(im).Variacion
X02(im).DesvEst = Xn(im).DesvEst
Next
Case 4
For im = 0 To nreng - 1
For jm = 0 To ncolu - 1
X000(im).Porcentaje(jm) = Xn(im).Porcentaje(jm)
X000(im).Nombres(jm) = Xn(im).Nombres(jm)
X000(im).VecRend(jm) = Xn(im).VecRend(jm)
For km = 0 To ncolu - 1
144
X000(im).MatCov(jm, km) = Xn(im).MatCov(jm, km)
Next
Next
X000(im).Rendimiento = Xn(im).Rendimiento
X000(im).Variacion = Xn(im).Variacion
X000(im).DesvEst = Xn(im).DesvEst
Next
Case 5
For im = 0 To nreng - 1
For jm = 0 To ncolu - 1
X001(im).Porcentaje(jm) = Xn(im).Porcentaje(jm)
X001(im).Nombres(jm) = Xn(im).Nombres(jm)
X001(im).VecRend(jm) = Xn(im).VecRend(jm)
For km = 0 To ncolu - 1
X001(im).MatCov(jm, km) = Xn(im).MatCov(jm, km)
Next
Next
X001(im).Rendimiento = Xn(im).Rendimiento
X001(im).Variacion = Xn(im).Variacion
X001(im).DesvEst = Xn(im).DesvEst
Next
Case 6
For im = 0 To nreng - 1
For jm = 0 To ncolu - 1
X002(im).Porcentaje(jm) = Xn(im).Porcentaje(jm)
X002(im).Nombres(jm) = Xn(im).Nombres(jm)
X002(im).VecRend(jm) = Xn(im).VecRend(jm)
For km = 0 To ncolu - 1
X002(im).MatCov(jm, km) = Xn(im).MatCov(jm, km)
Next
Next
X002(im).Rendimiento = Xn(im).Rendimiento
X002(im).Variacion = Xn(im).Variacion
X002(im).DesvEst = Xn(im).DesvEst
Next
Case 7
For im = 0 To nreng - 1
For jm = 0 To ncolu - 1
X010(im).Porcentaje(jm) = Xn(im).Porcentaje(jm)
X010(im).Nombres(jm) = Xn(im).Nombres(jm)
X010(im).VecRend(jm) = Xn(im).VecRend(jm)
For km = 0 To ncolu - 1
X010(im).MatCov(jm, km) = Xn(im).MatCov(jm, km)
Next
Next
X010(im).Rendimiento = Xn(im).Rendimiento
X010(im).Variacion = Xn(im).Variacion
X010(im).DesvEst = Xn(im).DesvEst
Next
Case 8
145
For im = 0 To nreng - 1
For jm = 0 To ncolu - 1
X011(im).Porcentaje(jm) = Xn(im).Porcentaje(jm)
X011(im).Nombres(jm) = Xn(im).Nombres(jm)
X011(im).VecRend(jm) = Xn(im).VecRend(jm)
For km = 0 To ncolu - 1
X011(im).MatCov(jm, km) = Xn(im).MatCov(jm, km)
Next
Next
X011(im).Rendimiento = Xn(im).Rendimiento
X011(im).Variacion = Xn(im).Variacion
X011(im).DesvEst = Xn(im).DesvEst
Next
Case 9
For im = 0 To nreng - 1
For jm = 0 To ncolu - 1
X012(im).Porcentaje(jm) = Xn(im).Porcentaje(jm)
X012(im).Nombres(jm) = Xn(im).Nombres(jm)
X012(im).VecRend(jm) = Xn(im).VecRend(jm)
For km = 0 To ncolu - 1
X012(im).MatCov(jm, km) = Xn(im).MatCov(jm, km)
Next
Next
X012(im).Rendimiento = Xn(im).Rendimiento
X012(im).Variacion = Xn(im).Variacion
X012(im).DesvEst = Xn(im).DesvEst
Next
Case 10
For im = 0 To nreng - 1
For jm = 0 To ncolu - 1
X020(im).Porcentaje(jm) = Xn(im).Porcentaje(jm)
X020(im).Nombres(jm) = Xn(im).Nombres(jm)
X020(im).VecRend(jm) = Xn(im).VecRend(jm)
For km = 0 To ncolu - 1
X020(im).MatCov(jm, km) = Xn(im).MatCov(jm, km)
Next
Next
X020(im).Rendimiento = Xn(im).Rendimiento
X020(im).Variacion = Xn(im).Variacion
X020(im).DesvEst = Xn(im).DesvEst
Next
Case 11
For im = 0 To nreng - 1
For jm = 0 To ncolu - 1
X021(im).Porcentaje(jm) = Xn(im).Porcentaje(jm)
X021(im).Nombres(jm) = Xn(im).Nombres(jm)
X021(im).VecRend(jm) = Xn(im).VecRend(jm)
For km = 0 To ncolu - 1
X021(im).MatCov(jm, km) = Xn(im).MatCov(jm, km)
Next
146
Next
X021(im).Rendimiento = Xn(im).Rendimiento
X021(im).Variacion = Xn(im).Variacion
X021(im).DesvEst = Xn(im).DesvEst
Next
Case 12
For im = 0 To nreng - 1
For jm = 0 To ncolu - 1
X022(im).Porcentaje(jm) = Xn(im).Porcentaje(jm)
X022(im).Nombres(jm) = Xn(im).Nombres(jm)
X022(im).VecRend(jm) = Xn(im).VecRend(jm)
For km = 0 To ncolu - 1
X022(im).MatCov(jm, km) = Xn(im).MatCov(jm, km)
Next
Next
X022(im).Rendimiento = Xn(im).Rendimiento
X022(im).Variacion = Xn(im).Variacion
X022(im).DesvEst = Xn(im).DesvEst
Next
End Select
End Sub
Public Sub cambiarendimientosesperados()
Dim rang As Decimal = 0.005
Select Case CuentaEscenarios
Case 1
RendEsp = R00
RendEspMax = R00 + rang
Case 2
RendEsp = R01
RendEspMax = R01 + rang
Case 3
RendEsp = R02
RendEspMax = R02 + rang
Case 4
RendEsp = R000
RendEspMax = R000 + rang
Case 5
RendEsp = R001
RendEspMax = R001 + rang
Case 6
RendEsp = R002
RendEspMax = R002 + rang
Case 7
RendEsp = R010
RendEspMax = R010 + rang
Case 8
RendEsp = R011
RendEspMax = R011 + rang
Case 9
RendEsp = R012
147
RendEspMax = R012 + rang
Case 10
RendEsp = R020
RendEspMax = R020 + rang
Case 11
RendEsp = R021
RendEspMax = R021 + rang
Case 12
RendEsp = R022
RendEspMax = R022 + rang
End Select
End Sub
End Class
148
Descargar