Hola. Utilizo un sistema con dos medias móviles simples de 5 y de 10. El sistema va a contratendencia. O sea cuando el precio supera ambas medias móviles, vendo, y cuando el precio está por debajo de ambas medias móviles, compro. Coloco un stop de 20 puntos. Necesito añadir una condición para que cuando me salta el stop, no se produzca un nueva compra hasta que el precio haya cruzado las medias de nuevo, para así evitar que en una subida o caida importante me esté comprando o vendiendo continuamente produciendo perdidas considerables. Espero que haya quedado suficientemente claro. Agradecería si alguien puede ayudarme. Muchas gracias de antemano.
// Definición de los parámetros del código
DEFPARAM CumulateOrders = False // Acumulación de posiciones desactivada
// Condiciones para entrada de posiciones largas
indicator1 = ExponentialAverage[5](close)
c1 = (close < indicator1)
indicator2 = Average[10](close)
c2 = (close < indicator2)
IF c1 AND c2 THEN
BUY 1 CONTRACT AT MARKET
ENDIF
// Condiciones de salida de posiciones largas
indicator3 = ExponentialAverage[5](close)
c3 = (close > indicator3)
indicator4 = Average[10](close)
c4 = (close > indicator4)
IF c3 AND c4 THEN
SELL AT MARKET
ENDIF
// Condiciones de entrada de posiciones cortas
indicator5 = ExponentialAverage[5](close)
c5 = (close > indicator5)
indicator6 = Average[10](close)
c6 = (close > indicator6)
IF c5 AND c6 THEN
SELLSHORT 1 CONTRACT AT MARKET
ENDIF
// Condiciones de salida de posiciones cortas
indicator7 = ExponentialAverage[5](close)
c7 = (close < indicator7)
indicator8 = Average[10](close)
c8 = (close < indicator8)
IF c7 AND c8 THEN
EXITSHORT AT MARKET
ENDIF
// Stops y targets
SET STOP pLOSS 20
SET TARGET pPROFIT 50
Pruebe este (no probado):
// Definición de los parámetros del código
DEFPARAM CumulateOrders = False // Acumulación de posiciones desactivada
ONCE TradeON = 1
IF StrategyProfit < StrategyProfit[1] THEN
TradeON = 0
ENDIF
// Condiciones para entrada de posiciones largas
indicator1 = ExponentialAverage[5](close)
c1 = (close < indicator1)
indicator2 = Average[10](close)
c2 = (close < indicator2)
Cross1 = c1 CROSSES OVER c2
IF Cross1 THEN
TradeON = 1
ENDIF
IF c1 AND c2 AND TradeON THEN
BUY 1 CONTRACT AT MARKET
ENDIF
// Condiciones de salida de posiciones largas
indicator3 = ExponentialAverage[5](close)
c3 = (close > indicator3)
indicator4 = Average[10](close)
c4 = (close > indicator4)
IF c3 AND c4 THEN
SELL AT MARKET
ENDIF
// Condiciones de entrada de posiciones cortas
indicator5 = ExponentialAverage[5](close)
c5 = (close > indicator5)
indicator6 = Average[10](close)
c6 = (close > indicator6)
Cross2 = c5 CROSSES UNDER c6
IF Cross2 THEN
TradeON = 1
ENDIF
IF c5 AND c6 AND TradeON THEN
SELLSHORT 1 CONTRACT AT MARKET
ENDIF
// Condiciones de salida de posiciones cortas
indicator7 = ExponentialAverage[5](close)
c7 = (close < indicator7)
indicator8 = Average[10](close)
c8 = (close < indicator8)
IF c7 AND c8 THEN
EXITSHORT AT MARKET
ENDIF
// Stops y targets
SET STOP pLOSS 20
SET TARGET pPROFIT 50
Necesito que una vez que salte el stop no se produzca ninguna compra hasta que el precio no cruce ambas medias. Con esto creo que solo lo evita al cruzar una. O sea no puede haber dos compras o ventas seguidas en el mismo sentido nunca. Quizás sea más fácil programar así, dando una orden de que no no se pueden producir dos compras seguidas en el mismo sentido. Es una idea.
Lo siento, entendí mal su solicitud.
Reemplace la línea 12 con:
Cross1 = (close CROSSES UNDER indicator1 AND close < indicator2) OR (close CROSSES UNDER indicator2 AND close < indicator1) OR (close CROSSES UNDER indicator1 AND close CROSSES UNDER indicator2)
y línea 35 con:
Cross2 = (close CROSSES OVER indicator5 AND close > indicator6) OR (close CROSSES OVER indicator6 AND close > indicator5) OR (close CROSSES OVER indicator5 AND close CROSSES OVER indicator6)
Esta es la versión que no permite más de una operación en la misma dirección:
// Definición de los parámetros del código
DEFPARAM CumulateOrders = False // Acumulación de posiciones desactivada
ONCE TradeLong = 1
ONCE TradeShort = 1
// Condiciones para entrada de posiciones largas
indicator1 = ExponentialAverage[5](close)
c1 = (close < indicator1)
indicator2 = Average[10](close)
c2 = (close < indicator2)
IF c1 AND c2 AND TradeLong AND Not OnMarket THEN
BUY 1 CONTRACT AT MARKET
TradeLong = 0
TradeShort = 1
ENDIF
// Condiciones de salida de posiciones largas
indicator3 = ExponentialAverage[5](close)
c3 = (close > indicator3)
indicator4 = Average[10](close)
c4 = (close > indicator4)
IF c3 AND c4 THEN
SELL AT MARKET
ENDIF
// Condiciones de entrada de posiciones cortas
indicator5 = ExponentialAverage[5](close)
c5 = (close > indicator5)
indicator6 = Average[10](close)
c6 = (close > indicator6)
IF c5 AND c6 AND TradeShort AND Not OnMarket THEN
SELLSHORT 1 CONTRACT AT MARKET
TradeLong = 1
TradeShort = 0
ENDIF
// Condiciones de salida de posiciones cortas
indicator7 = ExponentialAverage[5](close)
c7 = (close < indicator7)
indicator8 = Average[10](close)
c8 = (close < indicator8)
IF c7 AND c8 THEN
EXITSHORT AT MARKET
ENDIF
// Stops y targets
SET STOP pLOSS 20
SET TARGET pPROFIT 50
No se consigue con ese cambio. Si lo pruebas por ejemplo en Euro-Dolar en un día como ayer, que fue de una fuerte subida, no puedes evitar que se compre una posición cada vez que salta el stop.
¿Qué marco de tiempo usas?
Probé con EurUsd, un plazo de 15 minutos, y todas las operaciones parecen buenas. Entraron en LARGO cuando el precio estaba por debajo de ambos promedios y no entraron en un nuevo comercio en la misma dirección hasta que ocurrió un nuevo cruce. Si encontró algunas transacciones incorrectas, ¿informará el día y la hora de la vela cuando ingresaron las transacciones? Gracias.
Te envío una captura de pantalla de los resultados de estos tres últimos días. Como verás salta el stop varias veces seguidas, que es lo que pretendo evitar.
Es por sus condiciones de exir, en las líneas 37-45. No espera a que se alcancen las ganancias o pérdidas, cuando las condiciones se invierten, se detiene. Debe cambiar sus condiciones para salir, o usar solo pips para salir, sin preocuparse por los cruces inversos.
Hola Roberto…opero en DAX y con Acciones de EEU, hay determinadas estrategias que aplico en forma manual y quisiera hacerte unas consultas para respecto a la programación de Pro Real Time (la estoy probando desde hace un tiempo, pero en algunos detalles no puedo avanzar)..Es posible realizarte consulta por aqui..?
Gracias. Saludos
Lisandro
Sí, solo pregunta y trataré de ayudarte lo antes posible.