II Curso de Programación. Sistema Tema 6
Continuamos con la publicación de los sistemas de ejemplo que estamos elaborando a través de nuestro 2º Curso de Programación para Visual Chart 5.
Sistema Tema 6. Sistema combinado Estocástico y MACD
Utilizamos este sistema para explicar cómo diseñar una estrategia que utilizara más de un indicador para definir las reglas de entrada. La idea fundamental consistía en explicar cómo guardar el signo de la tendencia en cada momento del indicador principal, en este caso, el indicador estocástico.
Además, explicábamos cómo evitar la generación de rentradas, es decir, la aparición de nuevos negocios respecto al mismo impulso (alcista o bajista).
Las reglas del sistema eran las siguientes:
1. Comprar cuando el estocástico venga de sobreventa y además el MACD marque tendencia alcista (MACD mayor que su media de señal).
2. Vender cuando el estocástico venga de sobrecompra y además el MACD marque tendencia bajista (MACD menor que su media de señal).
La idea es bastante sencilla: Queremos aprovechar las señales de giro del estocástico pero filtradas a través del MACD.
Para evitar pérdidas muy altas, incluimos en el sistema un stop de pérdida máxima.
El desarrollo de éste sistema sería el siguiente:
Código PDV
Código VBA
Sistema Tema 6. Sistema combinado Estocástico y MACD
Utilizamos este sistema para explicar cómo diseñar una estrategia que utilizara más de un indicador para definir las reglas de entrada. La idea fundamental consistía en explicar cómo guardar el signo de la tendencia en cada momento del indicador principal, en este caso, el indicador estocástico.
Además, explicábamos cómo evitar la generación de rentradas, es decir, la aparición de nuevos negocios respecto al mismo impulso (alcista o bajista).
Las reglas del sistema eran las siguientes:
1. Comprar cuando el estocástico venga de sobreventa y además el MACD marque tendencia alcista (MACD mayor que su media de señal).
2. Vender cuando el estocástico venga de sobrecompra y además el MACD marque tendencia bajista (MACD menor que su media de señal).
La idea es bastante sencilla: Queremos aprovechar las señales de giro del estocástico pero filtradas a través del MACD.
Para evitar pérdidas muy altas, incluimos en el sistema un stop de pérdida máxima.
El desarrollo de éste sistema sería el siguiente:
Código PDV
Código VBA
'¡¡ Parameters
Dim Periodo_STOC As Integer '14
Dim Sk_STOC As Integer '3
Dim Sd_STOC As Integer '3
Dim UpBand_STOC As Double '80
Dim LoBand_STOC As Double '20
Dim Periodo1_MACD As Integer '12
Dim Periodo2_MACD As Integer '26
Dim PeriodoSIG_MACD As Integer '9
Dim StopPerdidas As Double '50
'Parameters !!
Dim stkdata As DataIdentifier
Dim macddata As DataIdentifier
Dim crucestk As Integer
Option Explicit
Public APP As SysUserApp
Implements System
Public Sub System_OnInitCalculate()
With APP
stkdata = .GetIndicatorIdentifier(Stochastic, Data, Periodo_STOC, Sk_STOC, Sd_STOC, AvgExponential, 80, 20)
macddata = .GetIndicatorIdentifier(MACD, Data, Periodo1_MACD, Periodo2_MACD, PeriodoSIG_MACD, PriceClose, 0)
crucestk = 0
End With
End Sub
Public Sub System_OnCalculateBar(ByVal Bar As Long)
With APP
Dim skact As Double
Dim skant As Double
Dim macdact As Double
Dim mesigact As Double
Dim lanzae As Integer
Dim pentrada As Double
Dim pos_abierta As Integer
skact = .GetIndicatorValue(stkdata)
skant = .GetIndicatorValue(stkdata, 1)
macdact = .GetIndicatorValue(macddata)
mesigact = .GetIndicatorValue(macddata, 0, 2)
pos_abierta = .GetMarketPosition()
pentrada = .GetEntryPrice()
If (skact > LoBand_STOC And skant <= LoBand_STOC) Then
crucestk = -1
ElseIf (skact < UpBand_STOC And skant >= UpBand_STOC) Then
crucestk = 1
Else
crucestk = 0
End If
'reglas de entrada
If (.GetMarketPosition <> 1 And crucestk = -1) Then
If (macdact > mesigact) Then
.Buy AtStop, 1, .High()
pos_abierta = 1
pentrada = .High()
End If
End If
If (.GetMarketPosition <> -1 And crucestk = 1) Then
If (macdact < mesigact) Then
.Sell AtStop, 1, .Low()
pos_abierta = -1
pentrada = .Low()
End If
End If
'reglas de salida
If (pos_abierta = 1) Then
If (.GetMarketPosition() = 1 And .GetBarsSinceEntry() = 0) Then
crucestk = 0
End If
.ExitLong AtStop, 1, pentrada - StopPerdidas
ElseIf (pos_abierta = -1) Then
If (.GetMarketPosition() = -1 And .GetBarsSinceEntry() = 0) Then
crucestk = 0
End If
.ExitShort AtStop, 1, pentrada + StopPerdidas
End If
End With
End Sub
Comentarios
Publicar un comentario