Buenas tardes, adjunto un código de un sistema que no me acaba de hacer lo que quiero en varios aspectos, dentro del código precedido de // van los problemas.
- En cuanto a la instrucción DEFPARM FlaterAfter, quiero que a partir de las 13:00 horas no abra más operaciones pero que mantenga las ya abiertas hasta que se produzcan las condiciones de cierre o, en caso contrario, la cierre a las 17:30.
- c2 = (range > ind2), en cuanto a la condición 2, quiero que se active la orden de compra cuando haya una vela que su rango englobe a la EMA.
- Quiero añadir otra condición (c3) que una vez se haya generado una compra y se cierre por cumplir alguna de las condiciones de salida, no vuelve a abrir nueva posición hasta que se produzca lo que yo llamo un “RESET”, en este caso que el MACD cruce 0 a la baja y posteriormente lo vuelva a cruzar al alza.
- Por último, en el cierre de las compras, basado en un indicador externo “Kase Dev Stop”, quiero que la orden stop vaya moviendose con el indicador, pero debido a que este indicador se mueve alternativamente arriba y abajo, quiero que la orden stop de salida, se mantenga en el punto máximo marcado y no descienda cuando lo haga el indicador, solo se modifique mientras el indicador va subiendo.
Adjunto código, a ver si alguien me puede ayudar. Muchas gracias
DEFPARAM CumulateOrders=False
//solo operar desde esta hora hasta….
DEFPARAM FlatBefore = 080000
DEFPARAM FlatAfter = 130000
// esta hora OJO que cierra todas las posiciones abiertas, yo solo quiero que no abra mas posiciones nuevas pero las que ya estan abiertas quiero cerrarlas con el comando EndTime o por que se cumplan algunas de las condiciones de cierre
rem EndTime = 173000
//Compra:
ind1 = MACD[12,26,9](close)
c1 = (ind1 > 0)
ind2 = ExponentialAverage[8](close)
c2 = (range > ind2) //quiero que para abrir posición, tras cumplir c1, haya 1 vela que tenga su rango (max-min) tocando la ema8
//c3 RESET que no se vuelva a generar una compra hasta que el macd haya vuelto a bajar de su nivel 0, en cuyo caso cuando se vuelva a cumplir c1 se vuelva a iniciar el proceso de compra
if c1 and c2 then
buy 1 contract at high + 2*pointsize STOP
ENDIF
//Cierre compras
ignored, ignored, ignored, ind4 = CALL "Kase Dev Stop - version 2"[20,5,21]
c4 = (close > ind4)
//c5.....quiero que cuando descienda, la orden stop se mantenga en el punto máximo marcado y no descienda con el indicador, solo se modifique cuando el indicador ascienda otra vez
if c4 then
sell 1 contract at low - 2*pointsize STOP
endif
Buenas, mientras alguien me ayuda, sigo buscando información e intentando aprender a base de trabajar. Gracias a ello y sobre todo, a las grandes personas que hay en este canal, de momento he podido solucionar la duda número 1, en cuánto al horario se refiere. Encontré las líneas de código que lo solucionaban publicadas en el foro en inglés por robertogozzi, adjunto esas líneas de código por si a alguien más le puede ayudar.
Todo sobre esta solución y más en este hilo:
Time and Day conditions
un saludo
//para añadir a las condiciones de entrada la franja horaria de aperturas
//también los días de la semana que se quiere operar
TimeCond = OpenTime >= HHMMSS and OpenTime <= HHMMSS
DayCond = OpenDayOfWeek >= 1 AND OpenDayOfWeek <= 5
IF MyConditions AND Not OnMarket AND TimeCond AND DayCond THEN
.
.
ENDIF
Hola Santi,
Creo que he solucionado el punto 2 y el 3. Respecto al 4, lo siento, no tengo el indicador “Kase Dev Stop” por lo que no puedo ayudarte mucho. Tampoco entiendo muy bien lo que quieres hacer. He puesto la condición c5 pero no se como lo quieres aplicar.
Un saludo
DEFPARAM CumulateOrders=False
//solo operar desde esta hora hasta….
DEFPARAM FlatBefore = 080000
DEFPARAM FlatAfter = 173000
//para añadir a las condiciones de entrada la franja horaria de aperturas
//también los días de la semana que se quiere operar
TimeCond = OpenTime >= 080000 and OpenTime <= 130000
DayCond = OpenDayOfWeek >= 1 AND OpenDayOfWeek <= 5
ONCE Reset=1
ind1 = MACD[12,26,9](close)
c1 = (ind1 > 0) and Reset=1
ind2 = ExponentialAverage[8](close)
c2 = (Low < ind2 and high > ind2) //quiero que para abrir posición, tras cumplir c1, haya 1 vela que tenga su rango (max-min) tocando la ema8
if ind1 < 0 then
Reset=1
endif
if c1 then
Reset=0
endif
//Compra:
MyConditions=c1 and c2
IF MyConditions AND Not OnMarket AND TimeCond AND DayCond THEN
buy 1 contract at high + 2*pointsize STOP
c5=ind4
ENDIF
//Cierre compras
ignored, ignored, ignored, ind4 = CALL "Kase Dev Stop - version 2"[20,5,21]
c4 = (close > ind4)
c5 = max (c5,ind4)
//c5.....quiero que cuando descienda, la orden stop se mantenga en el punto máximo marcado y no descienda con el indicador, solo se modifique cuando el indicador ascienda otra vez
if c4 then
sell 1 contract at low - 2*pointsize STOP
endif
Muchas gracias Antus, el tema de la ema me lo has solucionado.
Lo del “Reset” añadiendo lo que me dices, ahora no me abre ninguna operación, yo quiero que me abra la primera, pero si se cierra no vuelva a abrir más en esa dirección hasta que se produzca el reset.
El DevStop es un indicador de volatilidad similar al ATR, lo que quiero es que cuando vaya a favor de mi entrada se vaya moviendo con el indicador la orden limitada de salida de la posición, pero cuando el indicador retroceda, la orden no lo acompañe y se quede en su punto más alto.
De todas forma, te agradezco la ayuda.
Pongo aquí el indicador DevStop por si a alguien le interesa (las variables “n”, “periodFast”, “periodSlow” a añadir son 20,5,21)
//pararemeters:
//n = 20
//periodFast = 5
//periodSlow = 21
DTR = max(max(High - Low[2], abs(High - Close[2])),max(abs(Low - Close[2]),(abs(Low - Close[2]))))
price = typicalprice
avg = average[n](DTR)
st = std[n](DTR)
maFast = average[periodFast](close)
maSlow = average[periodSlow](close)
if maFast<maSlow then
WarningLine = price+avg
Dev1 = price+avg + st
Dev2 = price+avg + 2.2*st
Dev3 = price+avg + 3.6*st
else
WarningLine = price-avg
Dev1 = price-avg - st
Dev2 = price-avg - 2.2*st
Dev3 = price-avg - 3.6*st
endif
RETURN Warningline coloured(255,0,0) as "WarningLine", Dev1 coloured(2, 118, 253) as "DevStop1", Dev2 coloured(255, 140, 0) as "DevStop2", Dev3 coloured(1, 71, 250) as "DevStop3"
Por cierto, el DevStop se coloca como indicador en el precio