En dicho artículo, comentamos que en ciertas ocasiones nos puede interesar operar en la misma dirección en ambos subyacentes. Veamos a continuación cómo poder llevar a cabo este proceso.
Ejemplo práctico
En el ejemplo que pusimos, teníamos los futuros de BBVA y Telefónica, a los que les habíamos aplicado el SpreadOscillatorVBA.
En la ventana secundaria operábamos sobre el futuro de Telefónica, de modo que se generaban las operaciones inversas.
Pues bien, si quisiéramos lanzar la misma orden que enviamos sobre el futuro de BBVA, procederíamos en función de los siguientes pasos:
Paso 1
Modificamos el sistema añadiendo un parámetro de entrada al que llamamos EsInverso.
'¡¡ Summary
' Classification: User
'Summary !!
'¡¡ Parameters
Dim Contratos As Integer '1
Dim EsInverso As Integer '0
'Parameters !!
Dim PctSpreadData As DataIdentifier
Dim BollData As DataIdentifier
EsInverso servirá para informar al sistema acerca de la ventana sobre la que está aplicado: Cuando está aplicado a la ventana principal, especificaremos para este parámetro el valor cero. Cuando está aplicado a la ventana secundaria, cambiaremos el valor a uno.
Dentro de las reglas del sistema, haríamos la siguiente modificación:
Este método le permite al sistema ejecutar la orden correcta en función del subyacente sobre el que esté operando.
Paso 3
Aplicar el sistema en cada una de las ventanas cambiando el valor del parámetro EsInverso.
Gracias al cambio que hemos realizado, ahora, cada vez que aparece una nueva señal, el sistema ejecuta la orden con el mismo signo en ambos subyacentes.
PCTSP = .GIV(PctSpreadData): PCTSP2 = .GIV(PctSpreadData, 1, 1)
BOLLMED = .GIV(BollData)
BOLLSUP = .GIV(BollData, 0, 2): BOLLSUP2 = .GIV(BollData, 1, 2)
BOLLINF = .GIV(BollData, 0, 3): BOLLINF2 = .GIV(BollData, 1, 3)
If PCTSP > BOLLMED Then
If EsInverso = 0 Then
If .GetMarketPosition = 1 Then .ExitLong AtClose, Contratos
Else
If .GetMarketPosition = -1 Then .ExitShort AtClose, Contratos
End If
ElseIf PCTSP < BOLLMED Then
If EsInverso = 0 Then
If .GetMarketPosition = -1 Then .ExitShort AtClose, Contratos
Else
If .GetMarketPosition = 1 Then .ExitLong AtClose, Contratos
End If
End If
If PCTSP > BOLLSUP And PCTSP2 > BOLLSUP2 Then
If EsInverso = 0 Then
If .GetMarketPosition <> -1 Then .Sell AtClose, Contratos
Else
If .GetMarketPosition <> 1 Then .Buy AtClose, Contratos
End If
ElseIf PCTSP < BOLLINF And PCTSP2 < BOLLINF2 Then
If EsInverso = 0 Then
If .GetMarketPosition <> 1 Then .Buy AtClose, Contratos
Else
If .GetMarketPosition <> -1 Then .Sell AtClose, Contratos
End If
End If
Este método le permite al sistema ejecutar la orden correcta en función del subyacente sobre el que esté operando.
Paso 3
Aplicar el sistema en cada una de las ventanas cambiando el valor del parámetro EsInverso.
Gracias al cambio que hemos realizado, ahora, cada vez que aparece una nueva señal, el sistema ejecuta la orden con el mismo signo en ambos subyacentes.
No hay comentarios:
Publicar un comentario