Buenos días,
Soy nuevo en el foro y en la programación de sistemas de trading, pero creo que estoy aprendiendo rápido, estudiando los códigos de quienes saben más. Estoy haciendo un sistema de martingala “suave”, que entra una vez al día, estrictamente intradiario -timeframe de un minuto- y en el que he limitado las pérdidas diarias a 34 € (no pips, €). La martingala consiste en que cada vez que pierde, añade uno al positionsize de modo que, despues de perder 24 días consecutivos, por ejemplo, entra con 24 contratos. No me preocupa eso, porque para ese supuesto las pérdidas acumuladas no habrán llegado a 800 €, y el beneficio de la próxima vez que gane lo multiplicará por 2,5 o 3 pero, por razones de distribuir el riesgo y limitar el capital inmovilizado (trabajo con CFD, apalancado un 5%) quisiera que, cuando llegue a 24 por ejemplo, me reduzca la posición a-por ejemplo- 10 y siga sumando. Ya sé que en el prorealorder puedo limitar el número máximo de contratos, pero no quisiera que se pare o se bloquee el sistema, sino controlarlo desde el código.
¿Alguna idea? Gracias
Hola pruiz61,
Bienvenido al foro. Yo estoy familiarizado con la Martingala y con todas esas estrategias tan poco “ortodoxas”.
Yo tengo una formula que te puede solucionar el problema, pero es muy rudimentaria y ocupa sitio, aunque si te soluciona el problema ¿Que son diez minutos más programando??
// Positioning
ganada1 = positionperf(1)>0
perdida1 = positionperf(1)<0
perdida2 = positionperf(1)<0 and positionperf(2)<0
perdida3 = positionperf(1)<0 and positionperf(2)<0 and positionperf(3)<0
perdida4 = positionperf(1)<0 and positionperf(2)<0 and positionperf(3)<0 and positionperf(4)<0
// Y asi seguimos hasta la positionperf(24)..
perdida24 = positionperf(1)<0 and positionperf(2)<0 and positionperf(3)<0 and positionperf(4)<0 and positionperf(5)<0......
ONCE positionsize=1
IF ganada1 THEN
positionsize=1
ENDIF
IF perdida1 THEN
positionsize=1.5
ENDIF
IF perdida2 THEN
positionsize=2
ENDIF
IF perdida3 THEN
positionsize=3
ENDIF
IF perdida4 THEN
positionsize=4
ENDIF
// Y asi seguimos hasta la operación 24
IF perdida24 THEN
positionsize=10
ENDIF
Es como te digo muy rudimentario, pero te puede servir
Saludos
Gracias Juan,
Después de escribir mi mensaje encontré la solución que buscaba, con algo tan simple como añadir la condición de que sólo incrementase una posición si no se había alcanzado determinado tamaño, y a partir de ahí quedaba congelada. Pero tu código me sugiere perspectivas más refinadas.
Un saludo y reitero el agradecimiento
Hola Buenas tardes,
He estado repasando mensajes y veo que usted en su día programaba martingalas, yo estoy intentando programar una entrada en corto con orden de acumulación, y consigo que entre en corto hasta la 5 vela, que es lo que puesto.
Bien, lo que quiero es entrar con 5 posiciones e ir reduciendo, es decir, primera entrada entro con 5, segunda entrada entro con 4, así sucesivamente.
No sé si es muy dificil de programar,
Muchas gracias de antemano
// Definición de los parámetros del código
DEFPARAM CumulateOrders = True // Acumulación de posiciones desactivada
// Condiciones de entrada de posiciones cortas
indicator2, indicator1 = CALL "PRC_Top Bottom Indicator"[14, 14]
c1 = (indicator1 > indicator2)
indicator3 = CALL "butter prorealcode"
indicator4 = CALL "butter prorealcode"
c2 = (indicator3 < indicator4[1])
indicator5 = CALL "butter prorealcode"
indicator6 = ExponentialAverage[14](close)
c3 = (indicator5 < indicator6)
IF c1 AND c2 AND c3 THEN
SELLSHORT 1 SHARES AT MARKET
ENDIF
// Condiciones de salida de posiciones cortas
indicator7, indicator8 = CALL "PRC_Top Bottom Indicator"[14,14]
c4 = (indicator7 > indicator8)
IF c4 THEN
EXITSHORT AT MARKET
ENDIF
IF ShortOnMarket AND CountOfShortShares >= 5 THEN
EXITSHORT AT MARKET
ENDIF