Sistema Stop de Pérdidas con Máxima Perdida.
La pasada semana presentamos a nuestros usuarios un sistema con el cual poder estudiar las distintas clases de stoploss que podemos llegar a usar en nuestras estrategias.
Dejamos apartado el stop que usa un control de máxima pérdida diaria con el fin de estudiarlo con mayor detenimiento más adelante. A continuación, abordaremos este tema.
Estudio de la máxima pérdida
La idea que se persigue con este tipo de stop es la siguiente: El usuario cuenta con un parámetro de entrada al que hemos denominado PerdidaDiaria. Éste campo está especificado en puntos y determina el margen máximo de puntos que estamos dispuestos a aguantar durante la misma sesión. Alcanzado este margen, esperaremos a la sesión siguiente para poder operar de nuevo.
Lógicamente, esta idea sólo tiene sentido para operaciones intradiarias.
¿Cómo vamos a gestionar esto? Los pasos a seguir van a ser los siguientes:
1. Creamos una variable en la que guardaremos el acumulado ganancial del día.
2. Creamos una variable donde indicamos si en la sesión actual debemos de parar el sistema.
3. Creamos otra variable que guardará el valor de la posición del sistema en la barra anterior. Esto nos va a servir para comprobar si se produce un cambio de posición que nos avise de que una orden se ha cerrado.
4. Como hemos dicho, en cada barra hacemos un chequeo para ver si se ha cerrado una orden. Si pasa esto, aumentamos el contador ganancial:
Para los usuarios que no lo sepan, la función GetPositionProfit nos devuelve la ganancia de un negocio concreto. El valor (1) nos sirve para indicar que queremos la ganancia del último negocio cerrado.
Cabe destacar que el resultado de la función GetPositionProfit(1) se divide por el valor por punto (guardado en la variable VPP) con el fin de obtener todos los resultados en puntos. Si quisiéramos determinar los resultados en valor monetario, entonces no haríamos ésta traslación.
Si observamos el código, podemos ver además que se está controlando si el valor acumulado ha alcanzado el tope de pérdida permitido (hay que aclarar que pasamos a valor negativo este campo con la idea de que el parámetro no tenga que estar definido previamente en negativo).Si alcanza el tope, entonces pasamos a activar la variable PararDia. Esto dará lugar a que ya no haremos más operaciones hasta la siguiente sesión.
5. Puesto que ésta gestión monetaria sólo se hará para cada sesión, cada vez que se produce un cambio de día debemos reiniciar los datos para no acumular resultados de días anteriores:
6. El último punto consistirá en gestionar el stop de pérdidas. Si tenemos pérdidas acumuladas en el día actual, hay que controlar si la cantidad de puntos de pérdida por negocio supera a la cantidad de puntos de pérdida por sesión. Si sucede esto, entonces debemos disminuir la cantidad de puntos para ajustarnos al tope de pérdida permitido:
Conclusiones
En este ejemplo hemos visto un sencillo sistema de gestión monetaria que podemos incorporar a nuestro sistema. Esto nos puede permitir mejorar los resultados del mismo sin necesidad de tener que cambiar las reglas del sistema.
Por otro lado, existen infinidad de estudios relacionados con la gestión monetaria que son susceptibles de ser incorporados a cualquier sistema.
En posteriores entradas de éste blog, profundizaremos en algunos de estos tipos y veremos cómo repercuten en el resultado de los sistemas.
Dejamos apartado el stop que usa un control de máxima pérdida diaria con el fin de estudiarlo con mayor detenimiento más adelante. A continuación, abordaremos este tema.
Estudio de la máxima pérdida
La idea que se persigue con este tipo de stop es la siguiente: El usuario cuenta con un parámetro de entrada al que hemos denominado PerdidaDiaria. Éste campo está especificado en puntos y determina el margen máximo de puntos que estamos dispuestos a aguantar durante la misma sesión. Alcanzado este margen, esperaremos a la sesión siguiente para poder operar de nuevo.
Lógicamente, esta idea sólo tiene sentido para operaciones intradiarias.
¿Cómo vamos a gestionar esto? Los pasos a seguir van a ser los siguientes:
1. Creamos una variable en la que guardaremos el acumulado ganancial del día.
2. Creamos una variable donde indicamos si en la sesión actual debemos de parar el sistema.
3. Creamos otra variable que guardará el valor de la posición del sistema en la barra anterior. Esto nos va a servir para comprobar si se produce un cambio de posición que nos avise de que una orden se ha cerrado.
4. Como hemos dicho, en cada barra hacemos un chequeo para ver si se ha cerrado una orden. Si pasa esto, aumentamos el contador ganancial:
'cada vez que se cierra una nueva compra, actualizamos la ganancia diaria
If Lastgmp <> gmp And Lastgmp = 1 Then
GanTotalDia = GanTotalDia + (.GetPositionProfit(1) / VPP)
'chequeamos si se ha superado la perdida máxima
If GanTotalDia <= -1 * PerdidaDiaria Then
'no permitimos comprar más ese día
PararDia = True
End If
End If
Para los usuarios que no lo sepan, la función GetPositionProfit nos devuelve la ganancia de un negocio concreto. El valor (1) nos sirve para indicar que queremos la ganancia del último negocio cerrado.
Cabe destacar que el resultado de la función GetPositionProfit(1) se divide por el valor por punto (guardado en la variable VPP) con el fin de obtener todos los resultados en puntos. Si quisiéramos determinar los resultados en valor monetario, entonces no haríamos ésta traslación.
Si observamos el código, podemos ver además que se está controlando si el valor acumulado ha alcanzado el tope de pérdida permitido (hay que aclarar que pasamos a valor negativo este campo con la idea de que el parámetro no tenga que estar definido previamente en negativo).Si alcanza el tope, entonces pasamos a activar la variable PararDia. Esto dará lugar a que ya no haremos más operaciones hasta la siguiente sesión.
5. Puesto que ésta gestión monetaria sólo se hará para cada sesión, cada vez que se produce un cambio de día debemos reiniciar los datos para no acumular resultados de días anteriores:
'cambio de día inicializa la ganancia total
If .Date <> .Date(1) Then
GanTotalDia = 0
PararDia = False
End If
6. El último punto consistirá en gestionar el stop de pérdidas. Si tenemos pérdidas acumuladas en el día actual, hay que controlar si la cantidad de puntos de pérdida por negocio supera a la cantidad de puntos de pérdida por sesión. Si sucede esto, entonces debemos disminuir la cantidad de puntos para ajustarnos al tope de pérdida permitido:
If gmp = 1 Then
'si tenemos pérdida controlamos los puntos de stop máximos
If GanTotalDia < 0 Then
'calculamos la diferencia de lo que me queda por perder
DIF = PerdidaDiaria + GanTotalDia
'si esa dif es inferior a los puntos stop, lanzamos la orden a ese nivel
If DIF < StopLoss Then
PrecioStop = gep - DIF
Else
'si no, seleccionamos el stoploss
PrecioStop = gep - StopLoss
End If
Else
'si vamos ganando se coloca la orden al nivel del stop
PrecioStop = gep - StopLoss
End If
'lanzamos la orden al valor guardado
.ExitLong AtStop, 1, PrecioStop
End If
Conclusiones
En este ejemplo hemos visto un sencillo sistema de gestión monetaria que podemos incorporar a nuestro sistema. Esto nos puede permitir mejorar los resultados del mismo sin necesidad de tener que cambiar las reglas del sistema.
Por otro lado, existen infinidad de estudios relacionados con la gestión monetaria que son susceptibles de ser incorporados a cualquier sistema.
En posteriores entradas de éste blog, profundizaremos en algunos de estos tipos y veremos cómo repercuten en el resultado de los sistemas.
Comentarios
Publicar un comentario
¡Gracias!