Hola!!
Estoy intentado crear un sistema automático simple con el Momentum y la Media Móvil, pero tengo problemas a la hora de los cierres tanto en largos como en cortos.
¿Cómo puedo hacer que cierre una operación cuando la Media Móvil cruce al Momentum ?
Adjunto imagen.
Lo he intentado con las ordenes de Cruzar por encima, Cruzar por debajo, Mayo que, Menor que, …, pero sin el resultado deseado.
Un saludo y gracias.
Para probar el cruce de 2 valores, puede usar estas instrucciones: CRUCES SOBRE CRUCES BAJO Háganos saber si tiene problemas para usarlos en su propio código.
Hola Nicolas.
Lo he intentado con CRUCES SOBRE Y CRUCES BAJO. (No se si se puedes mezclar los dos a la vez). Pero no ha funcionado.
// Definición de los parámetros del código
DEFPARAM CumulateOrders = False // Acumulación de posiciones desactivada
// El sistema anulará todas las órdenes pendientes y cerrará todas las posiciones a las 0:00. No se permitirá ninguna nueva orden ni posición después de la hora "FLATBEFORE".
DEFPARAM FLATBEFORE = 080000
// Anular todas las órdenes pendientes y cerrar todas las posiciones a la hora "FLATAFTER"
DEFPARAM FLATAFTER = 180000
// Impide al sistema crear nuevas órdenes para entrar al mercado a aumentar el tamaño de la posición antes de una hora precisa
noEntryBeforeTime = 080000
timeEnterBefore = time >= noEntryBeforeTime
// Impide al sistema lanzar nuevas órdenes para entrar al mercado o aumentar el tamaño de la posición después de una hora precisa
noEntryAfterTime = 174500
timeEnterAfter = time < noEntryAfterTime
// Impide al sistema operar en días precisos de la semana
daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
// Condiciones para entrada de posiciones largas
indicator1 = ExponentialAverage[12](Momentum[12](close))
c1 = (indicator1 > 0)
indicator2 = ExponentialAverage[12](Momentum[12](close))
c2 = (indicator2 CROSSES OVER 0)
IF (c1 AND c2) AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry THEN
BUY 1 CONTRACT AT MARKET
ENDIF
// Condiciones de salida de posiciones largas
indicator3 = ExponentialAverage[12](Momentum[12](close))
indicator4 = Momentum[12](close)
c3 = (indicator3 CROSSES UNDER indicator4)
IF c3 THEN
SELL AT MARKET
ENDIF
// Condiciones de entrada de posiciones cortas
indicator5 = Momentum[12](close)
c4 = (indicator5 < 0)
indicator6 = ExponentialAverage[12](Momentum[12](close))
c5 = (indicator6 CROSSES UNDER 0)
IF (c4 AND c5) AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry THEN
SELLSHORT 1 CONTRACT AT MARKET
ENDIF
// Condiciones de salida de posiciones cortas
indicator7 = ExponentialAverage[12](Momentum[12](close))
indicator8 = Momentum[12](close)
c6 = (indicator7 CROSSES OVER indicator8)
IF c6 THEN
EXITSHORT AT MARKET
ENDIF
Mi intención como se puede ver en la imagen es usar los indicadores Momentum y MM.
Cuando el Momentum sea positivo (mayor que 0) y la media móvil cruce el valor 0, se abre una posición en largos (compra). [Hasta aquí Ok y funciona perfectamente el código]
Cuando La Media Móvil cruce el Momentum (ya sea cruce sobre o cruce bajo), se tendría que cerrar la operación. [Aquí es donde no consigo que funcione].
Lo mismo pero al revés, cuando es en cortos (compra).
Adjunto imagen de los dos tipos de entradas.
Un saludo y gracias.
Hola compañeros de la comunidad.
No se si alguien puede ayudarme con las salidas.
Un saludo.
Hola GraHal.
Si funciona bien las entradas, pero las salidas no.
En cuanto lo consiga solucionar, o me ayuden a solucionarlo, lo publicaré entero. Además del código ya escrito arriba, aun falta un indicador que mejora los resultados.
Yo trabajaba con Metatrader 4 y tenia el código escrito y funcionando. Pero ahora quiero trabajar con Prorealtime, mejorarlo y compartirlo.
No obstante. siempre he tenido que hacer pequeñas modificaciones en el código, ya que los mercados no siempre están igual.
Un saludo y gracias por probarlo.