Buenos días,
Te envío el código, lo quería enviar como adjunto pero ni idea de como se hace.
En un código en VBA para VC. Suerte!
'¡¡ Summary
' Classification: User
'Summary !!
'¡¡ Parameters
Dim PeriodoME As Integer '6
Dim PeriodoMSimple As Integer '6
Dim porcentajeEntrada As Single '0.7
Dim porcentajeSalida As Single '0.7
Dim OrigenPrecios As Price
'Parameters !!
Option Explicit
Dim ML As DataIdentifier
Dim MR As DataIdentifier
Dim CondicionEntradaLargos As Boolean
Dim CondicionEntradaCortos As Boolean
Public APP As SysUserApp
Implements System
Public Sub System_OnInitCalculate()
With APP
.StartBar = PeriodoMSimple
'Si quitas la comilla activarás la opción correspondiente, poniendo una comilla la desactivas. TIENES AHORA EL SISTEMA CON UN MEDIA SIMPLE
'Ahora te funciona con la media simple que es la ML
' Si quieres una media exponencial tienes que activar la línea del código, eliminando la comilla y colocar una comilla delante de la siguiente línea.
ML = .GII(AvSimple, Data, PeriodoMSimple, OrigenPrecios)
'MR = .GII(AvExponential, Data, PeriodoME, OrigenPrecios)
End With
End Sub
Public Sub System_OnCalculateBar(ByVal Bar As Long)
With APP
'===================Entrada===========================
'Si quitas la comilla activarás la opción correspondiente, poniendo una comilla la desactivas, he colocado el close, si crees que debe ser más correcto el
'máximo pon .high en lugar del .close
If .GetMarketPosition <> 1 And .Close * (1 + (porcentajeEntrada / 100)) > .GIV(ML, 0, 1) Then .Buy AtClose, 1
'If .GetMarketPosition <> 1 And .Close * (1 + (porcentajeEntrada / 100)) > .GIV(MR, 0, 1) Then .Buy AtClose, 1
'============================Salida====================
'Aquí si quieres considerar en lugar de un cierre un mínimo, sustituye en .close por un .low (No te olvides de los puntos)
'Si desactivas ML(la primera línea del código desactiva también esta colocando una comilla delante
If .GetMarketPosition = 1 And .Close * (1 - (porcentajeSalida / 100)) < .GIV(ML, 0, 1) Then .ExitLong AtClose, 1
'Si activas MR tienes que desactivar la línea anterior y activar la línea siguiente a esta.
'If .GetMarketPosition = 1 And .Close * (1 - (porcentajeSalida / 100)) < .GIV(MR, 0, 1) Then .ExitLong AtClose, 1
End With
End Sub
Public Sub System_OnSetParameters(ParamArray ParamList() As Variant)
'¡¡ Parameters initialization
PeriodoME = ParamList(1)
PeriodoMSimple = ParamList(2)
porcentajeEntrada = ParamList(3)
porcentajeSalida = ParamList(4)
OrigenPrecios = ParamList(5)
'Parameters initialization !!
End Sub
Public Sub System_OnCalculateRange(ByVal StartBar As Long, ByVal FinalBar As Long)
Dim i As Long
i = APP.StartBar
If StartBar > i Then
i = StartBar
End If
While Not APP.ShouldTerminate And i <= FinalBar
APP.CurrentBar = i
System_OnCalculateBar i
i = i + 1
Wend
End Sub
Private Sub SysUserAppInstance_OnConnection(ByVal Application As SysUserApp, ByVal MTDllInst As Object, Custom() As Variant)
Set APP = Application
End Sub