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

'¡¡ 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

Entradas populares de este blog

Como consultar el GAP % de un conjunto de valores

MANEJO DE PLANTILLAS. Eliminar plantilla de un gráfico activa

Estudio de las divergencias en el RSI