Página 2 de 2

Publicado: 08 May 2006 10:40
por Elvys
Al ataque con el macd,cuando creas la condicion,en la plataforma visual no en la visual basic,se abre un cuadro donde se elige en este caso el indicador de macd,si quisieramos plasmar el indicador macd tal como se carga cuando lo hacemos en un grafico en la parte baja del mismo, creo y solo creo q la expresion es Indicador(MACDData) > Indicador(MACDData,0,2) donde el 2 se refiere a la linea de puntos.La linea roja y la barra en el primero no los indica por q es barra 0 y linea 1,si indicaramos alguna barra distinta de 0 ya si nos pondria tb linea 1.lo he automatizado rapidamente para comprobarlo y creo q es asi pero todavia estoy dormido y legañoso.echarle un vistazo.
Corman gracias por colgar el sistema,es para intradia segun veo no? donde te cierra la posicion antes del cierre del mercado no? con lo q la miga del sistema es solo las dos condiciones del macd y sus ordenes,colocandole stop de ganacias puede q la cosa cambie.saludos

Publicado: 08 May 2006 11:05
por hal8999
Indicador[MACDdata,A,B]

A: Nº de Barra para la que queremos saber el dato
0= actual
1= Barra anterior
2= Barra anteanterior, etc

B: Linea del indicador
1= Linea del oscilador (valor del Macd)
2= Linea de señal
3= Banda

Indicador[MACDdata,1,2] -> Valor de la linea de señal en la barra anterior.
Indicador[MACDdata,4,1] -> Valor del MACD hace cuatro barras.
Indicador[MACDdata,0,1] = Indicador[MACDdata]

Salvo error u omisión que estoy en rodaje con el VC

Publicado: 08 May 2006 13:18
por elchavo
Corman, si te han cobrado 60 euros por esa simpleza, desde luego es que los de VChart tienen una cara dura que se la pisan.

Publicado: 08 May 2006 20:16
por yoyova
Es mi primer mensaje en el foro y , aunque de programación en v. chart más bien poco, voy a probar a ver si puedo ayudar a karma21sl.
Si dejas el código como aparece aquí el sistema está comprando cuando hay un cruce de medias ,el problema es que durante una barra las medias pueden cruzarse varias veces y generar un monton de operaciones antes de que cierre esa barra :
'¡¡ Parameters
'Parameters !!
'¡¡ PDV parameters
Dim AvSimpleDataPeriodo As Long '30
Dim AvSimple1DataPeriodo As Long '100
Const Data As Long = 0
Const Data1 As Long = 1
'PDV parameters !!
'¡¡ PDV declarations
Dim AvSimpleData As Long
Dim AvSimple1Data As Long
'PDV declarations !!
Public APP As SysUserApp
Implements System
Public Sub System_OnInitCalculate()
With APP
'¡¡ PDV initializations
AvSimpleData = .GetIndicatorIdentifier(AvSimple, Data, AvSimpleDataPeriodo, PriceClose)
AvSimple1Data = .GetIndicatorIdentifier(AvSimple, Data, AvSimple1DataPeriodo, PriceClose)
.StartBar = 0
'PDV initializations !!
End With
End Sub
Public Sub System_OnCalculateBar(ByVal Bar As Long)
With APP
'¡¡ PDV code
If .GetIndicatorValue(AvSimpleData) >= .GetIndicatorValue(AvSimple1Data) Then
.Buy AtClose, 1
Else
.Sell AtClose, 1
End If
'PDV code !!
End With
End Sub
Public Sub System_OnSetParameters(ParamArray ParamList() As Variant)
'¡¡ Parameters initialization
AvSimpleDataPeriodo = ParamList(1)
AvSimple1DataPeriodo = ParamList(2)
'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 ""


Para evitarlo, el código debería ser algo parecido a ésto:

"If .GetIndicatorValue(AvSimpleData) > .GetIndicatorValue(AvSimple1Data) and GetIndicatorValue(AvSimpleData, 1) < .GetIndicatorValue(AvSimple1Data, 1)
.Buy atClose
else
.Sell atClose
end if
end if"

De esta forma lo que le estas diciendo al sistema es que si en la barra actual la media corta es mayor que la larga y en la barra anterior la media corta es menor que la larga, pues eso, que compre al cierre DE LA SIGUIENTE BARRA.

No se si me habré explicado bien con tanto corto y largo :D . Lo de los stops es otra historia y me parece que ya te han dado una solución por ahí
Suerte